diff --git a/source/dub/project.d b/source/dub/project.d index 134ca2c..b433b25 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -266,15 +266,9 @@ const config = format("%s-test-%s", rootPackage.name.replace(".", "-").replace(":", "-"), base_config); logInfo(`Generating test runner configuration '%s' for '%s' (%s).`, config, base_config, lbuildsettings.targetType); - BuildSettingsTemplate tcinfo = rootPackage.recipe.getConfiguration(base_config).buildSettings; + BuildSettingsTemplate tcinfo = rootPackage.recipe.getConfiguration(base_config).buildSettings.dup; tcinfo.targetType = TargetType.executable; - // AAs in tcinfo need to be dup'd to avoid modifying the base config's buildSettings too - static void appendToDefaultAAEntry(ref string[][string] aa, string entry) { - aa = aa.dup; - aa[""] ~= entry; - } - // set targetName unless specified explicitly in unittest base configuration if (tcinfo.targetName.empty || base_config != "unittest") tcinfo.targetName = config; @@ -285,8 +279,8 @@ string custommodname; if (!custom_main_file.empty) { import std.path; - appendToDefaultAAEntry(tcinfo.sourceFiles, custom_main_file.relativeTo(rootPackage.path).toNativeString()); - appendToDefaultAAEntry(tcinfo.importPaths, custom_main_file.parentPath.toNativeString()); + tcinfo.sourceFiles[""] ~= custom_main_file.relativeTo(rootPackage.path).toNativeString(); + tcinfo.importPaths[""] ~= custom_main_file.parentPath.toNativeString(); custommodname = custom_main_file.head.name.baseName(".d"); } @@ -304,7 +298,7 @@ msf = msf.relativeTo(rootPackage.path); if (!settings.single && NativePath(file).relativeTo(rootPackage.path) == msf) { logWarn("Excluding main source file %s from test.", mainfil); - appendToDefaultAAEntry(tcinfo.excludedSourceFiles, mainfil); + tcinfo.excludedSourceFiles[""] ~= mainfil; continue; } if (fname == "package.d") { @@ -327,11 +321,11 @@ } auto escapedMainFile = mainfile.toNativeString().replace("$", "$$"); - appendToDefaultAAEntry(tcinfo.sourceFiles, escapedMainFile); + tcinfo.sourceFiles[""] ~= escapedMainFile; tcinfo.mainSourceFile = escapedMainFile; if (!settings.tempBuild) { // add the directory containing dub_test_root.d to the import paths - appendToDefaultAAEntry(tcinfo.importPaths, NativePath(escapedMainFile).parentPath.toNativeString()); + tcinfo.importPaths[""] ~= NativePath(escapedMainFile).parentPath.toNativeString(); } if (generate_main && (settings.force || !existsFile(mainfile))) { diff --git a/source/dub/recipe/packagerecipe.d b/source/dub/recipe/packagerecipe.d index d7ed15b..33bf25c 100644 --- a/source/dub/recipe/packagerecipe.d +++ b/source/dub/recipe/packagerecipe.d @@ -218,6 +218,10 @@ Flags!BuildOption[string] buildOptions; + BuildSettingsTemplate dup() const { + return clone(this); + } + /// Constructs a BuildSettings object from this template. void getPlatformSettings(ref BuildSettings dst, in BuildPlatform platform, NativePath base_path) const {