Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Jul 2011 20:05:12 -0700
From:      Garrett Cooper <yanegomi@gmail.com>
To:        Ed Maste <emaste@freebsd.org>
Cc:        freebsd-hackers@freebsd.org, Robert Millan <rmh@debian.org>
Subject:   Re: [PATCH] __FreeBSD_kernel__
Message-ID:  <CAGH67wQAv4Tf8HjccN2GZzgD2u1ZrORABtGehxXjeg109%2BRNWQ@mail.gmail.com>
In-Reply-To: <20110703020827.GA5763@sandvine.com>
References:  <CAOfDtXPUxQO1zbnxh8sh%2By7g=d8QaH2svYtEQJ06L4d%2BQKG8VA@mail.gmail.com> <20110702193724.5c55a6c9@kan.dnsalias.net> <20110703020827.GA5763@sandvine.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Jul 2, 2011 at 7:08 PM, Ed Maste <emaste@freebsd.org> wrote:
> On Sat, Jul 02, 2011 at 07:37:24PM -0400, Alexander Kabaev wrote:
>
>> On Sat, 2 Jul 2011 17:41:03 +0200
>> Robert Millan <rmh@debian.org> wrote:
>>
>> > My request is that FreeBSD also defines __FreeBSD_kernel__. =A0If this
>> > happens, life would be made a bit easier on both sides, as it'd be
>> > more natural for porters of either system to support both using a
>> > single macro [1].
>
> I think this is a good idea, especially if it means that a single change =
can
> make it into upstream projects to support both FreeBSD and Debian
> kFreeBSD.
>
>> I do not think this belongs in GCC at all. You should already have a
>> defined symbol to identify your OS and that should be used in cases
>> where it matters.
>
> I suspect the proposed patch put it in GCC based on the fact that we
> already have __FreeBSD__ in contrib/gcc/config/freebsd-spec.h:
> =A0 =A0 =A0 =A0builtin_define_with_int_value ("__FreeBSD__", FBSD_MAJOR);=
 =A0 =A0 =A0\
>
>> Alternatively, you should provide the symbol in
>> similar way in which we provide __FreeBSD_version, through well-known
>> header like sys/param.h and not pollute GCC.
>
> I suspect this is probably a reasonable alternative, but may mean softwar=
e
> will have to pick up an additional #include.
>
> Out of curiosity, what is the canonical way for software to identify a
> Linux kernel -- __linux__ or some variant? =A0Where is it defined?

linux is most often reliably defined value based on my personal
experience and it's defined in gcc [look for
`builtin_define.*("linux");' (note: this is a regexp..)]. Example:

$ echo '' | gcc -E -xc -dM -c - 2>&1 | grep linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1

HTH,
-Garrett



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGH67wQAv4Tf8HjccN2GZzgD2u1ZrORABtGehxXjeg109%2BRNWQ>