diff --git a/source/dub/compilers/compiler.d b/source/dub/compilers/compiler.d index 3fbd91d..d1dff27 100644 --- a/source/dub/compilers/compiler.d +++ b/source/dub/compilers/compiler.d @@ -129,13 +129,11 @@ if (f.startsWith("-Wl,")) settings.addLFlags(f[4 .. $].split(",")); else settings.addLFlags(f); } + settings.libs = null; } catch (Exception e) { logDiagnostic("pkg-config failed: %s", e.msg); logDiagnostic("Falling back to direct -lxyz flags."); - version(Windows) settings.addSourceFiles(settings.libs.map!(l => l~".lib")().array()); - else settings.addLFlags(settings.libs.map!(l => "-l"~l)().array()); } - settings.libs = null; } @@ -409,7 +407,7 @@ else return settings.targetName; case TargetType.library: case TargetType.staticLibrary: - if( platform.platform.canFind("windows") ) + if (platform.platform.canFind("windows") && platform.compiler == "dmd") return settings.targetName ~ ".lib"; else return "lib" ~ settings.targetName ~ ".a"; case TargetType.dynamicLibrary: diff --git a/source/dub/compilers/dmd.d b/source/dub/compilers/dmd.d index 2ac08ab..686b8d5 100644 --- a/source/dub/compilers/dmd.d +++ b/source/dub/compilers/dmd.d @@ -84,8 +84,11 @@ settings.addDFlags(t[1]); } - if (!(fields & BuildSetting.libs)) + if (!(fields & BuildSetting.libs)) { resolveLibs(settings); + version(Windows) settings.addSourceFiles(settings.libs.map!(l => l~".lib")().array()); + else settings.addLFlags(settings.libs.map!(l => "-l"~l)().array()); + } if (!(fields & BuildSetting.versions)) { settings.addDFlags(settings.versions.map!(s => "-version="~s)().array()); @@ -174,7 +177,7 @@ import std.string; auto tpath = Path(settings.targetPath) ~ getTargetFileName(settings, platform); auto args = [platform.compiler, "-of"~tpath.toNativeString()] ~ objects ~ settings.lflags.map!(l => "-L"~l)().array() ~ settings.sourceFiles; - static linkerargs = ["-g", "-gc", "-m32", "-m64"]; + static linkerargs = ["-g", "-gc", "-m32", "-m64", "-shared"]; args ~= settings.dflags.filter!(f => linkerargs.canFind(f))().array(); logDiagnostic("%s", args.join(" ")); auto res = spawnProcess(args).wait(); diff --git a/source/dub/compilers/gdc.d b/source/dub/compilers/gdc.d index ce7c8c5..68b6d15 100644 --- a/source/dub/compilers/gdc.d +++ b/source/dub/compilers/gdc.d @@ -73,8 +73,10 @@ settings.addDFlags(t[1]); } - if (!(fields & BuildSetting.libs)) + if (!(fields & BuildSetting.libs)) { resolveLibs(settings); + settings.addDFlags(settings.libs.map!(l => "-l"~l)().array()); + } if (!(fields & BuildSetting.versions)) { settings.addDFlags(settings.versions.map!(s => "-fversion="~s)().array()); diff --git a/source/dub/compilers/ldc.d b/source/dub/compilers/ldc.d index 3a47b99..c5a7c14 100644 --- a/source/dub/compilers/ldc.d +++ b/source/dub/compilers/ldc.d @@ -76,8 +76,10 @@ // since LDC always outputs multiple object files, avoid conflicts by default settings.addDFlags("-oq", "-od=.dub/obj"); - if (!(fields & BuildSetting.libs)) + if (!(fields & BuildSetting.libs)) { resolveLibs(settings); + settings.addLFlags(settings.libs.map!(l => "-l"~l)().array()); + } if (!(fields & BuildSetting.versions)) { settings.addDFlags(settings.versions.map!(s => "-d-version="~s)().array());