summaryrefslogtreecommitdiff
path: root/build/unix/build.config
diff options
context:
space:
mode:
Diffstat (limited to 'build/unix/build.config')
-rw-r--r--build/unix/build.config780
1 files changed, 780 insertions, 0 deletions
diff --git a/build/unix/build.config b/build/unix/build.config
new file mode 100644
index 0000000..4b4ef3c
--- /dev/null
+++ b/build/unix/build.config
@@ -0,0 +1,780 @@
+# This file is sourced by build.sh
+
+# Include build functions used here
+. build/unix/config_functions
+. build/unix/menu_functions
+. build/unix/ansi
+
+
+uqm_requirements()
+{
+ # Some requirements:
+ have_build_tools_language C || exit 1
+ have_build_tools_language CXX || exit 1
+ have_build_tool LINK || exit 1
+ case "$HOST_SYSTEM" in
+ MINGW32*|cegcc)
+ have_build_tool WINDRES || exit 1
+ ;;
+ Darwin)
+ have_build_tools_language OBJC || exit 1
+ have_build_tool REZ || exit 1
+ ;;
+ esac
+
+
+ # Define WORDS_BIGENDIAN on bigendian machines
+ check_endianness
+
+
+ # Libraries always used
+ have_library SDL 1.2.8
+ have_library SDL2
+ have_library SDL 1.2.8 || have_library SDL2 || exit 1
+ use_library libpng || exit 1
+
+ case "$HOST_SYSTEM" in
+ WINSCW|ARMV5|GCCE)
+ # Symbian does not use dynamically generated config.h
+ return
+ ;;
+ esac
+
+ # Add defines for HAVE_READDIR_R, HAVE_SETENV, HAVE_STRUPR,
+ # HAVE_STRCASECMP, and HAVE_STRICMP
+ define_have_symbol readdir_r
+ define_have_symbol setenv
+ define_have_symbol strupr
+ define_have_symbol strcasecmp
+ define_have_symbol stricmp
+
+ # Check to see whether math functions are available for free.
+ define_have_symbol acos
+
+ # Require either strcasecmp or stricmp.
+ if not have_symbol strcasecmp && not have_symbol stricmp; then
+ echo "Fatal: Your system defines neither strcasecmp() nor stricmp()."
+ exit 1
+ fi
+
+ # If we don't have math for free, add -lm to LDFLAGS.
+ if not have_symbol acos; then
+ LDFLAGS="$LDFLAGS -lm"
+ fi
+
+ # Add defines for HAVE_ISWGRAPH, HAVE_WCHAR_T, and HAVE_WINT_T
+ define_have_symbol iswgraph
+ define_have_type wchar_t
+ define_have_type wint_t
+
+ # Add defines for HAVE_GETOPT_LONG and HAVE_REGEX_H
+ define_have_symbol getopt_long
+ define_have_header regex.h
+
+ # If we have the regex header, see if we need to link it specially
+ case "$HOST_SYSTEM" in
+ MINGW32*)
+ LDFLAGS="$LDFLAGS -lregex"
+ ;;
+ esac
+
+ # Add define for HAVE__BOOL
+ define_have_type _Bool
+
+ # Add an environment variable for MACRO_WIN32 and MACRO___MINGW32__
+ define_have_macro WIN32
+ define_have_macro __MINGW32__
+
+ if [ -n "$MACRO___MINGW32__" ]; then
+ USE_WINSOCK=1
+ fi
+}
+
+uqm_prepare_config()
+{
+ # Describe the menu:
+ MENU_main_ITEMS="debug graphics sound mikmod ovcodec netplay joystick \
+ ioformat accel threadlib"
+ case "$HOST_SYSTEM" in
+ Darwin|WINSCW|ARMV5|GCCE)
+ # Installation directory not modifiable
+ ;;
+ MINGW32*|cegcc)
+ # No install procedure available for MinGW
+ ;;
+ *)
+ MENU_main_ITEMS="$MENU_main_ITEMS install_path"
+ ;;
+ esac
+ MENU_main_TITLE="Main menu"
+ MENU_main_ITEM_debug_TYPE=CHOICE
+ MENU_main_ITEM_graphics_TYPE=CHOICE
+ MENU_main_ITEM_sound_TYPE=CHOICE
+ MENU_main_ITEM_mikmod_TYPE=CHOICE
+ MENU_main_ITEM_ovcodec_TYPE=CHOICE
+ MENU_main_ITEM_netplay_TYPE=CHOICE
+ MENU_main_ITEM_joystick_TYPE=CHOICE
+ MENU_main_ITEM_ioformat_TYPE=CHOICE
+ MENU_main_ITEM_accel_TYPE=CHOICE
+ MENU_main_ITEM_threadlib_TYPE=CHOICE
+ MENU_main_ITEM_install_path_TYPE=MENU
+
+ CHOICE_debug_OPTIONS="nodebug debug strictdebug"
+ CHOICE_debug_TITLE="Type of build"
+ CHOICE_debug_OPTION_nodebug_TITLE="Optimised release build"
+ CHOICE_debug_OPTION_nodebug_ACTION='nodebug_action'
+ nodebug_action() {
+ case "$HOST_SYSTEM" in
+ WINSCW)
+ CCOMMONFLAGS="$CCOMMONFLAGS -O2 -d NDEBUG"
+ ;;
+ ARMV5)
+ CCOMMONFLAGS="$CCOMMONFLAGS -O3 -Otime -DNDEBUG"
+ ;;
+ GCCE)
+ CCOMMONFLAGS="$CCOMMONFLAGS -O3 -DNDEBUG"
+ ;;
+ *)
+ CCOMMONFLAGS="$CCOMMONFLAGS -O3 -DNDEBUG"
+ ;;
+ esac
+ DEBUG=0
+ }
+ CHOICE_debug_OPTION_debug_TITLE="Debugging build"
+ CHOICE_debug_OPTION_debug_ACTION='debug_action'
+ debug_action() {
+ case "$HOST_SYSTEM" in
+ WINSCW)
+ CCOMMONFLAGS="$CCOMMONFLAGS -g -O0 -W all -d DEBUG -d _DEBUG"
+ ;;
+ ARMV5|GCCE)
+ CCOMMONFLAGS="$CCOMMONFLAGS -g -O0 -DDEBUG -D_DEBUG"
+ ;;
+ *)
+ CCOMMONFLAGS="$CCOMMONFLAGS -g -O0 -W -Wall -DDEBUG"
+ LDFLAGS="$LDFLAGS -O0"
+ ;;
+ esac
+ DEBUG=1
+ }
+ CHOICE_debug_OPTION_strictdebug_TITLE="Debug + strict compile checks"
+ CHOICE_debug_OPTION_strictdebug_ACTION='strictdebug_action'
+ strictdebug_action() {
+ case "$HOST_SYSTEM" in
+ WINSCW)
+ CCOMMONFLAGS="$CCOMMONFLAGS -g -O0 -W all -d DEBUG -d _DEBUG"
+ ;;
+ ARMV5|GCCE)
+ CCOMMONFLAGS="$CCOMMONFLAGS -g -O0 -DDEBUG -D_DEBUG"
+ ;;
+ *)
+ CCOMMONFLAGS="$CCOMMONFLAGS -g -O0 -DDEBUG -W -Wall"
+# CCOMMONFLAGS="$CCOMMONFLAGS -O1"
+ # This is needed for -Wunitialized with gcc 3.4
+ CCOMMONFLAGS="$CCOMMONFLAGS -Wcast-qual -Wmissing-declarations \
+ -Wwrite-strings -Wimplicit -Wreturn-type -Wformat \
+ -Wswitch -Wcomment -Wchar-subscripts \
+ -Wparentheses -Wcast-align -Wuninitialized"
+ CFLAGS="$CFLAGS -Wbad-function-cast -Wmissing-prototypes \
+ -Wstrict-prototypes"
+ # CFLAGS is for flags not valid in C++.
+ CFLAGS="$CFLAGS -Wdeclaration-after-statement"
+ # Until we abandon MSVC 6
+# CCOMMONFLAGS="$CCOMMONFLAGS -Waggregate-return"
+ # It's not unreasonable to return structs at times.
+# CCOMMONFLAGS="$CCOMMONFLAGS "-Wpointer-arith"
+ # Some standard header won't even compile with this on
+# CCOMMONFLAGS="$CCOMMONFLAGS -Wshadow"
+ # This gives absurd conflicts with standard files,
+ # like from 'y0 and y1'
+# CCOMMONFLAGS="$CCOMMONFLAGS -Werror"
+ # We shouldn't do this until we actually nail them
+ # all in the original code. Then we can enforce them
+ # on ourselves.
+# CCOMMONFLAGS="$CCOMMONFLAGS -pedantic-errors -ansi -trigraphs" # ANSI
+# CCOMMONFLAGS="$CCOMMONFLAGS -Wnested-externs"
+ # We know they're in the code, and though we'd like to
+ # get rid of them, they're not bugs.
+# CCOMMONFLAGS="$CCOMMONFLAGS -Winline"
+ # This gives too many warnings which we can do nothing
+ # about, obscuring legitimate warnings.
+ CFLAGS=`echo $CFLAGS`
+ CXXFLAGS=`echo $CXXFLAGS`
+ CCOMMONFLAGS=`echo $CCOMMONFLAGS`
+ # Remove all the unnecessary spaces from the flags vars
+ # for more readable messages.
+ LDFLAGS="$LDFLAGS -O0"
+ ;;
+ esac
+ DEBUG=1
+ }
+ case "$HOST_SYSTEM" in
+ ARMV5|WINSCW|GCCE)
+ CHOICE_debug_DEFAULT=nodebug
+ ;;
+ *)
+ CHOICE_debug_DEFAULT=debug
+ ;;
+ esac
+
+
+ CHOICE_graphics_OPTIONS="pure opengl sdl2"
+ CHOICE_graphics_TITLE="Graphics Engine"
+ CHOICE_graphics_OPTION_pure_TITLE="SDL1 without OpenGL graphics support"
+ CHOICE_graphics_OPTION_pure_ACTION='graphics_pure_action'
+ CHOICE_graphics_OPTION_pure_PRECOND='have_library SDL 1.2.8'
+ graphics_pure_action() {
+ CFLAGS="$CFLAGS -DGFXMODULE_SDL -DSDL_DIR=SDL"
+ CCOMMONFLAGS="$CCOMMONFLAGS -DGFXMODULE_SDL"
+ GFXMODULE=sdl
+ HAVE_OPENGL=0
+ use_library SDL 1.2.8
+ }
+ CHOICE_graphics_OPTION_opengl_TITLE="SDL1 with OpenGL graphics support"
+ CHOICE_graphics_OPTION_opengl_ACTION='graphics_opengl_action'
+ CHOICE_graphics_OPTION_opengl_PRECOND="have_library SDL 1.2.8 && have_library opengl"
+ graphics_opengl_action() {
+ CFLAGS="$CFLAGS -DGFXMODULE_SDL -DHAVE_OPENGL -DSDL_DIR=SDL"
+ GFXMODULE=sdl
+ HAVE_OPENGL=1
+ use_library SDL 1.2.8 && use_library opengl
+ }
+ CHOICE_graphics_OPTION_sdl2_TITLE="SDL2 with modern graphics support"
+ CHOICE_graphics_OPTION_sdl2_ACTION='graphics_sdl2_action'
+ CHOICE_graphics_OPTION_sdl2_PRECOND='have_library SDL2'
+ graphics_sdl2_action() {
+ CFLAGS="$CFLAGS -DGFXMODULE_SDL -DSDL_DIR=SDL2"
+ GFXMODULE=sdl
+ HAVE_OPENGL=0
+ use_library SDL2
+ }
+ if have_library SDL2; then
+ CHOICE_graphics_DEFAULT=sdl2
+ elif have_library opengl; then
+ CHOICE_graphics_DEFAULT=opengl
+ else
+ CHOICE_graphics_DEFAULT=pure
+ fi
+
+ CHOICE_sound_OPTIONS="mixsdl openal"
+ CHOICE_sound_TITLE="Sound backend"
+ CHOICE_sound_OPTION_mixsdl_TITLE="Use MixSDL for sound (internal)"
+ CHOICE_sound_OPTION_mixsdl_ACTION=sound_mixsdl_action
+ sound_mixsdl_action() {
+ SOUNDMODULE=mixsdl
+ }
+ CHOICE_sound_OPTION_openal_TITLE="Include OpenAL support (experimental)"
+ CHOICE_sound_OPTION_openal_PRECOND="have_library openal"
+ CHOICE_sound_OPTION_openal_ACTION=sound_openal_action
+ sound_openal_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DHAVE_OPENAL"
+ SOUNDMODULE=openal
+ use_library openal
+ }
+ CHOICE_sound_DEFAULT=mixsdl
+
+ CHOICE_ovcodec_OPTIONS="standard tremor none"
+ CHOICE_ovcodec_TITLE="Ogg Vorbis codec"
+ CHOICE_ovcodec_OPTION_standard_TITLE="Xiph libogg + libvorbis"
+ CHOICE_ovcodec_OPTION_standard_PRECOND="have_library vorbisfile"
+ CHOICE_ovcodec_OPTION_standard_ACTION=ovcodec_standard_action
+ ovcodec_standard_action() {
+ use_library vorbisfile
+ OGGVORBIS=vorbisfile
+ }
+ CHOICE_ovcodec_OPTION_tremor_TITLE="Tremor (avoids floating point math)"
+ CHOICE_ovcodec_OPTION_tremor_PRECOND="have_library tremor"
+ CHOICE_ovcodec_OPTION_tremor_ACTION=ovcodec_tremor_action
+ ovcodec_tremor_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DOVCODEC_TREMOR"
+ OGGVORBIS=tremor
+ use_library tremor
+ }
+ CHOICE_ovcodec_OPTION_none_TITLE="No Ogg Vorbis support"
+ CHOICE_ovcodec_OPTION_none_ACTION=ovcodec_none_action
+ ovcodec_none_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DOVCODEC_NONE"
+ OGGVORBIS=none
+ }
+ CHOICE_ovcodec_DEFAULT=standard
+
+ CHOICE_mikmod_OPTIONS="internal external"
+ CHOICE_mikmod_TITLE="Tracker music support"
+ CHOICE_mikmod_OPTION_internal_TITLE="Included libmikmod"
+ CHOICE_mikmod_OPTION_internal_ACTION=mikmod_internal_action
+ mikmod_internal_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DUSE_INTERNAL_MIKMOD"
+ USE_INTERNAL_MIKMOD=1
+ }
+ CHOICE_mikmod_OPTION_external_TITLE="System libmikmod"
+ CHOICE_mikmod_OPTION_external_PRECOND="have_library libmikmod"
+ CHOICE_mikmod_OPTION_external_ACTION=mikmod_external_action
+ mikmod_external_action() {
+ USE_INTERNAL_MIKMOD=""
+ use_library libmikmod
+ }
+ CHOICE_mikmod_DEFAULT=internal
+
+ CHOICE_joystick_OPTIONS="enabled disabled"
+ CHOICE_joystick_TITLE="Joystick support"
+ CHOICE_joystick_OPTION_enabled_TITLE="enabled"
+ #CHOICE_joystick_OPTION_enabled_PRECOND="have_symbol SDL_Joystick"
+ # TODO: Check whether SDL has joystick support.
+ CHOICE_joystick_OPTION_enabled_ACTION=joystick_enabled_action
+ joystick_enabled_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DHAVE_JOYSTICK"
+ }
+ CHOICE_joystick_OPTION_disabled_TITLE="disabled"
+ case "$HOST_SYSTEM" in
+ ARMV5|WINSCW|GCCE)
+ CHOICE_joystick_DEFAULT=disabled
+ ;;
+ *)
+ CHOICE_joystick_DEFAULT=enabled
+ ;;
+ esac
+
+
+ CHOICE_netplay_OPTIONS="none full ipv4"
+ CHOICE_netplay_TITLE="Network Supermelee support"
+ CHOICE_netplay_OPTION_none_TITLE="disabled"
+ CHOICE_netplay_OPTION_none_ACTION=netplay_none_action
+ netplay_none_action() {
+ NETPLAY=""
+ }
+ CHOICE_netplay_OPTION_full_TITLE="IPv4 and IPv6"
+ CHOICE_netplay_OPTION_full_PRECOND="have_library netlibs"
+ CHOICE_netplay_OPTION_full_ACTION=netplay_full_action
+ netplay_full_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DNETPLAY=NETPLAY_FULL"
+ if [ -n "$MACRO_WIN32" ]; then
+ LDFLAGS="$LDFLAGS -lws2_32"
+ fi
+ NETPLAY="FULL"
+ use_library netlibs
+ }
+ CHOICE_netplay_OPTION_ipv4_TITLE="IPv4; no IPv6"
+ CHOICE_netplay_OPTION_ipv4_PRECOND="have_library netlibs"
+ CHOICE_netplay_OPTION_ipv4_ACTION=netplay_ipv4_action
+ netplay_ipv4_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DNETPLAY=NETPLAY_IPV4"
+ NETPLAY="IPV4"
+ use_library netlibs
+ }
+ CHOICE_netplay_DEFAULT=full
+
+ CHOICE_ioformat_OPTIONS="stdio stdio_zip"
+ CHOICE_ioformat_TITLE="Supported file i/o methods"
+ CHOICE_ioformat_OPTION_stdio_TITLE="Only direct file i/o"
+ CHOICE_ioformat_OPTION_stdio_zip_TITLE="Direct & .zip file i/o"
+ CHOICE_ioformat_OPTION_stdio_zip_PRECOND="have_library zlib"
+ CHOICE_ioformat_OPTION_stdio_zip_ACTION="ioformat_stdio_zip_action"
+ ioformat_stdio_zip_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DHAVE_ZIP=1"
+ USE_ZIP_IO=1
+ use_library zlib
+ }
+ CHOICE_ioformat_DEFAULT=stdio_zip
+
+ CHOICE_accel_OPTIONS="asm plainc"
+ CHOICE_accel_TITLE="Graphics/Sound optimizations"
+ CHOICE_accel_OPTION_asm_TITLE="Platform acceleration (asm, etc.)"
+ CHOICE_accel_OPTION_asm_ACTION="accel_asm_action"
+ accel_asm_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DUSE_PLATFORM_ACCEL"
+ USE_PLATFORM_ACCEL=1
+ }
+ CHOICE_accel_OPTION_plainc_TITLE="Only plain C code"
+ CHOICE_accel_OPTION_plainc_ACTION="accel_plainc_action"
+ accel_plainc_action() {
+ USE_PLATFORM_ACCEL=0
+ }
+ CHOICE_accel_DEFAULT=asm
+
+ CHOICE_threadlib_OPTIONS="sdl pthread"
+ CHOICE_threadlib_TITLE="Thread library"
+ CHOICE_threadlib_OPTION_sdl_TITLE="SDL-controlled thread library"
+ CHOICE_threadlib_OPTION_sdl_ACTION="threadlib_sdl_action"
+ threadlib_sdl_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DTHREADLIB_SDL"
+ THREADLIB="SDL"
+ }
+ CHOICE_threadlib_OPTION_pthread_TITLE="Pthread thread library"
+ CHOICE_threadlib_OPTION_pthread_PRECOND="have_library pthread"
+ CHOICE_threadlib_OPTION_pthread_ACTION="threadlib_pthread_action"
+ threadlib_pthread_action() {
+ CCOMMONFLAGS="$CCOMMONFLAGS -DTHREADLIB_PTHREAD"
+ THREADLIB="PTHREAD"
+ use_library pthread
+ }
+ CHOICE_threadlib_DEFAULT=sdl
+
+ MENU_install_path_ITEMS="install_prefix install_bindir install_libdir \
+ install_sharedir"
+ MENU_install_path_TITLE="Installation paths"
+ MENU_install_path_ITEM_install_prefix_TYPE=INPUT
+ MENU_install_path_ITEM_install_bindir_TYPE=INPUT
+ MENU_install_path_ITEM_install_libdir_TYPE=INPUT
+ MENU_install_path_ITEM_install_sharedir_TYPE=INPUT
+
+ INPUT_install_prefix_DEFAULT="/usr/local/games"
+ INPUT_install_prefix_TITLE="Installation prefix"
+ INPUT_install_prefix_VALIDATOR=validate_path
+ INPUT_install_prefix_ACTION='eval INSTALL_PREFIX=$MENU_install_prefix_VALUE'
+
+ INPUT_install_bindir_DEFAULT='$prefix/bin'
+ INPUT_install_bindir_TITLE="Location for binaries"
+ INPUT_install_bindir_VALIDATOR=validate_path
+
+ INPUT_install_libdir_DEFAULT='$prefix/lib'
+ INPUT_install_libdir_TITLE="Location for non-sharable data"
+ INPUT_install_libdir_VALIDATOR=validate_path
+
+ INPUT_install_sharedir_DEFAULT='$prefix/share'
+ INPUT_install_sharedir_TITLE="Location for sharable data"
+ INPUT_install_sharedir_VALIDATOR=validate_path
+}
+
+uqm_do_config()
+{
+ # Show the menu and let people set things
+ do_menu MENU main "$BUILD_WORK/config.state"
+ echo "Configuration complete."
+}
+
+uqm_process_config() {
+ menu_process MENU main
+
+ # Set INSTALL_LIBDIR, INSTALL_BINDIR, and INSTALL_SHAREDIR to the specified
+ # values, replacing '$prefix' to the prefix set.
+ local prefix
+ prefix="$INPUT_install_prefix_VALUE"
+ eval INSTALL_BINDIR="${INPUT_install_bindir_VALUE%/}/"
+ eval INSTALL_LIBDIR="${INPUT_install_libdir_VALUE%/}/"
+ eval INSTALL_SHAREDIR="${INPUT_install_sharedir_VALUE%/}/"
+
+ # Set the content dir
+ CONTENTDIR="${INSTALL_SHAREDIR}uqm/content"
+
+ CCOMMONFLAGS="$CCOMMONFLAGS -I\"$BUILD_WORK\""
+
+ # Set C++ only flags
+ # These allow use of C++ without the standard library
+ CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions -nostdinc++"
+
+ # At this point, all the compiler flags must be set.
+ CFLAGS="$CFLAGS $CCOMMONFLAGS"
+ CXXFLAGS="$CXXFLAGS $CCOMMONFLAGS"
+ CCOMMONFLAGS=""
+
+ # Export the HAVE_ symbols to config_unix.h, using config_unix.h.in
+ # as template (or config_win.h/config_win.h.in).
+ SUBSTITUTE_VARS="$HAVE_SYMBOLS CONTENTDIR"
+ case "$HOST_SYSTEM" in
+ MINGW32*|CYGWIN*)
+ SUBSTITUTE_FILES="config_win.h"
+ ;;
+ *)
+ SUBSTITUTE_FILES="config_unix.h"
+ ;;
+ esac
+ substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES src "$BUILD_WORK"
+
+ # Make build.vars from build.vars.in, substituting variables.
+ SUBSTITUTE_VARS="BUILD_SYSTEM HOST_SYSTEM CFLAGS CXXFLAGS LDFLAGS LINK \
+ PREPROC_C MKDEP_C COMPILE_C \
+ PREPROC_CXX MKDEP_CXX COMPILE_CXX \
+ PREPROC_OBJC MKDEP_OBJC COMPILE_OBJC \
+ MAKE ECHON SED DEBUG JOYSTICK NETPLAY \
+ OGGVORBIS SOUNDMODULE USE_INTERNAL_MIKMOD \
+ GFXMODULE HAVE_OPENGL \
+ HAVE_GETOPT_LONG HAVE_REGEX_H_FLAG \
+ USE_ZIP_IO USE_PLATFORM_ACCEL THREADLIB USE_WINSOCK \
+ INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR \
+ REZ WINDRES $HAVE_SYMBOLS"
+ SUBSTITUTE_FILES="build.vars"
+ substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES . "$BUILD_WORK"
+
+ # Make 'uqm' shell script from uqm-wrapper.in, substituting variables.
+ SUBSTITUTE_VARS="INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR uqm_NAME"
+ SUBSTITUTE_FILES="uqm-wrapper"
+ substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES build/unix "$BUILD_WORK"
+}
+
+uqm_load_config()
+{
+ do_menu_load MENU main "$BUILD_WORK/config.state"
+}
+
+uqm_save_config()
+{
+ do_menu_save MENU main "$BUILD_WORK/config.state"
+}
+
+uqm_pre_build() {
+ : # Nothing to do
+}
+
+uqm_post_build() {
+ local TARGET_FILE
+ local RFORK
+ eval TARGET_FILE="\$BUILD_WORK/\${${BUILD_PROJECT}_NAME}"
+ RFORK="src/res/darwin/${BUILD_PROJECT}.r"
+
+ test -f "$TARGET_FILE" || return
+
+ # If run from the command-line on OSX, the Window Manager
+ # will refuse to recognize the window unless the program has
+ # a resource fork; so we give it a small one here. When
+ # run from inside an application package, this step is useless
+ # (the cp command in the install step implicitly strips off
+ # the resource fork, in fact)
+ case "$HOST_SYSTEM" in
+ Darwin)
+ $REZ "$RFORK" -o "$TARGET_FILE"
+ ;;
+ ARMV5)
+ cp "$TARGET_FILE" "$BUILD_EPOCROOT/epoc32/release/armv5/urel/"
+ cd src/symbian
+ cmd \\/C bldmake bldfiles
+ cmd \\/C abld build armv5 urel
+ cd ../..
+ ;;
+ WINSCW)
+ cp "$TARGET_FILE" "$BUILD_EPOCROOT/epoc32/release/winscw/udeb/"
+ cd src/symbian
+ cmd \\/C bldmake bldfiles
+ cmd \\/C abld build winscw udeb
+ cd ../..
+ ;;
+ GCCE)
+ cp "$TARGET_FILE" "$BUILD_EPOCROOT/epoc32/release/armv5/urel/"
+ cd src/symbian
+ cmd \\/C bldmake bldfiles
+ cmd \\/C abld build gcce urel
+ cd ../..
+ ;;
+ esac
+}
+
+uqm_pre_install() {
+ : # Nothing to do
+}
+
+uqm_install() {
+ case "$HOST_SYSTEM" in
+ Darwin)
+ uqm_install_osx
+ ;;
+ MINGW32*)
+ echo "No installation procedure available for MinGW."
+ echo "Read the manual for more information."
+ ;;
+ cegcc*)
+ echo "No installation procedure available for Windows CE."
+ echo "Read the manual for more information."
+ ;;
+ WINSCW)
+ uqm_install_winscw
+ ;;
+ ARMV5)
+ uqm_install_armv5
+ ;;
+ GCCE)
+ uqm_install_gcce
+ ;;
+ *)
+ generic_install
+ ;;
+ esac
+}
+
+uqm_post_install() {
+ : # Nothing to do
+}
+
+uqm_install_osx() {
+ local VERSION HEADERS HEADER HEADER_FILE FRAMEWORK
+
+ VERSION=`head -1 content/version`
+
+ INSTROOT="$BUILD_WORK/The Ur-Quan Masters.app/Contents"
+
+ # Make directory structure
+ echo "Creating directory structure..." >&2
+ mkdirhier "$INSTROOT/MacOS" 0755
+ mkdirhier "$INSTROOT/Frameworks" 0755
+ mkdirhier "$INSTROOT/Resources/content/addons" 0755
+ mkdirhier "$INSTROOT/Resources/content/packages" 0755
+
+ # Install misc. resources, icons, etc.
+ echo "Installing miscellaneous resources..." >&2
+ $SED "s/@@VERSION@@/$VERSION/g" src/res/darwin/Info.plist > \
+ "$INSTROOT/Info.plist"
+ cp src/res/darwin/PkgInfo "$INSTROOT"
+ cp "src/res/darwin/The Ur-Quan Masters.icns" "$INSTROOT/Resources"
+
+ # Find Frameworks and copy them into the application.
+ echo "Copying dependancy Frameworks..." >&2
+ HEADERS="Ogg/Ogg.h SDL/SDL.h SDL_image/SDL_image.h Vorbis/vorbisfile.h"
+ if [ "$uqm_SOUNDMODULE" = openal ]; then
+ HEADERS="$HEADERS OpenAL/al.h"
+ fi
+ for HEADER in $HEADERS; do
+ HEADER_FILE=`basename $HEADER`
+ eval FRAMEWORK=`echo '' | \
+ $PREPROC_C -D__MACOSX__ -include $HEADER - | \
+ awk '(/'$HEADER_FILE'/ && $2 == 1) { print $3; exit }' | \
+ $SED 's/.Headers.*$/"/'`
+ cp -a "$FRAMEWORK" "$INSTROOT/Frameworks"
+ done
+
+ # Install game content (it should probably make a zipfile)
+ echo "Creating base content package..." >&2
+ cp content/version "$INSTROOT/Resources/content/"
+ (cd content && \
+ find . -type f -not -path '*/CVS*' -not -path '*/.svn*' -not -path '*/addons*' -print | \
+ $SED 's/^..//' | zip -X -q -n .ogg -8 -@ uqm-${VERSION}-prv-content.uqm)
+ mv content/uqm-$VERSION-prv-content.uqm "$INSTROOT/Resources/content/packages"
+
+ echo "Creating voice content package..." >&2
+ (cd content/addons && \
+ find 3dovoice -type f -not -path '*/CVS*' -not -path '*/.svn*' -print | \
+ zip -X -q -n .ogg -8 -@ ../uqm-${VERSION}-prv-voice.uqm)
+ mv content/uqm-$VERSION-prv-voice.uqm "$INSTROOT/Resources/content/addons"
+
+ echo "Creating 3do music content package..." >&2
+ (cd content/addons && \
+ find 3domusic -type f -not -path '*/CVS*' -not -path '*/.svn*' -print | \
+ zip -X -q -n .ogg -8 -@ ../uqm-${VERSION}-prv-3domusic.uqm)
+ mv content/uqm-$VERSION-prv-3domusic.uqm "$INSTROOT/Resources/content/addons"
+
+ # Install game binary (and rename it)
+ echo "Installing executable..." >&2
+ cp $uqm_NAME "$INSTROOT/MacOS/The Ur-Quan Masters"
+}
+
+uqm_install_winscw() {
+ local PRIVATE_DIR
+
+ PRIVATE_DIR="$BUILD_EPOCROOT/epoc32/winscw/c/private/A000A0C3"
+
+ uqm_create_symbian_content_package
+
+ echo "Creating directory structure to $PRIVATE_DIR ..."
+ mkdir "$PRIVATE_DIR"
+ mkdir "$PRIVATE_DIR/content"
+ mkdir "$PRIVATE_DIR/content/packages"
+ mkdir "$PRIVATE_DIR/userdata"
+
+ echo "Copying data to $PRIVATE_DIR ..."
+ cp content/version "$PRIVATE_DIR/content"
+ cp content.uqm "$PRIVATE_DIR/content/packages"
+ cp src/symbian/uqm.cfg "$PRIVATE_DIR/userdata"
+}
+
+uqm_install_armv5() {
+ uqm_create_symbian_content_package
+
+ cd src/symbian
+ cmd \\/C makekeys -cert -expdays 9999 -password asdfgh -len 2048 -dname "CN=UQM OR=Ur-Quan Masters CO=FI" uqm.key uqm.cer
+ cmd \\/C makesis uqm-armv5.pkg uqm.sis
+ cmd \\/C signsis -v uqm.sis uqm.sisx uqm.cer uqm.key asdfgh
+ mv uqm.sisx ../..
+ cd ../..
+}
+
+uqm_install_gcce() {
+ uqm_create_symbian_content_package
+
+ cd src/symbian
+ cmd \\/C makekeys -cert -expdays 9999 -password asdfgh -len 2048 -dname "CN=UQM OR=Ur-Quan Masters CO=FI" uqm.key uqm.cer
+ cmd \\/C makesis uqm-gcce.pkg uqm.sis
+ cmd \\/C signsis -v uqm.sis uqm.sisx uqm.cer uqm.key asdfgh
+ mv uqm.sisx ../..
+ cd ../..
+}
+
+uqm_create_symbian_content_package() {
+ if [ -e "content.uqm" ]; then
+ echo "Content package already exists, skipping"
+ return
+ fi
+
+ local ANIFILE ANIFILES DNAME ESC_DNAME FONTDIR FONTDIRS FONTFILES
+
+ echo "Building temporary content directory..."
+ cd content
+ find . -type f -not -path '*/CVS*' -not -path '*/.svn*' -not -path './addons*' -not -name "version" -not -name '*.png' -not -name '*.ani' -not -name '*.sml' -not -name '*.med' -not -name '*.mid' -not -name '*.big' >../content.lst
+ tar cf ../tmp1.tar -T ../content.lst
+ rm ../content.lst
+ mkdir ../tmpcontent
+ cd ../tmpcontent
+ tar xf ../tmp1.tar
+ rm ../tmp1.tar
+ cd ../content
+
+ echo "Packing ani files..."
+ ANIFILES=`find . -regex ".*\(sml\|med\|mid\|big\|ani\)$"`
+ for ANIFILE in $ANIFILES; do
+ DNAME=`dirname $ANIFILE`/
+ ESC_DNAME=`echo $DNAME|sed "s/\//\\\\\\\\\//g"`
+ mkdirhier ../tmpcontent/$DNAME 0755
+ zip -q -j -0 ../tmpcontent/$ANIFILE $ANIFILE `cat $ANIFILE|cut -d " " -f 1|sed s/^/$ESC_DNAME/`
+ done
+
+ echo "Packing font files..."
+ FONTDIRS=`find . -name '*.fon'`
+ for FONTDIR in $FONTDIRS; do
+ FONTFILES=`find $FONTDIR -name '*.png'|sort -t. +2.4 -n`
+ zip -q -j -0 ../tmpcontent/$FONTDIR $FONTFILES
+ done
+
+ cd ../tmpcontent
+ echo "Building content package..."
+ zip -q -r ../content.uqm .
+
+ cd ..
+ echo "Removing temporary content directory..."
+ rm -rf tmpcontent
+}
+
+uqm_clean() {
+ case "$HOST_SYSTEM" in
+ MINGW32*|CYGWIN*)
+ rm -f "$BUILD_WORK/config_win.h"
+ ;;
+ ARMV5|GCCE)
+ local TARGET_FILE
+ eval TARGET_FILE="\$BUILD_WORK/\${${BUILD_PROJECT}_NAME}"
+
+ rm -f "$BUILD_WORK/config_unix.h"
+ rm -f "$BUILD_EPOCROOT/epoc32/release/armv5/urel/$TARGET_FILE"
+ rm -f $TARGET_FILE uqm.sisx content.uqm
+
+ cd src/symbian
+ cmd \\/C abld reallyclean
+ cmd \\/C bldmake clean
+ rm -f uqm.sis uqm.key uqm.cer
+ cd ../..
+ ;;
+ WINSCW)
+ local TARGET_FILE
+ eval TARGET_FILE="\$BUILD_WORK/\${${BUILD_PROJECT}_NAME}"
+
+ rm -f "$BUILD_WORK/config_unix.h"
+ rm -f "$BUILD_EPOCROOT/epoc32/release/winscw/udeb/$TARGET_FILE"
+ rm -f $TARGET_FILE content.uqm
+
+ cd src/symbian
+ cmd \\/C abld reallyclean
+ cmd \\/C bldmake clean
+ cd ../..
+ ;;
+ *)
+ rm -f "$BUILD_WORK/config_unix.h"
+ ;;
+ esac
+}
+
+