[ale] Battling Distros and unwrapped '#include's
John Mills
johnmills at speakeasy.net
Wed Apr 30 13:23:34 EDT 2008
ALErs -
Different engineers in our development group use different Linux distros
and we seem to have a cross-file of system *.h files defining basic types.
In particular, one of our own product's files attempts to conditionally
define basic integer types as follows:
************<common.h>********************
/* Types */
#ifndef __u8
#define __u8 unsigned char
#endif
#ifndef __u16
#define __u16 unsigned short
#endif
#ifndef __u32
#define __u32 unsigned long
#endif
#ifndef __s8
#define __s8 signed char
#endif
#ifndef __s16
#define __s16 signed short
#endif
#ifndef __s32
#define __s32 signed long
#endif
*****************************************
Three distros react in different ways to this fragment:
1. openSuSE-10.x can't build if these definitions are _not_ included, but
crashes on duplicated definitions from <asm/types.h> if I instead include
<linux/types.h>. Specifically with a flurry of:
"/usr/include/asm/types.h:13: error: duplicate -1signed"
2. FC8 can't build if these definitions _are_ included, on account of
duplicate declarations.
3. Ubuntu-8.04 doesn't care - it apparently wraps these types properly.
First, the "#ifndef/#endif" contructions clearly don't work properly with
'typedef' defined types, and
Second, there seem to be problems with the system '#include's wrappers, at
least in openSuSE.
Any suggestions how to code around this in a fairly portable fashion? We
have conditional compilation for other targets, but for our purposes it
would be good to have a single target for our Linux/x86 builds.
TIA for any clever ideas.
- Mills
More information about the Ale
mailing list