diff --git a/source/dub/commandline.d b/source/dub/commandline.d index de2d27e..a02c538 100644 --- a/source/dub/commandline.d +++ b/source/dub/commandline.d @@ -302,7 +302,6 @@ BuildSettings m_buildSettings; string m_defaultConfig; bool m_nodeps; - bool m_allowNonLibraryConfigs = true; } override void prepare(scope CommandArgs args) @@ -364,7 +363,6 @@ dub.rootPath = pack.path; } if (!loadCwdPackage(dub, pack, true)) return false; - if (!m_build_config.length) m_build_config = m_defaultConfig; return true; } @@ -382,7 +380,7 @@ if (pack) dub.loadPackage(pack); else dub.loadPackageFromCwd(); - m_defaultConfig = dub.getDefaultConfiguration(m_buildPlatform, m_allowNonLibraryConfigs); + m_defaultConfig = dub.getDefaultConfiguration(m_buildPlatform); return true; } @@ -463,7 +461,7 @@ GeneratorSettings gensettings; gensettings.platform = m_buildPlatform; - gensettings.config = m_build_config; + gensettings.config = m_build_config.length ? m_build_config : m_defaultConfig; gensettings.buildType = m_build_type; gensettings.compiler = m_compiler; gensettings.buildSettings = m_buildSettings; @@ -546,7 +544,6 @@ "Builds a library configuration of the selected package and executes all contained unit tests." ]; this.acceptsAppArgs = true; - m_allowNonLibraryConfigs = false; } override void prepare(scope CommandArgs args) @@ -565,8 +562,6 @@ setupPackage(dub, package_name); - logInfo("Running unit tests for package %s, configuration '%s'.", dub.project.mainPackage.name, m_build_config); - dub.testProject(m_buildSettings, m_buildPlatform, m_build_config, Path(m_mainFile), app_args); return 0; } @@ -597,7 +592,7 @@ setupPackage(dub, package_name); - dub.describeProject(m_buildPlatform, m_build_config); + dub.describeProject(m_buildPlatform, m_build_config.length ? m_build_config : m_defaultConfig); return 0; } } diff --git a/source/dub/dub.d b/source/dub/dub.d index 2cb4918..23dfe79 100644 --- a/source/dub/dub.d +++ b/source/dub/dub.d @@ -194,6 +194,12 @@ { if (custom_main_file.length && !custom_main_file.absolute) custom_main_file = getWorkingDirectory() ~ custom_main_file; + if (config.length == 0) { + if (m_project.mainPackage.configurations.canFind("unittest"))config = "unittest"; + else config = m_project.getDefaultConfiguration(platform, false); + if (!config.length) config = m_project.getDefaultConfiguration(platform, true); + } + auto generator = createProjectGenerator("build", m_project, m_packageManager); GeneratorSettings settings; settings.platform = platform; @@ -213,12 +219,14 @@ } if (lbuildsettings.targetType == TargetType.executable) { - logInfo(`Configuration '%s' does not output a library. Falling back to "dub -b unittest -c %s".`, config, config); + if (config == "unittest") logInfo("Running custom 'unittest' configuration.", config); + else logInfo(`Configuration '%s' does not output a library. Falling back to "dub -b unittest -c %s".`, config, config); settings.config = config; } else if (lbuildsettings.sourceFiles.empty) { logInfo(`No source files found in configuration '%s'. Falling back to "dub -b unittest".`, config); settings.config = m_project.getDefaultConfiguration(platform); } else { + logInfo(`Generating test runner configuration '%s' for '%s' (%s).`, test_config, config, lbuildsettings.targetType); enforce(lbuildsettings.mainSourceFile.length, `A "mainSourceFile" is required for testing, but none was set or inferred.`); BuildSettingsTemplate tcinfo = m_project.mainPackage.info.getConfiguration(config).buildSettings; diff --git a/source/dub/project.d b/source/dub/project.d index bf0fce1..84ccf5f 100644 --- a/source/dub/project.d +++ b/source/dub/project.d @@ -369,7 +369,7 @@ * platform = The platform to retrieve the values for. * config = Values of the given configuration will be retrieved. * root_package = If non null, use it instead of the project's real root package. - * shallow = If true, collects only build settings for the main package and doesn't emit build target settings. + * shallow = If true, collects only build settings for the main package (including inherited settings) and doesn't stop on target type none and sourceLibrary. */ void addBuildSettings(ref BuildSettings dst, in BuildPlatform platform, string config, in Package root_package = null, bool shallow = false) const { @@ -396,11 +396,11 @@ if (!shallow) { enforce(psettings.targetType != TargetType.none, "Main package has target type \"none\" - stopping build."); enforce(psettings.targetType != TargetType.sourceLibrary, "Main package has target type \"sourceLibrary\" which generates no target - stopping build."); - dst.targetType = psettings.targetType; - dst.targetPath = psettings.targetPath; - dst.targetName = psettings.targetName; - dst.workingDirectory = processVars(psettings.workingDirectory, pkg_path, true); } + dst.targetType = psettings.targetType; + dst.targetPath = psettings.targetPath; + dst.targetName = psettings.targetName; + dst.workingDirectory = processVars(psettings.workingDirectory, pkg_path, true); dst.mainSourceFile = processVars(psettings.mainSourceFile, pkg_path, true); } }