classification
Title: #ifdef linux is incorrect; should be #ifdef __linux__ (preferred standard)
Type: compile error Stage:
Components: Build, ctypes, Extension Modules Versions: Python 2.4, Python 2.6, Python 2.5
process
Status: closed Resolution: out of date
Dependencies: Superseder: ./configure --with-stdc89 to test ANSI C conformity
View: 4558
Assigned To: theller Nosy List: ngie, rpetrov, theller
Priority: normal Keywords:

Created on 2009-07-24 01:17 by ngie, last changed 2010-08-03 21:26 by terry.reedy. This issue is now closed.

Messages (3)
msg90868 - (view) Author: Enji Cooper (ngie) * Date: 2009-07-24 01:17
The following files are looking for the `linux' constant, when it fact
they should be looking for `__linux__' (from 2.6.2 release's sources):

Modules/_ctypes/libffi/src/mips/ffitarget.h:#ifdef linux
Modules/socketmodule.c:#ifdef linux
Modules/socketmodule.c:#ifdef linux

The correct check is being made for FreeBSD (__FreeBSD__), for instance.

This is a defacto standard set by gcc, as discussed here:
<http://lists.debian.org/debian-devel/2001/01/msg00951.html>. You can
dump out all of the available constants for any given gcc compiler via:

[garrcoop@sjc-lds-102 ~/Python-2.6.2]$ echo "" | gcc -E -dM -c - | grep
linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1
#define linux 1

I point this out because one of our compilers, doesn't have this
definition and it's tossing up errors with the linuxaudiodev and oss
modules periodically when cross-compiling, as shown below :(:

/nobackup/shujagan/tmp/contrib/python/Modules/linuxaudiodev.c:31: error:
conflicting types for 'uint32_t'
/nobackup/shujagan/tmp/linkfarm/mips32/usr/include/stdint.h:52: error:
previous declaration of 'uint32_t' was here

/nobackup/shujagan/tmp/contrib/python/Modules/ossaudiodev.c:37: error:
conflicting types for 'uint32_t'
/nobackup/shujagan/tmp/linkfarm/mips32/usr/include/stdint.h:52: error:
previous declaration of 'uint32_t' was here

We've suggested using --without-audio, but this is a standard which
should be adhered to as __linux__ is the constant of choice when looking
for the Linux compiler...

Thanks!
-Garrett
msg90881 - (view) Author: Roumen Petrov (rpetrov) * Date: 2009-07-24 12:09
Did my patch python-trunk-20081209-c89.patch from issue 4558 work for you ?

Is the issue fixed in original libffi ?
msg90905 - (view) Author: Enji Cooper (ngie) * Date: 2009-07-25 00:20
__linux is legitimate too, so the patch looks ok, but...

1) It won't apply cleanly against 2.4.5, most likely.
2) Why __linux instead of __linux__ ?

gcooper@orangebox ~ $ echo "" | gcc --std=c89 -E -dM -c - | grep linux
#define __linux 1
#define __linux__ 1
#define __gnu_linux__ 1

__linux__ is the preferred nomenclature in the kernel.org sources, IIRC...
History
Date User Action Args
2010-08-03 21:26:37terry.reedysetstatus: open -> closed
resolution: out of date
superseder: ./configure --with-stdc89 to test ANSI C conformity
2009-07-25 00:20:46ngiesetmessages: + msg90905
2009-07-24 12:09:34rpetrovsetnosy: + rpetrov
messages: + msg90881
2009-07-24 01:17:52ngiecreate