Copyright © 2011 COR Entertainment, LLC.

Last update: 2015-01.

About this Document

Warning
This is an informal document and assumes general knowledge of programming and specific knowledge of Alien Arena development.

This document is intended to be informal reference for Alien Arena development. Its reason for being is it organize general information, notes, and details about development tools, build procedures, packaging, etc. In 2010, the Windows build was converted to use Microsoft Visual Studio 2010 and the Unix/Linux version was converted to use GNU Autotools. Also, some work was done on MinGW and Mac OS X/Darwin X11 builds. A big reason for creating this document was to organize the important details about all that in one place.

The source for this document uses AsciiDoc. Briefly, AsciiDoc is a frontend for a variety of XSL document programs and runs on Linux. Linux distributions have it in their package managers. Running it on Windows apparently requires using Cygwin, unfortunately. In some ways, it is "DocBook-for-Dummies" and is relatively easy to edit.

The home page for AsciiDoc is http://www.methods.co.nz/asciidoc/.

The SourceForge repository is http://sourceforge.net/projects/asciidoc/.

In the alienarena/docs/docsrc directory this is the command used to generate output.

$ asciidoc -b html5 -a toc2  devref-en.asciidoc

Subversion Repository

Alien Arena resources are stored in a Subversion (SVN) repository at http://icculus.org. To browse the repository, go to http://svn.icculus.org/alienarena/trunk. Use a Subversion client program for downloading. Read access to the repository is not restricted. Irritant administers commit access.

Caution
The SVN versions of the .sln and .vcxproj files are official. Do not commit these without clearance from Irritant. Doing so could cause confusion and consternation.

Visual C++ 2010 Build

Steps for building Release version with Visual C:

  • Install TortoiseSVN.

  • Checkout Alien Arena from SVN.

  • Install and register Microsoft Visual C++ Express 2010.

  • Install the OpenAL SDK.

  • Install the libraries from the .zip files.

  • Install the libcurl patch.

  • Run premake to generate config.h for libode.

  • Open the .sln file in Visual Studio.

  • Select the Release build and run it.

  • Copy VS2010\bin\Release\alienarena.exe to the top directory.

Note
For the libode config.h (and maybe some other files), an alternative is to get a copy from someone who has a working installation.

Visual C++ 2013 Express Build

As of 2014-11, this is known to work, but is not in the SVN repository. The plan is to convert to VC++ 2013 in conjunction with the SDL2 port (if that is successful). In conjunction with that, other (non-SDL2) libraries should be updated.

Windows Subversion Client

Install TortoiseSVN, the free Subversion client from Tigris. The website is http://tortoisesvn.net/

To download Alien Arena from the SVN Repository:

  • In Windows Explorer, go to the Computer → C: folder.

  • Right click in the window and select SVN Checkout in the context menu.

  • For the URL of repository, enter: svn://icculus.org/alienarena/trunk.

  • For the Checkout directory, enter: C:\alienarena_w32.

  • Leave the Checkout Depth at Fully Recursive, Omit Externals unchecked, and Revision at Head Revision.

  • Click OK, and let TortoiseSVN do its thing.

Microsoft Visual C++ 2010 Express

