# 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 }