Issue 4642 - DMD should have a command-line option to ignore pragma(lib, ...)
Summary: DMD should have a command-line option to ignore pragma(lib, ...)
Status: REOPENED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P4 enhancement
Assignee: No Owner
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-08-13 18:05 UTC by Leandro Lucarella
Modified: 2022-12-17 10:43 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Leandro Lucarella 2010-08-13 18:05:23 UTC
I think is important to have an option to ignore pragma(lib, ..), because even when is not very common, users might want to link against an specific custom library name.

For example in Debian sometimes there are packages for the same library but configured in different ways, like libcurl and libcurl-gnutls.
Comment 1 Walter Bright 2010-08-13 18:48:04 UTC
http://www.digitalmars.com/ctg/ctgLinkSwitches.html#defaultlibrarysearch

for dmd:  -L/nodefaultlibrarysearch

for non-Windows builds, it isn't an issue because the object file format does not have a field type for libraries.
Comment 2 Leandro Lucarella 2010-08-13 20:14:41 UTC
(In reply to comment #1)
> http://www.digitalmars.com/ctg/ctgLinkSwitches.html#defaultlibrarysearch
> 
> for dmd:  -L/nodefaultlibrarysearch
> 
> for non-Windows builds, it isn't an issue because the object file format does
> not have a field type for libraries.

I don't use Windows, so I don't know the details about it, but I can't understand what you mean for non-Windows either.

The point is, if a library have a:

pragma (lib, "curl");

And I want to use libcurl-gnutls instead, I can't without modifying the source. Even more, if I don't even have the non-gnutls curl installed, I can't even compile.

For example:

p.d
---
import l;
void main() {}
---

l.d
---
pragma (lib, "curl");
---

$ dmd -v /tmp/p.d /tmp/l.d -of/tmp/p | grep curl
library   curl
gcc /tmp/p.o -o /tmp/p -m32 -Xlinker -L../lib -lcurl -lphobos -lpthread -lm 
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurl.so when searching for -lcurl
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libcurl.a when searching for -lcurl
/usr/bin/ld: skipping incompatible //usr/lib/libcurl.so when searching for -lcurl
/usr/bin/ld: skipping incompatible //usr/lib/libcurl.a when searching for -lcurl
/usr/bin/ld: cannot find -lcurl
collect2: ld returned 1 exit status

DMD adds the -lcurl and AFAIK, I can't change that without modifying the source of l.d (which might not be under my control, it could be a system-wide header for which I have no write-access, of course I could copy and modify it but I hope we agree that is less than ideal).

Is there any way to avoid that problem right now?