On Friday, 24 April 2015 at 21:06:59 UTC, Dicebot wrote:
On Friday, 24 April 2015 at 20:52:16 UTC, Steven Schveighoffer
wrote:
On 4/24/15 4:36 PM, Dicebot wrote:
On Friday, 24 April 2015 at 20:27:28 UTC, Steven
Schveighoffer wrote:
If pragma(lib, "libcurl"); doesn't work normally, then we
should
remove std.net.curl, and put it in dub.
It was a historical mistake, discussed many time over and
over. Yes, it
shouldn't be in Phobos. No, we can't remove it now that
easily.
deprecated("Please use dub for curl");
module std.net.curl
Not really feasible until dub is part of standard distribution.
// this will cause an error until you install the binding,
then you can
// go through your imports and update them.
public import some.dub.project;
As for pragma(lib) - it can never work "normally". Linking
3d-party
libraries is very platform-specific task that causes great
deal of
complexity in build systems. It can't be replaced by a single
trivial
compiler pragma. There is a reason nothing but Windows build
of DMD
supports it.
You are right about not having pragma(lib anywhere but
windows, but we do depend on 3rd party libs -- libc, libm,
librt, etc. They are just always in the right places.
It isn't that simple. On Linux it uses gcc for linking making
use of the fact those libraries are also needed for C
applications and system-wide installation of GCC already knows
it.
I'm not quite sure where libcurl would be except /usr/lib, and
why -L-lcurl wouldn't work (and therefore pragma(lib ). Seems
like all the issues are for people who custom-build or
custom-install libcurl.
Typical example is when in specific distro library name
includes major version number in the static library name, i.e.
libcurl4.a
Another case is multilib paths, those are not uniform either (I
add -L-L/usr/lib32 to default dmd.conf for it to work)
In general the more obscure and less "established" library you
want to link, the more complicated it is to do in
cross-platform way. This is why `pragma(lib)` is design failure.
Maybe D should ship its own version of libcurl. I mean, I can't
see a successful standard library without basic networking
features, and it seems that the only way to know where it is is to
ship it. Using the default C compiler to build it at install
wouldn't be worse than the gcc/pragma trick.