diff --git a/source/dub/generators/build.d b/source/dub/generators/build.d index b036dd3..c23ea9d 100644 --- a/source/dub/generators/build.d +++ b/source/dub/generators/build.d @@ -461,13 +461,13 @@ (either in the dub.json, or using a command line flag) */ } else if (generate_binary && (settings.buildMode == BuildMode.allAtOnce || settings.compiler.name != "dmd" || is_static_library)) { + // don't include symbols of dependencies (will be included by the top level target) + if (is_static_library) buildsettings.sourceFiles = buildsettings.sourceFiles.filter!(f => !f.isLinkerFile()).array; + // setup for command line settings.compiler.setTarget(buildsettings, settings.platform); settings.compiler.prepareBuildSettings(buildsettings, BuildSetting.commandLine); - // don't include symbols of dependencies (will be included by the top level target) - if (is_static_library) buildsettings.sourceFiles = buildsettings.sourceFiles.filter!(f => !f.isLinkerFile()).array; - // invoke the compiler settings.compiler.invoke(buildsettings, settings.platform, settings.compileCallback); } else { @@ -575,3 +575,38 @@ assert(shrinkPath(Path("/foo/bar/baz"), Path("/bar/")) == Path("/foo/bar/baz").toNativeString()); assert(shrinkPath(Path("/foo/bar/baz"), Path("/bar/baz")) == Path("/foo/bar/baz").toNativeString()); } + +unittest { // issue #1235 - pass no library files to compiler command line when building a static lib + import dub.internal.vibecompat.data.json : parseJsonString; + import dub.compilers.gdc : GDCCompiler; + import dub.platform : determinePlatform; + + version (Windows) auto libfile = "bar.lib"; + else auto libfile = "bar.a"; + + auto desc = parseJsonString(`{"name": "test", "targetType": "library", "sourceFiles": ["foo.d", "`~libfile~`"]}`); + auto pack = new Package(desc, Path("/tmp/fooproject")); + auto pman = new PackageManager(Path("/tmp/foo/"), Path("/tmp/foo/"), false); + auto prj = new Project(pman, pack); + + final static class TestCompiler : GDCCompiler { + override void invoke(in BuildSettings settings, in BuildPlatform platform, void delegate(int, string) output_callback) { + assert(!settings.dflags[].any!(f => f.canFind("bar"))); + } + override void invokeLinker(in BuildSettings settings, in BuildPlatform platform, string[] objects, void delegate(int, string) output_callback) { + assert(false); + } + } + + auto comp = new TestCompiler; + + GeneratorSettings settings; + settings.platform = BuildPlatform(determinePlatform(), ["x86"], "gdc", "test", 2075); + settings.compiler = new TestCompiler; + settings.config = "library"; + settings.buildType = "debug"; + settings.tempBuild = true; + + auto gen = new BuildGenerator(prj); + gen.generate(settings); +}