Machines
********

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.

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 1.x/PowerPC (Unstable!)
==============================

Recommended compiler
     Unknown

Extra libs needed
     Don't use gnustep-objc or ffcall.

Special Instructions

GNUstep is being ported to Darwin. The current Darwin compiler doesn't handle __builtin functions, so these are diabled, which may cause problems with invocations and DO. Other than that it mostly compiles. Expect some other irritations that haven't been found yet. You need to use the ObjC runtime that comes with Darwin. To do this configure (gnustep-make) like this:

     ./configure --with-library-combo=nx-gnu-gnu

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

Recommended compiler
     Unknown

Extra libs needed
     Unknown

Special Instructions
     Unknown

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).

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 5.x)
================================

Recommended compiler
     egcs-1.1.2 (default compiler), or gcc-2.95

Extra libs needed
     None.

Special Instructions
     You need to compile without optimization or the compiler will not be able to compile several files (CFLAGS="" ./configure). Compiling with CFLAGS="-O" also works. The gcc-2.95 compiler fixes this problem.  There may be a problem with the X server that causes programs to crash with a X_QueryColors error. If so, get a newer X server at ftp://ftp.linuxppc.org/linuxppc/contrib/linuxppc-1999/software/XFree86-FBDev-3.3.3.1-49b.ppc.rpm.

Invocations (and DO) do not work well. The major problem is sending data with data sizes less than 4 bytes (chars, shorts, etc).  To fix this, we recommend using the ffcall libraries (Read the instructions on this in the configuration section).

Irix 6.4/MIPS (Unstable!)
=========================

Recommended compiler
     Unknown

Extra libs needed
     Unknown

Special Instructions
     Not ported at all to this machine. Might be better now, but no current testing.  Some files don't compile - get internal compiler errors using gcc 2.8.1.

MkLinux/PowerPC (MkLinux DR 3)
==============================

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

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-xgps in ADDTIONAL_TOOL_LIBS in the GNUmakefile(.preamble).

Solaris 2.5.1/Sparc
===================

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.

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

Special Instructions
     There is no need to patch the compiler for the builtin_apply problem unless you are not using the ffcall libraries. There is a patch to fix this in the contrib directory on the ftp sites (This is also true for all versions of gcc/egcs up through 2.95.2 (possibly fixed in later versions)).

     To avoid using the tiff library in /usr/openwin, configure like this:

          LIBS=-L/usr/local/lib ./configure

     if, for instance, you have put a newer tiff library in /usr/local/lib

Even with the above patch, invocations (and DO) still don't work well. The major problem is sending messages with more than four arguments. We recommend using the ffcall libraries when configuring (Read the instructions on this in the configuration section).

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
     egcs 1.1.2, 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 7.x/Intel
==============

GNUstep has been tested on version 7.0 of Suse

Recommended compiler
     Standard

Extra libs needed
     None

Special Instructions
     See the instructions for Suse 6.x

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)

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

For shared libs, make sure to specify SHARED=YES explicitly when building:

     make shared=yes

For static libs, use shared=no, Make sure files and compilation done in Unix mode (no ^M in files, EXPORT CYGWIN=BINMODE usually works if cygwin is not buggy).  Gdomap services not set up correctly. Must add services lines to C:\WINDOWS\services (on Windows 98) or xxx (on Windows NT).  Base library only. No native GUI backend.

Windows with MinGW (Unstable!)
==============================

Recommended compiler
     gcc 2.95.3-5

Extra libs needed
     Objective-C library DLL (ftp://ftp.gnustep.org/pub/gnustep/libs) for shared libs. 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
     See the README.MinGW file located in the gnustep-make Documentation directory for instructions. Base library only. No native GUI backend.

     [file end.texi not included]