Showing with 28 additions and 8 deletions.
  1. +26 −6 src/link.d
  2. +2 −2 src/mars.d
32 changes: 26 additions & 6 deletions src/link.d
Original file line number Diff line number Diff line change
Expand Up @@ -622,14 +622,34 @@ extern (C++) int runLINK()
{
char* buf = cast(char*)malloc(3 + slen + 1);
strcpy(buf, "-l");
/* Use "-l:libname.a" if the library name is complete
*/
if (slen > 3 + 2 && memcmp(libname, cast(char*)"lib", 3) == 0 && (memcmp(libname + slen - 2, cast(char*)".a", 2) == 0 || memcmp(libname + slen - 3, cast(char*)".so", 3) == 0))

if (slen > 3 + 2 && memcmp(libname, "lib".ptr, 3) == 0)
{
if (memcmp(libname + slen - 2, ".a".ptr, 2) == 0)
{
argv.push("-Xlinker");
argv.push("-Bstatic");
strncat(buf, libname + 3, slen - 3 - 2);
argv.push(buf);
argv.push("-Xlinker");
argv.push("-Bdynamic");
}
else if (memcmp(libname + slen - 3, ".so".ptr, 3) == 0)
{
strncat(buf, libname + 3, slen - 3 - 3);
argv.push(buf);
}
else
{
strcat(buf, libname);
argv.push(buf);
}
}
else
{
strcat(buf, ":");
strcat(buf, libname);
argv.push(buf);
}
strcat(buf, libname);
argv.push(buf); // turns into /usr/lib/libphobos2.a
}
// argv.push("-ldruntime");
argv.push("-lpthread");
Expand Down
4 changes: 2 additions & 2 deletions src/mars.d
Original file line number Diff line number Diff line change
Expand Up @@ -313,11 +313,11 @@ extern (C++) int tryMain(size_t argc, const(char)** argv)
global.params.is64bit = false;
global.params.defaultlibname = "phobos";
}
else static if (TARGET_LINUX)
else static if (TARGET_LINUX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS)
{
global.params.defaultlibname = "libphobos2.a";
}
else static if (TARGET_OSX || TARGET_FREEBSD || TARGET_OPENBSD || TARGET_SOLARIS)
else static if (TARGET_OSX)
{
global.params.defaultlibname = "phobos2";
}
Expand Down