diff --git a/sc2/ChangeLog b/sc2/ChangeLog index 376068fba..6396aad46 100644 --- a/sc2/ChangeLog +++ b/sc2/ChangeLog @@ -1,4 +1,6 @@ Changes towards version 0.4: +- Restructuring of the unix build scripts. + Also, interrupted dependency builds are now detected. - SvdB - Unix build: Make it possible to use another directory than the current one for putting the build data in (such as build.vars, config.state, the obj/ dir, and the final binary). - SvdB diff --git a/sc2/build/unix/README.packages b/sc2/build/unix/README.packages new file mode 100644 index 000000000..68acfafc2 --- /dev/null +++ b/sc2/build/unix/README.packages @@ -0,0 +1,31 @@ +This file describes the easiest way to use this build system from +a packaging system such as rpm. + +If you want an interactive configuration, you can start the build process +like you would do manually: + ./build.sh uqm +to build the game, and + ./build.sh uqm install +to install it. + + +If you want the configuration to be non-interactive, you'll want to do +the following: execute + ./build.sh uqm config +once. This will generate a 'config.vars' file, which you can then +include in your package. Then when you want to build the game, put this +file the directory pointed to by $BUILD_WORK (default is the current +directory), and do + ./build.sh uqm reprocess_config +to generate all the configuration information for the build, and then + ./build.sh uqm +to build the game, and + ./build.sh uqm install +to install it. + +You may wish to set the environment variable BUILD_WORK to a directory +where the files created in the configuration and build process should be +stored. That way, the source tree will remain clean and no write access +to it is required. + + diff --git a/sc2/build/unix/build.config b/sc2/build/unix/build.config index f4bf8f7df..159feb7b8 100644 --- a/sc2/build/unix/build.config +++ b/sc2/build/unix/build.config @@ -1,223 +1,257 @@ #!/bin/sh -if [ -z "$BUILD_WORK" ]; then - BUILD_WORK=. -fi - # Include build functions used here . build/unix/config_functions . build/unix/menu_functions . build/unix/ansi -# Some requirements: -have_program gcc || exit 1 -COMPILE="$PROG_gcc_FILE" +uqm_requirements() +{ + # Some requirements: + have_program gcc || exit 1 + COMPILE="$PROG_gcc_FILE" -case "$OSNAME" in - MINGW32*) - have_program windres - WINDRES="$PROG_windres_FILE" - ;; -esac + case "$OSNAME" in + MINGW32*) + have_program windres + WINDRES="$PROG_windres_FILE" + ;; + esac -# Define WORDS_BIGENDIAN on bigendian machines -check_endianness + # Define WORDS_BIGENDIAN on bigendian machines + check_endianness -# Libraries used -use_library SDL 1.2.3 || exit 1 -use_library SDL_image || exit 1 -#have_library vorbis || exit 1 -have_library vorbisfile || exit 1 + # Libraries used + use_library SDL 1.2.3 || exit 1 + use_library SDL_image || exit 1 + #have_library vorbis || exit 1 + have_library vorbisfile || exit 1 -# Add defines for HAVE_STRUPR and STRICMP -define_have_symbol strupr -define_have_symbol stricmp + # Add defines for HAVE_STRUPR and STRICMP + define_have_symbol strupr + define_have_symbol stricmp -# Check for getopt.h -define_have_header getopt.h - - -# Describe the menu: -MENU_main_ITEMS="debug graphics sound ioformat install_path" -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_ioformat_TYPE=CHOICE -MENU_main_ITEM_link_TYPE=CHOICE -MENU_main_ITEM_install_path_TYPE=MENU - -CHOICE_debug_OPTIONS="nodebug debug strictdebug" -CHOICE_debug_TITLE="Include debugging information" -CHOICE_debug_OPTION_nodebug_TITLE="No debugging information" -CHOICE_debug_OPTION_nodebug_ACTION='nodebug_action' -nodebug_action() { - CFLAGS="$CFLAGS -O3" - DEBUG=0 + # Check for getopt.h + define_have_header getopt.h } -CHOICE_debug_OPTION_debug_TITLE="Debugging information" -CHOICE_debug_OPTION_debug_ACTION='debug_action' -debug_action() { - CFLAGS="$CFLAGS -g -O0 -W -Wall" - LDFLAGS="$LDFLAGS -O0" - DEBUG=1 + +uqm_prepare_config() +{ + # Describe the menu: + MENU_main_ITEMS="debug graphics sound ioformat install_path" + 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_ioformat_TYPE=CHOICE + MENU_main_ITEM_link_TYPE=CHOICE + MENU_main_ITEM_install_path_TYPE=MENU + + CHOICE_debug_OPTIONS="nodebug debug strictdebug" + CHOICE_debug_TITLE="Include debugging information" + CHOICE_debug_OPTION_nodebug_TITLE="No debugging information" + CHOICE_debug_OPTION_nodebug_ACTION='nodebug_action' + nodebug_action() { + CFLAGS="$CFLAGS -O3" + DEBUG=0 + } + CHOICE_debug_OPTION_debug_TITLE="Debugging information" + CHOICE_debug_OPTION_debug_ACTION='debug_action' + debug_action() { + CFLAGS="$CFLAGS -g -O0 -W -Wall" + LDFLAGS="$LDFLAGS -O0" + DEBUG=1 + } + CHOICE_debug_OPTION_strictdebug_TITLE="Debug info + strict compile checks" + CHOICE_debug_OPTION_strictdebug_ACTION='strictdebug_action' + strictdebug_action() { + CFLAGS="$CFLAGS -O1" # This is needed for -Wunitialized + CFLAGS="$CFLAGS -W -Wall \ + -Wbad-function-cast -Wcast-qual -Wmissing-prototypes \ + -Wstrict-prototypes -Wmissing-declarations \ + -Wwrite-strings -Wimplicit -Wreturn-type -Wformat \ + -Wswitch -Wcomment -Wchar-subscripts \ + -Wparentheses -Wcast-align -Waggregate-return \ + -Winline -Wuninitialized" +# CFLAGS="$CFLAGS "-Wpointer-arith" + # Some standard header won't even compile with this on +# CFLAGS="$CFLAGS -Wshadow" + # This gives absurd conflicts with standard files, + # like from 'y2' +# CFLAGS="$CFLAGS -Werror" + # We shouldn't do this until we actually nail them + # all in the original code. Then we can enforce them + # on ourselves. +# CFLAGS="$CFLAGS -pedantic-errors -ansi -trigraphs" # ANSI +# CFLAGS="$CFLAGS -Wnested-externs" + # We know they're in the code, and though we'd like to get + # rid of them, they're not bugs. + CFLAGS=`echo $CFLAGS` + # Remove all the unnecessary spaces from $CFLAGS, + # for more readable messages. + DEBUG=0 + } + CHOICE_debug_DEFAULT=debug + + CHOICE_graphics_OPTIONS="pure opengl" + CHOICE_graphics_TITLE="OpenGL graphics support" + CHOICE_graphics_OPTION_pure_TITLE="Don't include OpenGL graphics support" + CHOICE_graphics_OPTION_pure_ACTION='graphics_pure_action' + graphics_pure_action() { + CFLAGS="$CFLAGS -DGFXMODULE_SDL" + HAVE_OPENGL=0 + } + CHOICE_graphics_OPTION_opengl_TITLE="Include OpenGL graphics support" + CHOICE_graphics_OPTION_opengl_ACTION='graphics_opengl_action' + CHOICE_graphics_OPTION_opengl_PRECOND="have_library opengl" + graphics_opengl_action() { + CFLAGS="$CFLAGS -DGFXMODULE_SDL -DHAVE_OPENGL" + HAVE_OPENGL=1 + use_library opengl + } + CHOICE_graphics_DEFAULT=opengl + + 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() { + CFLAGS="$CFLAGS -DSOUNDMODULE_SDL" + SOUNDMODULE=mixsdl + use_library vorbisfile +# use_library vorbis + } + 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() { + CFLAGS="$CFLAGS -DHAVE_OPENAL -DSOUNDMODULE_SDL" + SOUNDMODULE=openal + use_library openal + use_library vorbisfile +# use_library vorbis + } + CHOICE_sound_DEFAULT=mixsdl + + 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() { + CFLAGS="$CFLAGS -DHAVE_ZIP=1" + USE_ZIP_IO=1 + use_library zlib + } + CHOICE_ioformat_DEFAULT=stdio_zip + + # Making static binaries is more complicated than this. + # For now, it will have to be done by hand. + #CHOICE_link_OPTIONS="static dynamic" + #CHOICE_link_TITLE="Linking" + #CHOICE_link_OPTION_static_TITLE="Statically linked libraries" + #CHOICE_link_OPTION_static_ACTION='eval LDFLAGS="$LDFLAGS -static"' + #CHOICE_link_OPTION_dynamic_TITLE="Dynamically linked libraries" + #CHOICE_link_DEFAULT=dynamic + + 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 } -CHOICE_debug_OPTION_strictdebug_TITLE="Debug info + strict compile checks" -CHOICE_debug_OPTION_strictdebug_ACTION='strictdebug_action' -strictdebug_action() { - CFLAGS="$CFLAGS -O1" # This is needed for -Wunitialized - CFLAGS="$CFLAGS -W -Wall \ - -Wbad-function-cast -Wcast-qual -Wmissing-prototypes \ - -Wstrict-prototypes -Wmissing-declarations \ - -Wwrite-strings -Wimplicit -Wreturn-type -Wformat \ - -Wswitch -Wcomment -Wchar-subscripts \ - -Wparentheses -Wcast-align -Waggregate-return \ - -Winline -Wuninitialized" -# CFLAGS="$CFLAGS "-Wpointer-arith" - # Some standard header won't even compile with this on -# CFLAGS="$CFLAGS -Wshadow" - # This gives absurd conflicts with standard files, - # like from 'y2' -# CFLAGS="$CFLAGS -Werror" - # We shouldn't do this until we actually nail them - # all in the original code. Then we can enforce them - # on ourselves. -# CFLAGS="$CFLAGS -pedantic-errors -ansi -trigraphs" # ANSI -# CFLAGS="$CFLAGS -Wnested-externs" - # We know they're in the code, and though we'd like to get - # rid of them, they're not bugs. - CFLAGS=`echo $CFLAGS` - # Remove all the unnecessary spaces from $CFLAGS, - # for more readable messages. - DEBUG=0 + +uqm_do_config() +{ + # Show the menu and let people set things + do_menu MENU main "$BUILD_WORK/config.state" + echo "Configuration complete." } -CHOICE_debug_DEFAULT=debug -CHOICE_graphics_OPTIONS="pure opengl" -CHOICE_graphics_TITLE="OpenGL graphics support" -CHOICE_graphics_OPTION_pure_TITLE="Don't include OpenGL graphics support" -CHOICE_graphics_OPTION_pure_ACTION='graphics_pure_action' -graphics_pure_action() { - CFLAGS="$CFLAGS -DGFXMODULE_SDL" - HAVE_OPENGL=0 +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. + prefix="$INPUT_install_prefix_VALUE" \ + eval INSTALL_BINDIR="${INPUT_install_bindir_VALUE%/}/" + prefix="$INPUT_install_prefix_VALUE" \ + eval INSTALL_LIBDIR="${INPUT_install_libdir_VALUE%/}/" + prefix="$INPUT_install_prefix_VALUE" \ + eval INSTALL_SHAREDIR="${INPUT_install_sharedir_VALUE%/}/" + + # Set the content dir + CONTENTDIR="${INSTALL_SHAREDIR}uqm/content" + + CFLAGS="$CFLAGS -I \"$BUILD_WORK\"" + + # Export the HAVE_ symbols to config_unix.h, using config_unix.h.ini + # as template. + SUBSTITUTE_VARS="$HAVE_SYMBOLS CONTENTDIR" + SUBSTITUTE_FILES="config_unix.h" + substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES src "$BUILD_WORK" + + # Make build.vars from build.vars.in, substituting variables. + SUBSTITUTE_VARS="CFLAGS LDFLAGS MAKE DEBUG SOUNDMODULE HAVE_OPENGL \ + USE_ZIP_IO \ + INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR WINDRES" + SUBSTITUTE_FILES="build.vars" + substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES . "$BUILD_WORK" + + # Make 'uqm' shell script from build.vars.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" } -CHOICE_graphics_OPTION_opengl_TITLE="Include OpenGL graphics support" -CHOICE_graphics_OPTION_opengl_ACTION='graphics_opengl_action' -CHOICE_graphics_OPTION_opengl_PRECOND="have_library opengl" -graphics_opengl_action() { - CFLAGS="$CFLAGS -DGFXMODULE_SDL -DHAVE_OPENGL" - HAVE_OPENGL=1 - use_library opengl + +uqm_load_config() +{ + menu_load MENU main "$BUILD_WORK/config.state" } -CHOICE_graphics_DEFAULT=opengl -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() { - CFLAGS="$CFLAGS -DSOUNDMODULE_SDL" - SOUNDMODULE=mixsdl - use_library vorbisfile -# use_library vorbis +uqm_save_config() +{ + menu_save MENU main "$BUILD_WORK/config.state" } -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() { - CFLAGS="$CFLAGS -DHAVE_OPENAL -DSOUNDMODULE_SDL" - SOUNDMODULE=openal - use_library openal - use_library vorbisfile -# use_library vorbis + +uqm_pre_build() { + : # Nothing to do } -CHOICE_sound_DEFAULT=mixsdl -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() { - CFLAGS="$CFLAGS -DHAVE_ZIP=1" - USE_ZIP_IO=1 - use_library zlib +uqm_post_build() { + : # Nothing to do } -CHOICE_ioformat_DEFAULT=stdio_zip -# Making static binaries is more complicated than this. -# For now, it will have to be done by hand. -#CHOICE_link_OPTIONS="static dynamic" -#CHOICE_link_TITLE="Linking" -#CHOICE_link_OPTION_static_TITLE="Statically linked libraries" -#CHOICE_link_OPTION_static_ACTION='eval LDFLAGS="$LDFLAGS -static"' -#CHOICE_link_OPTION_dynamic_TITLE="Dynamically linked libraries" -#CHOICE_link_DEFAULT=dynamic +uqm_pre_install() { + : # Nothing to do +} -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 - - -# Show the menu and let people set things -do_menu MENU main "$BUILD_WORK/config.state" -echo "Configuration complete." - -# Set INSTALL_LIBDIR, INSTALL_BINDIR, and INSTALL_SHAREDIR to the specified -# values, replacing '$prefix' to the prefix set. -prefix="$INPUT_install_prefix_VALUE" \ - eval INSTALL_BINDIR="${INPUT_install_bindir_VALUE%/}/" -prefix="$INPUT_install_prefix_VALUE" \ - eval INSTALL_LIBDIR="${INPUT_install_libdir_VALUE%/}/" -prefix="$INPUT_install_prefix_VALUE" \ - eval INSTALL_SHAREDIR="${INPUT_install_sharedir_VALUE%/}/" - -# Set the content dir -CONTENTDIR="${INSTALL_SHAREDIR}uqm/content" - -CFLAGS="$CFLAGS -I \"$BUILD_WORK\"" - -# Export the HAVE_ symbols to config_unix.h, using config_unix.h.in as template -SUBSTITUTE_VARS="$HAVE_SYMBOLS CONTENTDIR" -SUBSTITUTE_FILES="config_unix.h" -substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES src "$BUILD_WORK" - -# Make build.vars from build.vars.in, substituting variables. -SUBSTITUTE_VARS="CFLAGS LDFLAGS MAKE DEBUG SOUNDMODULE HAVE_OPENGL \ - USE_ZIP_IO \ - INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR WINDRES" -SUBSTITUTE_FILES="build.vars" -substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES . "$BUILD_WORK" - -# Make 'uqm' shell script from build.vars.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_post_install() { + : # Nothing to do +} diff --git a/sc2/build/unix/build.sh b/sc2/build/unix/build.sh index e934a7c36..eede70f25 100644 --- a/sc2/build/unix/build.sh +++ b/sc2/build/unix/build.sh @@ -95,6 +95,9 @@ export "${BUILD_PROJECT}_CFLAGS" "${BUILD_PROJECT}_LDFLAGS" eval ${BUILD_PROJECT}_OBJS=\${${BUILD_PROJECT}_OBJS%/}/ export "${BUILD_PROJECT}_OBJS" +# Load the configuration functions +. build/unix/build.config + if [ $# -lt 2 ]; then build_check_config build_check_dependencies @@ -108,6 +111,10 @@ case "$2" in ;; config) build_config + build_process_config + ;; + reprocess_config) + build_reconfig ;; depend) build_check_config @@ -125,3 +132,4 @@ case "$2" in ;; esac + diff --git a/sc2/build/unix/build_functions b/sc2/build/unix/build_functions index 2dcef22e9..609fd1b2e 100644 --- a/sc2/build/unix/build_functions +++ b/sc2/build/unix/build_functions @@ -73,6 +73,10 @@ build_rec_dependancies() { echo "Building dependancy information..." 1>&2 + # Remove the old dependency file, if it exists. + # The .tmp file is used to detect interrupted dependency builds. + rm -f -- "$DEPEND_FILE".tmp "$DEPEND_FILE" + BUILD_FILES_VAR=${BUILD_PROJECT}_EXTRA_OFILES export BUILD_FILES_VAR EXTRA_OFILES=`build_do_recursive build_collect_extra_o_files :` @@ -88,7 +92,8 @@ build_rec_dependancies() { done echo build_do_recursive build_dependancies : - } > "$DEPEND_FILE" + } > "$DEPEND_FILE".tmp + mv -f -- "$DEPEND_FILE".tmp "$DEPEND_FILE" } # Output the .o file for a .c file. @@ -114,17 +119,38 @@ build_rec_collect_o_files() { } # Start the configure program. +# $1 = target build_config() { - $SH build/unix/build.config + config_requirements + eval "${TARGET}_requirements" + eval "${TARGET}_prepare_config" + eval "${TARGET}_do_config" +} + +build_reconfig() { + if [ ! -e "$BUILD_WORK/config.state" ]; then + echo "*** Warning: file 'config.state' not found - using defaults." + fi + config_requirements + eval "${TARGET}_requirements" + build_process_config + echo "Reconfiguring complete..." 1>&2 +} + +# Process the configuration information +build_process_config() { + eval "${TARGET}_process_config" } # Compile the lot. # With the depend info set up, we can leave everything to make. build_compile() { + eval "${TARGET}_pre_build" eval CFLAGS="\${${BUILD_PROJECT}_CFLAGS}" \ LDFLAGS="\${${BUILD_PROJECT}_LDFLAGS}" \ DEPEND_FILE="\$BUILD_WORK/.depend.\${${BUILD_PROJECT}_NAME%/}" \ \$MAKE -f Makefile.build "\$BUILD_WORK/target-\${${BUILD_PROJECT}_NAME}" + eval "${TARGET}_post_build" } # Description: Remove the .o file for one .c file @@ -165,12 +191,12 @@ build_distclean() { # Description: check if the config files are present and load them. # If they're not present, remake them. build_check_config() { - [ ! -e "$BUILD_WORK/build.vars" -o -n "$BUILD_RUN_CONFIG" ] || return + [ ! -e "$BUILD_WORK/build.vars" ] || return build_config || exit $? + build_process_config . "$BUILD_WORK/build.vars" . "${BUILD_REC_PATH:=./}Makeinfo" - unset BUILD_RUN_CONFIG } # Description: check if the necessary .depend file is present, @@ -265,6 +291,8 @@ installsome() { # Install the program build_install() { local SRC DEST MODE OWNER + + eval "${TARGET}_pre_install" local LIB LIBS LIBDIR echo "Installing system-dependant data..." 1>&2 @@ -304,6 +332,8 @@ build_install() { eval OWNER="\${${BUILD_PROJECT}_INSTALL_BIN_${BIN}_OWNER}" installsome "$SRC" "$DEST" "$MODE" "$OWNER" done + + eval "${TARGET}_post_install" } diff --git a/sc2/build/unix/config_functions b/sc2/build/unix/config_functions index 5ddc4657a..aab3b6f00 100644 --- a/sc2/build/unix/config_functions +++ b/sc2/build/unix/config_functions @@ -386,12 +386,14 @@ EOF # Some initialisations HAVE_SYMBOLS="" -# Requirements for the config program itself -have_program sed || exit 1 -SED="$PROG_sed_FILE" -have_program tr || exit 1 -TR="$PROG_tr_FILE" -have_program make || exit 1 -MAKE="$PROG_make_FILE" +config_requirements() { + # Requirements for the config program itself + have_program sed || exit 1 + SED="$PROG_sed_FILE" + have_program tr || exit 1 + TR="$PROG_tr_FILE" + have_program make || exit 1 + MAKE="$PROG_make_FILE" +} diff --git a/sc2/build/unix/menu_functions b/sc2/build/unix/menu_functions index 3b0da961a..0a472d636 100644 --- a/sc2/build/unix/menu_functions +++ b/sc2/build/unix/menu_functions @@ -603,28 +603,49 @@ menu_process_check() { # Description: Start processing a menu # Arguments: $1 - the type of the main menu # $2 - the name of the main menu -# $3 - the path to the file to load and save the settings from/to -# (the file does not have to exist; in this case nothing is -# loaded) -# if the argument is empty, nothing is saved nor loaded do_menu() { local MENU_TYPE START_MENU SAVE_FILE - MENU_TYPE="$1" - START_MENU="$2" - SAVE_FILE="$3" + MENU_TYPE=$1 + START_MENU=$2 - if [ -n "$SAVE_FILE" -a -e "$SAVE_FILE" ]; then - . "$SAVE_FILE" - fi menu_init "$MENU_TYPE" "$START_MENU" menu_handle "$MENU_TYPE" "$START_MENU" echo - if [ -n "$SAVE_FILE" ]; then - echo "Saving choices..." - menu_save "$MENU_TYPE" "$START_MENU" > "$SAVE_FILE" - fi -# echo "Propagating choices..." - menu_process "$MENU_TYPE" "$START_MENU" } +# Description: Load the menu settings from file +# Arguments: $1 - the type of the menu (currently ignored) +# $2 - the name of the menu (currently ignored) +# $3 - the name of the file to load from +# Returns: 0 - if the file was loaded successfully +# 1 - if the file did not exist +menu_load() { + SAVE_FILE=$3 + + if [ ! -e "$SAVE_FILE" ]; then + return 1 + fi + + . "$SAVE_FILE" + return 0 +} + +# Description: Save the menu settings to file +# Arguments: $1 - the type of the menu +# $2 - the name of the menu +# $3 - the name of the file to save to +# Returns: 0 - if the file was saved successfully +menu_save() { + MENU_TYPE=$1 + START_MENU=$2 + SAVE_FILE=$3 + + echo "Saving choices..." + menu_save "$MENU_TYPE" "$START_MENU" > "$SAVE_FILE" + return 0 +} + + + +