   GNUstep HOWTO
   *************

   Last Update: 19 November 2002

   This document explains how to build the different components of the
   GNUstep core libraries and GNUstep Launchpad.

   Copyright (C) 1996 - 2002 Free Software Foundation, Inc.

   Permission is granted to copy, distribute and/or modify this document
   under the terms of the GNU Free Documentation License, Version 1.1 or
   any later version published by the Free Software Foundation.

Introduction
************

   This document explains how to build the GNUstep core libraries or
GNUstep Launchpad. The core libraries, along with associated tools and
other files provide everything necessary for a working GNUstep system.
GNUstep Launchpad consists of the non-graphical libraries of GNUstep.

   In order to easily compile and debug GNUstep projects, you will need
the GNU Objective-C compiler `GCC' as well as various other GNU
packages.

   You will need at least 80Mb of hard disk space (150Mb prefered) in
order to compile the GNUstep core libraries.

Summary
*******

   In order to compile the libraries, you need to compile and install
the following packages first (if you don't already have them):

   * gcc (Version 2.8.0 or greater, 3.0.4 or greater recommended)

   * GNU make (Version 3.75 or greater)

   * gdb, if you plan to do any debugging

   You may also need to install some of the following libraries and
packages described below. Most of these packages are optional, but some
are required.

`ffcall libraries (HIGHLY RECOMMENDED)'
     This is a library that provides stack frame handling for
     NSInvocation and NSConnection. This library is highly recommended.
     The previous builtin method for stack frame handling is no longer
     supported and may be removed in the future.  ffcall is under GNU
     GPL. As a special exception, if used in GNUstep or in derivate
     works of GNUstep, the included parts of ffcall are under GNU LGPL.

`libffi library (OPTIONAL)'
     This is a library that provides stack frame handling for
     NSInvocation and NSConnection similar to ffcall. However, libffi
     is not as well tested as ffcall so you should not use it unless
     you are familiar with potential problems. Use this instead of
     ffcall. You don't need both.

`WindowMaker (Version >= 0.62) (OPTIONAL)'
     GNUstep and WindowMaker work together to provide a consistant
     interface.  Although it is not required, GNUstep will work much
     better if you use it with the WindowMaker window manager. In
     addition, WindowMaker includes some functionality that GNUstep
     uses that would otherwise not be available.  Get WindowMaker from
     <http://www.windowmaker.org>.

`libxml2 (OPTIONAL)'
     The libxml library (Version 2) is used to translate some of the
     documentation for GNUstep and to provide suport for MacOS-X
     compatible XML-based property-lists. It is recommended but not
     currently required.

`openssl (OPTIONAL)'
     The openssl library is used to provide support for https
     connections by the NSURL and HSURLHandle classes.  This
     functionality is compiled as a separate bundle since the OpenSSL
     license is not compatible with GPL, and in the hopes that if
     someone writes an openssl replacement, it can quickly be used by
     creating another bundle.

`libiconv (OPTIONAL)'
     Unicode support functions (iconv) come with glibc version 2.1 or
     greater. If you don't have this, you can get the separate libiconv
     library from <
     http://clisp.cons.org/~haible/packages-libiconv.html>. However,
     neither one is required to use GNUstep.

`gnustep-objc package (for gcc version < 3.0) (RECOMMENDED)'
     This is a special version of the Objective-C runtime that include
     several bug fixes and features that were not in gcc versions
     previous to 3.0.  It is available at
     <ftp://ftp.gnustep.org/pub/gnustep/libs> which compiles using the
     GNUstep Makefile package (so you don't have to get the entire gcc
     dist). Make sure to set the THREADING variable in the GNUmakefile.
     It's possible to compile the library static (make shared=no) and
     just copy to the place where the gcc libobjc library is (type gcc
     -v to get this location). Note you have to install gnustep-make
     (below) before installing this library.

`The TIFF library (libtiff) (Version 3.4beta36 or greater) (REQUIRED)'
     The GUI library uses this to handle loading and saving TIFF images.

`DGS, the XFree86 DPS extension, or Adobe DPS (OPTIONAL)'
     If you want to use the features of a Display Postscript
     (DPS)backend. Note that it is not required since you can use the
     backend that is Xlib based.  Note that the DPS backend is also
     still experimental and not recommended.  DPS can be obtained from
     the following locations:

        * DGS client/server, <ftp://ftp.gnustep.org/pub/gnustep/dgs>

        * XFree86 DPS, <http://dps.sourceforge.net/>

        * Adobe DPS, (contact your OS distributor)

