Installation - Liquid War 6
Description: Liquid War 6

Next: Extra maps, Previous: Getting the game, Up: User's manual

### 2.3 Installation

This section covers installation from source. Other ways of installing the program are not described here.

#### 2.3.1 Requirements

All these libraries are mandatory to compile the game. Liquid War 6 won't compile, let alone run, without them. Some of them could probably be replaced by equivalent tools, but this would certainly require a programming effort and some changes in Liquid War 6 source code.

- GCC. Liquid War 6 does require the GNU C Compiler to build, while other compilers might be able to build the game, this is untested.
- Gomp. Liquid War 6 uses OpenMP `#pragma` directives, this should help the game run faster on SMP systems.
- GNU Make. Liquid War 6 might and certainly does use GNU Make extensions.
- GNU C library. Sounds obvious, but you need a standard C library. It happens that glibc has some rather usefull extensions (yes, as of 2006, some vendors continue to offer C libraries without `snprintf`...) and Liquid War 6 might use them. In a general manner, Liquid War 6 is part of and designed for GNU. You might however manage to compile it with limited libc support, this is the case with mingw32 for instance but, do it at your own risk.
- Perl. Some Makefile commands require Perl. You don't need any Perl devel packages, and you can probably use any Perl 5.x version, since no fancy recent feature of Perl is used. Just plain Perl.
- Guile. Possibly the most required library, since Liquid War 6 is a scheme program which uses a set of functions coded in standard C. You need at least Guile 1.8.
- GNU MP. GMP is a free library for arbitrary precision arithmetic, required by Guile.
- libgc. This is a a garbage collector library, recent versions of Guile might require this so in case your version of Guile requires it, then Liquid War 6 will need it too.
- ltdl. This library, which comes with libtool, provides a portable alternative to `dlopen` and `dlclose`. Check that you have a `/usr/include/ltdl.h` file, or install the corresponding package.
- zlib. Required by other libraries, but can also be used directly by Liquid War 6 to compress network messages for instance.
- expat. Used to read and write XML files, which contain constants and configuration data.
- libpng. Liquid War 6 uses libpng to read levels (maps), not to speak of other optional libraries (SDL and the rest) who need it themselves.
- libjpeg. Maps can also be provided as jpeg files, so libjpeg is required as well.
- SQLite 3. Used to handle the list of available servers.

#### 2.3.2 Optional libraries

While all these libraries are theorically optional (the game will successfully compile without them), you'll obviously need, for instance, one graphics backend. Otherwise, you'll simply have no display. This is not acceptable. As of today, one can reasonnably consider all SDL-related libraries are required. The rest is truely optional.

- libcunit. Provides (hopefully) more readable test output. It's not strictly mandatory but still highly recommended. Building without is just allowed in case some rare and bizarre platform would not have a libcunit port.
- ncurses. Required by readline, needs to be there otherwise readline might not be detected properly on some systems.
- GNU readline. Used to handle input on the console. Console is not absolutely mandatory, but it's a must-have if you want to hack the game. Console unavailable does not mean you won't get anything on stdout but, the interactive script shell just won't work.
- GTK+. Used to display error/critical messages, so that users who launch the game by clicking on a icon (that is, not from the console) are still visually informed of important messages.
- Mesa. This library provides an API similar to OpenGL and enables 2-D and 3-D drawing.
- SDL. SDL is used to set up a working OpenGL environnement, and handle input (mouse and keyboard).
- SDL_image. This SDL extension is used to read textures and other graphics from disk.
- FreeType 2. This library is required by SDL_ttf, to draw fonts.
- SDL_ttf. This SDL extension is used to draw fonts. It is UTF-8 enabled.
- libcaca. This library transforms bitmaps into ascii-art images, allowing an alternative style of display, TTY compatible.
- libcsound. While this tool is not used yet, it is meant to be the final sound backend, as CSounds offers great power to the composer, enabling truely dynamically generated sound & music. For now Liquid War 6 tries to detect csound 4 but as the mainstream stable release is now 5 an update is needed. It will probably be updated/fixed (Liquid War 6 using csounds 5) some day, for now you can safely *not* install csound on your system and enjoy all the possibilities of the game.
- SDL_mixer. This SDL extension is used to allow dynamic mixing of sounds, and it also provides a builtin `OGG/Vorbis` file renderer.
- libcURL. Used to handle HTTP requests, the idea being not to re-invent the wheel but use a robust standards-compliant generic library.

