diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index 3b0c65a..19a39b0 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -206,7 +206,7 @@ auto cwd = NativePath(getcwd()); bool generate_binary = !(buildsettings.options & BuildOption.syntaxOnly); - auto build_id = computeBuildID(config, buildsettings, settings); + auto build_id = buildsettings.computeBuildID(config, settings); // make all paths relative to shrink the command line string makeRelative(string path) { return shrinkPath(NativePath(path), cwd); } @@ -404,27 +404,6 @@ } } - private string computeBuildID(string config, in BuildSettings buildsettings, GeneratorSettings settings) - { - const(string[])[] hashing = [ - buildsettings.versions, - buildsettings.debugVersions, - buildsettings.dflags, - buildsettings.lflags, - buildsettings.stringImportPaths, - buildsettings.importPaths, - settings.platform.architecture, - [ - (cast(uint)(buildsettings.options & ~BuildOption.color)).to!string, // exclude color option from id - settings.platform.compilerBinary, - settings.platform.compiler, - settings.platform.compilerVersion, - ], - ]; - - return computeBuildName(config, settings, hashing); - } - private void copyTargetFile(in NativePath build_path, in BuildSettings buildsettings, in GeneratorSettings settings) { ensureDirectory(NativePath(buildsettings.targetPath)); @@ -675,6 +654,38 @@ } } +/** + * Provides a unique (per build) identifier + * + * When building a package, it is important to have a unique but stable + * identifier to differentiate builds and allow their caching. + * This function provides such an identifier. + * Example: + * ``` + * application-debug-linux.posix-x86_64-dmd_v2.100.2-D80285212AEC1FF9855F18AD52C68B9EEB5C7690609C224575F920096FB1965B + * ``` + */ +private string computeBuildID(in BuildSettings buildsettings, string config, GeneratorSettings settings) +{ + const(string[])[] hashing = [ + buildsettings.versions, + buildsettings.debugVersions, + buildsettings.dflags, + buildsettings.lflags, + buildsettings.stringImportPaths, + buildsettings.importPaths, + settings.platform.architecture, + [ + (cast(uint)(buildsettings.options & ~BuildOption.color)).to!string, // exclude color option from id + settings.platform.compilerBinary, + settings.platform.compiler, + settings.platform.compilerVersion, + ], + ]; + + return computeBuildName(config, settings, hashing); +} + private NativePath getMainSourceFile(in Package prj) { foreach (f; ["source/app.d", "src/app.d", "source/"~prj.name~".d", "src/"~prj.name~".d"])