2009-09-06 13:44:18 -06:00
|
|
|
First of all: C89 or better. If you don't have that, port gcc first.
|
|
|
|
|
|
|
|
Use of C language extensions throughout the X server tree
|
|
|
|
---------------------------------------------------------
|
2008-11-02 08:26:08 -07:00
|
|
|
|
|
|
|
Optional extensions:
|
|
|
|
The server will still build if your toolchain does not support these
|
|
|
|
extensions, although the results may not be optimal.
|
|
|
|
|
|
|
|
* _X_SENTINEL(x): member x of the passed structure must be NULL, e.g.:
|
|
|
|
void parseOptions(Option *options _X_SENTINEL(0));
|
|
|
|
parseOptions("foo", "bar", NULL); /* this is OK */
|
|
|
|
parseOptions("foo", "bar", "baz"); /* this is not */
|
|
|
|
This definition comes from Xfuncproto.h in the core
|
|
|
|
protocol headers.
|
|
|
|
* _X_ATTRIBUTE_PRINTF(x, y): This function has printf-like semantics;
|
|
|
|
check the format string when built with
|
|
|
|
-Wformat (gcc) or similar.
|
|
|
|
* _X_EXPORT: this function should appear in symbol tables.
|
|
|
|
* _X_HIDDEN: this function should not appear in the _dynamic_ symbol
|
|
|
|
table.
|
|
|
|
* _X_INTERNAL: like _X_HIDDEN, but attempt to ensure that this function
|
|
|
|
is never called from another module.
|
|
|
|
* _X_INLINE: inline this functon if possible (generally obeyed unless
|
|
|
|
disabling optimisations).
|
|
|
|
* _X_DEPRECATED: warn on use of this function.
|
|
|
|
|
|
|
|
Mandatory extensions:
|
|
|
|
The server will not build if your toolchain does not support these extensions.
|
|
|
|
|
|
|
|
* named initialisers: explicitly initialising structure members, e.g.:
|
|
|
|
struct foo bar = { .baz = quux, .brian = "dog" };
|
|
|
|
* variadic macros: macros with a variable number of arguments, e.g.:
|
|
|
|
#define DebugF(x, ...) /**/
|
|
|
|
* interleaved code and declarations: { foo = TRUE; int bar; do_stuff(); }
|
2009-09-06 13:44:18 -06:00
|
|
|
|
|
|
|
|
|
|
|
Use of OS and library facilities throughout the X server tree
|
|
|
|
-------------------------------------------------------------
|
|
|
|
|
|
|
|
Non-OS-dependent code can assume facilities at least as good as
|
|
|
|
the non-OS-facility parts of POSIX-1.2001. Ideally this would
|
|
|
|
be C99, but even gcc+glibc doesn't implement that yet.
|
|
|
|
|
|
|
|
Unix-like systems are assumed to be at least as good as UNIX03.
|
|
|
|
|
|
|
|
Linux systems must be at least 2.4 or later. As a practical matter
|
|
|
|
though, 2.4 kernels never receive any testing. Use 2.6 already.
|
|
|
|
|
|
|
|
TODO: Solaris.
|
|
|
|
|
|
|
|
TODO: *BSD.
|
|
|
|
|
|
|
|
Code that needs to be portable to Windows should be careful to,
|
|
|
|
well, be portable. Note that there are two Windows ports, cygwin and
|
|
|
|
mingw. Cygwin is more or less like Linux, but mingw is a bit more
|
|
|
|
restrictive. TODO: document which versions of Windows we actually care
|
|
|
|
about.
|
|
|
|
|
|
|
|
OSX support is generally limited to the most recent version. Currently
|
|
|
|
that means 10.5.
|