Blame | Last modification | View Log | RSS feed
# Force failed command to exit this shell - all commands must report successset -eechoecho#------------------------------------------------------------------------------# Takes $1 and removes all relative paths (. and ..) from it. The cleaned up# directory is written to stdout.#------------------------------------------------------------------------------function cleanup_dir{DIR_PARTS=`echo $1 | sed "s|/| |g"`CLEANUP_DIR=""for PART in ${DIR_PARTS}; doif [ "${PART}" != "." ]; thenif [ "${PART}" == ".." ]; thenCLEANUP_DIR=`echo "${CLEANUP_DIR}" | sed "s|/[^/]*$||"`elseCLEANUP_DIR="${CLEANUP_DIR}/${PART}"fifidoneecho ${CLEANUP_DIR}}#------------------------------------------------------------------------------# Extract arguments - order not important except that the first argument is# the launch script#------------------------------------------------------------------------------unset CLEANunset DOWNLOAD_PKGunset DOWNLOAD_PKG_AUTOunset XGCC_IN_PATHunset DEBIAN_PACKAGEunset APPLY_PATCHESunset APPLY_MODSfor arg in "$@" ; doval=${arg##*=}tag=${arg%%=*}case $tag in-clean) CLEAN=1;;-XGccInPath) XGCC_IN_PATH=1;;-ShellBuild) SHELL_BUILD="$val";;-BuildName) BUILD_NAME=$val;;-BuildVersion) BUILD_VERSION=$val;;-Platform) PLATFORM=$val;;-Type) TYPE=$val;;-Arch) ARCH=$val;;-MachType) MACHTYPE=$val;;-BuildRoot) BUILD_ROOT=$val;;-PackageBinDir) PKG_BIN_DIR=$val;;-PackageIncDir) PKG_INC_DIR=$val;;-PackageLibDir) PKG_LIB_DIR=$val;;-PackagePkgDir) PKG_PKG_DIR=$val;;-PackageToolDir) PKG_TOOL_DIR=$val;;-PackageToolBin) PKG_TOOL_BIN_DIR=$val;;-PackageToolScript) PKG_TOOL_SCRIPT_DIR=$val;;-PackageDir) PKG_DIR=$val;;-CompilerPath) COMPILER_DIR="$val";;-DownloadPkg) DOWNLOAD_PKG="$val";;-DebianPackage) DEBIAN_PACKAGE=1;;-ApplyPatches) APPLY_PATCHES=1;;-ApplyMods) APPLY_MODS=1;;*) echo "Unknown tag: $tag=$val"esacdoneif [ "${DOWNLOAD_PKG}" == "-DownloadPkg" ]; thenDOWNLOAD_PKG_NAME=${BUILD_NAME}DOWNLOAD_PKG_VER=`echo ${BUILD_VERSION} | sed "s|\.[0-9]\+\.cots||"`DOWNLOAD_PKG=${DOWNLOAD_PKG_NAME}-${DOWNLOAD_PKG_VER}elseDOWNLOAD_PKG_VER=`echo ${DOWNLOAD_PKG} | sed "s|.*-||"`DOWNLOAD_PKG_NAME=`echo ${DOWNLOAD_PKG} | sed "s|-${DOWNLOAD_PKG_VER}||"`fi#------------------------------------------------------------------------------# Dump JATS information for debugging purposes#------------------------------------------------------------------------------echo "================================================================================"echo " JATS SUPPLIED FIELDS"echo "================================================================================"echo " ShellBuild = ${SHELL_BUILD}"echo " BuildName = ${BUILD_NAME} ${BUILD_VERSION}"echo " Platform = ${PLATFORM}"echo " Type = ${TYPE}"echo " Arch = ${ARCH}"echo " MachType = ${MACHTYPE}"echo " BuildRoot = ${BUILD_ROOT}"if [ ${DOWNLOAD_PKG} ]; thenecho " DownloadPkg = ${DOWNLOAD_PKG}"fiecho " PackageBinDir = ${PKG_BIN_DIR}"echo " PackageIncDir = ${PKG_INC_DIR}"echo " PackageLibDir = ${PKG_LIB_DIR}"echo " PackagePkgDir = ${PKG_PKG_DIR}"echo " CompilerDir = ${COMPILER_DIR}"echo "================================================================================"echoecho#------------------------------------------------------------------------------# Determine host and build environments#------------------------------------------------------------------------------case ${MACHTYPE} inlinux_i386)COMPILE_BUILD="i386-cross-linux-gnu";;*)echo "Unknown MACHTYPE=${MACHTYPE}"exit 1;;esaccase ${ARCH} in*603E*|*powerpc*)COMPILE_HOST="powerpc-603e-linux-gnu"LINUX_HOST_ARCH=powerpc;;*I386*)COMPILE_HOST="i386-redhat-linux"LINUX_HOST_ARCH=x86;;*)echo "Unknown ARCH=${ARCH}"exit 1;;esac# Setup the location of the cross compilerif [ "${COMPILE_HOST}" == "i386-redhat-linux" ]; thenXGCC_BASE_DIR=XGCC_DIR=XGCC=gccelseXGCC_BASE_DIR=`echo ${COMPILER_DIR} | sed 's|/[^/]*/[^/]*$||'`XGCC_BASE_DIR=`cleanup_dir ${XGCC_BASE_DIR}`XGCC_DIR=${XGCC_BASE_DIR}/${COMPILE_HOST}XGCC=${XGCC_DIR}/bin/gccfi# Determine the location of the generated filesCWD=`pwd`PKG_BIN_DIR=`cleanup_dir ${CWD}/${PKG_BIN_DIR}`PKG_INC_DIR=`cleanup_dir ${CWD}/${PKG_INC_DIR}`PKG_LIB_DIR=`cleanup_dir ${CWD}/${PKG_LIB_DIR}`PKG_PKG_DIR=`cleanup_dir ${CWD}/${PKG_PKG_DIR}`AFC_DIR=${PKG_PKG_DIR}/afcAFC_BIN_DIR=${AFC_DIR}/binAFC_LIB_DIR=${AFC_DIR}/libAFC_SHARE_DIR=${AFC_DIR}/sharePKG_TOOL_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_DIR}`PKG_TOOL_BIN_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_BIN_DIR}`PKG_TOOL_SCRIPT_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_SCRIPT_DIR}`BASE_DIR=`cleanup_dir ${CWD}/${BUILD_ROOT}`DOWNLOADS_DIR=${BASE_DIR}/downloadsSRC_DIR=${BASE_DIR}/src# Find the launch scriptLAUNCH_SCRIPT=`cleanup_dir ${SRC_DIR}/${SHELL_BUILD}`if [ ! -f ${LAUNCH_SCRIPT} ]; thenecho "Specified shell build script ${LAUNCH_SCRIPT} does not exist."exit 1fiif [ ${DOWNLOAD_PKG} ]; thenTARBALL_FILE=${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.tar.bz2if [ -e ${TARBALL_FILE} ]; thenTAR_DECOMP_ARG=jelseTARBALL_FILE=${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.tar.gzif [ -e ${TARBALL_FILE} ]; thenTAR_DECOMP_ARG=zelseTARBALL_FILE=${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.tgzif [ -e ${TARBALL_FILE} ]; thenTAR_DECOMP_ARG=zelseecho "Could not find download file ${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.<tar.gz|tar.bz2|tgz>"exit 1fififiWORK_DIR=${SRC_DIR}/${DOWNLOAD_PKG}elseWORK_DIR=${SRC_DIR}/workfiINCLUDE="-I${PKG_INC_DIR} -I${BASE_DIR}/local/include -I${BASE_DIR}/interface/include"LIBPATH="-L${PKG_LIB_DIR} -L${BASE_DIR}/local/lib/${PLATFORM} -L${BASE_DIR}/interface/lib/${PLATFORM}"# Dump configurationecho "================================================================================"echo " BUILD CONFIGURATION"echo "================================================================================"echo " Compile Host = ${COMPILE_HOST}"echo " Compile Build = ${COMPILE_BUILD}"echo " XGCC Base Dir = ${XGCC_BASE_DIR}"echo " XGCC Dir = ${XGCC_DIR}"echo " XGCC = ${XGCC}"echo " Base Dir = ${BASE_DIR}"if [ ${DOWNLOAD_PKG} ]; thenecho " Tarball File = ${TARBALL_FILE}"echo " Working Dir = ${WORK_DIR}"fiecho " Includes = ${INCLUDE}"echo " Library Path = ${LIBPATH}"echo " Launch Script = ${LAUNCH_SCRIPT}"echo "================================================================================"echoecho# Prepare the environmentecho " --> Preparing environment"LIBTOOL=libtoolexport LIBTOOLORIG_MAKE=${MAKE}unset MAKEORIG_MAKEFLAGS=${MAKEFLAGS}unset MAKEFLAGSORIG_MAKEOVERRIDES=${MAKEOVERRIDES}unset MAKEOVERRIDESORIG_MAKELEVEL=${MAKELEVEL}unset MAKELEVELORIG_CFLAGS=${CFLAGS}export CFLAGS="${ORIG_CFLAGS} ${INCLUDE}"ORIG_CCFLAGS=${CCFLAGS}export CCFLAGS="${ORIG_CCFLAGS} ${INCLUDE}"ORIG_LDFLAGS=${LDFLAGS}export LDFLAGS="${LDFLAGS} ${LIBPATH}"ORIG_PATH=${PATH}export PATH="${XGCC_BASE_DIR}/bin:${PATH}"if [ ${XGCC_IN_PATH} ]; thenexport PATH="${XGCC_DIR}/bin:${PATH}"fiif [ ${CLEAN} ]; thenif [ ${DOWNLOAD_PKG} ]; thenecho " --> Cleaning generated files"cd ${BASE_DIR}rm -fr ${WORK_DIR}fiexit 0fiif [ ${DOWNLOAD_PKG} ]; thenecho " --> Deleting existing build objects directory"rm -fr ${WORK_DIR}fiecho " --> Creating package directories"mkdir -p ${PKG_BIN_DIR}mkdir -p ${PKG_INC_DIR}mkdir -p ${PKG_LIB_DIR}mkdir -p ${PKG_PKG_DIR}mkdir -p ${AFC_DIR}mkdir -p ${AFC_BIN_DIR}mkdir -p ${AFC_LIB_DIR}mkdir -p ${AFC_SHARE_DIR}mkdir -p ${PKG_TOOL_DIR}mkdir -p ${PKG_TOOL_BIN_DIR}mkdir -p ${PKG_TOOL_SCRIPT_DIR}if [ ${DOWNLOAD_PKG} ]; thenecho " --> Extracting ${DOWNLOAD_PKG}"cd ${SRC_DIR}tar -x${TAR_DECOMP_ARG}pf ${TARBALL_FILE}cd ${WORK_DIR}PATCHES_DIR=${BASE_DIR}/patchesif [ -d ${PATCHES_DIR} ]; thenPATCHES=`cd ${PATCHES_DIR} && ls `if [ "${PATCHES}" != "" ]; thenecho " --> Apply external patches"for PATCH in ${PATCHES}; doif patch -p1 < ${PATCHES_DIR}/$PATCH; thenecho "Applied patch ${PATCH}"echo ""elseecho "Patch ${PATCH} failed"exit 1fidonefificd ${WORK_DIR}MODS_DIR=${BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_modsif [ -d ${MODS_DIR} ]; thenecho " --> Applying modifications"cp -fr ${MODS_DIR}/* .ERG_CONFIG=${MODS_DIR}/ERG.configif [ -f ${ERG_CONFIG} ]; thencp -fr ${ERG_CONFIG} .configfificd ${WORK_DIR}fisource ${LAUNCH_SCRIPT}if [ ${DEBIAN_PACKAGE} ]; thenecho " --> Creating Debian packaging scripts"unset TOOL_DIRfor DIR in `echo ${PATH} | sed "s|\:| |g"`; doif [ -f ${DIR}/debbuild.pl ]; thenTOOL_DIR=`cleanup_dir ${DIR}`fidoneif [ ${TOOL_DIR} ]; thenDEBBUILD_PL=${TOOL_DIR}/debbuild.plecho " - Found ${DEBBUILD_PL}"DEB_DIR=${SRC_DIR}/.debrm -fr ${DEB_DIR}mkdir -p ${DEB_DIR}DEB_DESC="${BUILD_NAME} ${BUILD_VERSION} for ${PLATFORM}"cat ${DEBBUILD_PL} | sed "s|Unknown Debian Package Description|${DEB_DESC}|" > ${DEB_DIR}/debbuild.plcp ${TOOL_DIR}/postinstall ${DEB_DIR}/postinstallelseecho "ERROR: Cannot find debbuild.pl in the PATH"exit 1fifiecho " --> Cleaning up installation environment"export MAKE=${ORIG_MAKE}export MAKEFLAGS=${ORIG_MAKEFLAGS}export MAKEOVERRIDES=${ORIG_MAKEOVERRIDES}export MAKELEVEL=${ORIG_MAKELEVEL}export CCFLAGS=${ORIG_CCFLAGS}export CFLAGS=${ORIG_CFLAGS}export LDFLAGS=${ORIG_LDFLAGS}export PATH=${ORIG_PATH}