diff --git a/source/dub/commandline.d b/source/dub/commandline.d index bcfbc2d..3895e07 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -1216,6 +1216,7 @@ protected { string m_generator; bool m_printPlatform, m_printBuilds, m_printConfigs; + bool m_deep; // only set in BuildCommand } this() @safe pure nothrow @@ -1293,6 +1294,7 @@ gensettings.recipeName = dub.mainRecipePath; // legacy compatibility, default working directory is always CWD gensettings.overrideToolWorkingDirectory = getWorkingDirectory(); + gensettings.buildDeep = m_deep; logDiagnostic("Generating using %s", m_generator); dub.generateProject(m_generator, gensettings); @@ -1335,6 +1337,9 @@ args.getopt("n|non-interactive", &m_nonInteractive, [ "Don't enter interactive mode." ]); + args.getopt("d|deep", &m_deep, [ + "Build all dependencies, even when main target is a static library." + ]); super.prepare(args); m_generator = "build"; } diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 707ba0d..ae2ac9a 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -167,9 +167,9 @@ } // build all targets - if (settings.rdmd || rootTT == TargetType.staticLibrary) { + if (settings.rdmd || (rootTT == TargetType.staticLibrary && !settings.buildDeep)) { // RDMD always builds everything at once and static libraries don't need their - // dependencies to be built + // dependencies to be built, unless --deep flag is specified NativePath tpath; buildTarget(settings, root_ti.buildSettings.dup, m_project.rootPackage, root_ti.config, root_ti.packages, null, tpath); return; diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 20a301c..bd9102d 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -825,6 +825,9 @@ /// single file dub package bool single; + /// build all dependencies for static libraries + bool buildDeep; + string[] runArgs; void delegate(int status, string output) compileCallback; void delegate(int status, string output) linkCallback;