Rev 1473 | 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_MODSunset CONFIG_VARIENTfor 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;;-InterfaceDir) INTERFACE_DIR=$val;;-LocalDir) LOCAL_DIR=$val;;-BinDir) BIN_DIR=$val;;-LibDir) LIB_DIR=$val;;-ObjDir) OBJ_DIR=$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=$val;;-ApplyPatches) APPLY_PATCHES=1;;-ApplyMods) APPLY_MODS=1;;-ConfigVarient) CONFIG_VARIENT=$val;;*) 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}"#echo " InterfaceDir = ${INTERFACE_DIR}"#echo " LocalDir = ${LOCAL_DIR}"if [ ${DOWNLOAD_PKG} ]; thenecho " DownloadPkg = ${DOWNLOAD_PKG}"fiecho " BinDir = ${BIN_DIR}"echo " LibDir = ${LIB_DIR}"echo " ObjDir = ${OBJ_DIR}"echo " PkgDir = ${PKG_DIR}"echo " 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;;ARMV9*)COMPILE_HOST="arm-9tdmi-linux-gnu";;*I386*)if [ "${PLATFORM}" == "LINUX_I386" ]; thenCOMPILE_HOST="i386-cross-linux-gnu"elseCOMPILE_HOST="i586-unknown-linux-gnu"fiLINUX_HOST_ARCH=x86;;*)echo "Unknown ARCH=${ARCH}"exit 1;;esac# Setup the location of the cross compilerif [ "${COMPILE_HOST}" == "i386-redhat-linux" ] || [ "${COMPILER_DIR}" == "gcc" ]; 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`BIN_DIR=`cleanup_dir ${CWD}/${BIN_DIR}`LIB_DIR=`cleanup_dir ${CWD}/${LIB_DIR}`OBJ_DIR=`cleanup_dir ${CWD}/${OBJ_DIR}`PKG_DIR=`cleanup_dir ${CWD}/${PKG_DIR}`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}`PKG_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}`INTERFACE_DIR=`cleanup_dir ${CWD}/${INTERFACE_DIR}`LOCAL_DIR=`cleanup_dir ${CWD}/${LOCAL_DIR}`LCL_SRC_DIR=${BASE_DIR}/srcSHARE_SRC_DIR=${LCL_SRC_DIR}SHARE_BASE_DIR=${BASE_DIR}DEB_PKG_DIR=${LIB_DIR}AFC_DIR=${DEB_PKG_DIR}/afcAFC_BIN_DIR=${AFC_DIR}/binAFC_LIB_DIR=${AFC_DIR}/libAFC_SHARE_DIR=${AFC_DIR}/shareDEB_DIR=`cleanup_dir ${CWD}/${DEBIAN_PACKAGE}`# Find the launch scriptLAUNCH_SCRIPT=`cleanup_dir ${LCL_SRC_DIR}/${SHELL_BUILD}`if [ ! -f ${LAUNCH_SCRIPT} ]; thenecho "Specified shell build script ${LAUNCH_SCRIPT} does not exist."exit 1fiif [ ${DOWNLOAD_PKG} ]; then# This is the set of available download directories, consisting of downloads/# and a download directory that is offset from the location of the build# script src directory.unset TAR_DECOMP_ARGTMP=`echo ${SHELL_BUILD} | sed "s|/src/.*||"`TMP=`cleanup_dir ${CWD}/${TMP}`DOWNLOAD_DIRS="${TMP} ${BASE_DIR}"for DDIR in ${DOWNLOAD_DIRS}; doTMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.bz2if [ -e ${TMP} ]; thenTARBALL_FILE=${TMP}SHARE_SRC_DIR=${DDIR}/srcSHARE_BASE_DIR=${DDIR}TAR_DECOMP_ARG=jelseTMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.gzif [ -e ${TMP} ]; thenTARBALL_FILE=${TMP}SHARE_SRC_DIR=${DDIR}/srcSHARE_BASE_DIR=${DDIR}TAR_DECOMP_ARG=zelseTMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tgzif [ -e ${TMP} ]; thenTARBALL_FILE=${TMP}SHARE_SRC_DIR=${DDIR}/srcSHARE_BASE_DIR=${DDIR}TAR_DECOMP_ARG=zfififidoneif [ "${TAR_DECOMP_ARG}" == "" ]; thenecho "Could not find download file ${DOWNLOAD_PKG}.<tar.gz|tar.bz2|tgz> in any of { ${DOWNLOAD_DIRS} }"exit 1fiWORK_DIR=${LCL_SRC_DIR}/${DOWNLOAD_PKG}elseWORK_DIR=${LCL_SRC_DIR}/workfi## Extend compiler and linker search paths to access data within# packages imported via BuildPkgArchive## Include the packageing directory - its used for builds that# build multiple packages.## Only include paths that exist#INCLUDE=LIBPATH=DJOIN=""DLIST="${PKG_INC_DIR}${LOCAL_DIR}/inc${INTERFACE_DIR}/include/${PLATFORM}${INTERFACE_DIR}/include"for dtest in ${DLIST} ; doif [ -d $dtest ] ; thenINCLUDE="${INCLUDE}${DJOIN}-I$dtest"DJOIN=" "fidoneDJOIN=""DLIST="${PKG_LIB_DIR}${LOCAL_DIR}/lib/${PLATFORM}${INTERFACE_DIR}/lib/${PLATFORM}"for dtest in ${DLIST} ; doif [ -d $dtest ] ; thenLIBPATH="${LIBPATH}${DJOIN}-L$dtest"DJOIN=" "fidone# 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}"fiunset AFTER_FIRSTfor INC in ${INCLUDE}; doif [ ${AFTER_FIRST} ]; thenecho " ${INC}"elseecho " Includes = ${INC}"AFTER_FIRST=1fidoneunset AFTER_FIRSTfor LIB in ${LIBPATH}; doif [ ${AFTER_FIRST} ]; thenecho " ${LIB}"elseecho " Library Path = ${LIB}"AFTER_FIRST=1fidoneecho " Debian Package = ${DEB_PKG_DIR}"echo " Launch Script = ${LAUNCH_SCRIPT}"echo "================================================================================"echoecho# Prepare the environmentecho " --> Preparing environment"LIBTOOL=libtoolexport LIBTOOLunset CCunset CXXunset CPPunset CPPFLAGSunset LD_LIBRARY_PATHexport CC CXX CPP CPPFLAGS LD_LIBRARY_PATHunset MAKEunset MAKEFLAGSunset MAKEOVERRIDESunset MAKELEVELexport CFLAGS="${CFLAGS} ${INCLUDE}"export CXXFLAGS="${CXXFLAGS} ${INCLUDE}"export CCFLAGS="${CCFLAGS} ${INCLUDE}"export LDFLAGS="${LDFLAGS} ${LIBPATH}"if [ ${XGCC_IN_PATH} ]; thenexport PATH="${XGCC_DIR}/bin:${PATH}"elseexport PATH="${XGCC_BASE_DIR}/bin:${PATH}"fi## Clean up request# No building - just a clean of previous builds#if [ ${CLEAN} ]; thenif [ ${DOWNLOAD_PKG} ]; thenecho " --> Cleaning generated files"cd ${BASE_DIR}rm -fr ${WORK_DIR}fiecho " --> Deleting binary, object, and library directories"rm -fr ${BIN_DIR}rm -fr ${LIB_DIR}rm -fr ${OBJ_DIR}if [ ${DEBIAN_PACKAGE} ]; thenecho " --> Deleting Debian Build Files "rm -fr ${DEB_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 ${LCL_SRC_DIR}tar -x${TAR_DECOMP_ARG}pf ${TARBALL_FILE}cd ${WORK_DIR}PATCHES_DIR=${SHARE_BASE_DIR}/patchesif [ -d ${PATCHES_DIR} ]; thenPATCHES=`cd ${PATCHES_DIR} && find . -name "*.patch" | sort`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=${SHARE_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}fi## Source the users script# This is processed in the context of this script#source ${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}"rm -fr ${DEB_DIR}mkdir -p ${DEB_DIR}# Replace TAGS in the debbuild.pl fileDEB_DESC="${BUILD_NAME} ${BUILD_VERSION} for ${PLATFORM}"cat ${DEBBUILD_PL} | sed "-es|TAG_DESCRIPTION|${DEB_DESC}|" "-es|TAG_POSTINSTALL|${DEB_DIR}/postinstall|" > ${DEB_DIR}/debbuild.plcp ${TOOL_DIR}/postinstall ${DEB_DIR}/postinstallelseecho "ERROR: Cannot find debbuild.pl in the PATH"exit 1fifiecho " --> Removing unnecesary files resulting from the make install"DEL_FILES=`find ${PKG_LIB_DIR} -type f -name '*.la'`for FILE in ${DEL_FILES}; doecho " - Deleting ${FILE}"rm -f ${FILE}doneecho " --> Cleaning up empty directories"# Deletes directory $1 if it does not contain any other files or directoriesfunction rmdir_empty(){# -A = do not list . and ..# -Q = enclose entry names in double quotes# -l = list one file per line# -F = appends each directory with a '/'DIRS=`ls -A -Q -l -F "$1" | grep "\".*\"\/" | sed "s|.* \"||" | sed "s|\"\/||"`for DIR in ${DIRS}; dormdir_empty $1/${DIR}doneLS=`ls -A -Q -l -F "$1" | grep "\"" | sed "s|^.* \"||" | sed "s|\".*||"`if [ "${LS}" == "" ]; thenrmdir $1fi}rmdir_empty ${DEB_PKG_DIR}rmdir_empty ${BASE_DIR}/pkgecho " --> End of ShellBuild"