Merge pull request #2082 from kinke/islinkerflag
Improve 'linker-D-flag' detection for ldmd2
merged-on-behalf-of: Petar Kirov <PetarKirov@users.noreply.github.com>
commit 24ca22d6e9f627883f0833b4914b8a885119c187
2 parents 0c7a158 + 5c3810d
@The Dlang Bot The Dlang Bot authored on 21 Jan 2021
GitHub committed on 21 Jan 2021
Showing 2 changed files
View
16
source/dub/compilers/dmd.d
args ~= settings.sourceFiles;
if (platform.platform.canFind("linux"))
args ~= "-L--no-as-needed"; // avoids linker errors due to libraries being specified in the wrong order by DMD
args ~= lflagsToDFlags(settings.lflags);
args ~= settings.dflags.filter!(f => isLinkerDFlag(f)).array;
if (platform.compiler == "ldc") {
// ldmd2: support the full LDC-specific list + extra "-m32mscoff", a superset of the DMD list
import dub.compilers.ldc : LDCCompiler;
args ~= settings.dflags.filter!(f => f == "-m32mscoff" || LDCCompiler.isLinkerDFlag(f)).array;
} else {
args ~= settings.dflags.filter!(f => isLinkerDFlag(f)).array;
}
 
auto res_file = getTempFile("dub-build", ".lnk");
std.file.write(res_file.toNativeString(), escapeArgs(args).join("\n"));
 
{
return args.map!(s => s.canFind(' ') ? "\""~s~"\"" : s);
}
 
private static bool isLinkerDFlag(string arg)
static bool isLinkerDFlag(string arg)
{
switch (arg) {
default:
if (arg.startsWith("-defaultlib=")) return true;
View
2
■■■
source/dub/compilers/ldc.d
{
return args.map!(s => s.canFind(' ') ? "\""~s~"\"" : s);
}
 
private static bool isLinkerDFlag(string arg)
static bool isLinkerDFlag(string arg)
{
if (arg.length > 2 && arg.startsWith("--"))
arg = arg[1 .. $]; // normalize to 1 leading hyphen