Build for MacOSX

From X-Moto
Jump to: navigation, search

Català - Español

Using MacPorts (The new DarwinPorts)

Install dependencies

sudo port install -c libpng jpeg libsdl libsdl_mixer libsdl_ttf libsdl_net lua ode

(for me I had to run this instead)

sudo /opt/local/bin/port install -c libpng jpeg libsdl libsdl_mixer libsdl_ttf lua ode libsdl_net gettext



export CPPFLAGS="-I/opt/local/include -I/usr/X11R6/include"
export LDFLAGS="-framework OpenGL -framework Cocoa -L/opt/local/lib -L/usr/X11R6/lib -lstdc++ -lSDLmain -lSDL -lSDL_mixer -lpng"

(i also had to export the following)

export SDL_CONFIG="/opt/local/bin/sdl-config"

Configure (defining the path to install, ex.: /usr/local/xmoto) and Compile

./configure --prefix=/path_to_install


make install


cd /path_to_install/bin

Building XMoto using Fink

Install dependencies needed

sudo apt-get -y install bzip2
sudo apt-get -y install libjpeg
sudo apt-get -y install libpng3
sudo apt-get -y install sdl
sudo apt-get -y install sdl-mixer
sudo fink -y install lua

The stable version of Fink don't have a ode port, so we have to build it:

Download the source and extract:

curl -O

Let's build it (install on tmp so it doesn't change nothing on system)

cd ode-0.8
./configure prefix=/tmp/libs
make && make install

Anatomy of a Mac OSX Application
		Frameworks - it will store libraries needed to run
		MacOS - it will store the binary
		Resources - it will store the data needed to run xmoto
			appIcon.icns - application icon

When we perform a double-click, we are calling the binary from the directory, so our data will be on


This is a single line command, but aligned for better readability

CPPFLAGS="-I/sw/include -I/tmp/libs/include" 
LDFLAGS="-L/sw/lib -L/tmp/libs/lib"

Compiling the cvs version using fink

This section applies to Mac OS X 10.4.8 on an iBook G4. You should know the basic commands of the shell (


The dependencies are as usual, so look in "Build from cvs" for what packages you need to install first. Of course, you don't need to install g++ from fink, neither OpenGL (as Apple provides an OpenGL framework).

To find all the packages in fink, you will probably need to enable the unstable tree; see the Fink FAQ on how to do this (or give FinkCommander a try, where it is only a mouse click). You should install the packages named "libgettext3-dev", "libgettext3-shlibs" and "gettext" as well (maybe some combination of these solves the src/Makefile-problem mentioned below, I'll have to check that).

Getting the cvs version

Next, get the cvs version of X-Moto. If that's your first access to that version, you need to do a full checkout:

cvs login
cvs -z3 co -P xmoto

If you're asked for a password, simply hit return.

If you already have got an older cvs version of X-Moto lying on your hard disc, you can simply go into the directory and type

cvs update


cd into the directory "xmoto" and configure it:

sh ./bootstrap
./configure --prefix=/Users/foo/bar --with-apple-opengl-framework --with-enable-www=1 --with-enable-zoom=1 CPPFLAGS="-I/sw/include" LDFLAGS="-L/sw/lib"

where --prefix= is optional and can be omitted if you are sure you want to install xmoto into the root directory. I would suggest using a prefix such as /Users/your_username/xmoto/ in order to be able to remove the whole xmoto tree with one command and to not interfere with Mac OS X files and directories.

The next step is needed on my iBook G4 running Mac OS X 10.4, but maybe it works for you without it. If it does, please append the output of "fink list -i gettext" and "uname -p" to this section.

Hack a Makefile to work around a gettext-related bug

Apparently there is a problem that the configure-script doesn't quite recognize how to link correctly with libgettext, although it claims it does. So, what you have to do is: Open src/Makefile in your favorite text editor, find the line that says

LIBS = -lcurl -lode -llualib -llua -lSDL_mixer -lbz2 -lpng -ljpeg -lz

and append ${LIBINTL} so the updated line looks like

LIBS = -lcurl -lode -llualib -llua -lSDL_mixer -lbz2 -lpng -ljpeg -lz ${LIBINTL}

Save the file.

Make and install

This step is the same as in the MacPorts/Compilation part:

make && make install

This should work flawlessly now. If you get a linker error ("ld error") saying something about "intl" oder "gettext", you probably skipped the src/Makefile editing step.

After this command has finished (it may take some time), you should have a working cvs-version of X-Moto installed and should be able to start it from the shell with <prefix>/bin/xmoto.

Script model to build universal builds


# Script that helps to build universal binary programs

# pass the directory where the source is
if  $# -eq 0 ; then echo "missing directory"; exit 1; else cd $1; fi

NCPU=`sysctl -n hw.ncpu`
GENERIC_FLAGS="-Os -pipe -fomit-frame-pointer -ffast-math"
CONFIGURE_GENERIC="--prefix=${BUILD_PATH} --enable-cross-compile"

CONFIGURE_PPC="--build=`uname -p`-apple-darwin --host=powerpc-apple-darwin"
FLAGS_PPC="-mcpu=powerpc ${GENERIC_FLAGS}"
CC_PPC="gcc-4.0 -arch ppc"
CXX_PPC="g++-4.0 -arch ppc"
LDFLAGS_PPC="${LDFLAGS_GENERIC} -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch ppc"

CONFIGURE_X86="--build=`uname -p`-apple-darwin --host=i386-apple-darwin"
FLAGS_X86="-march=pentium-m -mtune=pentium-m -mfpmath=sse ${GENERIC_FLAGS}"
CC_X86="gcc-4.0 -arch i386"
CXX_X86="g++-4.0 -arch i386"
LDFLAGS_X86="${LDFLAGS_GENERIC} -isysroot /Developer/SDKs/MacOSX10.4u.sdk -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386"

#### PPC BUILD ####
echo "./configure ppc"
ctest=`./configure $CONFIGURE_GENERIC $CONFIGURE_PPC CC="${CC_PPC}" CXX="${CXX_PPC}" CFLAGS="${FLAGS_PPC}" LDFLAGS="${LDFLAGS_PPC}" 1>/dev/null; echo $?`
if  $ctest -ne 0 ; then
	echo "./configure failed"
	exit 1

echo "Compilation started"
ctest=`make -j$NCPU &>compilation.log; echo $?`

if  $ctest -ne 0 ; then
	echo "An error happen, see compilation.log"
	exit 1

make install
mv -f ${BUILD_PATH} ${BUILD_PATH}.ppc

make clean

#### INTEL BUILD ####
echo "./configure x86"
ctest=`./configure $CONFIGURE_GENERIC $CONFIGURE_X86 CC="${CC_X86}" CXX="${CXX_X86}" CFLAGS="${FLAGS_X86}" LDFLAGS="${LDFLAGS_X86}" 1>/dev/null; echo $?`
if  $ctest -ne 0 ; then
	echo "./configure failed"
	exit 1

echo "Compilation started"
ctest=`make -j$NCPU &>compilation.log; echo $?`

if  $ctest -ne 0 ; then
	echo "An error happen, see compilation.log"
	exit 1

make install
mv -f ${BUILD_PATH} ${BUILD_PATH}.x86

Vasi's Mac packaging

The linked article has documentation on my build process for X-Moto, which deals properly with SDKs and such.