`PCThreads (OPTIONAL)'
     For GNU/Linux systems on Intel x86 processors. PCThreads is no
     longer necessary (and should not be used) on GNU/Linux systems with
     glibc version 2, such as Debian 2.0 and RedHat 5.x and greater.

`GDB and Objective-C patch (OPTIONAL)'
     GDB can be obtained from <ftp://ftp.gnu.org/gnu/gdb>. The patch to
     make it work better with GNUstep can be obtained from
     <ftp://ftp.gnustep.org/pub/gnustep/patches>

Compiling and Installing the packages
*************************************

   Get the following individual packages:

   * gnustep-make

   * gnustep-base

   * gnustep-gui

   * gnustep-back

   For GNUstep Launchpad, substitute `gnustep-guile' and `jigs' for
`gnustep-gui' and `gnustep-back'.

   See <http://www.gnustep.org> for information on where to get these
packages.

   Make sure you install all the previously mentioned libraries first
before configuring and building GNUstep (Except you need to install
gnustep-objc after installing gnustep-make).

   Note: you will need to be able to install packages as root (at least
the base library) for applications to work correctly.

   For installation on specific systems, read the machine specific
instructions at the end of this document or appropriate README files in
the gnustep-make Documentation directory (such as README.MingW for
Windows).

Using a Display Postscript System
=================================

   Please skip this instruction unless you really know what you are
doing. The DPS backend is not well developed. You are better off
sticking to the xlib-based backend.

   Install a Display PostScript system if you want to use the XDPS
backend.  You do not need it if you want to use the xlib-based backend.
Some systems, like Sun Microcomputers(TM) already have a DPS system
installed.  Linux/GNU systems need to use a free implementation of DPS
(described in the Introduction.)

   If you are installing DGS, follow the installation instructions
included with the DGS package. If you are installing the XFree86 DPS
extension, follow the instructions included with that package (and note
that you need to be running XFree86 version 4.0 or greater).

Installing the Core Libraries
=============================

   The GNUstep packages uses the Autoconf mechanism for configuration;
it checks some host capabilties which are used by all GNUstep software.
To configure just type:

     ./configure

   The GNUstep makefile package needs a root directory.  If the
GNUSTEP_SYSTEM_ROOT environment variable is set then configure will
determine the root directory from its value (by removing the final
/System path component from it).  You can also specify the root
directory when you run configure with the prefix paramater; the
following command makes /usr/local/GNUstep the root directory:

     ./configure --prefix=/usr/local/GNUstep

   If you do not have the GNUSTEP_SYSTEM_ROOT environment variable set
and you do not specify a root directory when running configure, then
configure will use /usr/GNUstep as the default root directory.

Alternate Library Setup
-----------------------

   Read the installation instructions in the Makefile package (make)
for more installation options. Make sure you use the same configuration
options when configuring each GNUstep library.

Building the Package
--------------------

   To build the individual packages, use this familiar set of commands
for each pacakge (add any additional options you decide upon):

     ./configure
     make
     make install

   Start with the Makefile Pacakge (gnustep-make). After installing
gnustep-make you need to execute GNUstep's shell configuration script,
as follows:

      . /usr/GNUstep/System/Makefiles/GNUstep.sh

   before proceeding any further. Then do gnustep-objc. Before building
gnustep-objc, edit `GNUmakefile' and set the THREADING variable to the
thread library used on your system (usually its posix, but you can
leave it at single if you don't need threads). At this point you should
probably re-configure, make and install gnustep-make, so it can pick up
on any threading information that gnustep-objc provides.

   Now do gnustep-base, gnustep-gui and finally gnustep-back.

   NOTE: If you are trying to install the packages without root
permission, you may need to change one thing in the base library. Edit
the file gnustep-base/Tools/gdomap.h to uncomment the last line and
modify the specified port number to a port which you _know_ is not in
use on your network.  You should only do this if absolutely necessary
since making this change will break communications with any systems
where an identical change has not been made.  Also, the standard gdomap
port is the one officially registered with IANA and is reserved for use
by gdomap - it should only be changed if you can't get your system
administrator to start the gdomap server using it.

Additional Installation
***********************

Environment Setup
=================

   Add the shell script `GNUstep.sh' located in the Makefile package to
