
You can get the most recent version of GNU Go ftp.gnu.org or a mirror
(see @url{http://www.gnu.org/order/ftp.html} for a list).  You can read
about newer versions and get other information at
@url{http://www.gnu.org/software/gnugo/}. 

@menu
* GNU/Linux and Unix::          GNU Linux and Unix Installation
* Configure Options::           Configure Options
* Windows and MS-DOS::          Windows Installation
* Macintosh::                   Macintosh Installation
@end menu

@node GNU/Linux and Unix, Configure Options, ,Installation
@section GNU/Linux and Unix
@cindex installation

Untar the sources, change to the directory gnugo-3.8. Now do:

@example
   ./configure [OPTIONS]
   make
@end example

Several configure options will be explained in the next section. You do not
need to set these unless you are dissatisfied with GNU Go's performance or
wish to vary the experimental options.

As an example,

@example
   ./configure --enable-level=9 --enable-cosmic-gnugo
@end example

@noindent
will make a binary in which the default level is 9, and the experimental
``cosmic''' option is enabled. A list of all configure options can be
obtained by running @command{./configure --help}. Further information
about the experimental options can be found in the next section
(@pxref{Configure Options}).

After running configure and make, you have now made a binary called
@file{interface/gnugo}. Now (running as root) type

@example
   make install
@end example

@noindent
to install @file{gnugo} in @file{/usr/local/bin}.

There are different methods of using GNU Go. You may run it from the
command line by just typing:

@example
   gnugo
@end example

@noindent
but it is nicer to run it using CGoban 1 (under X Window System), 
Quarry, Jago (on any platform with a Java Runtime Environment) or other
client programs offering a GUI.

You can get the most recent version of CGoban 1 from 
@url{http://sourceforge.net/projects/cgoban1/}. The earlier version
1.12 is available from @url{http://www.igoweb.org/~wms/comp/cgoban/index.html}.
The CGoban version number MUST be 1.9.1 at least or it won't work. CGoban 2
will not work.

@xref{CGoban}, for instructions on how to run GNU Go from Cgoban, or
@xref{Other Clients}, for Jago or other clients.

Quarry is available at @url{http://home.gna.org/quarry/}.

@node Configure Options
@section Configure Options

There are three options which you should consider configuring,
particularly if you are dissatisfied with GNU Go's performance.

@menu
* Ram Cache::                 Ram Cache
* Default Level::             Default Level
* Other Options::             Other Options
@end menu

@node Ram Cache
@subsection Ram Cache

By default, GNU Go makes a cache of about 8 Megabytes in RAM for its
internal use. The cache is used to store intermediate results during
its analysis of the position. More precisely the default cache size is
350000 entries, which translates to 8.01 MB on typical 32 bit
platforms and 10.68 MB on typical 64 bit platforms.

Increasing the cache size will often give a modest speed improvement.
If your system has lots of RAM, consider increasing the cache
size. But if the cache is too large, swapping will occur,
causing hard drive accesses and degrading performance. If
your hard drive seems to be running excessively your cache
may be too large. On GNU/Linux systems, you may detect swapping
using the program 'top'. Use the 'f' command to toggle SWAP
display.

You may override the size of the default cache at compile time 
by running one of:

@example
   ./configure --enable-cache-size=n
@end example

@noindent
to set the cache size to @code{n} megabytes. For example

@example
   ./configure --enable-cache-size=32
@end example

@noindent
creates a cache of size 32 megabytes. If you omit this, your default
cache size will be 8-11 MB as discussed above. Setting cache size
negative also gives the default size. You must recompile and reinstall
GNU Go after reconfiguring it by running @command{make} and
@command{make install}.

You may override the compile-time defaults by running @file{gnugo}
with the option @option{--cache-size n}, where @code{n} is the size in
megabytes of the cache you want, and @option{--level} where n is the
level desired.  We will discuss setting these parameters next in
detail.

@node Default Level
@subsection Default Level

GNU Go can play at different levels. Up to level 10 is
supported. At level 10 GNU Go is much more accurate but takes
an average of about 1.6 times longer to play than at level 8.

The level can be set at run time using the @option{--level} option.
If you don't set this, the default level will be used. You
can set the default level with the configure option
@option{--enable-level=n}. For example

@example
./configure --enable-level=9
@end example

@noindent
sets the default level to 9. If you omit this parameter,
the compiler sets the default level to 10. We recommend
using level 10 unless you find it too slow. If you decide
you want to change the default you may rerun configure
and recompile the program.

@node Other Options
@subsection Other Options

Anything new in the engine is generally tested as an experimental option
which can be turned on or off at compile time or run time. Some
``experimental'' options such as the break-in code are no longer
experimental but are enabled by default.

This section can be skipped unless you are interested in the
experimental options.

Moreover, some configure options were removed from the stable
release. For example it is known that the owl extension code
can cause crashes, so the configure option --enable-experimental-owl-ext
was disabled for 3.8.

The term ``default'' must be clarified, since there
are really two sets of defaults at hand, runtime defaults
specified in @file{config.h} and compile time default
values for the runtime defaults, contained in @file{configure}
(which is created by editing @file{configure.in} then running
@command{autoconf}. For example we find in @file{config.h}

@example
/* Center oriented influence. Disabled by default. */
#define COSMIC_GNUGO 0

/* Break-in module. Enabled by default. */
#define USE_BREAK_IN 1
@end example

This means that the experimental cosmic option, which causes
GNU Go to play a center-oriented game (and makes the engine
weaker) is disabled by default, but that the break-in module
is used. These are defaults which are used when GNU Go is
run without command line options. They can be overridden
with the run time options:

@example
gnugo --cosmic-gnugo --without-break-in
@end example

Alternatively you can configure GNU Go as follows:

@example
./configure --enable-cosmic-gnugo --disable-experimental-break-in
@end example

then recompile GNU Go. This changes the defaults in @file{config.h},
so that you do not have to pass any command line options to GNU Go
at run time to get the experimental owl extension turned on and
the experimental break-in code turned off.

If you want to find out what experimental options were compiled into your GNU
Go binary you can run @command{gnugo --options} to find out. Here is a list
of experimental options in GNU Go.

@itemize @bullet
@item @code{experimental-break-in}. Experimental break-in code
(@pxref{Break Ins}). You should not need to configure this because
the break in code is enabled by default in level 10, and is turned
off at level 9. If you don't want the breakin code just play at
level 9.
@item @code{cosmic-gnugo}. An experimental style which plays a center
oriented game and has a good winning rate against standard GNU Go,
though it makes GNU Go weaker against other opponents.
@item @code{large-scale}. Attempt to make large-scale captures.
See:

@url{http://lists.gnu.org/archive/html/gnugo-devel/2003-07/msg00209.html}

for the philosophy of this option. This option makes the engine slower.
@item @code{metamachine}. Enables the metamachine, which allows
you to run the engine in an experimental mode whereby it forks
a new @code{gnugo} process which acts as an ``oracle.'' Has no
effect unless combined with the @option{--metamachine} run-time
option.
@end itemize

Other options are not experimental, and can be changed as
configure or runtime options.

@itemize @bullet
@item @code{chinese-rules} Use Chinese (area) counting.
@item @code{resignation-allowed} Allow GNU Go to resign games.
This is on by default.
@end itemize

@node Windows and MS-DOS, Macintosh, Configure Options, Installation
@section Compiling GNU Go on Microsoft platforms

@subsection Building with older visual studio

The distribution directories contain some .dsp and .dsw files with
GNU Go. These have been brought up to date in the sense that they
should work if you have the older VC++ with Visual Studio 6
but the distributed .dsp and .dsw files will only be of use with 
older version of Visual Studio.

In most cases (unless you are building in Cygwin) the preferred way 
to build GNU Go on Windows platforms is to use CMake. CMake
understands about many versions of Visual C/Visual Studio, and will
generate project/solution files for the tools installed on your
system. So even if you have Visual Studio 6 you may use CMake
and dispense with the distributed .dsp and .dsw files.

@subsection Building with Visual Studio project files

Before you compile the GNU Go source, you need to run CMake first, to 
generate the build files you'll give to Visual Studio.

From the cmd.exe command prompt, CD into the GNU Go source directory. 
To confirm you're in the right place, you should see the file 
'CMakeLists.txt' in the top-level directory of the GNU Go code (as well 
as others in lower subdirectories).

Direct CMake to generate the new Visual Studio build files by typing:

@example
    cmake CMakeLists.txt
@end example

Compile the code by invoking the newly-created Solution file:

@example
    vcbuild GNUGo.sln
@end example

This will take a few moments, as CMake generates 4 debug/retail targets:

@example
    debug
    release
    minsizerel
    relwithdebinfo
@end example

For each of these targets, Visual Studio is generating a version of 
gnugo.exe:

@example
    interface\debug\gnugo.exe
    interface\release\gnugo.exe
    interface\minsizerel\gnugo.exe
    interface\relwithdebinfo\gnugo.exe
@end example

Additionally, there is an 'Install' target available, that will copy the 
the gnugo.exe into the %ProgramFiles% directory. To do this, type:

@example
    vcbuild INSTALL.vcproj
@end example

This should result in copying GNU/Go into:

@example
    "%ProgramFiles%\GNUGo\bin\gnugo.exe" --options
@end example

In addition to command line use, CMake also has a GUI version. Users of 
the Visual Studio GUI might prefer to use that.

@subsection Building with Nmake makefiles

GNU Go will also build using NMake makefiles. Optionally, instead of 
Visual Studio project/solution files, you may direct CMake to generate 
NMake makefiles. To generate the makefiles:

@example
    cmake -G "NMake Makefiles" CMakeLists.txt
@end example

The default rule for the makefile is 'all'. Use the 'help' rule to show 
a list of available targets.

@example
    nmake -f Makefile help
@end example

To compile GNU Go:

@example
    nmake -f Makefil, all
@end example

One sysand 2009 tems, GNU GO may fail to build when using NMake makefiles. 
only fails the first time run, run NMake again with the 'clean all' 
targets, and it will compile the second and subsequent times.

@example
    nmake -f Makefile clean all
@end example

Which will successfully generate a gnugo.exe.

@example
    interface\gnugo.exe --options
@end example

@subsection Building with MinGW Makefiles

GNU Go can be built on Windows systems using MinGW.

This development environment uses: the GCC compiler (gcc.exe, not 
cl.exe), the Microsoft C runtime libraries (MSCRT, not GLibC), the GNU 
Make build tool (@code{mingw32-make.exe}, not NMake), all from the Windows 
shell (@code{cmd.exe}, not sh/bash).

For CMake to work, in addition to the base MinGW installation, the C++ 
compiler (g++.exe) and GNU Make (mingw32-make.exe) need to be installed. 
This was tested using GCC v3, not the experimental v4. To debug, use 
GDB, as the GCC-generated symbols won't work with NTSD/Windbg/Visual Studio.

To create the makfiles, run CMake with the MinGW generator option:

@example
    cmake -G "MinGW Makefiles" CMakeLists.txt
@end example

To build GNU Go, from a cmd.exe shell, run GNU Make (against the 
newly-created 'Makefile' and it's default 'all' target):

@example
    mingw32-make
    ..\interface\gnugo.exe --options
@end example

@subsection Building with MSYS makefiles (MinGW)

GNU Go can be built on Windows systems using MSYS.

This development environment uses: the GCC compiler (gcc.exe, not 
cl.exe), the Microsoft C runtime libraries (MSCRT, not GLibC), the GNU 
Make build tool (make, not NMake), all from the GNU Bash (sh.exe, not 
cmd.exe).

To create the makfiles, run CMake with the MSYS generator option:

@example
    cmake -G "MSYS Makefiles" CMakeLists.txt
@end example

Start MSYS's Bash shell, either clicking on a shortcut on from the 
command line:

@example
    cd /d c:\msys\1.0
    msys.bat
@end example

To build GNU Go, from a Bash shell, run GNU Make (against the 
newly-created 'Makefile' and it's default 'all' target):

@example
    make
    ../interface/gnugo.exe --options
@end example

To debug, use GDB, as the GCC-generated symbols won't work with 
NTSD/Windbg/Visual Studio.

@subsection Building on cygwin

With Cygwin, you should be able to 

@example
  tar zxvf gnugo-3.8.tar.gz
  cd gnugo-3.8
  env CC='gcc -mno-cygwin' ./configure
  make
@end example

@subsection Testing on Windows:

@file{regression/regress.cmd} is a simplified cmd.exe-centric port of the main
gnugo Unix shell script regress.sh. It can be used to help verify that the
generated binary might be operational. Read the script's comment header for
more information. For access to the full GNU Go tests, use Unix, not Windows.

To test:

@example
    cd regression
    regress.cmd ..\interface\gnugo.exe
@end example

@node Macintosh
@section Macintosh

If you have Mac OS X you can build GNU Go using Apple's compiler, 
which is derived from GCC. You will need Xcode.

One issue is that the configure test for socket support is
too conservative. On OS/X, the configure test fails, but
actually socket support exists. So if you want to be able
to connect to the engine through tcp/ip (using gtp) you
may @command{configure --enable-socket-support}.  There
will be an error message but you may build the engine
and socket support should work.


