A valid code that won't run?

cym13 via Digitalmars-d digitalmars-d at puremagic.com
Fri Apr 24 14:43:54 PDT 2015


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.


More information about the Digitalmars-d mailing list