Menu

Developer Notes

The Aleph One wiki has migrated! Please see:
https://github.com/Aleph-One-Marathon/alephone/wiki/Developer-Notes

Compiling on Linux

See the Linux Install Instructions page for information on dependencies. Autoconf and automake are the only developer-specific dependencies.

To build from an SVN snapshot, run ./autogen.sh instead of ./configure. You can then run the usual make and make install steps. To create archives for distribution, run make dist (for the source tarball) and make datadist (for the scenario downloads).

Compiling on OS X

Release binaries were built using Xcode 3.2.6. Xcode 3 no longer runs on current OS X releases, but the command line tools still work fine. To build signed releases compatible with Gatekeeper, you should use the command line option under 10.10 (Yosemite). To update the project, use a Mac running 10.9 or earlier.

Frameworks

You need all dependency frameworks installed in /Library/Frameworks before you can build. You can:

  1. copy frameworks from a current Aleph One application bundle, or
  2. build them using instructions and scripts in the frameworks section of the SVN repository.

If you choose the first option, you'll have everything required except boost.framework, which is not distributed with Aleph One. You can download a copy from the Aleph One web site.

Applications

The Xcode project for the release applications is PBProjects/AlephOne.xcodeproj. From the command line, switch to the PBProjects directory and, assuming Xcode 3 is installed in /Developer, run:

/Developer/usr/bin/xcodebuild -project AlephOne.xcodeproj -configuration "Deployment (Universal)" -alltargets

Products will be located in PBProjects/build, including the disk images used for distribution. You need to be a registered Mac developer and have created a "Developer ID Distribution" certificate. Otherwise, the process will fail at the signing step. If you wish to build unsigned apps, remove all codesign lines in the project's Run Script build phases.

For daily development in trunk, I use PBProjects/AlephOne-Xcode4.xcodeproj with the latest Xcode. Run the "Aleph One" target, "Development" configuration. Other configurations and targets may not be kept up to date.

Compiling on Windows

Windows binaries are built from Linux or OS X, using the MXE cross-compilation toolchain. Native Windows compilation is not tested or supported currently.

The list of required MXE packages is similar to the Linux build. The configure process will alert you to missing dependencies. A custom makefile is used for ffmpeg, to limit the number of codecs included. In addition, a few patches were applied on top of the stable MXE release. You can download detailed instructions for replicating the MXE environment used to build version 1.2.

I use MacPorts under OS X to install the necessary MXE dependencies, and then use the following script to set up the environment and build:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/sh

MINGW_ROOT=/Users/$USER/Source/mxe-git
MINGW_PREFIX=$MINGW_ROOT/usr
MINGW_TARGET=i686-pc-mingw32
MINGW_PATH="$MINGW_PREFIX/$MINGW_TARGET/bin:$MINGW_PREFIX/bin"
STD_PATH="/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11/bin"

PATH="$MINGW_PATH:$STD_PATH" SDL_CONFIG="$MINGW_PREFIX/$MINGW_TARGET/bin/sdl-config" ACLOCAL_FLAGS="-I$MINGW_PREFIX/$MINGW_TARGET/share/aclocal" LDFLAGS=-Wl,-S LIBS="-lfreetype -ltiff -ljpeg -lpng -lz -lstdc++ -lws2_32 -lbz2 -liphlpapi" ./autogen.sh --prefix=$MINGW_PREFIX --target=$MINGW_TARGET --host=$MINGW_TARGET
PATH="$MINGW_PATH:$STD_PATH" make
PATH="$MINGW_PATH:$STD_PATH" make dist windist datadist

If your MXE setup is correct, you'll see the following summary from configure:

.    Enabled: OpenGL rendering
.    Enabled: built-in Lua scripting
.    Enabled: SDL_image support
.    Enabled: FFmpeg playback and film export
.  Not found: libmad MP3 playback
.  Not found: libsndfile audio decoding
.    Enabled: libvorbis Ogg/Vorbis music playback
.  Not found: SMPEG movie playback
.    Enabled: Speex net mic playback
.  Not found: ALSA net mic transmission
.    Enabled: cURL for HTTP communication
.    Enabled: zziplib support
.    Enabled: libpng PNG screenshot support

The make windist command will create the archives used for distribution. For normal testing of new features, make clean and make are sufficient to rebuild the executables.

Release checklist

  1. Update Source_Files/Misc/alephversion.h
  2. Fill out "SVN" placeholders in Lua documentation
    • cd docs
    • sed -e 's/version="SVN"/version="20150619"/g' -i '' Lua.xml Lua_HUD.xml
    • xsltproc Lua.xsl Lua.xml > Lua.html
    • xsltproc Lua.xsl Lua_HUD.xml > Lua_HUD.html
  3. Make final builds and archives for distribution, as documented above
  4. Test and commit version changes above
    • svn commit -m "release 1.2"
  5. Tag release in SVN
    • export SVNROOT=svn+ssh://jeremiahmorris@svn.code.sf.net/p/marathon/code
    • svn copy -m "release 1.2" $SVNROOT/trunk $SVNROOT/tags/release-20150619
  6. Upload files to SourceForge
    • 4 Mac disk images (1 standalone Aleph One, 3 bundled app + data)
    • 7 Windows zip files (1 standalone Aleph One, 3 bundled exe + data, 3 exe only)
    • 3 data-only zip files
    • 1 source tarball
    • 1 release notes document (README.md)
  7. Set files as default downloads in SourceForge
  8. Update includes/versions.php on web site with release info
  9. Announce on Pfhorums, Story forum, marathon-devel

Compatibility notes

Film playback compatibility is handled in Source_Files/CSeries/FilmProfile.[cpp,h]. When making a gameplay-related change after a release, set up a new profile and add handling for the newly-obsoleted profile.

Multiplayer compatibility is handled in Source_Files/Network/network_capabilities.[cpp,h]. When making gameplay-related or net protocol-related changes, bump kGameworldVersion and/or kGameworldM1Version as necessary.

Scenario compatibility is handled in MML, in the <scenario id="..."> attribute. The ID should be changed whenever MML or data updates affect gameplay.

Version checks are made directly to marathon.sourceforge.net. When updating the web site, be sure to keep the current version-check URLs functional.

Metaserver and other online functions communicate with lhowon.org, which is hosted separately and run by active Aleph One developers. Coordinate any new online features with the lhowon.org admins.


Related

Wiki: Linux Install Instructions

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.