Linux Build Instructions

Build premake via makefile in build/premake/src/. Copy the resulting
executable in build/premake/src/bin/premake/ to build/premake/.

Use source/workspaces/update-workspaces.sh to generate the GNU/GCC makefile
in build/workspaces/gcc. The makefile supports the standard targets
'all' and 'clean', and you may set CONFIG=Release to build a release version.
Note that if you have previously built a Debug config you must 'make clean'
before building a Release config.

The Makefile supports Icecream for distributed builds, so if you have two or
more reasonably homogenous (both Linux, but they may even use different
distributions) machines on a LAN, you can significantly reduce build times.
See URL: http://wiki.kde.org/tiki-editpage.php?page=icecream

If you are running a multicore machine, you can also run jobs in parallel
using the -j option of make. For example, make -j 4 compiles 4 files at a time
in parallel.

*Required Libraries*

$lib := directory where the compiler looks for lib files;
  typically = /usr/lib .
$include := the same for header files (= /usr/include).
$GL := directory containing OpenGL headers.
  typically one of /usr/include/GL or /usr/X11R6/include/GL
$binaries := directory containing system/ and data/

- OpenGL extensions:
  on older Linuxes, if you receive errors about OpenGL extensions,
  copy libraries/opengl/include/GL/glext.h to $GL.

- SpiderMonkey [javascript]
  The source is *not* compatible with the mozjs libraries included in mozilla
  browser distributions (that is the multi-threaded version - we're using the
  single-threaded version). The solution is to build your own version and make
  sure that thread support is not enabled when you do it (non-threaded is the
  default - so don't change it to threaded)
  
  ... download the source
  choose one from http://ftp.mozilla.org/pub/mozilla.org/js/
  ... unpack in a temporary directory (let's call it $temp)
  ... chdir into $temp/js/src/
  ... make -f Makefile.ref all
  ... make -f Makefile.ref export
    This last step will have put all the built binaries, libraries and headers
	in $temp/dist/Linux_All_DBG.OBJ
  ... chdir into $temp/dist/Linux_All_DBG.OBJ
  ... copy everything under include/ into $include
  ... copy everything under lib/ into $lib
  ... run ldconfig (if you don't, the library might not be found at runtime)
	You are free to copy the binaries under bin/ into your path as well, but it
	won't be neccessary to build the engine.

- OpenAL: [sound]
  you will need the openal, libogg and libvorbis packages for your distribution

- cryptopp
  this package is typically available as libcrypto++; if it isn't, then
  unzip libraries/cryptopp/source_and_build_and_test_files.zip to a temp dir
  copy header files from libraries/cryptopp/include/cryptlib into the same dir
  compile per cryptopp instructions (see website)
  
The following libraries should have packages available for your distribution.
You will need to get the corresponding -dev or -devel package for each library.
- SDL
- boost
- boost-signals
- zlib (libz) [resource decompression]
- libpng [PNG texture loading]
- FAM [file alteration monitor] or gamin
  FAM consists of a daemon and a client library. Both will need to be installed
  to build/run PS. You'll need the devel package for the library too.
  On some distributions, e.g. Ubuntu, FAM has been replaced by gamin.
- Xerces-C++ (xercesc, xerces-c, xerces-c++, whatever your distro might call it)
  If you have to build Xerces-C++ by yourself, just make sure that the headers
  and libraries get installed in $lib and $include. No special config should be
  necessary otherwise.
- wxWidgets (for Atlas)
- The Binary File Descriptor (BFD) library for debug utilities, typically called
  binutils-dev.


*Notes for the Release Person*

We should probably include a good bunch of these libraries in the final linux
release - they should go in binaries/system/. zlib is really the only library
we can rely on being installed.

With the libraries in a non-standard location, LD_LIBRARY_PATH will need to be
set by a script before launching the actual ps executable.

FAM: Pyrogenesis benefits from a running FAM daemon. Either we include the
daemon exec in the distribution and launch it in the start script, or we
just add it as a prereq (i.e. leave it to the user to install).


*Detailed Instructions for Ubuntu 7.10*

On Ubuntu 7.10, you can install the required packages with the following
command:

sudo apt-get install libsdl1.2-dev libxerces27-dev zlib1g-dev libpng12-dev libjpeg62-dev libgamin-dev nasm libwxgtk2.8-dev libboost-dev libboost-signals-dev libopenal-dev libalut-dev libvorbis-dev libogg-dev libcrypto++-dev binutils-dev libnspr4-dev libdevil-dev libavcodec-dev libavformat-dev

You also need build-essential for the make tools and g++.

You will also need to install SpiderMonkey manually. To do this, run:

wget http://ftp.mozilla.org/pub/mozilla.org/js/
tar -xzf js-1.60.tar.gz
cd js/src
JS_THREADSAFE=1 INCLUDES=-I/usr/include/nspr OTHER_LIBS=-L/usr/lib make -f Makefile.ref
make -f Makefile.ref export
cd ../../dist/Linux_All_DBG.OBJ
sudo cp lib/* /usr/lib
sudo mkdir /usr/include/js
sudo cp include/* /usr/include/js
sudo ldconfig

You should now be able to build premake and then build the game itself as per
the instructions above.