your shell startup file (such as `.profile'). For instance, if your
GNUSTEP_SYSTEM_ROOT is `/usr/GNUstep/System',

     . /usr/GNUstep/System/Makefiles/GNUstep.sh

   in your `.profile' file will work (Note the period at the beginning
of the line, and the space between the period and the following path;
if your GNUSTEP_SYSTEM_ROOT is different, you need to replace
`/usr/GNUstep/System' with your GNUSTEP_SYSTEM_ROOT).  It defines
environment variables that are needed to find GNUstep files and
executables.  Users of csh need to use the `GNUstep.csh' script. Read
the make package `README' for more info. Some systems, like GNU/Linux
have an `/etc/profile.d' directory where scripts can be executed
automatically. If you want to set up GNUstep for every user on your
system, you can try copying/linking the `GNUstep.sh' there. For csh or
tcsh, try

     source /usr/GNUstep/System/Makefiles/GNUstep.csh

GNUstep Home
============

   Set up your home GNUstep directory. This is where user defaults are
kept as well as other user configuration files. User installed apps,
libraries, etc are also here (if the default user directory is used).

     cd
     mkdir GNUstep

Time Zone
=========

   Next, set your local time zone.  There are four ways to do this, pick
one (see `$GNUSTEP_SYSTEM_ROOT/Libraries/Resources/NSTimeZones/zones'
for typical time zones):

  1. Use the defaults utility to set "Local Time Zone" to your local
     time zone (defaults is installed with GNUstep in the Tools
     directory). Type something like "defaults write NSGlobalDomain
     "Local Time Zone" GB".

  2. Set the GNUSTEP_TZ environment variable.

  3. Create the file
     `$GNUSTEP_SYSTEM_ROOT/Libraries/Resources/NSTimeZones/localtime'
     with the name of the local time zone in it.

  4. Set the TZ environment variable (this may conflict with other
     software on your system though).

DPS Information
===============

   If you are using a built-in DPS server, you may need to set the
PSRESOURCEPATH environment variable (on Solaris, it's set to
`/usr/openwin/lib/X11').

GNUstep deamons
===============

   Set up your system to execute some GNUstep deamons. If you don't do
this, they will be started automatically when you run your first GNUstep
app:

   * gdomap - Put this in a system startup file, like `/etc/rc.local'
     or `/etc/rc.d/rc.local' (customize for your system)
          GNUSTEP_SYSTEM_ROOT=/usr/GNUstep
          if [ -f $GNUSTEP_SYSTEM_ROOT/Tools/ix86/linux-gnu/gdomap ]; then
            $GNUSTEP_SYSTEM_ROOT/Tools/ix86/linux-gnu/gdomap
          fi

   * gdnc - Start after sourcing `GNUstep.sh' (e.g. in .profile)

   * gpbs - Same as with gdnc, make sure X-Windows is running.

     if [ `gdomap -L GDNCServer | grep -c Unable` == 1 ]; then
       echo "Starting GNUstep services..."
       gdnc
       gpbs
     fi

Test Tools and Applications
***************************

   Test programs for the base library are in `base/Testing'. Example
applications are located in the gstep-examples package.  To make these,
just uncompress and untar this package, cd to the appropriate
directory, and type make. You will need to install the GNUstep core
libraries first before doing this.

   To run the examples. Use the openapp utility that is part of the
GNUstep makefile package (and stored in `$GNUSTEP_SYSTEM_ROOT/Tools').
Usage is:

     openapp [--library-combo=...] application [additional arguments to app]

   Good Luck!

Machine Specific Instructions
*****************************

   \input texinfo    Below is a list of machines that people have
attempted to compile GNUstep on. GNUstep compiles with little or no
trouble on many of the more popular operating systems. Some machines
marked with _Unstable_ may have some trouble or may not work at all.

   A recommended compiler is listed for each machine, if known. You
should try to use the recommended compiler for compiling GNUstep, as
GNUstep is quite complex and tends provoke a lot of errors in some
compilers. Even versions newer than the listed compiler may not work,
so don't just get the latest version of a compiler expecting it to be
better than previous versions.

   Compiler notes: If a recommended compiler is not listed, take note
of the following information before choosing the compiler you use.
`egcs or gcc < 2.95'
     Probably will work, but few people use these now.

`gcc 2.95.x'
     Probably the oldest compiler that GNUstep is regularly tested with.

`gcc 2.96'
     Not an official gcc release. Some versions (Redhat, Mandrake) have
     problems that prevent GNUstep from being compiled correctly and
     cause mysterious errors.

`gcc 3.0.x'
     A fairly good compiler. Recommended.

`gcc 3.1'
     Several bugs where introduced in the version. It's probably better
     to avoid this one, although it might work fine.

`gcc 3.2'
     Pretty good, although at the time of this writing it hasn't been
     fully tested on many platforms. Recommended.

   If you have compiled GNUstep on a specific machine, please send
information about what you needed and any special instructions needed
to the GNUstep maintainer <gnustep-maintainers@gnu.org>.

   If your having mysterious trouble with a machine, try compiling
GNUstep without optimization. Particularly in the newer GCC compilers,
optimization can break some code. The easiest way to do this is when
configuring, `CFLAGS="" ./configure'. Or when building, `make
OPTFLAG=""'.

Darwin 5.x/PowerPC (_Unstable!_)
================================

`Recommended compiler'
     Default compiler has some odd memory(?) related problems.  Use the
     GNU runtime. Download the gcc3.1 compiler and configure it with
     -enable-threads=posix. Usually the installed compiler will produce
     object files for the NeXT runtime if you don't say gcc
     -fgnu-runtime. To change this behaviour, edit
     src-dir/gcc/config/darwin.h: You have to change the word #define
     in line 73 to #undef. Then the runtime default is gnu. When
     bootstrapping the compiler a nice working objective C gnu-runtime
     library (which is a little bit faster than apples NeXT-runtime)
     will be compiled and installed when make install. To use it, there
     is one (important) thing left: After installing the compiler, you
     have to go (probably as root) to install-dir/lib and produce the
     following dynamic link: ln -s libobjc.a libobjc.dylib This might
     seem senseless, but it forces the linker to use this library
     instead of the NeXT-runtime!

`Extra libs needed'
     Compile ffcall if you want to use Distributed Ojects: See
     instructions below.  Some test (e.g. in callback) simply wont't
     work.

`Special Instructions'
   Compiling ffcall:
     tar xf ffcall-1.8d.tar
     cd ffcall-1.8d
     configure
     cd avcall
     rm avcall-rs6000-sysv4.s
     gcc avcall-rs6000.c -S -o avcall-rs6000-sysv4.s
     make
     make install-lib
     cd ../callback/trampoline_r
     ln -s trampoline_r.h.in trampoline_r.h
     rm cache-rs6000-sysv4.s tramp-rs6000-sysv4.s
     gcc cache.c -S -o cache-rs6000-sysv4.s
     gcc trampoline.c -S -o tramp-rs6000-sysv4.s
     cd ../vacall_r
     rm vacall-rs6000-sysv4.s
     gcc vacall-rs6000.c -S -o vacall-rs6000-sysv4.s -DREENTRANT
     make
     gcc -c misc.c -fno-common
     ar cru .libs/libvacall.a  vacall.o misc.o structcpy.o
     cd ..
     make
     make install-lib

Debian/DEC-Alpha
================

`Recommended compiler'
     Unknown

`Extra libs needed'
     Unknown

`Special Instructions'
     Unknown

FreeBSD 4.x
===========

`Recommended compiler'

`Extra libs needed'
     Unknown

`Special Instructions'
     If you're using zsh, some shell variables may not be set correctly
     when executing GNUstep.sh. Try turing on SH_WORD_SPLIT (e.g. 'zsh
     -sh-word-split', 'zsh -o shwordsplit', 'zsh -y' or by setting
     'setopt SH_WORD_SPLIT' in one of zsh's startup files.)

     For gcc 3.0.4, make WANT_THREADS_SUPPORT=YES

     For libxml2 2.4.24, make WITHOUT_PYTHON=YES

FreeBSD 3.x
===========

   Compiles "out of the box" on FreeBSD 3.4.

`Recommended compiler'
     gcc 2.95.2

`Extra libs needed'
     Unknown

`Special Instructions'
     You need to use gmake not make to compile the GNUstep packages. A
     special port of gdb can be used with the Objective-C patches from
     <ftp://ftp.pcnet.com/users/eischen/FreeBSD/gdb-4.17-port.tar.gz>

     The best compiler for GNUstep is the latest release of the GNU
     Compiler Collection (GCC).  You can find it at
     <http://egcs.cygnus.com/>.

     If you want to use the native POSIX threads support from `libc_r'
     pass `--enable-threads=posix' to configure.  This is the
     recommended option as this is the FreeBSD threads package that
     gives the best results -with others you may be unable to run some
     examples like `diningPhilosophers'.

     The whole compilation process can fail if you have another threads
     library installed so watch out for installed packages like `pth'
     and such.  Besides the support for libc_r, GNUstep will also look
     for `pth' and `pcthreads', so if you have installed them and they
     aren't detected prepare to write a nice bug report.

     This can be done more much easily by using the port version.  Just
     `cd' to `/usr/ports/lang/egcs' and do a `"make WANT_THREADS=yes
     install"'.  Easy.

     If configure cannot find tiff.h or the tiff library and you have
     it installed in a non-standard place (even `/usr/local'), you may
     need to pass these flags to configure:
     `CFLAGS="-I/usr/local/include"' and `LDFLAGS="-L/usr/local/lib"'.

FreeBSD 2.x (_Unstable!_)
=========================

`Recommended compiler'
     gcc 2.8.x

`Extra libs needed'
     Unknown

`Special Instructions'
     Only static libraries work on this system.  Use /stand/sysinstall
     to install these packages if you have not already done so:

     gmake           (GNU make)
     gcc 2.8.x

     Seems to compile ok, but some tests crash. Possibly due to a
     performace 'hack' in base. Might be a good idea to upgrade to
     FreeBSD 3.x.  You need to use gmake not make to compile the
     GNUstep packages.

GNU-Linux/Intel (RedHat 5.x, 6.x, and 7.0)
==========================================

`Recommended compiler'
     With 5.x, the egcs compiler that comes with RedHat. Later versions
     may have gcc installed, although 7.0 comes with a snapshot of gcc
     (called 2.96) which is unsuitable for compiling Objective-C code.
     For 7.0 you should install the egcs compatibility packages (or an
     official gcc release).  For RedHat 7.2 or later, the default gcc
     apparently works fine (even if it is 2.96)

`Extra libs needed'
     Unknown

`Special Instructions'
     Make sure you have a decent version of the compiler. Try `cc -v'
     or `gcc -v' to get the version of the compiler.  With 5.x, make
     sure you set CC=egcs before configuring, as in:

          export CC=egcs
          configure ....

     Since RedHat 5.x also comes standard with an old version of gcc.

     On RedHat 7.0, configure like this
          CC=egcs LDFLAGS="-u shmctl@GLIBC_2.2 -L/lib -lc -u getpwuid_r@GLIBC_2.1.2
          -L/lib -lc -u getpwnam_r@GLIBC_2.1.2 -L/lib -lc" ./configure

GNU-Linux/PowerPC (LinuxPPC, Yellowdog)
=======================================

`Recommended compiler'
     The default compiler. gcc-3.x works, but you need a new gdb also
     to debug.

`Extra libs needed'
     None.

`Special Instructions'
   ffcall or libffi is required for invocations (and DO) to work well.
The major problem is sending data with data sizes less than 4 bytes
(chars, shorts, etc).

Irix 6.5/MIPS
=============

`Recommended compiler'
     You can't compile the base library with gcc2.95.x, and 3.1
     compiles more of the Testing programs (nsarray) than 3.0.4 so 3.1
     should be the recommended compiler. To use threads, it's necessary
     to bootstrap a compiler yourself: configure with
     -enable-threads=posix, that will work as long as you link EVERY
     objective C executable with -lpthread, no matter what warnings the
     irix linker produces!

`Extra libs needed'
     Unknown

`Special Instructions'
     Static libs only (make shared=no).

MkLinux/PowerPC (_Obsolete_)
============================

   This configuration is no longer being tested, but it may still work.

`Recommended compiler'
     egcs-2.90.25 980302 (egcs-1.0.2 prerelease) which comes standard
     with DR 3.

`Extra libs needed'
     None.

`Special Instructions'
     Comes with a good version of gcc.  Seems to compile and install
     ok, althouth DR3 has an old version of glibc, which requires some
     workarounds which should be taken care of in the configuration.
     Not completely tested, so some aspects, particular object
     invocations and DO may not work properly.

     If you want threads, you'll probably have to get the latest gcc
     compiler and glibc library (which has the threads library) and
     install both.

NetBSD
======

`Recommended compiler'
     Unknown

`Extra libs needed'
     libiconv

`Special Instructions'
     See the README.NetBSD file located in the gnustep-make package.

Netwinder (_Unstable!_)
=======================

`Recommended compiler'
     Build #12 of the system.

`Extra libs needed'
     Unknown

`Special Instructions'
     See <http://www.netwinder.org/~patrix>

OpenBSD 2.x  (_Unstable!_)
==========================

`Recommended compiler'
     Unknown

`Extra libs needed'
     Unknown

`Special Instructions'
     Can only compile with static libraries. Gives a lot of warnings.
     Try reading the README.NetBSD which might work the same on OpenBSD.

OSF Alpha  (_Unstable!_)
========================

   Information is for Version 3.2C

`Recommended compiler'
     egcs-1.1.1/1.1.2, gcc-2.95

`Extra libs needed'
     Unknown

`Special Instructions'
     Can only compile with static libraries. Compiler may fail when
     linking executables (e.g. gdnc). Standard ranlib and ar programs
     are to feable to create libraries. Should use GNU binutils
     versions. Linker sometimes fails to find symbols, in which case
     you may need to link with a library twice. For instance, add an
     extra -lgnustep-gui in ADDTIONAL_TOOL_LIBS in the
     GNUmakefile(.preamble).

Slackware/Intel
===============

`Recommended compiler'
     Unknown.

`Extra libs needed'
     Unknown.

`Special Instructions'
     Unknown.

Solaris 2.5.1/Sparc (_Obsolete_)
================================

   This configuration is no longer being tested, but it may still work.

`Recommended compiler'
     Unknown

`Extra libs needed'
     tiff, Don't use the one in /usr/openwin

`Special Instructions'
     See the Solaris 2.6 section for more instructions.

Solaris 2.[67]/Sparc
====================

`Recommended compiler'
     gcc 2.95.3. Version 2.95.2 has several bugs that GNUstep tickles.
     gcc 3.04. Not 3.1 - does not compile parts of GNUstep.

`Extra libs needed'
     tiff, Don't use the one in /usr/openwin

`Special Instructions'
     I think gcc provides posix threads on this system even if not
     configured whith -enable-threads, but to use them, you have to
     tell the gnumake configure script: The libraries you have to link
     with are -lpthread -lrt (read man libposix4 for more details). You
     have to call configure -with-thread-lib=-lpthread to avoid using
     -lthread which doesn't work!

     Using a POSIX shell (zsh or bash, which should come with Solaris)
     is highly recommended. In fact, some functions, such as compiling
     frameworks, will not work without it.

   Older Instructions: If you are using threads, make sure the
Objective-C runtime (libobjc that comes with gcc) is compiled with
threads enabled (This is true by default) AND that it is compiled with
the _REENTRANT flag defined (This does not seem to be true by default).
Or use the gnustep-objc package. Also make sure THREADS is set to
'posix' not 'solaris'.

Solaris 2.7/Intel
=================

`Recommended compiler'
     Unknown.

`Extra libs needed'
     Unknown

`Special Instructions'
     Make sure there are no -g compiler flags (i.e. compiling with
     debug=yes might be a problem). Unsure of correct bundle flags -
     You might need to use the alternate flags listed in target.make,
     line 989. Also, configuring gnustep-make with
     `--disable-backend-bundle' might be necessary if you can't get
     bundles to work.  You will probable get a lot of text relocation
     warnings, which probably can be ignored. See the other Solaris
     instructions above for more information.

Suse 6.x/Intel
==============

   GNUstep has been tested on version 6.2-6.4 of Suse

`Recommended compiler'
     Standard

`Extra libs needed'
     None

`Special Instructions'
     It seems that there is a problem with the default kernel build
     distributed with Suse  which means that the socket binding used by
     gdnc doesn't work.  If you recompile the kernel then it starts
     working.

Suse/Intel
==========

   GNUstep has been tested on version 7.0, 8.0, and 8.1 of Suse

`Recommended compiler'
     Standard. gcc2.95.x, gcc3.0.x, 3.1 and 3.2 work, but 2.95 is
     faster.  Compile with -threads-enabled (non-standard).

`Extra libs needed'
     None

`Special Instructions'
     None.

Suse 7.x/PPC
============

   GNUstep has been tested on version 7.0 of Suse

`Recommended compiler'
     Standard. gcc2.95.x, gcc3.0.x and gc3.1 work, but 2.95 is faster.
     Compile with -threads-enabled (non-standard).

`Extra libs needed'
     None

`Special Instructions'
Unixware-2.1.3/Intel
====================

`Recommended compiler'
     Unknown

`Extra libs needed'
     Unknown

   Special Instructions for GNUstep installation on Unixware 2.1 systems

1
     Tune the kernel to increase the argument space so that we can pass
     long command-line argument strings to processes (which the
     makefiles do) (/etc/conf/bin/idtune ARG_MAX 102400)

2
     Install raft of the latest GNU software

     gzip            (you need this to unpack other stuff)
     make            (to build everything)
     m4              (for autoconf etc)
     autoconf        (if you need to change anything)
     bison
     flex
     binutils        (required by gcc if you want to debug)
     gcc-2.8.1
                     (configure --with-gnu-as --with-gnu-ld --with-stabs)
                     NB. gcc-2.8.1 needs a fix to __do_global_dtors_aux()
                     in crtstuff.c on Unixware 2.1.3
                     (and possibly other unixware versions)
                     The fix is already in recent versions of egcs.

          ==================================
          static void
          __do_global_dtors_aux ()
          {
            static func_ptr *p = __DTOR_LIST__ + 1;
            static int completed = 0;
          
            if (completed)
              return;
          
            while (*p)
              {
                p++;
                (*(p-1)) ();
              }
          
          #ifdef EH_FRAME_SECTION_ASM_OP
            __deregister_frame_info (__EH_FRAME_BEGIN__);
          #endif
            completed = 1;
          }
          ======================================

3
     Having got gcc working - it's probably a good idea to rebuild all
     your GNU software using it!

4
     Build gstep as normal.

5
     The SIOCGIFCONF ioctl sometimes doesn't work on unixware after
     applying some of the OS patches.

     So I have added a '-a' flag to gdomap to give it the name of a file
     containing IP address and netmask information for the network
     interfaces on the system.

     You need to set up a file (I suggest '/etc/gdomap_addresses')
     containing the information for your machine and modify your system
     startup files in /etc/rc?.d to run gdomap, telling it to use that
     file.

     eg. If your machine has an IP address of '193.111.111.2' and is on
     a class-C network, your /etc/gdomap_addresses file would contain
     the line

          193.111.111.2 255.255.255.0

     and your startup file would contain the lines

          . /usr/local/GNUstep/Makefiles/GNUstep.sh
          gdomap -a /etc/gdomap_addresses

   If you don't set gdomap up correctly, Distributed Objects will not
work.

Windows with CYGWIN (_Unstable!_)
=================================

`Recommended compiler'
     gcc 2.95.3 (Cygwin release 1.1.8) or later

`Extra libs needed'
     Objective-C library DLL (<ftp://ftp.gnustep.org/pub/gnustep/libs>)
     for shared libs. It's a good idea to remove the libobjc.a that
     comes with gcc (gcc -v for location) so that it isn't accidentally
     found.  For ffcall, you should get version 1.8b or above (the
     earlier ones don't compile). There are still some problems with
     structure passing, but that is generally not supportred on any
     architecture.

`Special Instructions'
     On later versions of Cygwin you may be required to include the
     win32api directory in CPPFLAGS when configuring:

          CPPFLAGS=-I/usr/include/win32api ./configure

   Make sure you have good shared libraries for everthing. Sometimes a
bad shared library (like libtiff) will cause odd and untraceable
problems.  See `README.Cygwin' for information on compiling.

Windows with MinGW (_Unstable! As always..._)
=============================================

`Recommended compiler'
     See below.

`Extra libs needed'
     See below.

`Special Instructions'
     See the `README.MinGW' file located in the gnustep-make
     Documentation directory for instructions. Windows NT/2000/XP only.
     Win98 machines and earlier are very buggy and are not supported.
     Native GUI backend is alpha version.

Getting Libraries via Anonymous CVS
***********************************

   If you didn't get one of the snapshots, or if you want to be sure to
stay on the bleading edge, then you should get the libraries via CVS. Go
to <http://savannah.gnu.org/cvs/?group_id=99> for information on how to
get anonymous CVS access.

   If you haven't already done so, change to the directory, where you
want the source to reside. To get a list of potential modules to check
out, type
     cvs -z3 checkout -c

   For instance, to check our `core', which contains all the GNUstep
code libraries:
     cvs -z3 checkout core

   After you have checked out the source you can compile it as usual.
To update the source, go into the directory of the source tree you want
to update, for example, go into 'base', and type:

     cvs -z3 update -Pd

   You don't have to re-checkout after you have the source, just update!

