I just finished a port of X11R4. With a little help from Bill Moran (whose
xterm patches are necessary but not sufficient), everything now works except
xterm, which works mostly but leaves a couple of termio settings undone (and
I have no way to set them without major hacking on the xterm code, a twisty
little maze of #ifdefs, all mostly alike).
Some words of wisdom garnered from my build notes, admittedly a bit terse:
* Set the environment variable IMAKECPP to /usr/lpp/X11/Xamples/util/cpp/cpp
before building, (or hack imakemdep.h to change the default definition of
* You'll need BOOTSTRAPCFLAGS (I set it to -Drs6000).
* Change Imake.tmpl to key on the rs6000 symbol, and make an RS6000.cf
config file. Mine looks like this:
#define OSMajorVersion 3 /* S/6000 AIX Version 3.1 */
#define OSMinorVersion 1
#define SystemV YES
#define OSName AIX 3.1
#define HasNdbm YES
#define CppCmd /usr/lpp/X11/Xamples/util/cpp/cpp
#define PreProcessCmd /usr/lpp/X11/Xamples/util/cpp/cpp
#define StandardCppDefines -Drs6000 -DSYSV
#define BuildServer NO
#define BootstrapCFlags -Drs6000
#define OPERATING_SYSTEM AIX
#define LibraryDefines -DUNIXCPP ibmlibdefs StandardDefines
#define StandardDefines -Drs6000 -DSYSV -DMALLOC_0_RETURNS_NULL
#define LintOpts -ax -Drs6000
#define SpecialMalloc YES
#define ibmSpecialMalloc YES
* Follow the directions in imakemdep.h carefully!
* I found things to work better when I left the xlc.cfg file alone; i.e.,
DON'T try to make the C compiler behave more like the bsd one.
* A few source changes were necessary. Most are trivial, two are massive.
I used #ifdef rs6000 around all my changes to keep things portable. You
after comment "Get struct timeval", arrange for the following
set of conditionals to include both <time.h> and <sys/time.h>.
There are a couple of ways to do this.
cast required near line 1560 to keep compiler happy because
operands on either side of the : in a ?: operator were of
wrong types (hereafter referred to as ?: type check).
#include <math.h> needs to be moved up to the top with the
other includes, and the declaration of malloc near line 165
needs to be ifdeffed out.
#include <sys/select.h> needs to be added.
#undef FALSE and #undef TRUE before the declaration of
declaration of calloc near line 37 needs to be ifdeffed out.
declaration of strcpy near line 218 needs to be ifdeffed out
(in AIX this is an in-line optimization by the compiler, so
degenerates to a macro).
change all calls to realloc to calls to Xrealloc (this is a
more general oversight than for the S/6000!). Change #ifdef USG
to #if defined(USG) || defined(rs6000) at line 443.
?: type check near line 1418.
declaration of strcmp near line 43 needs to be ifdeffed out
for the same reason as strcpy did.
massive changes required in main.c, mostly having to do with
the unique pty naming scheme under AIX and the fact that the
#ifdefs seemt to take everything into account EXCEPT the POSIX
terminal I/O that AIX likes to use. I hope someone will
correct me if I'm wrong. I still don't have this right. We're
still using the "aixterm" program supplied with X11R3.
AIX doesn't keep the load average in the kernel! I had to add
some code to do this; the result looks just like a real load
average display except all the math is being done by
get_load.c, not the kernel. Contact me for details. For this
EXTRA_LIBRARIES = -lm since I call exp() in get_load.c.
needs to be modified because /etc/install under AIX expects
-M to set the mode instead of -m.