[Olsr-dev] changing 'linux' macro to __linux__ or __gnu_linux__

Hans-Christoph Steiner (spam-protected)
Thu Feb 2 16:49:32 CET 2012

On 02/02/2012 10:22 AM, Felix Fietkau wrote:
> On 2012-02-02 4:00 PM, Hans-Christoph Steiner wrote:
>> On 02/02/2012 08:58 AM, Felix Fietkau wrote:
>>> On 2012-02-01 8:56 PM, Hans-Christoph Steiner wrote:
>>>> One thing that I've learned in my own porting work is: it is generally
>>>> the least overall work to try to use the platform macros that are
>>>> automatically defined by the compiler.  Android's NDK only recently
>>>> added the __ANDROID__ macro, for example, and Android's gcc also defines
>>>> __linux__, but NOT __gnu_linux__.
>>>> Every GNU/Linux I've tried (which is mostly Debian and derivatives) has
>>>> a compiler that sets __linux__ and __gnu_linux__.  So I propose changing
>>>> olsrd's linux macro to be __linux__ when its kernel-related and
>>>> __gnu_linux__ when its OS related.  This will allow the code to
>>>> differentiate between GNU/Linux and Android/Linux (not GNU at all,
>>>> besides the compiler).
>>>> If people are amenable, I'll post a patch.  This isn't so much to fix a
>>>> specific issue now, but rather to prevent issues from arising in the future.
>>> I think it's better to explicitly check for android instead of relying
>>> on __gnu_linux__. There are enough embedded distros out there (e.g.
>>> OpenWrt) that are mostly GNU compatible, but do not use glibc, nor
>>> define __gnu_linux__
>> If we use the __gnu_linux__, __linux__, and __ANDROID__ macros right,
>> chances are that the build system won't need to handle them at all.  The
>> build system will still need specific checks for Android and other
>> embedded systems to setup the build with the right cross-compiler.
> Do you have any examples where you'd check for __gnu_linux__ explicitly?

Not yet specific to the olsrd code, but when there are things that are
from standard GNU libraries that are not always in other platforms, the
__gnu_linux__ macro makes sense.  I think there are also macros for GNU
libc, Android's Bionic libc, and others.  Those I know less well.

One example function is ttyname(), which is a standard libc function
that is not implemented (yet?) in Bionic libc.


More information about the Olsr-dev mailing list