Some improvements on installation from source.

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@785 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
meep-eep
2003-02-19 21:17:10 +00:00
parent ceb1cc1e56
commit 03b6d952b5
12 changed files with 35 additions and 18 deletions
+223
View File
@@ -0,0 +1,223 @@
# Auxiliary functions for build.sh
# Copyright (c) 2002 Serge van den Boom
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Show usage information
usage() {
echo "Main build script"
echo
echo "Syntax:"
echo " ./build <target>"
echo " ./build <target> config"
echo " ./build <target> depend"
echo " ./build <target> clean"
echo " ./build <target> install"
echo " ./build cleanall"
echo " ./build distclean"
echo
echo "Valid targets:"
for TARGET in $TARGETS; do
echo " $TARGET"
done
echo
}
# The actual recursing function
build_recurse() {
local FILES SUBDIRS
# Perform an action for this dir
eval FILES="\${$BUILD_FILES_VAR}"
for FILE in $FILES; do
$BUILD_REC_COMMAND "$BUILD_REC_PATH$FILE"
done
# Recurse for all subdirs
eval SUBDIRS="\$${BUILD_PROJECT}_SUBDIRS"
for DIR in $SUBDIRS; do
BUILD_REC_PATH="$BUILD_REC_PATH$DIR/" $SH "$0"
$BUILD_REC_DIR_COMMAND "$BUILD_REC_PATH$DIR"
done
}
# Start the recursion
build_do_recursive() {
BUILD_COMMAND=build_recurse
BUILD_REC_COMMAND="$1"
BUILD_REC_DIR_COMMAND="$2"
export BUILD_COMMAND BUILD_REC_COMMAND BUILD_REC_DIR_COMMAND
build_recurse
}
# Build dependancy information for one file
build_dependancies() {
eval echo -n \${${BUILD_PROJECT}_OBJS}\$BUILD_REC_PATH
eval \$MKDEPEND "\${${BUILD_PROJECT}_CFLAGS}" "\$1"
}
# Recursively build dependancy information
build_rec_dependancies() {
local DEPEND_FILE EXTRA_OFILES
echo "Building dependancy information..." 1>&2
BUILD_FILES_VAR=${BUILD_PROJECT}_EXTRA_OFILES
export BUILD_FILES_VAR
EXTRA_OFILES=`build_do_recursive build_collect_extra_o_files :`
BUILD_FILES_VAR=${BUILD_PROJECT}_CFILES
OFILES=`build_do_recursive build_collect_o_files :`
eval DEPEND_FILE=".depend.\${${BUILD_PROJECT}_NAME}"
{
eval echo -n "target-\${${BUILD_PROJECT}_NAME}:"
for OFILE in $OFILES $EXTRA_OFILES; do
echo -n " $OFILE"
done
echo
build_do_recursive build_dependancies :
} > "$DEPEND_FILE"
}
# Output the .o file for a .c file.
build_collect_o_files() {
eval echo "\${${BUILD_PROJECT}_OBJS}\${1%.c}.o"
}
# Output the extra .o file with the complete path
build_collect_extra_o_files() {
eval echo "\${${BUILD_PROJECT}_OBJS}\$1"
}
# Recursively collect .o-files
build_rec_collect_o_files() {
local EXTRA_OFILES
BUILD_FILES_VAR=${BUILD_PROJECT}_CFILES
export BUILD_FILES_VAR
build_do_recursive build_collect_o_files :
BUILD_FILES_VAR=${BUILD_PROJECT}_EXTRA_OFILES
build_do_recursive build_collect_extra_o_files :
}
# Start the configure program.
build_config() {
$SH build/unix/build.config
}
# Compile the lot.
# With the depend info set up, we can leave everything to make.
build_compile() {
eval CFLAGS="\${${BUILD_PROJECT}_CFLAGS}" \
LDFLAGS="\${${BUILD_PROJECT}_LDFLAGS}" \
DEPEND_FILE=".depend.\${${BUILD_PROJECT}_NAME%/}" \
\$MAKE -f Makefile.build "target-\${${BUILD_PROJECT}_NAME}"
}
# Description: Remove the .o file for one .c file
# Arguments: $1 - the .c file
build_clean_file() {
eval rm -f -- "\${${BUILD_PROJECT}_OBJS}\${1%.c}.o"
}
build_clean_dir() {
eval rmdir -- "\${${BUILD_PROJECT}_OBJS}\${1}" 2> /dev/null
return 0
}
build_clean() {
local DEPEND_FILE
eval DEPEND_FILE=".depend.\${${BUILD_PROJECT}_NAME%/}"
rm -f "$DEPEND_FILE" build.vars config.state src/config.h
BUILD_FILES_VAR=${BUILD_PROJECT}_CFILES
export BUILD_FILES_VAR
build_do_recursive build_clean_file build_clean_dir
}
build_cleanall() {
export BUILD_PROJECT
for TARGET in $TARGETS; do
BUILD_PROJECT="$TARGET"
build_clean
done
BUILD_PROJECT=""
}
build_distclean() {
build_cleanall
}
# Description: check if the config files are present and load them.
# If they're not present, remake them.
build_check_config() {
[ ! -e build.vars -o -n "$BUILD_RUN_CONFIG" ] || return
build_config || exit $?
. ./build.vars
. "${BUILD_REC_PATH:=./}Makeinfo"
unset BUILD_RUN_CONFIG
}
# Description: check if the necessary .depend file is present,
# if not, build it.
build_check_dependencies() {
eval DEPEND_FILE=".depend.\${${BUILD_PROJECT}_NAME}"
[ ! -e "$DEPEND_FILE" -o -n "$BUILD_RUN_DEPEND" ] || return
build_rec_dependancies || exit $?
}
# Description: check if the program is compiled, and otherwise compile
build_check_compile() {
local NAME
eval NAME="\${${BUILD_PROJECT}_NAME}"
[ ! -e "$NAME" ] || return
build_compile || exit $?
}
# Install the program
build_install() {
local BINS LIBS SRC DEST DESTDIR BINDIR LIBDIR
echo "Installing libraries..." 2>&1
eval LIBS="\${${BUILD_PROJECT}_INSTALL_LIBS}"
eval LIBDIR="\${${BUILD_PROJECT}_INSTALL_LIBDIR%/}/"
for LIB in $LIBS; do
eval SRC="\${${BUILD_PROJECT}_INSTALL_LIB_${LIB}_SRC%/}"
eval DEST="\$LIBDIR\${${BUILD_PROJECT}_INSTALL_LIB_${LIB}_DEST}"
DESTDIR="${DEST%/*}"
if [ ! -d "$DESTDIR" ]; then
mkdir -p -- "$DESTDIR"
fi
cp -r -- "$SRC" "$DEST"
done
echo "Installing binaries..." 2>&1
eval BINS="\${${BUILD_PROJECT}_INSTALL_BINS}"
eval BINDIR="\${${BUILD_PROJECT}_INSTALL_BINDIR%/}/"
for BIN in $BINS; do
eval SRC="\${${BUILD_PROJECT}_INSTALL_BIN_${BIN}_SRC%/}"
eval DEST="\$BINDIR\${${BUILD_PROJECT}_INSTALL_BIN_${BIN}_DEST}"
DESTDIR="${DEST%/*}"
if [ ! -d "$DESTDIR" ]; then
mkdir -p -- "$DESTDIR"
fi
cp -r -- "$SRC" "$DEST"
done
}