[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