diff --git a/source/dub/dub.d b/source/dub/dub.d index 4b8711a..1b71bd7 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -142,7 +142,7 @@ string[string] m_defaultPostBuildEnvironments; string[string] m_defaultPreRunEnvironments; string[string] m_defaultPostRunEnvironments; - + } /** The default placement location of fetched packages. @@ -359,7 +359,7 @@ configuration file will be used. Otherwise false will be returned. */ @property bool defaultLowMemory() const { return m_defaultLowMemory; } - + @property const(string[string]) defaultEnvironments() const { return m_defaultEnvironments; } @property const(string[string]) defaultBuildEnvironments() const { return m_defaultBuildEnvironments; } @property const(string[string]) defaultRunEnvironments() const { return m_defaultRunEnvironments; } @@ -663,6 +663,7 @@ BuildSettings lbuildsettings = settings.buildSettings; m_project.addBuildSettings(lbuildsettings, settings, config, null, true); + if (lbuildsettings.targetType == TargetType.none) { logInfo(`Configuration '%s' has target type "none". Skipping test.`, config); return; @@ -1514,7 +1515,7 @@ } m_defaultCompiler = compilers[0]; } - + unittest { import std.path: buildPath, absolutePath; @@ -1532,10 +1533,10 @@ scope (exit) repairenv("DC", olddc); scope (exit) repairenv("PATH", oldpath); scope (exit) rmdirRecurse(testdir); - + version (Windows) enum sep = ";", exe = ".exe"; version (Posix) enum sep = ":", exe = ""; - + immutable dmdpath = testdir.buildPath("dmd", "bin"); immutable ldcpath = testdir.buildPath("ldc", "bin"); mkdirRecurse(dmdpath); @@ -1544,21 +1545,21 @@ immutable ldcbin = ldcpath.buildPath("ldc2"~exe); std.file.write(dmdbin, null); std.file.write(ldcbin, null); - + environment["DC"] = dmdbin.absolutePath(); dub.determineDefaultCompiler(); assert(dub.m_defaultCompiler == dmdbin.absolutePath()); - + environment["DC"] = "dmd"; environment["PATH"] = dmdpath ~ sep ~ ldcpath; dub.determineDefaultCompiler(); assert(dub.m_defaultCompiler == "dmd"); - + environment["DC"] = "ldc2"; environment["PATH"] = dmdpath ~ sep ~ ldcpath; dub.determineDefaultCompiler(); assert(dub.m_defaultCompiler == "ldc2"); - + environment.remove("DC"); environment["PATH"] = ldcpath ~ sep ~ dmdpath; dub.determineDefaultCompiler(); @@ -1970,7 +1971,7 @@ if (m_parentConfig) return m_parentConfig.defaultLowMemory; return false; } - + @property string[string] defaultEnvironments() const { if (auto pv = "defaultEnvironments" in m_data) @@ -1978,7 +1979,7 @@ if (m_parentConfig) return m_parentConfig.defaultEnvironments; return null; } - + @property string[string] defaultBuildEnvironments() const { if (auto pv = "defaultBuildEnvironments" in m_data) @@ -1986,7 +1987,7 @@ if (m_parentConfig) return m_parentConfig.defaultBuildEnvironments; return null; } - + @property string[string] defaultRunEnvironments() const { if (auto pv = "defaultRunEnvironments" in m_data) @@ -1994,7 +1995,7 @@ if (m_parentConfig) return m_parentConfig.defaultRunEnvironments; return null; } - + @property string[string] defaultPreGenerateEnvironments() const { if (auto pv = "defaultPreGenerateEnvironments" in m_data) @@ -2002,7 +2003,7 @@ if (m_parentConfig) return m_parentConfig.defaultPreGenerateEnvironments; return null; } - + @property string[string] defaultPostGenerateEnvironments() const { if (auto pv = "defaultPostGenerateEnvironments" in m_data) @@ -2010,7 +2011,7 @@ if (m_parentConfig) return m_parentConfig.defaultPostGenerateEnvironments; return null; } - + @property string[string] defaultPreBuildEnvironments() const { if (auto pv = "defaultPreBuildEnvironments" in m_data) @@ -2018,7 +2019,7 @@ if (m_parentConfig) return m_parentConfig.defaultPreBuildEnvironments; return null; } - + @property string[string] defaultPostBuildEnvironments() const { if (auto pv = "defaultPostBuildEnvironments" in m_data) @@ -2026,7 +2027,7 @@ if (m_parentConfig) return m_parentConfig.defaultPostBuildEnvironments; return null; } - + @property string[string] defaultPreRunEnvironments() const { if (auto pv = "defaultPreRunEnvironments" in m_data) @@ -2034,7 +2035,7 @@ if (m_parentConfig) return m_parentConfig.defaultPreRunEnvironments; return null; } - + @property string[string] defaultPostRunEnvironments() const { if (auto pv = "defaultPostRunEnvironments" in m_data) diff --git a/source/dub/internal/utils.d b/source/dub/internal/utils.d index 30f637e..345385b 100644 --- a/source/dub/internal/utils.d +++ b/source/dub/internal/utils.d @@ -610,18 +610,22 @@ //search for module keyword in file string moduleName = getModuleNameFromFile(file.to!string); - if(moduleName.length) return moduleName; + if(moduleName.length) { + assert(moduleName.length > 0, "Wasn't this module name already checked? what"); + return moduleName; + } //create module name from path foreach (i; 0 .. mpath.length) { import std.path; auto p = mpath[i].name; - if (p == "package.d") break; - if (i > 0) ret ~= "."; + if (p == "package.d") break ; + if (ret.data.length > 0) ret ~= "."; if (i+1 < mpath.length) ret ~= p; else ret ~= p.baseName(".d"); } + assert(ret.data.length > 0, "A module name was expected to be computed, and none was."); return ret.data; } diff --git a/source/dub/project.d b/source/dub/project.d index 03f6901..026697d 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -1204,7 +1204,7 @@ dst.addPostBuildEnvironments(processVerEnvs(settings.postBuildEnvironments, gsettings.buildSettings.postBuildEnvironments)); dst.addPreRunEnvironments(processVerEnvs(settings.preRunEnvironments, gsettings.buildSettings.preRunEnvironments)); dst.addPostRunEnvironments(processVerEnvs(settings.postRunEnvironments, gsettings.buildSettings.postRunEnvironments)); - + auto buildEnvs = [dst.environments, dst.buildEnvironments]; auto runEnvs = [dst.environments, dst.runEnvironments]; auto preGenEnvs = [dst.environments, dst.preGenerateEnvironments]; @@ -1213,7 +1213,7 @@ auto postBuildEnvs = buildEnvs ~ [dst.postBuildEnvironments]; auto preRunEnvs = runEnvs ~ [dst.preRunEnvironments]; auto postRunEnvs = runEnvs ~ [dst.postRunEnvironments]; - + dst.addDFlags(processVars(project, pack, gsettings, settings.dflags, false, buildEnvs)); dst.addLFlags(processVars(project, pack, gsettings, settings.lflags, false, buildEnvs)); dst.addLibs(processVars(project, pack, gsettings, settings.libs, false, buildEnvs)); @@ -1473,7 +1473,7 @@ else if (name == "LFLAGS") return join(buildSettings.lflags," "); } - + import std.range; foreach (aa; retro(extraVars)) if (auto exvar = name in aa) diff --git a/test/issue2051_running_unittests_from_dub_single_file_packages_fails.d b/test/issue2051_running_unittests_from_dub_single_file_packages_fails.d index 2327db3..b7e5fbf 100644 --- a/test/issue2051_running_unittests_from_dub_single_file_packages_fails.d +++ b/test/issue2051_running_unittests_from_dub_single_file_packages_fails.d @@ -7,7 +7,7 @@ import std.file : tempDir; import std.stdio : File, writeln; import std.string : lineSplitter; -import std.path : buildPath; +import std.path : buildPath, buildNormalizedPath; import std.process : environment, executeShell; auto executeCommand(string command) @@ -28,11 +28,15 @@ auto dub = environment.get("DUB"); if (!dub.length) dub = buildPath(".", "bin", "dub"); - + + string destinationDirectory = tempDir; + // remove any ending slahes (which can for some reason be added at the end by tempDir, which fails on OSX) https://issues.dlang.org/show_bug.cgi?id=22738 + destinationDirectory = buildNormalizedPath(destinationDirectory); + string filename; // check if the single file package with dependency compiles and runs { - filename = tempDir.buildPath("issue2051_success.d"); + filename = destinationDirectory.buildPath("issue2051_success.d"); auto f = File(filename, "w"); f.write( `#!/usr/bin/env dub @@ -61,7 +65,7 @@ ` ); } - const rc1 = text(dub, " test --single ", filename).executeCommand; + const rc1 = text(dub, " test --single \"", filename, "\"").executeCommand; if (rc1) writeln("\nError. Unittests failed."); else @@ -69,7 +73,7 @@ // Check if dub `test` command runs unittests for single file package { - filename = tempDir.buildPath("issue2051_fail.d"); + filename = destinationDirectory.buildPath("issue2051_fail.d"); auto f = File(filename, "w"); f.write( `#!/usr/bin/env dub @@ -89,7 +93,7 @@ ` ); } - const rc2 = text(dub, " test --single ", filename).executeCommand; + const rc2 = text(dub, " test --single \"", filename, "\"").executeCommand; if (rc2) writeln("\nOk. Unittests failed."); else