diff --git a/source/dub/generators/generator.d b/source/dub/generators/generator.d index 21548ba..49e9f5a 100644 --- a/source/dub/generators/generator.d +++ b/source/dub/generators/generator.d @@ -99,6 +99,7 @@ string[] mainfiles; collect(settings, m_project.rootPackage, targets, configs, mainfiles, null); downwardsInheritSettings(m_project.rootPackage.name, targets, targets[m_project.rootPackage.name].buildSettings); + addBuildTypeSettings(targets, settings); foreach (ref t; targets.byValue) enforceBuildRequirements(t.buildSettings); auto bs = &targets[m_project.rootPackage.name].buildSettings; if (bs.targetType == TargetType.executable) bs.addSourceFiles(mainfiles); @@ -214,19 +215,7 @@ } else pt.packages ~= dep; } - if (is_target) { - BuildSettings targetbs = buildsettings.dup; - targetbs.add(settings.buildSettings); - - // add build type settings and convert plain DFLAGS to build options - m_project.addBuildTypeSettings(targetbs, settings.platform, settings.buildType, pack is m_project.rootPackage); - settings.compiler.extractBuildOptions(targetbs); - - enforce (generates_binary || pack !is m_project.rootPackage || (targetbs.options & BuildOption.syntaxOnly), - format("Main package must have a binary target type, not %s. Cannot build.", tt)); - - targets[pack.name].buildSettings = targetbs; - } + if (is_target) targets[pack.name].buildSettings = buildsettings.dup; return buildsettings; } @@ -267,6 +256,22 @@ return packs; } + + private void addBuildTypeSettings(TargetInfo[string] targets, GeneratorSettings settings) + { + foreach (ref t; targets) { + t.buildSettings.add(settings.buildSettings); + + // add build type settings and convert plain DFLAGS to build options + m_project.addBuildTypeSettings(t.buildSettings, settings.platform, settings.buildType, t.pack is m_project.rootPackage); + settings.compiler.extractBuildOptions(t.buildSettings); + + auto tt = t.buildSettings.targetType; + bool generates_binary = tt != TargetType.sourceLibrary && tt != TargetType.none; + enforce (generates_binary || t.pack !is m_project.rootPackage || (t.buildSettings.options & BuildOption.syntaxOnly), + format("Main package must have a binary target type, not %s. Cannot build.", tt)); + } + } }