Microsoft Visual C++ 2010 Express is part of Microsoft Visual Studio 2010 and is provided free of charge. Registration is required. Download Visual C++ 2010 Express from the Microsoft website (http://www.microsoft.com/) and install it using the default setups.

Running programs compiled with VC++ 2010 requires the redistributable dll, msvcr100.dll. Some systems may not have it installed; a copy is provided in SVN.

Libraries

Extract the libraries in lib_zipfiles to VS2010\libsrc.

Patch for curl-7.20.1.

Unzip libcurl_patch.zip and replace curl-7.20.1/lib/setup_once.h. The original file, renamed setup_once_unpatched.h, is included in the .zip for reference.

Using premake for ODE config

A version of premake that supports VC++ 2010 is available at http://industriousone.com/premake. Look there and on the ODE website for clues.

Some commentary on libraries

Note
(2014-11) It is likely that with VC++ 2013 we will include source subdirectories or pre-built versions for the 3rd party libraries.

There is a rationale for keeping the libraries in the original .zip archives in SVN, rather than extracting them into SVN. For one thing, they are large and it would add a lot of clutter to the repository. Also, the build is setup to allow for multiple co-existing versions when libraries are updated. It would be good to be able to bring in a new version’s .zip into SVN and get it working before making the switch in the official build.

All the libraries supply build procedures for a variety of environments. But, most did not have VC10 builds at the time they were setup. The solution was to create projects in Visual Studio for each of them. This has advantages, but is more complicated than just using a supplied build. It does take some work to get the build details correct and consistent.

OpenAL 1.1 SDK

Download the OpenAL SDK from OpenAL.org: http://www.openal.org/. (Redirects to the CreativeLabs site.) In the Download section, get the OpenAL 1.1 Core SDK. Install it in the default location; the build procedure is setup to look for it there.

Caution
On an x86 system, for example an old XP box, you will need to change the path to use "Program files (x86)" instead of the default.

Run the oalinst.exe program to setup the OpenAL driver, if you have not done that previously.

The oalinst.exe program installs whatever is required for OpenAL to use a particular systems sound hardware. It is included in the Alien Arena Windows distribution and is in SVN.

Directory Tree

Here are the directories and files related to the Windows build.

alienarena_w32\
alienarena_w32.sln

Solution file. Mostly just a list of the Projects in VS2010\.

alienarena_w32.props

Project property file. Generated and editted with the Visual Studio Property Manager. It is fairly easy, and sometimes more convenient, to manually edit it. Projects can inherit compiler options, etc. from here; which makes it much easier to make changes that affect all projects.

msvcr100.dll

Redistributable for Visual C++ 2010.

oalinst.exe

OpenAL installer.

vs2010\

Build directory for Windows version of Alien Arena.

Project Files

Project files. Generated and editted with Visual Studio. Somewhat easy to manually edit.

  • crx.vcxproj

  • game.vcxproj

  • freetype.vcxproj

  • libcurl.vcxproj

  • libjpeg.vcxproj

  • libode.vcxproj

  • libogg.vcxproj

  • libopcode.vcxproj

  • libvorbis.vcxproj

  • libvorbisfile.vcxproj

  • zlib.vcxproj

bin\

Target directory. The alienarena.exe executable is placed here. There are RELEASE and DEBUG subdirectories created by the build procedure.

lib\

Target directory. The game and other libraries are placed here. There are RELEASE and DEBUG subdirectories created by the build procedure.

libsrc\

Source directory for libraries.

include\

Header files. The build procedure copies header files from the libsrc subdirectories to these directories for most of the libraries.

  • config.h — config.h for alienarena.exe and game.lib.

  • curl\

  • jpeg\

  • ode\

  • ogg\

  • vorbis\

  • freetype-config\

    • ftconfig.h

    • ftheader.h

    • ftmodule.h

    • ftoption.h

    • ftstdlib.h

The build procedure populates the include directories for the various libraries. Makes the build more complicated, but should make it easier to work with a new library version in parallel with a current one.

The config.h file

The config.h file for alienarena.exe and game.lib is an artifact from the Unix/Linux build. In Unix/Linux, config.h is generated by the configure procedure. For Windows, it is manually editted.

Unix/Linux Build

Introduction

Beginning in August of 2010 the Unix/Linux build for Alien Arena was converted from a Makefile to Autotools. There are two main goals for the implementation: One, to improve support for the various Linux distributions' package maintainence process. The other, to improve portability and ease of installation for users.

It is important to recognize that the goal of GNU Autotools is NOT to make the developer’s job easier. From a coder’s viewpoint, it is not, nor is it intended to be, the ideal software construction tool. The mere mention of Autotools elicits groans from most developers. There are alternatives, but for open source software, none have developed to the point of being generally adopted as standard. There are some who disagree with that statement, but they are mistaken.

For development purposes it is sometimes better to use a plain makefile. See Developer’s Not-Autotools Makefile below.

Reading List for Autotools

(Suggestion: Start with the Autotools Mythbuster.)

  • John Calcote. Autotools: A Practitioner’s Guild to GNU Autoconf, Automake, and LibTool.

  • Diego E. "Flameeyes" Petteno. Autotools Mythbuster http://www.flameeyes.eu/autotools-mythbuster/.

  • David MacKenzie, Ben Elliston, Akim Demaille. Autoconf: Creating Automatic Configuration Scripts For version 2.65, 4 November 2009.

  • David MacKenzie, Tom Tromey, Alexandre Duret-Lutz. GNU Automake. For version 1.11.1, 8 December 2009.

  • Richard M. Stallman, Roland McGrath, Paul D. Smith. GNU Make: A Program for Directing Recompilation. GNU make Version 3.81, April 2006.

  • Gordon Matzigkeit, Alexandre Oliva, Thomas Tanner, Gary V. Vaughan. GNU Libtool. For version 2.2.6, 1 August 2008.

  • Richard Stallman, et al. GNU Coding Standards. last updated June 10, 2008.

  • Edited by Rusty Russell, Daniel Quinlan, Christopher Yeoh. Filesystem Hierarchy Standard Filesystem Hierarchy Standard Group.

  • Gary V. Vaughan, Ben Elliston, Tom Tromey and Ian Lance Taylor. GNU AutoConf, AutoMake, and LibTool "The Goat Book", Version 1.5, February 2006. http://sourceware.org/autobook.

Build and Installation Changes for 7.66+

These are changes for the future release following 7.66 that are in the SVN repository.

User’s Data Directory

The user-writeable data and configuration directory is, by default, $HOME/.local/share/cor-games. The program honors the XDG_DATA_HOME environment variable. See:

For development testing, the user-writeable directory may be temporarily changed by running like this:

$ XDG_DATA_HOME=/someother/directory alienarena

Botinfo Directories

The botinfo resource subdirectory is moved to the data1 directory. There are user-writeable botinfo directories in the game subdirectories. So there is, potentially, an arena/botinfo and a tactical/botinfo in $XDG_DATA_HOME/cor-games.

The shared data installation directory is specified in the build by defining a COR_DATADIR preprocessor symbol. The default is /usr/local/share/alienarena.

  • Capability of separate source and data distribution packages.

  • Silent rules are disabled by default.

  • unix_dist repository directory. Documents are different.

  • the alternate install is eliminated with a better method.

Program Changes in 7.50

(Included here for reference.)

Previous versions had support for configurable DATADIR and LIBDIR installation paths. However, the implementation was not complete; due largely to the file system organization inherited from the Quake source. The installation procedure now uses configure arguments for determining installation paths.

Linux distributions install the game in the /usr hierarchy in conformance with Unix file system standards. The /usr hierarchy requires root privileges for writing, of course. While the game already had support for a user writeable directory, .codered/, in the users home directory, it did not implement a place to write bot information. Therefore, support for a botinfo directory in the user’s home directory was added.

To simplify the installation and to avoid the complications of using a shared library, the game module shared library, game.so, is now a static library. As a result, the LIBDIR installation variable is eliminated. Internally, the interface to the game module retains the dynamic link structure. Thus, it is still possible, in theory, to have a dynamic game.so that overrides the statically linked version. This is not tested nor supported in version 7.50.

Two new functions were added to the server/game interface for file system access. The location of game data files depends on how the game is installed. The code should not make assumptions about the base path since it might be affected by "prefix" and "datadir" configuration options. The game module will now determine all file paths using those functions (eliminating problems where the code assumed the legacy Quake style file system). The additional functions make it possible to place a botinfo directory, in user-writeable file space. The two new functions supply the full filesystem path when given a relative path. The functions are FullPath() and FullWritePath(). They are declared in game/game.h and qcommon/qcommon.h. They are defined in qcommon/files.c.

The name of the stand-alone dedicated server was changed from crded to crx-ded. The purpose was to make it simple to change the name of the executable files using the standard built-in configure option.

Program Changes in 7.60

(Included here for reference.)

With the 7.60 release, the dedicated server name was updated to alienarena-ded.

Subversion Repository

Linux Subversion Client

Install the free Apache (formerly Tigris) Subversion client using your package manager. Or download it from the website at http://subversion.apache.org/ .

To download Alien Arena from the SVN Repository:

  • Create a 'PATH' for installation somewhere in your home directory.

  • Run: svn checkout svn://icculus.org/alienarena/trunk PATH.

For example:

$ cd
$ mkdir alienarena
$ svn checkout svn://icculus.org/alienarena/trunk alienarena

Maintainer’s Guide

Autotools Source Files

These are Autotools-related files that are manually edited:

configure.ac

source file for autoconf.

Makefile.am

top level source file for automake.

source/Makefile.am

source subdirectory source file for automake.

data1/configure.ac

source file for autoconf for generating separate data package.

data1/Makefile.am

data1 top-or-second level source file for automake.

data1/*/Makefile.am

subdirectory Makefiles for data1 subdirectories.

Some Autotools files are just copied without change:

m4/*.m4

m4 macros from the autoconf-archive.

config/compile
config/config.guess
config/config.sub
config/depcomp
config/install-sh
config/missing

auxiliary shell scripts used by configure and Makefiles

Autotools Generated Files

The Alien Arena Autotools build uses Maintainer Mode. The upside of this is that the end user does not need the Autotools programs and can run the well-known ./configure, make, sudo make install procedure. The downside is that if configure is run without --enable-maintainer-mode, some of the generated files will not be updated.

The Generated Files are:

configure

the user’s configure script.

Makefile.in

template for the user’s top directory Makefile.

source/Makefile.in

template for the user’s source subdirectory Makefile.

config/config.h.in

template for the user’s config.h.

aclocal.m4

all the .m4 macros used by configure. generated by aclocal.

The Generated Files need to be regenerated when any of following occur:

  • Source files (.c, .h, etc.) are added, removed or renamed.

  • System libraries are added or removed (in configure.ac, Makefile.am files).

  • Asset files (textures, models, etc.) are added, removed or renamed.

  • Autotools files (configure.ac, Makefile.am, etc.) are modified.

Note There are other intermediate files generated by Autotools. Refer to Autotools documentation.

Autotools Prerequisites

The Autotools packages are:

  • autoconf

  • automake,

  • autoconf-archive

To avoid confusion, developers committing to the repository should all be using the same versions of these packages.

The autoconf-archive is an evolving set of macros maintained on the GNU website. We use a few of these. The file names are normally prefixed with ax_ and the macros prefixed with AX_. Each file has a serial number in a comment. Care should be take not to commit an earlier version of a .m4 file into the SVN m4 subdirectory. If a file we use is updated in the archive, update it in the repository.

After adding new AX_ macros to configure.ac, the .m4 file needs to be added to the m4 subdirectory. This is done with the following command.

$ aclocal -I m4 --force --install

Adding, Removing, Renaming Program Source Files

Source files are modified in the source/Makefile.am file. Modify the source in the applicable *_SOURCE lists. Header (.h) files must be included, because the list is used to generate the tarball.

Certain files may appear in several lists. For example, 'alienarena_SOURCES, alienarena-ded_SOURCES and libgame_a_SOURCES all have qcommon/qfiles.h.

Adding, Removing, Renaming Game Asset Files

There is a set of subdirectory Makefile.am files that contain lists of game resources. These are invoked recursively during the make install and make distcheck procedures. They contain only those resources that are to be included in the distribution tarball.

The downside is that these files needs to be kept up-to-date with additions and deletions. The advantage is that the install program handles the copying of game resources. For make uninstall it handles deletion of what make install installed.

To make modifications, find the appropriate Makefile.am and add, delete or modify the file entry. Makefile syntax requires that there be no trailing spaces after the \. Each entry should be preceeded by one TAB character. The files are listed in (mostly) alphabetical order.

Formerly, the game resource list was a monolithic file (game_data.am). With version 7.60 the number of resources exceeded the command line length limit.

Is this a PITA, or what?

Yes, it is. It would be nice not to have to reconfigure when game assets are added or deleted. It would be fairly straightforward to implement a simpler method, if the SVN repository contained only those resources that were part of the release package. Since that is not an option, any other method would need to have some kind of list of "official" resources. Changing that list might be simpler than editting Makefiles and reconfiguring, but not that much simpler.

Adding or Removing System Libraries

The details of changing the system library settings are way beyond the scope of this document. Some knowledge of autoconf and automake is required.

For common system libraries, there may be a helpful .m4 macro available. These may be part of autoconf (AC_*), or they may be extensions from the Autoconf Archive (AX_*).

Procedures

There are various clean options, besides the usual, that remove more than object files. Some useful ones are:

maintainer-clean

removes most generated files. run autoreconf to rebuild them.

distclean

removes files generated by configure.

Following any changes changes to configure.ac files or Makefile.am files, or after make maintainer-clean do:

$ autoreconf --verbose --force --install
$ ./configure --enable-maintainer-mode <other options>
$ make
$ sudo make install

The --force and --install options to autoreconf are not usually needed. Run autoreconf --help for descriptions. The --install option copies files to m4/ and config/.

For source code only updates, all that is needed are:

$ make clean (usually optional)
$ make
$ sudo make install-exec

After a make distclean, do:

$ ./configure --enable-maintainer-mode <other options>
$ make
$ sudo make install (or install-exec)

When game assets are modified it is usually a good idea to remove the existing assets installed by the last make install. Do this with:

$ sudo make uninstall

If this is done after doing an SVN update and regenerating the installation Makefiles, it may not delete old files. So, it is a good idea to check that the installation directories are cleared. One way to do that:

$ find /usr/local/share/alienarena -type f

There are variations for the configure and make install commands, of course. See below for configure options and compiler options.

The make command runs faster with a multicore CPU if you add the -jN option where N is the number of cores plus one.

Run some tests and, if all this goes well, commit the changed files to the repository. The svn status command will show which files were modified.

If you want to commit only a subset of the changed files, the SVN changelist command is your friend.

Packager’s Guide

Verify Autotools Versions

Verify that your versions of autoconf, automake, and autoconf-archive are current.

The 7.66 release uses autoconf 2.69 and automake 1.14. If more than one dev is committing autotool related changes to SVN, it will be less confusing if all are using the same versions.

As of 2015-01, the "7.66.1" SVN development version is using automake 1.13.4 (because that’s my distro’s default, that’s why.).

Verify Alien Arena Version

Verify that the version number in configure.ac is correct.

Verify Autotools Files

See the Maintainer’s Guide above. Verify that all Autotools-related files are up-to-date.

Export from Subversion Repository

Export from the SVN trunk to a directory for the distribution build.

Verify that the files in config/ and m4/ subdirectories are current. One way to do this is to rename the config/ and m4/ directories and then run:

$ aclocal --force --install -I m4
$ autoreconf --force --install

Compare the files in the new config/ and m4/ with the previous ones. If they match, proceed. If not, then the files in SVN need to be updated. The cleanest thing to do would be to update SVN and do a new export.

As of 2015-01, the only files in m4/ are manually copied. But, in the future it may contain libtool files that are updated by the commands above.

Generate the Distribution Archive

Run this command to build and verify the distribution package:

$ make distcheck

If this succeeds, the alienarena-<version>.tar.gz has been created.

Test the Distribution Package

In a test directory, extract the distribution archive. Run the configure, make, make install sequence. Use the --prefix configure option to install into a test directory.

To test the dedicated server only build, create a subdirectory and build with an alternative test directory. In the subdirectory, configure is invoked with ../configure.

Example

An example for testing distribution package generation:

  • Assuming a development directory in $HOME/alienarena.

  • Generate tarball in $HOME/test_dist

  • Test build and install in $HOME/test_build

  • Installing in /usr/local.

$ cd $HOME/alienarena
$ svn export . $HOME/test_dist
$ cd $HOME/test_dist
$ ./configure
$ make distcheck
$ cd ..
$ mkdir test_build
$ cd test_build
$ mv ../test_dist/alienarena-7.66.1.tar.gz .
$ tar -xzf alienarena-7.66.1.tar.gz
$ cd alienarena-7.66.1
$ ./configure
$ make
$ sudo make install
$ cd ~
$ alienarena

Generate Separate Source and Data Archives

For release, separate source and data archives should be generated in addition to the monolithic archive. This is primarily for the convenience of distro packagers. Distros normally use separate source and data packages; possibly, because the licenses for the source and data are different.

For the source-only package:

$ ./configure --without-data
$ make distcheck
$ mv alienarena-7.66.1.tar.gz alienarena-src-7.66.1.tar.gz
Warning
This will overwrite a previously generated monolithic tarball. Recommended: Do the separate source tarball and rename it first.

For the data1-only package, in the data1 directory:

$ ./configure
$ make distcheck
$ mv alienarena-7.66.1.tar.gz ../alienarena-data-7.66.1.tar.gz

BASH script for distribution tarball generation

This script uses several SVN export commands to retrieve the subset of files needed for the release tarball. It then invokes make distcheck to build the tarballs. Run the script in a RELEASE directory.

The following commands generate the checksums and then run a diff to check for possibly missing files. This compares the repository directories with what is in the tarball. Since, not all repository files are distributed, this requires knowing what files are not supposed to be in the tarball. (But, we are not too picky about putting "extra" stuff in the tarball.)

In the RELEASE directory:

$ mv alienarena/alienarena-<version>.tar.gz .
$ md5sum alienarena-<version>.tar.gz >md5
$ sha1sum alienarena-<version>.tar.gz >sha1
$ tar -xzf alienarena-<version>.tar.gz
$ diff -r -q alienarena alienarena-<version>

The Script:

#!/bin/bash
#
# Alien Arena release tarball generation
#
# --- top level ---
svn export --ignore-externals --non-recursive \
 svn://icculus.org/alienarena/trunk alienarena
###
# --- config/ ---
svn export --ignore-externals \
 svn://icculus.org/alienarena/trunk/config alienarena/config
###
# --- m4/ ---
svn export --ignore-externals \
 svn://icculus.org/alienarena/trunk/m4 alienarena/m4
###
# --- source/ ---
svn export --ignore-externals \
 svn://icculus.org/alienarena/trunk/source alienarena/source
###
# --- unix_dist/ ---
svn export --ignore-externals \
 svn://icculus.org/alienarena/trunk/unix_dist alienarena/unix_dist
###
# --- arena/ ---
svn export --ignore-externals \
 svn://icculus.org/alienarena/trunk/arena alienarena/arena
###
# --- tactical/ ---
svn export --ignore-externals \
 svn://icculus.org/alienarena/trunk/tactical alienarena/tactical
###
# --- data1/ ---
svn export --ignore-externals \
  svn://icculus.org/alienarena/trunk/data1 alienarena/data1
###
# ---
cd alienarena
###
# --- source-only tarball construction ---
./configure --without-data1pkg
make distcheck
mv alienarena-<version>.tar.gz alienarena-src-<version>.tar.gz
make distclean
###
# --- data-only tarball construction ---
cd data1
./configure
make distcheck
mv alienarena-<version>.tar.gz alienarena-data-<version>.tar.gz
make distclean
cd ..
###
# --- combined source and data tarball construction ---
./configure
make distcheck

Configure options

Run ./configure --help to see all configure options. The ones described here are configure options added for Alien Arena.

--disable-client

build dedicated server only, not the client (default:no)

--disable-build-status

hide the status message at the end of the configuration script (default:no)

--with(out)-xf86vm

include XF86 VidMode support (default: check) Note: Needed to support full-screen mode. Note: If with is specified, then the library is required.

--with(out)-xf86dga

include XF86 DGA support (default: without) Note: default is changed from check in version 7.60 Note: DGA appears to only used for mouse pointer input and is optional. It is disabled by default, or when the cvar, in_dgamouse, is set to 0. Note: If with is specified, then the library is required.

--with(out)-zlib

include Zlib compress support (default: check) Note: If with is specified, then the library is required.

--with-icondir=DIR

icon install directory (default:DATADIR/icons)

--with(out)-data1pkg

include game resources from data1 directory (default: with) Note: used for creating separate source and data tarballs.

--disable-assert

supplied by AC_HEADER_ASSERT macro. defines NDEBUG in config.h

GCC Compiler Options

Linux distro’s use a variety of different gcc compile options. These can give more error warnings; and in rare cases program errors.

Also for users who compile from source, there are CPU dependendent options that might give better performance. Might be good to document some of these in the README.

These are commonly used or have been seen in distro builds:

(2015-01 suggestion: see wiki.gentoo.org/wiki/GCC_optimization)

Wall
Wextra

With -Wextra many warnings are produced, especially for unused parameters and signed/unsigned comparisons. With just -Wall, a few unused variable warnings are produced, which are easily fixed. Some bogus uninitialized warnings are produced; it is possible, but annoying, to eliminate these.

O2
O3

Optimization levels. O3 produces different warning messages, so should be tested before releases.

pipe

Use pipes, rather than temp files; speeds up compilation.

m32
m64

Specify 32bit or 64bit build. Only needed when cross-compiling.

march

Set for specific architectures. Might give better performance than generic builds. For example, use -march=native for local builds. Use -march=generic when building release binaries; for Desura, for instance.

FORTIFY_SOURCE

-Wp,D_FORTIFY_SOURCE=2 part of "stack smashing" protection

fexceptions

TBD.

fstack-protector

Part of "stack smashing" protection.

param

--param=ssp-buffer-size=4. Part of "stack smashing" detection.

fasynchronous-unwind-tables

From fedora. TBD.

config.h

The config.h file is auto-generated for configurable builds (e.g Linux). It is manually edited for non-configurable builds (e.g. Windows). The configure.ac file does generate Windows related definitions in config.h so it can be used as a basis for the Windows config.h.

Rather than use symbols built into the compiler these symbols (and some others related to targets) are defined: WIN32_VARIANT and UNIX_VARIANT. This should make it easier to keep system dependent variations organized. It is a good idea, of course, to minimize system dependent conditional compilation in the common code.

Open Dynamics Engine (ODE) Integration

Formerly, we built and linked our own ODE static library. That is no longer the case.

MinGW Build

Experimentally, Alien Arena has been built using MinGW using the Autotools build. Since there was no particular reason to maintain it, the experimental MinGW support was removed from the Autotools build.

Mac OS X / Darwin X11 Build

The Autotools build has support for Mac OS X using the Darwin X11 environment. MacPorts (www.macports.org) has port maintained by "ryandesign". It would be a good idea to consult with him before a release to verify that the Autotools build is correct.

Developer’s Not-Autotools Makefile

(This is way out of date. Included here for reference.)

In the docs/ directory, the file, dev-makefile, is a Makefile intended to support experimental builds. Its primary purpose is to allow custom builds with additional or different sources without having to hack the Autotools build. Documentation on how to customize it is included within the dev-makefile file.

It is simpler to make a full copy of the trunk sources, but that is not necessary. It takes some trickiness setting up vpaths and customizing -I options, but it is possible to do an alternate build with a small subset of sources in an alternate source subdirectory. Good for experimenting with optimizations.

Desura

The information of Desura is in a separate document, devref-desura-en.html. It is generated from a AsciiDoc source in docsrc/devref-desura-en.asciidoc.

Static Analysis

TODO:

Phoronix Test Suite

Some initial experimentation with PTS has been done. It has potential for collecting information about performance on a variety of systems and for regression testing. The current (vers 7.65) benchmarking support in the code needs work. Briefly, 1) running timedemo benchmarks is not worthwhile without knowing what code is covered. 2) a benchmark mode is needed to simplify the configuration. Normally, there should be no network activity, and sound should be disabled. Possible, but inconvenient to do with .cfgs. 3) the benchmark output should be more detailed.

An opinion: It would be nice to be included in set of games Phoronix uses to test hardware. But, there is not much point in that unless we can bring something new to the table.