Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 08 Feb 2013 21:12:16 +0100
From: Jens Gustedt <jens.gustedt@...ia.fr>
To: musl@...ts.openwall.com
Subject: Re: musl detection by preprocessor

Am Freitag, den 08.02.2013, 13:55 -0500 schrieb Rich Felker:
> This kind of macro intentionally isn't provided, ...
> 
> My position, and the position of most people involved with the
> project, is that applications should test for features (e.g. with a
> configure script or standardized per-feature macros defined in
> headers) rather than hard-coding assumptions about which version of an
> OS/library has which features. (Note that, in the OS case, screwing
> this up has broken packages that assumed Linux version X lacks
> behavior Y, when a particular distribution backported behavior Y to
> version X.)

I would completely subscribe to that logic. I see that on the compiler
side that it is much easier to work with clang's has_feature (etc)
that just with version numbers as gcc does, and where basically all
immitations of gcc get it wrong in some place.

That said, I think it would be better in turn not to rely on just that
kind of logic to provide extension features of other libraries. This
__GNUC_SOURCE thing is exactly a way how these things then go wrong.

> > I'd like to distinguish the platform as early as possible, ideally
> > *before* I include any files, such that I can base decisions on which
> > files to include only on #defines that the pure compiler provides.
> 
> I'm not sure how you can determine with just the standard macros that
> you're on a POSIX or POSIX-like system where you have unistd.h...

Sure, usually you have to provide that information on the commandline
or through extensions (such as -std=gnu99). On POSIX systems you have
the getconf tool that provides reliable information about the
system:

getconf _POSIX_VERSION

should always work.

I probably have to review my include ordering a bit, currently I
set __GNUC_SOURCE *before* including unistd.h. I understood from their
docs that this is the way it is meant to be. Only by having it defined
before, I will in fact see the extensions they provide.

Jens

-- 
:: INRIA Nancy Grand Est :: http://www.loria.fr/~gustedt/   ::
:: AlGorille ::::::::::::::: office Nancy : +33 383593090   ::
:: ICube :::::::::::::: office Strasbourg : +33 368854536   ::
:: ::::::::::::::::::::::::::: gsm France : +33 651400183   ::
:: :::::::::::::::::::: gsm international : +49 15737185122 ::



Download attachment "signature.asc" of type "application/pgp-signature" (199 bytes)

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.