diff --git a/source/dub/commandline.d b/source/dub/commandline.d index e093e18..82579b7 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -670,6 +670,7 @@ string m_generator; bool m_rdmd = false; bool m_run = false; + bool m_force = false; bool m_print_platform, m_print_builds, m_print_configs; bool m_nodeps; } @@ -685,7 +686,6 @@ "visuald - VisualD project files", "visuald-combined - VisualD single project file", "build - Builds the package directly", - "run - Builds and runs the package directly" "", "An optional package name can be given to generate a different package than the root/CWD package." ]; @@ -695,9 +695,6 @@ { super.prepare(args); - args.getopt("rdmd", &m_rdmd, [ - "Use rdmd instead of directly invoking the compiler" - ]); args.getopt("print-builds", &m_print_builds, [ "Prints the list of available build types" ]); @@ -753,6 +750,8 @@ gensettings.buildSettings = m_buildSettings; gensettings.run = m_run; gensettings.runArgs = app_args; + gensettings.force = m_force; + gensettings.rdmd = m_rdmd; logDiagnostic("Generating using %s", m_generator); dub.generateProject(m_generator, gensettings); @@ -774,6 +773,12 @@ override void prepare(scope CommandArgs args) { + args.getopt("rdmd", &m_rdmd, [ + "Use rdmd instead of directly invoking the compiler" + ]); + args.getopt("force", &m_force, [ + "Forces a recompilation even if the target is up to date" + ]); super.prepare(args); m_generator = "build"; } @@ -784,7 +789,7 @@ } } -class RunCommand : GenerateCommand { +class RunCommand : BuildCommand { this() { this.name = "run"; @@ -799,7 +804,6 @@ override void prepare(scope CommandArgs args) { super.prepare(args); - m_generator = "build"; m_run = true; } diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 1a68547..8cbd837 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -33,8 +33,6 @@ Path[] m_temporaryFiles; } - bool useRDMD = false; - this(Project app, PackageManager mgr) { m_project = app; @@ -63,7 +61,7 @@ foreach (ref p; buildsettings.stringImportPaths) p = makeRelative(p); // perform the actual build - if (this.useRDMD) performRDMDBuild(settings, buildsettings); + if (settings.rdmd) performRDMDBuild(settings, buildsettings); else if (settings.direct || !generate_binary) performDirectBuild(settings, buildsettings); else performCachedBuild(settings, buildsettings); @@ -86,7 +84,7 @@ auto build_id = computeBuildID(settings); auto target_path = m_project.mainPackage.path ~ format(".dub/build/%s/", build_id); - if (isUpToDate(target_path, buildsettings, settings.platform)) { + if (!settings.force && isUpToDate(target_path, buildsettings, settings.platform)) { logInfo("Target is up to date. Skipping build."); copyTargetFile(target_path, buildsettings, settings.platform); return; @@ -156,6 +154,7 @@ logDiagnostic("Application output name is '%s'", getTargetFileName(buildsettings, settings.platform)); string[] flags = ["--build-only", "--compiler="~settings.platform.compilerBinary]; + if (settings.force) flags ~= "--force"; flags ~= buildsettings.dflags; flags ~= mainsrc.relativeTo(cwd).toNativeString(); diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 360d5d0..97b0894 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -40,7 +40,7 @@ BuildSettings buildSettings; // only used for generator "build" - bool run, force, direct, clean; + bool run, force, direct, clean, rdmd; string[] runArgs; } @@ -59,11 +59,6 @@ case "build": logDebug("Creating build generator."); return new BuildGenerator(app, mgr); - case "rdmd": - logDebug("Creating rdmd generator."); - auto ret = new BuildGenerator(app, mgr); - ret.useRDMD = true; - return ret; case "mono-d": logDebug("Creating MonoD generator."); return new MonoDGenerator(app, mgr);