\input texinfo   @c -*-texinfo-*-
@setfilename machines.info
@settitle Platform Compatibility

@ifclear HOWTO
@c Machine Specific, Darwin/ix86, , (DIR)
@node Machine Specific, Darwin/ix86, , (DIR)
@chapter Machines
@end ifclear

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
@emph{Unstable} may have some trouble or may not work at all.
Platforms marked @emph{Needs Testing} are not actively tested by developers
and need someone to help with reporting problems and fixes.
Platforms marked @emph{Obsolete} are very old distributions. No one really
knows if GNUstep works on these although they may.

@menu
* Darwin/ix86::                 
* Darwin/PowerPC::              
* Debian/DEC-Alpha::            
* Debian/i386::                 
* Debian/PowerPC::              
* Debian/SPARC::                
* FreeBSD 5.x::                 
* FreeBSD 4.x::                 
* FreeBSD 3.x::                 
* FreeBSD 2.x::                 
* Irix 6.5/MIPS::               
* MacOSX/PowerPC::              
* MkLinux/PowerPC::             
* NetBSD::                      
* Netwinder::                   
* OpenBSD 3.x::                 
* OSF/Alpha::                   
* RedHat/Intel::                
* Slackware/Intel::             
* Solaris 2.5.1/Sparc::         
* Solaris/Sparc::               
* Solaris 2.7/Intel::           
* Suse 6.x/Intel::              
* Suse/Intel::                  
* Suse 7.x/PPC::                
* Unixware-2.1.3/Intel::        
* Windows with CYGWIN::         
* Windows with MinGW::          
* Yellowdog/PowerPC::           
@end menu

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.
@table @samp
@item egcs or gcc < 2.95
Might work, but few people use these now.
@item gcc 2.95.x
Probably the oldest compiler that GNUstep is regularly tested with.
@item 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.
@item gcc 3.0.x
A fairly good compiler. Recommended.
@item gcc 3.1
Several bugs where introduced in the version. It's probably better to
avoid this one, although it might work fine.
@item gcc 3.2.x
Pretty good. Recommended.
@item gcc 3.3.x
Recommended. Fixes some bugs relating to protocols as well as other
improvements.
@item gcc 3.4
No info yet.
@end table

