Restructuring of the unix build scripts.

Also, interrupted dependency builds are now detected.


git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1338 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
meep-eep
2004-02-29 00:04:18 +00:00
parent 7a21deb2cd
commit ec6fc4867e
7 changed files with 347 additions and 219 deletions
+2
View File
@@ -1,4 +1,6 @@
Changes towards version 0.4: 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 - 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, one for putting the build data in (such as build.vars, config.state,
the obj/ dir, and the final binary). - SvdB the obj/ dir, and the final binary). - SvdB
+31
View File
@@ -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.
+41 -7
View File
@@ -1,15 +1,13 @@
#!/bin/sh #!/bin/sh
if [ -z "$BUILD_WORK" ]; then
BUILD_WORK=.
fi
# Include build functions used here # Include build functions used here
. build/unix/config_functions . build/unix/config_functions
. build/unix/menu_functions . build/unix/menu_functions
. build/unix/ansi . build/unix/ansi
uqm_requirements()
{
# Some requirements: # Some requirements:
have_program gcc || exit 1 have_program gcc || exit 1
COMPILE="$PROG_gcc_FILE" COMPILE="$PROG_gcc_FILE"
@@ -39,8 +37,10 @@ define_have_symbol stricmp
# Check for getopt.h # Check for getopt.h
define_have_header getopt.h define_have_header getopt.h
}
uqm_prepare_config()
{
# Describe the menu: # Describe the menu:
MENU_main_ITEMS="debug graphics sound ioformat install_path" MENU_main_ITEMS="debug graphics sound ioformat install_path"
MENU_main_TITLE="Main menu" MENU_main_TITLE="Main menu"
@@ -183,11 +183,17 @@ INPUT_install_libdir_VALIDATOR=validate_path
INPUT_install_sharedir_DEFAULT='$prefix/share' INPUT_install_sharedir_DEFAULT='$prefix/share'
INPUT_install_sharedir_TITLE="Location for sharable data" INPUT_install_sharedir_TITLE="Location for sharable data"
INPUT_install_sharedir_VALIDATOR=validate_path INPUT_install_sharedir_VALIDATOR=validate_path
}
uqm_do_config()
{
# Show the menu and let people set things # Show the menu and let people set things
do_menu MENU main "$BUILD_WORK/config.state" do_menu MENU main "$BUILD_WORK/config.state"
echo "Configuration complete." echo "Configuration complete."
}
uqm_process_config() {
menu_process MENU main
# Set INSTALL_LIBDIR, INSTALL_BINDIR, and INSTALL_SHAREDIR to the specified # Set INSTALL_LIBDIR, INSTALL_BINDIR, and INSTALL_SHAREDIR to the specified
# values, replacing '$prefix' to the prefix set. # values, replacing '$prefix' to the prefix set.
@@ -203,7 +209,8 @@ CONTENTDIR="${INSTALL_SHAREDIR}uqm/content"
CFLAGS="$CFLAGS -I \"$BUILD_WORK\"" CFLAGS="$CFLAGS -I \"$BUILD_WORK\""
# Export the HAVE_ symbols to config_unix.h, using config_unix.h.in as template # Export the HAVE_ symbols to config_unix.h, using config_unix.h.ini
# as template.
SUBSTITUTE_VARS="$HAVE_SYMBOLS CONTENTDIR" SUBSTITUTE_VARS="$HAVE_SYMBOLS CONTENTDIR"
SUBSTITUTE_FILES="config_unix.h" SUBSTITUTE_FILES="config_unix.h"
substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES src "$BUILD_WORK" substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES src "$BUILD_WORK"
@@ -219,5 +226,32 @@ substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES . "$BUILD_WORK"
SUBSTITUTE_VARS="INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR uqm_NAME" SUBSTITUTE_VARS="INSTALL_LIBDIR INSTALL_BINDIR INSTALL_SHAREDIR uqm_NAME"
SUBSTITUTE_FILES="uqm-wrapper" SUBSTITUTE_FILES="uqm-wrapper"
substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES build/unix "$BUILD_WORK" substitute_vars SUBSTITUTE_VARS SUBSTITUTE_FILES build/unix "$BUILD_WORK"
}
uqm_load_config()
{
menu_load MENU main "$BUILD_WORK/config.state"
}
uqm_save_config()
{
menu_save MENU main "$BUILD_WORK/config.state"
}
uqm_pre_build() {
: # Nothing to do
}
uqm_post_build() {
: # Nothing to do
}
uqm_pre_install() {
: # Nothing to do
}
uqm_post_install() {
: # Nothing to do
}
+8
View File
@@ -95,6 +95,9 @@ export "${BUILD_PROJECT}_CFLAGS" "${BUILD_PROJECT}_LDFLAGS"
eval ${BUILD_PROJECT}_OBJS=\${${BUILD_PROJECT}_OBJS%/}/ eval ${BUILD_PROJECT}_OBJS=\${${BUILD_PROJECT}_OBJS%/}/
export "${BUILD_PROJECT}_OBJS" export "${BUILD_PROJECT}_OBJS"
# Load the configuration functions
. build/unix/build.config
if [ $# -lt 2 ]; then if [ $# -lt 2 ]; then
build_check_config build_check_config
build_check_dependencies build_check_dependencies
@@ -108,6 +111,10 @@ case "$2" in
;; ;;
config) config)
build_config build_config
build_process_config
;;
reprocess_config)
build_reconfig
;; ;;
depend) depend)
build_check_config build_check_config
@@ -125,3 +132,4 @@ case "$2" in
;; ;;
esac esac
+34 -4
View File
@@ -73,6 +73,10 @@ build_rec_dependancies() {
echo "Building dependancy information..." 1>&2 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 BUILD_FILES_VAR=${BUILD_PROJECT}_EXTRA_OFILES
export BUILD_FILES_VAR export BUILD_FILES_VAR
EXTRA_OFILES=`build_do_recursive build_collect_extra_o_files :` EXTRA_OFILES=`build_do_recursive build_collect_extra_o_files :`
@@ -88,7 +92,8 @@ build_rec_dependancies() {
done done
echo echo
build_do_recursive build_dependancies : 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. # Output the .o file for a .c file.
@@ -114,17 +119,38 @@ build_rec_collect_o_files() {
} }
# Start the configure program. # Start the configure program.
# $1 = target
build_config() { 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. # Compile the lot.
# With the depend info set up, we can leave everything to make. # With the depend info set up, we can leave everything to make.
build_compile() { build_compile() {
eval "${TARGET}_pre_build"
eval CFLAGS="\${${BUILD_PROJECT}_CFLAGS}" \ eval CFLAGS="\${${BUILD_PROJECT}_CFLAGS}" \
LDFLAGS="\${${BUILD_PROJECT}_LDFLAGS}" \ LDFLAGS="\${${BUILD_PROJECT}_LDFLAGS}" \
DEPEND_FILE="\$BUILD_WORK/.depend.\${${BUILD_PROJECT}_NAME%/}" \ DEPEND_FILE="\$BUILD_WORK/.depend.\${${BUILD_PROJECT}_NAME%/}" \
\$MAKE -f Makefile.build "\$BUILD_WORK/target-\${${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 # 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. # Description: check if the config files are present and load them.
# If they're not present, remake them. # If they're not present, remake them.
build_check_config() { build_check_config() {
[ ! -e "$BUILD_WORK/build.vars" -o -n "$BUILD_RUN_CONFIG" ] || return [ ! -e "$BUILD_WORK/build.vars" ] || return
build_config || exit $? build_config || exit $?
build_process_config
. "$BUILD_WORK/build.vars" . "$BUILD_WORK/build.vars"
. "${BUILD_REC_PATH:=./}Makeinfo" . "${BUILD_REC_PATH:=./}Makeinfo"
unset BUILD_RUN_CONFIG
} }
# Description: check if the necessary .depend file is present, # Description: check if the necessary .depend file is present,
@@ -266,6 +292,8 @@ installsome() {
build_install() { build_install() {
local SRC DEST MODE OWNER local SRC DEST MODE OWNER
eval "${TARGET}_pre_install"
local LIB LIBS LIBDIR local LIB LIBS LIBDIR
echo "Installing system-dependant data..." 1>&2 echo "Installing system-dependant data..." 1>&2
eval LIBS="\${${BUILD_PROJECT}_INSTALL_LIBS}" eval LIBS="\${${BUILD_PROJECT}_INSTALL_LIBS}"
@@ -304,6 +332,8 @@ build_install() {
eval OWNER="\${${BUILD_PROJECT}_INSTALL_BIN_${BIN}_OWNER}" eval OWNER="\${${BUILD_PROJECT}_INSTALL_BIN_${BIN}_OWNER}"
installsome "$SRC" "$DEST" "$MODE" "$OWNER" installsome "$SRC" "$DEST" "$MODE" "$OWNER"
done done
eval "${TARGET}_post_install"
} }
+2
View File
@@ -386,6 +386,7 @@ EOF
# Some initialisations # Some initialisations
HAVE_SYMBOLS="" HAVE_SYMBOLS=""
config_requirements() {
# Requirements for the config program itself # Requirements for the config program itself
have_program sed || exit 1 have_program sed || exit 1
SED="$PROG_sed_FILE" SED="$PROG_sed_FILE"
@@ -393,5 +394,6 @@ have_program tr || exit 1
TR="$PROG_tr_FILE" TR="$PROG_tr_FILE"
have_program make || exit 1 have_program make || exit 1
MAKE="$PROG_make_FILE" MAKE="$PROG_make_FILE"
}
+37 -16
View File
@@ -603,28 +603,49 @@ menu_process_check() {
# Description: Start processing a menu # Description: Start processing a menu
# Arguments: $1 - the type of the main menu # Arguments: $1 - the type of the main menu
# $2 - the name 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() { do_menu() {
local MENU_TYPE START_MENU SAVE_FILE local MENU_TYPE START_MENU SAVE_FILE
MENU_TYPE="$1" MENU_TYPE=$1
START_MENU="$2" START_MENU=$2
SAVE_FILE="$3"
if [ -n "$SAVE_FILE" -a -e "$SAVE_FILE" ]; then
. "$SAVE_FILE"
fi
menu_init "$MENU_TYPE" "$START_MENU" menu_init "$MENU_TYPE" "$START_MENU"
menu_handle "$MENU_TYPE" "$START_MENU" menu_handle "$MENU_TYPE" "$START_MENU"
echo 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
}