#### 2.3.3 Optional tools

Those tools are used upstream to maintain the game, you normally do not need them to build the game “as is” but if you modify the source code and hack the game, you might be interested in installing them.

- Perl 5. Liquid War 6 uses Perl for many tedious task, including, but not limited to, parsing documentation.
- GNU Indent. Code is regularly indented using the script `src/indent.sh` which calls `indent` automatically and recursively on the whole source tree.
- md5sum (GNU core utilities) This is used to stamp the source code and help tracking exact build versions.
- Doxygen. Used to generate documentation concerning C structs, more precisely, include the struct members documentation into the official texinfo manual.
- xsltproc. Used to post-process Doxygen output and transform it to texinfo.
- dot. Used to generate Doxygen call graphs.
- Google Performance Tools. This tool is convenient to optimize the program and find out what parts of it take most of the CPU power to execute.
- lcov. Gives nice output about code coverage.
- GNU global. Shows global references through the code.
- pmccabe. Cyclomatic complexity, shows what part of the code are bloated.
- Valgrind. Usefull to track down memory leaks and many other programming errors.

#### 2.3.4 Installing requirements using RPM/DEB packages

You might find it convenient not to install all the requirements from source, but use your favorite GNU/Linux distribution packages.

On an RPM based GNU/Linux system, a typical command (tested with Fedora 15 “Lovelock”) could be:

         yum install \
         make gcc glibc glibc-devel binutils \
         libgomp \
         guile guile-devel gmp gmp-devel libgc1c2 libgc-dev \
         libtool libtool-ltdl libtool-ltdl-devel \
         zlib zlib-devel expat expat-devel \
         libpng libpng-devel libjpeg libjpeg-devel \
         sqlite sqlite-devel \
         ncurses ncurses-devel readline readline-devel \
         libGL libGL-devel libGLU libGLU-devel \
         SDL SDL-devel SDL_image SDL_image-devel \
         SDL_mixer SDL_mixer-devel \
         freetype freetype-devel SDL_ttf SDL_ttf-devel \
         libcaca libcaca-devel \
         libcurl libcurl-devel \
         gtk2-devel \
         perl lcov global valgrind graphviz gv \
         texinfo-tex \
         indent emacs doxygen libxml \
         CUnit CUnit-devel \
         rpm-build

On a DEB package based GNU/Linux system this command (tested with Debian 6.0 “squeeze”) would be:

         apt-get install \
         make autoconf automake \
         gcc libc6 libc6-dev binutils \
         libgomp1 \
         guile-2.0 guile-2.0-dev guile-2.0-libs libgmp10 libgmp3-dev \
         libtool libltdl7 libltdl-dev \
         zlib1g zlib1g-dev libexpat1 libexpat1-dev \
         libpng12-0 libpng12-dev libjpeg8 libjpeg-dev \
         libsqlite3-0 libsqlite3-dev \
         libncurses5 libncurses5-dev libreadline6 libreadline6-dev \
         libgl1-mesa-glx libgl1-mesa-dri libgl1-mesa-dev libglu1-mesa libglu1-mesa-dev \
         libgles2-mesa libgles2-mesa-dev \
         libsdl1.2debian libsdl1.2-dev libsdl-image1.2 libsdl-image1.2-dev \
         libsdl-mixer1.2 libsdl-mixer1.2-dev \
         libfreetype6 libfreetype6-dev libsdl-ttf2.0-0 libsdl-ttf2.0-dev \
         libcaca0 caca-utils libcaca-dev \
         libcurl4-gnutls-dev \
         libgtk2.0-dev \
         perl lcov global valgrind graphviz gv \
         texinfo texlive-base texlive-generic-extra \
         texlive-fonts-recommended texlive-latex-extra \
         indent emacs doxygen xsltproc pmccabe \
         libcunit1-ncurses libcunit1-ncurses-dev \
         google-perftools libgoogle-perftools-dev \
         git git2cl \
         zip nsis \
         debhelper devscripts

Note that those requirements really depend on the exact distribution you have, package names may vary from one to another.

#### 2.3.5 Compiling

Liquid War 6 uses GNU Automake, Autoconf and GNU Libtool.

Once all the requirements are installed, run:

         ./configure
         make
         make install

Liquid War 6 supports the standard `./configure --prefix=/my/path` option (in fact, it supports much more than that) so you can install the game in any directory. You do not need to be `root` to install Liquid War 6.