If you have compiled GNUstep on a specific machine, please send information
about what you needed and any special instructions needed to
GNUstep @email{bug-gnustep@@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, @samp{CFLAGS="" ./configure}. Or when building, 
@samp{make OPTFLAG=""}.

Also if you manually upgraded gcc and/or make, we recommend reading the
documentation at @url{http://www.LinuxFromScratch.org} for tips on compiling
and installing gcc and make. If you had GNUstep previously installed, make sure
you completely remove all of it, including installed init scripts.

@c -----------------------------------------
@node Darwin/ix86, Darwin/PowerPC, Machine Specific, Machine Specific
@section Darwin/ix86

Currently tested on Darwin 7.x

@table @samp
@item Recommended compiler
gcc 3.3.2. Older versions will not compile on Darwin.

Default compiler has unknown problems.
Use the GNU runtime. Download the gcc compiler and configure it with
--enable-threads=posix. You don't need binutils or anything else.

@item Extra libs needed 

@item Special Instructions 

Read the @url{README.Darwin} file in the gnustep-make/Documentation
directory for complete instructions.

@end table

@c -----------------------------------------
@node Darwin/PowerPC, Debian/DEC-Alpha, Darwin/ix86, Machine Specific
@section Darwin/PowerPC

Currently tested on Darwin 6.x, 7.x

@table @samp
@item Recommended compiler
gcc 3.3.2. Older versions will not compile on Darwin.

Default compiler has unknown problems.
Use the GNU runtime. Download the gcc compiler and configure it with
--enable-threads=posix. You don't need binutils or anything else.

@item Extra libs needed 
Use libffi (not ffcall). This should be enabled by default in gnustep-base
so you don't have to type --enable-libffi. For 6.x, you need the dlcompat 
library (from @url{www.opendarwin.org}) to load bundles (not needed for 7.x).

@item Special Instructions 

Read the @url{README.Darwin} file in the gnustep-make/Documentation
directory for complete instructions.

@end table

See also the MacOSX/PowerPC section

@c -----------------------------------------
@node Debian/DEC-Alpha, Debian/i386, Darwin/PowerPC, Machine Specific
@section Debian/DEC-Alpha

@table @samp
@item Recommended compiler
Unknown

@item Extra libs needed 
Unknown

@item Special Instructions 
None
@end table

@c -----------------------------------------
@node Debian/i386, Debian/PowerPC, Debian/DEC-Alpha, Machine Specific
@section Debian/i386

Tested on sid.
@table @samp
@item Recommended compiler
Unknown

@item Extra libs needed 
Unknown

@item Special Instructions 
None
@end table

@c -----------------------------------------
@node Debian/PowerPC, Debian/SPARC, Debian/i386, Machine Specific
@section Debian/PowerPC

Tested on sid.
@table @samp
@item Recommended compiler
Unknown

@item Extra libs needed 
Unknown

@item Special Instructions 
None
@end table

@c -----------------------------------------
@node Debian/SPARC, FreeBSD 5.x, Debian/PowerPC, Machine Specific
@section Debian/SPARC

Tested on sid.
@table @samp
@item Recommended compiler
Unknown

@item Extra libs needed 
Unknown

@item Special Instructions 
None
@end table

@c -----------------------------------------
@node FreeBSD 5.x, FreeBSD 4.x, Debian/SPARC, Machine Specific
@section FreeBSD 5.x

Tested on 5.0 and 5.1
@table @samp
@item Recommended compiler

@item Extra libs needed 
None.

@item Special Instructions
Can install via /usr/ports/devel/gnustep, but not all required dependancies
are installed. See the GNUstep-HOWTO for list of libraries.

@end table


@c -----------------------------------------
@node FreeBSD 4.x, FreeBSD 3.x, FreeBSD 5.x, Machine Specific
@section FreeBSD 4.x

@table @samp
@item Recommended compiler

@item Extra libs needed 
Unknown

@item Special Instructions 
For gcc 3.0.4, make WANT_THREADS_SUPPORT=YES

For libxml2 2.4.24, make WITHOUT_PYTHON=YES

@end table

@c -----------------------------------------
@node FreeBSD 3.x, FreeBSD 2.x, FreeBSD 4.x, Machine Specific
@section FreeBSD 3.x

Compiles "out of the box" on FreeBSD 3.4.

@table @samp
@item Recommended compiler
gcc 2.95.2

@item Extra libs needed 
Unknown

@item 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
@url{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 @url{http://egcs.cygnus.com/}.

If you want to use the native POSIX threads support from @file{libc_r} pass
@code{--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 @file{diningPhilosophers}.

The whole compilation process can fail if you have another threads library
installed so watch out for installed packages like @file{pth} and such.
Besides the support for libc_r, GNUstep will also look for @file{pth} and
@file{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 @code{cd}
to @file{/usr/ports/lang/egcs} and do a @code{"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 @file{/usr/local}), you may need to pass these
flags to configure: @code{CFLAGS="-I/usr/local/include"} and
@code{LDFLAGS="-L/usr/local/lib"}.

@end table

@c -----------------------------------------
@node FreeBSD 2.x, Irix 6.5/MIPS, FreeBSD 3.x, Machine Specific
@section FreeBSD 2.x (@emph{Obsolete,Unstable})

@table @samp
@item Recommended compiler
gcc 2.8.x

@item Extra libs needed 
Unknown

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

@format
gmake           (GNU make)
gcc 2.8.x
@end format

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.

@end table

@c -----------------------------------------
@node Irix 6.5/MIPS, MacOSX/PowerPC, FreeBSD 2.x, Machine Specific
@section Irix 6.5/MIPS

@table @samp
@item Recommended compiler
gcc 3.2.1

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!

@item Extra libs needed 
Unknown

@item Special Instructions 
If you cannot link the library because of the very low default limit
(20480) for the command line length, then you should either use systune
ncargs to increase the value (maximum is 262144) or link the library by
hand.
No libffi-support: Use ffcall


@end table

@c -----------------------------------------
@node MacOSX/PowerPC, MkLinux/PowerPC, Irix 6.5/MIPS, Machine Specific
@section MacOSX/PowerPC

Currently tested on MacOSX 10.2, 10.3

@table @samp
@item Recommended compiler
Default.

@item Extra libs needed 
None.

@item Special Instructions 
By default, on Mac OS X, only the GNUstep extensions are built. This
is if you want to build gdl2, etc on Mac OS X. Xcode project files
exist, but they may not be up-to-date. Try:

@example
cd make
./configure --with-library-combo=apple-apple-apple
make install

cd ../base
./configure --with-xml-prefix=/usr --disable-xmltest
make debug=yes install
@end example

@end table

See also the Darwin/PowerPC section.

@c -----------------------------------------
@node MkLinux/PowerPC, NetBSD, MacOSX/PowerPC, Machine Specific
@section MkLinux/PowerPC 

Tested with R2 RC2 (2004/03/04).

@table @samp
@item Recommended compiler
gcc 3.x allthough earlier ones should work if you also install gnustep-objc

@item Extra libs needed 
None.

@item Special Instructions 
Unknown.

@end table

@c -----------------------------------------
@node NetBSD, Netwinder, MkLinux/PowerPC, Machine Specific
@section NetBSD 

@table @samp
@item Recommended compiler
Unknown

@item Extra libs needed 
libiconv

@item Special Instructions 
See the @url{README.NetBSD} file located in the gnustep-make package.

@end table

@c -----------------------------------------
@node Netwinder, OpenBSD 3.x, NetBSD, Machine Specific
@section Netwinder (@emph{Unstable})

@table @samp
@item Recommended compiler
Build #12 of the system.

@item Extra libs needed 
Unknown

@item Special Instructions 
See @url{http://www.netwinder.org/~patrix}
@end table

@c -----------------------------------------
@node OpenBSD 3.x, OSF/Alpha, Netwinder, Machine Specific
@section OpenBSD 3.x  (@emph{Needs Testing})

@table @samp
@item Recommended compiler
Unknown

@item Extra libs needed 
Unknown

@item Special Instructions 
Try reading the @url{README.NetBSD} which might work the same on OpenBSD.
@end table

@c -----------------------------------------
@node OSF/Alpha, RedHat/Intel, OpenBSD 3.x, Machine Specific
@section OSF Alpha  (@emph{Unstable})
@c Contact: suzukis@file.phys.tohoku.ac.jp

Information is for Version 3.2C

@table @samp
@item Recommended compiler
egcs-1.1.1/1.1.2, gcc-2.95

@item Extra libs needed 
Unknown

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

@end table

@c -----------------------------------------
@node RedHat/Intel, Slackware/Intel, OSF/Alpha, Machine Specific
@section RedHat/Intel

@table @samp
@item Recommended compiler
Standard

@item Extra libs needed 
Standard (ffcall or libffi)

@item Special Instructions 
None
@end table

@c -----------------------------------------
@node Slackware/Intel, Solaris 2.5.1/Sparc, RedHat/Intel, Machine Specific
@section Slackware/Intel 

@table @samp
@item Recommended compiler
Unknown.

@item Extra libs needed 
Unknown.

@item Special Instructions 
Unknown.

@end table

@c -----------------------------------------
@node Solaris 2.5.1/Sparc, Solaris/Sparc, Slackware/Intel, Machine Specific
@section Solaris 2.5.1/Sparc (@emph{Obsolete})

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

@table @samp
@item Recommended compiler
Unknown

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

@item Special Instructions 
See the Solaris 2.6 section for more instructions.
@end table

@c -----------------------------------------
@node Solaris/Sparc, Solaris 2.7/Intel, Solaris 2.5.1/Sparc, Machine Specific
@section Solaris 2.[678]/Sparc

Tested on Solaris version 6, 7, and 8

@table @samp
@item Recommended compiler
gcc 3.2.1 or greater
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.

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

@item Special Instructions 

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. 

@end table 

Some people have reported problems when using binutils assembler and linker.
Using the native Solaris assmebler and linker should work fine.

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

@c -----------------------------------------
@node Solaris 2.7/Intel, Suse 6.x/Intel, Solaris/Sparc, Machine Specific
@section Solaris 2.7/Intel 
@c Contact?: Sebastian Niesen <sniesen@niesen.net>

@table @samp
@item Recommended compiler
Unknown.

@item Extra libs needed 
Unknown

@item 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 @samp{--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.

@end table

@c -----------------------------------------
@node Suse 6.x/Intel, Suse/Intel, Solaris 2.7/Intel, Machine Specific
@section Suse 6.x/Intel 

GNUstep has been tested on version 6.2-6.4 of Suse

@table @samp
@item Recommended compiler
Standard

@item Extra libs needed 
None

@item 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.

@end table

@c -----------------------------------------
@node Suse/Intel, Suse 7.x/PPC, Suse 6.x/Intel, Machine Specific
@section Suse/Intel 

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

@table @samp
@item Recommended compiler
The default compiler that comes with Susu is fine. Also 
gcc2.95.x, gcc3.0.x, 3.1 and 3.2 work, but 2.95 is faster.
Compile with --threads-enabled (non-standard).

@item Extra libs needed 
None

@item Special Instructions 
None.

@end table

@c -----------------------------------------
@node Suse 7.x/PPC, Unixware-2.1.3/Intel, Suse/Intel, Machine Specific
@section Suse 7.x/PPC 

GNUstep has been tested on version 7.0 of Suse/PPC

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

@item Extra libs needed 
None

@item Special Instructions 

@end table

@c -----------------------------------------
@node Unixware-2.1.3/Intel, Windows with CYGWIN, Suse 7.x/PPC, Machine Specific
@section Unixware-2.1.3/Intel
@c Contact?: Richard Frith-Macdonald <richard@brainstorm.co.uk>

@table @samp
@item Recommended compiler
Unknown

@item Extra libs needed 
Unknown

@end table 

Special Instructions for GNUstep installation on Unixware 2.1 systems

@table @asis

@item   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)

@item   2
Install raft of the latest GNU software

@format
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.

@end format

@example
==================================
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;
@}
======================================
@end example

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

@item   4
Build gstep as normal.

@item   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

@example
193.111.111.2 255.255.255.0
@end example

and your startup file would contain the lines

@example
. /usr/local/GNUstep/Library/Makefiles/GNUstep.sh
gdomap -a /etc/gdomap_addresses
@end example

@end table

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

@c -----------------------------------------
@node Windows with CYGWIN, Windows with MinGW, Unixware-2.1.3/Intel, Machine Specific
@section Windows with CYGWIN (@emph{Needs Testing})

@table @samp
@item Recommended compiler
gcc 3.3.1 or later (with libobjc and libjava (if using libffi))

@item Extra libs needed 
Objective-C library DLL (@url{ftp://ftp.gnustep.org/pub/gnustep/windows/cygwin})
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 supported on any architecture.  libffi also works.

@item Special Instructions

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

@end table

@c -----------------------------------------
@node Windows with MinGW, Yellowdog/PowerPC, Windows with CYGWIN, Machine Specific
@section Windows with MinGW

@table @samp
@item Recommended compiler
See below.

@item Extra libs needed 
See below.

@item Special Instructions 
See the @url{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.
@end table

@c -----------------------------------------
@node Yellowdog/PowerPC,  , Windows with MinGW, Machine Specific
@section Yellowdog/PowerPC

@table @samp
@item Recommended compiler
Standard

@item Extra libs needed 
Standard (ffcall or libffi)

@item Special Instructions 

@end table

@ifclear HOWTO
@include end.texi
@end ifclear
