Distributor's whishlist and questions for D
Matthias Klumpp via Digitalmars-d
digitalmars-d at puremagic.com
Thu Apr 21 08:34:35 PDT 2016
Hi, and thanks for your detailed explanations!
On Thursday, 21 April 2016 at 11:49:13 UTC, Johannes Pfau wrote:
> On Thursday, 21 April 2016 at 01:01:01 UTC, Matthias Klumpp
> wrote:
>> [...]
>
> You currently can't install druntime or phobos headers in this
> directory, as each compiler will have slightly modified
> versions and then you end up with /usr/include/d/(dmd|gdc|ldc).
That doesn't seem to be the case for LDC on Debian... It installs
Phobos into /usr/include/d/std, which makes GDC go crazy as soon
as LDC is installed too.
I suspect this is a packaging bug, if so, I'll report a bug
against LDC.
> But all other library headers should be shareable between
> compilers and can be placed in /usr/include/d. (This might even
> work for phobos, I don't think we have many compiler specific
> changes there. But then you need to use the same frontend
> version for all compilers.)
This is probably a very naive question, but: Isn't the D
specification finished? If the language is done, why would there
be a dependence of Phobos on a specific compiler?
Or is this because the new code in Phobos might expose bugs in
the compiler itself, which causes these incompatibilities?
> You can only install headers for one library version with this
> approach! A versioned approach is nicer
> /usr/include/d/libfoo/1.0.0 but requires explicit compiler
> support and it's unlikely this will happen (or explicit dub
> support and you compile everything through dub).
Would be nice, but since we - most of the time - only allow one
version of a specific software package to be present in
distributions, it isn't a huge issue.
>> ## dub: Where should dub modules be installed?
>
> What does FHS recommend in this case? If you only keep
> headers/sources you could install into /usr/include.
By the FHS, /usr/include/d should be okay for headers (well, the
spec explicitly says C programming language headers, but well....
:P).
> Otherwise you probably need /var/cache or /var/lib or somehting
> like that.
/var/cache and /var/lib are forbidden for distributors, since
they contain state information which shouldn't be touched (as
always, there are exceptions...).
If the dub packages contain architecture-independent stuff only,
they need to go to /usr/share/dlang or /usr/include/d, and the
shared or static library must go to /usr/lib/<triplet>/.
> If you split packages you could use the standard /usr/lib*
> folders but then you need to keep versioned subdirectories to
> support installing multiple versions.
Multiple versions would be a rare event, since no distro package
management system allows that (excluding Nix here, which is kind
of special).
Installing arbitrary arch-specific content into a subdirectory in
/usr/lib is fine too, but I doubt that will be necessary...
>> ## dub: How to install modules?
>> Ideally, dub would also have a "dub install" command, to
>> install the binary, "headers (.di)"/sources and data into
>> standard directories on Linux.
>> (reported as https://github.com/dlang/dub/issues/811 )
>
> See above. The main question is: Do you want to have a C style
> install of one version of a library and have gdc find the
> includes and library when running gdc main.a -libfoo
For plain gdc/ldc, I'd say: yes
> or do you want dub-style support for multiple library versions
> which means you need to compile everything through dub.
For stuff using dub, I'd say yes to that too ;-)
> I'd love to have some extended compiler support (so you could
> simply do gdc -use=libfoo:1.0.0 and this would pick up the
> correct headers and linker flags). But as some DMD maintainers
> are opposed to this idea it won't happen. You'll probably
> always need dub for a 'nice' user interface.
>
>> ++++++
>> Aside from these things, there are also some other things
>> which would be very useful:
>>
>> ## Shared library support in all compilers
>
> This is mainly a GDC issue. DMD and LDC support shared libs,
> although I don't think these libraries are ABI compatible.
Sounds more and more like LDC is - at time - the better choice
over GDC...
More information about the Digitalmars-d
mailing list