diff --git a/source/dub/commandline.d b/source/dub/commandline.d index bd947f4..bd21f9a 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -602,6 +602,7 @@ bool m_nodeps; bool m_forceRemove = false; bool m_single; + bool m_filterVersions = false; } override void prepare(scope CommandArgs args) @@ -642,6 +643,9 @@ args.getopt("force-remove", &m_forceRemove, [ "Deprecated option that does nothing." ]); + args.getopt("filter-versions", &m_filterVersions, [ + "[Experimental] Filter version identifiers and debug version identifiers to improve build cache efficiency." + ]); } protected void setupPackage(Dub dub, string package_name, string default_build_type = "debug") @@ -802,6 +806,7 @@ gensettings.compiler = m_compiler; gensettings.buildSettings = m_buildSettings; gensettings.combined = m_combined; + gensettings.filterVersions = m_filterVersions; gensettings.run = m_run; gensettings.runArgs = app_args; gensettings.force = m_force; @@ -947,6 +952,7 @@ settings.buildMode = m_buildMode; settings.buildSettings = m_buildSettings; settings.combined = m_combined; + settings.filterVersions = m_filterVersions; settings.parallelBuild = m_parallel; settings.force = m_force; settings.tempBuild = m_single; @@ -1063,6 +1069,7 @@ settings.config = config; settings.buildType = m_buildType; settings.compiler = m_compiler; + settings.filterVersions = m_filterVersions; if (m_importPaths) { m_data = ["import-paths"]; m_dataList = true; } else if (m_stringImportPaths) { m_data = ["string-import-paths"]; m_dataList = true; } @@ -1720,6 +1727,7 @@ gensettings.compiler = m_compiler; gensettings.buildSettings = m_buildSettings; gensettings.combined = m_combined; + gensettings.filterVersions = m_filterVersions; gensettings.run = m_programStatusCode != int.min || m_programRegex.length; gensettings.runArgs = app_args; gensettings.force = true; diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index f158b75..41ee77b 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -238,8 +238,9 @@ if (bs.targetType == TargetType.executable) bs.addSourceFiles(mainSourceFiles); } - foreach (ref ti; targets.byValue) - inferVersionFilters(ti); + if (genSettings.filterVersions) + foreach (ref ti; targets.byValue) + inferVersionFilters(ti); // mark packages as visited (only used during upwards propagation) void[0][Package] visited; @@ -363,19 +364,22 @@ destroy(visited); // 4. Filter applicable version and debug version identifiers - foreach (name, ref ti; targets) + if (genSettings.filterVersions) { - import std.algorithm.sorting : partition; + foreach (name, ref ti; targets) + { + import std.algorithm.sorting : partition; - auto bs = &ti.buildSettings; + auto bs = &ti.buildSettings; - auto filtered = bs.versions.partition!(v => bs.versionFilters.canFind(v)); - logDebug("Filtering out unused versions for %s: %s", name, filtered); - bs.versions = bs.versions[0 .. $ - filtered.length]; + auto filtered = bs.versions.partition!(v => bs.versionFilters.canFind(v)); + logDebug("Filtering out unused versions for %s: %s", name, filtered); + bs.versions = bs.versions[0 .. $ - filtered.length]; - filtered = bs.debugVersions.partition!(v => bs.debugVersionFilters.canFind(v)); - logDebug("Filtering out unused debug versions for %s: %s", name, filtered); - bs.debugVersions = bs.debugVersions[0 .. $ - filtered.length]; + filtered = bs.debugVersions.partition!(v => bs.debugVersionFilters.canFind(v)); + logDebug("Filtering out unused debug versions for %s: %s", name, filtered); + bs.debugVersions = bs.debugVersions[0 .. $ - filtered.length]; + } } // 5. override string import files in dependencies