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)); + } + } } diff --git a/test/issue686-multiple-march.sh b/test/issue686-multiple-march.sh new file mode 100755 index 0000000..cdf2cde --- /dev/null +++ b/test/issue686-multiple-march.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -e + +cd ${CURR_DIR}/issue686-multiple-march + +${DUB} build --bare --force --compiler=${DC} -a x86_64 -v main 2>&1 | grep -e "-m64 -m64" -c && exit 1 || exit 0 diff --git a/test/issue686-multiple-march/.no_build b/test/issue686-multiple-march/.no_build new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue686-multiple-march/.no_build diff --git a/test/issue686-multiple-march/.no_run b/test/issue686-multiple-march/.no_run new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue686-multiple-march/.no_run diff --git a/test/issue686-multiple-march/.no_test b/test/issue686-multiple-march/.no_test new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/test/issue686-multiple-march/.no_test diff --git a/test/issue686-multiple-march/a/dub.json b/test/issue686-multiple-march/a/dub.json new file mode 100644 index 0000000..341d126 --- /dev/null +++ b/test/issue686-multiple-march/a/dub.json @@ -0,0 +1,6 @@ +{ + "name": "a", + "dependencies": { + "b": {"path": "../b"} + } +} \ No newline at end of file diff --git a/test/issue686-multiple-march/a/source/a.d b/test/issue686-multiple-march/a/source/a.d new file mode 100644 index 0000000..1581659 --- /dev/null +++ b/test/issue686-multiple-march/a/source/a.d @@ -0,0 +1,5 @@ +module a; + +void afun() +{ +} diff --git a/test/issue686-multiple-march/b/dub.json b/test/issue686-multiple-march/b/dub.json new file mode 100644 index 0000000..2824d72 --- /dev/null +++ b/test/issue686-multiple-march/b/dub.json @@ -0,0 +1,3 @@ +{ + "name": "b" +} \ No newline at end of file diff --git a/test/issue686-multiple-march/b/source/b.d b/test/issue686-multiple-march/b/source/b.d new file mode 100644 index 0000000..003a74e --- /dev/null +++ b/test/issue686-multiple-march/b/source/b.d @@ -0,0 +1,5 @@ +module b; + +void bfun() +{ +} diff --git a/test/issue686-multiple-march/main/dub.json b/test/issue686-multiple-march/main/dub.json new file mode 100644 index 0000000..0160e79 --- /dev/null +++ b/test/issue686-multiple-march/main/dub.json @@ -0,0 +1,7 @@ +{ + "name": "main", + "dependencies": { + "a": {"path": "../a"}, + "b": {"path": "../b"} + } +} \ No newline at end of file diff --git a/test/issue686-multiple-march/main/source/main.d b/test/issue686-multiple-march/main/source/main.d new file mode 100644 index 0000000..fba3ebb --- /dev/null +++ b/test/issue686-multiple-march/main/source/main.d @@ -0,0 +1,8 @@ +import a; +import b; + +void main() +{ + afun(); + bfun(); +} \ No newline at end of file