Determine linker used by LDC on Windows dynamically. Fixes #618.
1 parent c1ecf3e commit 9c2c11846ed61accb335b8ce17a536092dbeb971
@Sönke Ludwig Sönke Ludwig authored on 27 Apr 2016
Showing 1 changed file
View
17
source/dub/compilers/ldc.d
}
 
string getTargetFileName(in BuildSettings settings, in BuildPlatform platform)
const {
import std.string : splitLines, strip;
import std.uni : toLower;
 
assert(settings.targetName.length > 0, "No target name set.");
 
auto result = executeShell(escapeShellCommand([platform.compilerBinary, "-version"]));
enforce (result.status == 0, "Failed to determine linker used by LDC. \""
~platform.compilerBinary~" -version\" failed with exit code "
~result.status.to!string()~".");
 
bool generates_coff = result.output.splitLines.find!(l => l.strip.toLower.startsWith("default target:")).front.canFind("-windows-msvc");
 
final switch (settings.targetType) {
case TargetType.autodetect: assert(false, "Configurations must have a concrete target type.");
case TargetType.none: return null;
case TargetType.sourceLibrary: return null;
return settings.targetName ~ ".exe";
else return settings.targetName;
case TargetType.library:
case TargetType.staticLibrary:
/*if (m_generatesCOFF)
return settings.targetName ~ ".lib";
else*/ return "lib" ~ settings.targetName ~ ".a";
if (generates_coff) return settings.targetName ~ ".lib";
else return "lib" ~ settings.targetName ~ ".a";
case TargetType.dynamicLibrary:
if (platform.platform.canFind("windows"))
return settings.targetName ~ ".dll";
else return "lib" ~ settings.targetName ~ ".so";