Rev 7478 | Blame | Compare with Previous | Last modification | View Log | RSS feed
################################################################################# COPYRIGHT - VIX IP PTY LTD ("VIX"). ALL RIGHTS RESERVED.## NOTE:# This script will be run under a simple 'sh'# Jats will run .sh files under .sh.# This is a script to JATS and not a stand alone program.## NOTE: sh under RHEL4 is more forgiving than under UBUNTU and SOLARIS# Test on multiple platforms.################################################################################### Force failed command to exit this shell - all commands must report successset -e#------------------------------------------------------------------------------# Takes $1 and removes all relative paths (. and ..) from it. The cleaned up# directory is written to stdout.#------------------------------------------------------------------------------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}}#----------------------------------------------------------------------------# Print a pretty banner#----------------------------------------------------------------------------banner(){printf '\n%.80s\n' "===== ${1} ========================================================================="}#----------------------------------------------------------------------------# Print a pretty printers# pitem - print item and value ( if value is not empty )# pitem3 - print item and value ( if item3 is not empty )# plist - print item and list of values#----------------------------------------------------------------------------pitem (){if [ -n "$2" ]; thenprintf ' %-15s = %s\n' "$1" "$2"fi}pitem3 (){if [ -n "$3" ]; thenprintf ' %-15s = %s\n' "$1" "$2"fi}plist (){TITLE=` printf ' %-15s =' "$1"`shiftfor INC in $*; doecho "${TITLE} ${INC}"TITLE=" "done}#------------------------------------------------------------------------------# Extract arguments - order not important except that the first argument is# the launch script#------------------------------------------------------------------------------unset CLEANunset COPY_MODS_DIRSunset DOWNLOAD_PKGunset DOWNLOAD_PKG_AUTOunset DEBIAN_PACKAGEunset APPLY_PATCHESunset APPLY_MODSunset CONFIG_VARIENTunset WORK_DIR_NAMEunset XGCC_IN_PATH;PATCHES_DIR=patchesfor arg in "$@" ; doval=${arg##*=}tag=${arg%%=*}case $tag in-XGccInPath) XGCC_IN_PATH=1;;-CopyModsDirs) COPY_MODS_DIRS=1;;-clean) CLEAN=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;;-LocalIncDir) LOCAL_INC_DIR=$val;;-LocalBinDir) LOCAL_BIN_DIR=$val;;-LocalLibDir) LOCAL_LIB_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;;-WorkDir) WORK_DIR_NAME=$val;;-WorkDirSuffix) WORK_DIR_SUFFIX=$val;;-PatchDir) PATCHES_DIR=$val;;-IgnorePatchErr) IGNORE_PATH_ERR=$val;;-Toolset) ISA_TOOLSET=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}||"`fiif [ "${IGNORE_PATH_ERR}" != "1" ]; thenIGNORE_PATH_ERR=0fi#------------------------------------------------------------------------------# Dump JATS information for debugging purposes#------------------------------------------------------------------------------banner "JATS SUPPLIED FIELDS"pitem "ShellBuild" "${SHELL_BUILD}"pitem "BuildName" "${BUILD_NAME} ${BUILD_VERSION}"pitem "Platform" "${PLATFORM}"pitem "Type" "${TYPE}"pitem "Arch" "${ARCH}"pitem "MachType" "${MACHTYPE}"pitem "BuildRoot" "${BUILD_ROOT}"pitem "InterfaceDir" "${INTERFACE_DIR}"pitem "LocalDir" "${LOCAL_DIR}"pitem "DownloadPkg" "${DOWNLOAD_PKG}"pitem "BinDir" "${BIN_DIR}"pitem "LibDir" "${LIB_DIR}"pitem "ObjDir" "${OBJ_DIR}"pitem "PkgDir" "${PKG_DIR}"pitem "PackageBinDir" "${PKG_BIN_DIR}"pitem "PackageIncDir" "${PKG_INC_DIR}"pitem "PackageLibDir" "${PKG_LIB_DIR}"pitem "PackagePkgDir" "${PKG_PKG_DIR}"pitem "CompilerDir" "${COMPILER_DIR}"pitem "PatchDir" "${PATCHES_DIR}"pitem "WorkDir" "${WORK_DIR_NAME}"pitem "WorkDirSuffix" "${WORK_DIR_SUFFIX}"if [ ${ISA_TOOLSET} ]; thenecho " Toolset Packaging Support"pitem "PackageToolDir" "${PKG_TOOL_DIR}"pitem "PackageToolBin" "${PKG_TOOL_BIN_DIR}"pitem "PackageToolScript" "${PKG_TOOL_SCRIPT_DIR}"fi#------------------------------------------------------------------------------# Determine host and build environments#------------------------------------------------------------------------------case ${MACHTYPE} inlinux_i386) COMPILE_BUILD="i386-cross-linux-gnu" ;;linux_x64) COMPILE_BUILD="x86_64-linux-gnu" ;;linux_el7_x64) COMPILE_BUILD="x86_64-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"LINUX_HOST_ARCH=arm;;ARM926EJ*)COMPILE_HOST="arm-926ejs-linux-gnueabi"LINUX_HOST_ARCH=armif [ "${XGCC_IN_PATH}" != "" ]; thenecho "-XGccInPath is *NOT* supported by this platform by this version of ShellBuild"echo "Correct your shellbuild script so that it is not required."exit 1fi;;armiwmmxt*)COMPILE_HOST="arm-iwmmxt-linux-gnueabi"LINUX_HOST_ARCH=armif [ "${XGCC_IN_PATH}" != "" ]; thenecho "-XGccInPath is *NOT* supported by this platform by this version of ShellBuild"echo "Correct your shellbuild script so that it is not required."exit 1fi;;armunknown*)if [ "${PLATFORM}" = "STIBAXIO" ]; thenCOMPILE_HOST="arm-linux-gnueabi"elseCOMPILE_HOST="arm-unknown-linux-gnueabi"fiLINUX_HOST_ARCH=armif [ "${XGCC_IN_PATH}" != "" ]; thenecho "-XGccInPath is *NOT* supported by this platform by this version of ShellBuild"echo "Correct your shellbuild script so that it is not required."exit 1fi;;*I386*)if [ "${PLATFORM}" = "LINUX_I386" ]; thenCOMPILE_HOST="i386-cross-linux-gnu"elif [ "${PLATFORM}" = "UBUNTU12C11" ] || [ "${PLATFORM}" = "UBUNTU12C11_INSTRUMENT" ] ; thenCOMPILE_HOST="i686-vix_ubuntu12_c11-linux-gnu"elif [ "${PLATFORM}" = "UBUNTU12" ] || [ "${PLATFORM}" = "UBUNTU12_INSTRUMENT" ] ; thenCOMPILE_HOST="i686-linux-gnu"# Hack to create missing tools expected by the build process.SHELLBUILD_PATH="$(pwd)/${BUILD_ROOT}/_shellbuild"rm -fr "${SHELLBUILD_PATH}"mkdir -p "${SHELLBUILD_PATH}/bin"PATH="${PATH}:${SHELLBUILD_PATH}/bin"ln -s /usr/bin/ar "${SHELLBUILD_PATH}/bin/${COMPILE_HOST}-ar"ln -s /usr/bin/ranlib "${SHELLBUILD_PATH}/bin/${COMPILE_HOST}-ranlib"elseCOMPILE_HOST="i586-unknown-linux-gnu"fiLINUX_HOST_ARCH=x86;;X86_64)COMPILE_HOST="x86_64-linux-gnu"LINUX_HOST_ARCH=x86_64;;*)case ${PLATFORM} inANDROIDARM) COMPILE_HOST="arm-linux-androideabi" ;;ANDROIDMIPS) COMPILE_HOST="mipsel-linux-android" ;;ANDROIDX86) COMPILE_HOST="i686-linux-android" ;;ANDROIDARMV7) COMPILE_HOST="arm-linux-androideabi" ;;ANDROIDARM64) COMPILE_HOST="aarch64-linux-android" ;;ANDROIDMIPS64) COMPILE_HOST="mips64el-linux-android" ;;ANDROIDX86_64) COMPILE_HOST="x86_64-linux-android" ;;*)echo "Unknown ARCH=${ARCH}"exit 1;;esacesac# Setup the location of the cross compilerif [ "${COMPILE_HOST}" = "i386-redhat-linux" ] || [ "${COMPILER_DIR}" = "gcc" ] || [ "${COMPILE_HOST}" = "i686-linux-gnu" ] || [ "${COMPILE_HOST}" = "x86_64-linux-gnu" ]; thenXGCC_BASE_DIR=STRIP=stripelseXGCC_BASE_DIR=`echo ${COMPILER_DIR} | sed 's|/[^/]*/[^/]*$||'`XGCC_BASE_DIR=`cleanup_dir ${XGCC_BASE_DIR}`STRIP=${XGCC_BASE_DIR}/bin/${COMPILE_HOST}-stripfi# 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}`LOCAL_INC_DIR=`cleanup_dir ${CWD}/${LOCAL_INC_DIR}`LOCAL_BIN_DIR=`cleanup_dir ${CWD}/${LOCAL_BIN_DIR}`LOCAL_LIB_DIR=`cleanup_dir ${CWD}/${LOCAL_LIB_DIR}`LCL_SRC_DIR=${BASE_DIR}/srcSHARE_SRC_DIR=${LCL_SRC_DIR}SHARE_BASE_DIR=${BASE_DIR}DEB_PKG_DIR=$(echo ${BIN_DIR} | sed "s|\.BIN$|\.DEBPKG|")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 1fiREL_BASE_DIR=../..if [ ${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}`DDIR_ELSEWHERE=${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=zelseTMP=${DDIR}/downloads/${DOWNLOAD_PKG}.zipif [ -e ${TMP} ]; thenTARBALL_FILE=${TMP}SHARE_SRC_DIR=${DDIR}/srcSHARE_BASE_DIR=${DDIR}TAR_DECOMP_ARG=unzipfifififidoneif [ "${SHARE_BASE_DIR}" = "${DDIR_ELSEWHERE}" ]; thenREL_BASE_DIR=../$(echo ${SHELL_BUILD} | sed "s|/src/.*||")fiif [ "${TAR_DECOMP_ARG}" = "" ]; thenecho "Could not find download file ${DOWNLOAD_PKG}.<tar.gz|tar.bz2|tgz|zip> in any of { ${DOWNLOAD_DIRS} }"exit 1fiif [ -n "${WORK_DIR_NAME}" ] ; thenUNTAR_DIR=${LCL_SRC_DIR}/${WORK_DIR_NAME}elseUNTAR_DIR=${LCL_SRC_DIR}/${DOWNLOAD_PKG}fiWORK_DIR=${UNTAR_DIR}.${PLATFORM}${TYPE}elseWORK_DIR=${LCL_SRC_DIR}if [ ${WORK_DIR_NAME} ]; thenWORK_DIR=${LCL_SRC_DIR}/${WORK_DIR_NAME}fifi## Suffix allows the package to be built multiple times for the one target# Example: Client/Server or Native/Host or Static/Dynamic ...#if [ ${WORK_DIR_SUFFIX} ]; thenWORK_DIR=${WORK_DIR}${WORK_DIR_SUFFIX}fi## 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=NORMAL_PLATFORM=$(echo ${PLATFORM} | sed "s|_INSTRUMENT$||")DJOIN=""DLIST="${PKG_INC_DIR}${LOCAL_DIR}/inc${INTERFACE_DIR}/include/${PLATFORM}${INTERFACE_DIR}/include/LINUX${INTERFACE_DIR}/include"# Modify for derivative platforms.if [ "${NORMAL_PLATFORM}" != "${PLATFORM}" ]; thenDLIST="${DLIST} ${INTERFACE_DIR}/include/${NORMAL_PLATFORM}"fifor 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}"# Modify for derivative platforms.if [ "${NORMAL_PLATFORM}" != "${PLATFORM}" ]; thenDLIST="${DLIST} ${INTERFACE_DIR}/lib/${NORMAL_PLATFORM}"fifor dtest in ${DLIST} ; doif [ -d $dtest ] ; thenLIBPATH="${LIBPATH}${DJOIN}-L$dtest"DJOIN=" "fidone# Dump configurationbanner "BUILD CONFIGURATION"pitem "Compile Host" "${COMPILE_HOST}"pitem "Compile Build" "${COMPILE_BUILD}"pitem "XGCC Base Dir" "${XGCC_BASE_DIR}"pitem "Base Dir" "${BASE_DIR}"pitem "Work Dir Name" "${WORK_DIR_NAME}"if [ ${DOWNLOAD_PKG} ]; thenpitem "Tarball File" "${TARBALL_FILE}"pitem3 "UnTar Dir" "${UNTAR_DIR}" "${WORK_DIR_NAME}"pitem "Working Dir" "${WORK_DIR}"fiplist "Includes" ${INCLUDE}plist "Library Path" ${LIBPATH}pitem "Debian Package" "${DEB_PKG_DIR}"pitem "Launch Script" "${LAUNCH_SCRIPT}"banner "Package Build"# Prepare the environmentecho " --> Preparing environment"LIBTOOL=${XGCC_BASE_DIR}/bin/${COMPILE_HOST}-libtoolif [ -e ${LIBTOOL} ]; thenecho " --> Using toolchain libtool"elseecho " --> Using environment libtool"LIBTOOL=/usr/bin/libtoolfiexport 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 CPPFLAGS="${CPPFLAGS} ${INCLUDE}"export LDFLAGS="${LDFLAGS} ${LIBPATH}"if [ "${XGCC_IN_PATH}" != "" ]; thenXGCC_COMPILER_PATH="${XGCC_BASE_DIR}/${COMPILE_HOST}/bin"XGCC_IN_PATH_PREFIX_DIR=${XGCC_BASE_DIR}/${COMPILE_HOST}elseXGCC_COMPILER_PATH="${XGCC_BASE_DIR}/bin"XGCC_IN_PATH_PREFIX_DIR=/afcfi## Do not prepend the compiler path if it is already present in PATH# In particular do not prepend /usr/bin as this will prevent tools# provided in packages (eg bison) from overriding local versions#if ! expr -- ":${PATH}:" : ".*:${XGCC_COMPILER_PATH}:" > /dev/null ; thenexport PATH="${XGCC_COMPILER_PATH}:${PATH}"echo " --> Prepending compiler path"fi## Environment - CHOST is used by some packages (e.g., zlib) to set the# host environment compiler.#export CHOST=${COMPILE_HOST}## These are special files used to track completion of tasks allowing for partial# rebuilds during development.## COMPLETE_DECOMPRESS - Source extracted# COMPLETE_CONFIGURE - CONFIGURE completed# COMPLETE_BUILD - Build competed#COMPLETE_PREFIX=${WORK_DIR}/.complete-COMPLETE_DECOMPRESS=${COMPLETE_PREFIX}decompressCOMPLETE_CONFIGURE=${COMPLETE_PREFIX}configureCOMPLETE_BUILD=${COMPLETE_PREFIX}build## 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 temp work area"SHELLBUILD_PATH="$(pwd)/_shellbuild"rm -fr "${SHELLBUILD_PATH}"echo " --> Deleting binary, object, and library directories"rm -fr ${BIN_DIR}rm -fr ${LIB_DIR}rm -fr ${OBJ_DIR}rm -fr ${DEB_PKG_DIR}if [ ${DEBIAN_PACKAGE} ]; thenecho " --> Deleting Debian Build Files "rm -fr ${DEB_DIR}fiexit 0fi## Attempt to bypass the enture build# If its already been compeleted without error#if [ -e ${COMPLETE_BUILD} ]; thenecho " --> Build already completed for ${PLATFORM}${TYPE}"exit 0fiecho " --> 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}if [ ${ISA_TOOLSET} ]; thenecho " --> Creating package toolset directories"mkdir -p ${PKG_TOOL_DIR}mkdir -p ${PKG_TOOL_BIN_DIR}mkdir -p ${PKG_TOOL_SCRIPT_DIR}fiunset MENUCONFIG_FILEif [ ${DOWNLOAD_PKG} ]; thenMODS_DIR=${SHARE_BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods# Find and export the configuration file (if any).VIX_CONFIG=${MODS_DIR}/vix.configif [ ! -f ${VIX_CONFIG} ]; thenVIX_CONFIG=${MODS_DIR}/VXP.configif [ ! -f ${VIX_CONFIG} ]; thenVIX_CONFIG=${MODS_DIR}/ERG.configfifiif [ -f ${VIX_CONFIG} ]; thenecho " --> Config file is $VIX_CONFIG"MENUCONFIG_FILE=`echo "${VIX_CONFIG}" | sed "s|${MODS_DIR}|${REL_BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods|g"`export MENUCONFIG_FILEelseecho " --> No configuration file found"fiif [ -e ${COMPLETE_DECOMPRESS} ]; thenecho " --> Already extracted ${DOWNLOAD_PKG}"elseecho " --> Deleting existing build objects directory"rm -fr ${UNTAR_DIR}rm -fr ${WORK_DIR}echo " --> Extracting ${DOWNLOAD_PKG}"cd ${LCL_SRC_DIR}# For Zip file use unzip instead of tarif [ "${TAR_DECOMP_ARG}" = "unzip" ]; thenunzip ${TARBALL_FILE}elsetar -x${TAR_DECOMP_ARG}pf ${TARBALL_FILE}fiif [ ! -d ${UNTAR_DIR} ] ; thenecho "Error: Tar file did not extract into the expected directory"echo " Expected: ${UNTAR_DIR}"exit 1ficd ${UNTAR_DIR}PATCHES_DIR=${SHARE_BASE_DIR}/${PATCHES_DIR}if [ -d ${PATCHES_DIR} ]; thenPATCHES=`cd ${PATCHES_DIR} && find . -name "*.patch" | sort`if [ "${PATCHES}" != "" ]; thenecho " --> Apply external patches"for PATCH in ${PATCHES}; doif patch -t -p1 < ${PATCHES_DIR}/${PATCH}; thenecho "Applied patch ${PATCH}"echo ""elseif [ "${IGNORE_PATH_ERR}" = "1" ]; thenecho "Patch ${PATCH} errors ignored"elseecho "Patch ${PATCH} failed"exit 1fifidonefifiPATCHES_DIR=${PATCHES_DIR}.${PLATFORM}if [ -d ${PATCHES_DIR} ]; thenPATCHES=`cd ${PATCHES_DIR} && find . -name "*.patch" | sort`if [ "${PATCHES}" != "" ]; thenecho " --> Apply external patches for ${PLATFORM}"for PATCH in ${PATCHES}; doif patch -t -p1 < ${PATCHES_DIR}/${PATCH}; thenecho "Applied patch ${PATCH}"echo ""elseif [ "${IGNORE_PATH_ERR}" = "1" ]; thenecho "Patch ${PATCH} errors ignored"elseecho "Patch ${PATCH} failed"exit 1fifidonefifi## When a 'mods' directory is present we need to sym-link all the# files from there into the source tree.#cd ${UNTAR_DIR}if [ -d ${MODS_DIR} ]; thenecho " --> Applying modifications from ${MODS_DIR}"echo " Base relative directory is ${REL_BASE_DIR}"if [ "${COPY_MODS_DIRS}" != "" ]; thenecho " Directories are copied"elseecho " Directories are symlinked"ficreate_mods(){local SRClocal RELlocal DSTlocal NAMElocal MOD_DIR=$1local REL_DEPTH=$2for SRC in `ls ${MOD_DIR}`; doSRC=${MOD_DIR}${SRC}REL=`echo "${SRC}" | sed "s|${MODS_DIR}|${REL_DEPTH}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods|g"`DST=`echo "${SRC}" | sed "s|${MODS_DIR}/||g"`if [ -d "${SRC}" ]; thenif [ -e "${DST}" ]; thencreate_mods ${SRC}/ ../${REL_DEPTH}elseif [ "${COPY_MODS_DIRS}" != "" ]; thenecho " * Creating directory ${DST}"mkdir -p ${DST}create_mods ${SRC}/ ../${REL_DEPTH}elseecho " * Creating directory ${DST} symlink"ln -s ${REL} ${DST}if [ $? != 0 ]; thenecho "ERROR: Could not create symlink from ${REL} to ${DST}"exit 1fififielseif [ -e "${DST}" ]; thenecho " * Replacing file ${DST} with symlink"rm -f ${DST}elseecho " * Creating file ${DST} symlink"filn -s ${REL} ${DST}if [ $? != 0 ]; thenecho "ERROR: Could not create symlink from ${REL} to ${DST}"exit 1fifidone}create_mods ${MODS_DIR}/ ${REL_BASE_DIR}if [ "$MENUCONFIG_FILE" != "" ]; thenif [ -e .config ]; thenecho " * Replacing .config with symlink"rm -f .configelseecho " * Creating .config symlink"filn -s ${MENUCONFIG_FILE} .configfifimv ${UNTAR_DIR} ${WORK_DIR}touch ${COMPLETE_DECOMPRESS}fifi## Source the users script# This is processed in the context of this script#mkdir -p ${WORK_DIR}cd ${WORK_DIR}. ${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|" "-es|TAG_DEBPKGDIR|${DEB_PKG_DIR}|" > ${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"if [ -d ${PKG_LIB_DIR} ] ; thenDEL_FILES=`find ${PKG_LIB_DIR} -type f -name '*.la'`for FILE in ${DEL_FILES}; doecho " - Deleting ${FILE}"rm -f ${FILE}donefiecho " --> Cleaning up empty directories"# Deletes directory $1 if it does not contain any other files or directoriesrmdir_empty(){if [ -d "$1" ] ; then# -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 $1fifi}rmdir_empty ${AFC_DIR}rmdir_empty ${AFC_BIN_DIR}rmdir_empty ${AFC_LIB_DIR}rmdir_empty ${AFC_SHARE_DIR}rmdir_empty ${DEB_PKG_DIR}rmdir_empty ${BASE_DIR}/pkgtouch ${COMPLETE_BUILD}echo " --> End of ShellBuild"