Nicolas Boulenguez wrote:
> GNAT projects may be considered a particular case of headers varying
> across architectures, but located in /usr/share by policy.
>
> Many Ada -dev packages contain such headers, for example generated C
> bindings, and would remain buggy even with a sensible GNAT project
> structure.
This shouldn't be too hard to solve. One C library that has such a header file,
that I happen to know about, is Glib. Glib keeps its architecture-dependent
bits in glibconfig.h, which is located in an architecture-specific directory,
for example /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h. The rest
of the Glib headers are in /usr/include/glib-2.0. When compiling against Glib
you're supposed to run "pkg-config --cflags glib-2.0", which outputs something
like "-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include".
It's easy to do the equivalent with GNAT project files. Having imported
directories.gpr you can write:
for Source_Dirs use (Directories.Includedir & "/example",
Directories.Libdir & "/example/include");
Other layouts are also possible. One could for example make architecture-
specific subdirectories in /usr/include and refer to them as
«Directories.Includedir & "/" & Directories.Hardware_Platform».
It would of course be best if we could do this similarly enough across
distributions that the same project file can still work in all distributions.
Perhaps we could define a variable, "Archincludedir" or something, if that
would improve compatibility, although there is no such variable in the GNU
Coding Standards. (For the "*dir" variables I've defined so far I've used the
same names as in the GNU Coding Standards.)
Björn
Attachment:
signature.asc
Description: This is a digitally signed message part.