Subversion Repositories DevTools

Rev

Rev 6828 | Rev 6835 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4069 dpurdie 1
################################################################################
5721 dpurdie 2
# Copyright (c) VIX TECHNOLOGY (AUST) LTD
1493 dpurdie 3
#
4069 dpurdie 4
#   NOTE:
5
#   This script will be run under a simple 'sh'
6
#   Jats will run .sh files under .sh. This is script to JATS and not
7
#   a stand alone program.
8
#
9
#   NOTE: sh under RHEL4 is more forgiving than under UBUNTU and SOLARIS
10
#         Test on multiple platforms.
11
#
12
################################################################################
13
 
14
#
1467 alewis 15
# Force failed command to exit this shell - all commands must report success
16
set -e
17
echo
18
echo
19
 
20
 
21
#------------------------------------------------------------------------------
22
# Takes $1 and removes all relative paths (. and ..) from it.  The cleaned up
23
# directory is written to stdout.
24
#------------------------------------------------------------------------------
4057 ehutchis 25
cleanup_dir ()
1467 alewis 26
{
27
    DIR_PARTS=`echo $1 | sed "s|/| |g"`
28
 
29
    CLEANUP_DIR=""
30
    for PART in ${DIR_PARTS}; do
31
        if [ "${PART}" != "." ]; then
32
 
4069 dpurdie 33
            if [ "${PART}" = ".." ]; then
1467 alewis 34
                CLEANUP_DIR=`echo "${CLEANUP_DIR}" | sed "s|/[^/]*$||"`
35
            else
36
                CLEANUP_DIR="${CLEANUP_DIR}/${PART}"
37
            fi
38
        fi
39
    done
40
 
41
    echo ${CLEANUP_DIR}
42
} 
43
 
44
 
45
 
46
 
47
#------------------------------------------------------------------------------
48
# Extract arguments - order not important except that the first argument is
49
# the launch script
50
#------------------------------------------------------------------------------
51
unset CLEAN
1491 alewis 52
unset COPY_MODS_DIRS
1467 alewis 53
unset DOWNLOAD_PKG
54
unset DOWNLOAD_PKG_AUTO
55
unset DEBIAN_PACKAGE
56
unset APPLY_PATCHES
57
unset APPLY_MODS
1469 alewis 58
unset CONFIG_VARIENT
1477 dpurdie 59
unset WORK_DIR_NAME
1483 alewis 60
unset XGCC_IN_PATH;
4789 alewis 61
PATCHES_DIR=patches
1467 alewis 62
for arg in "$@" ; do
63
    val=${arg##*=}
64
    tag=${arg%%=*}
65
    case $tag in
1491 alewis 66
        -XGccInPath)            XGCC_IN_PATH=1;; 
4789 alewis 67
        -CopyModsDirs)          COPY_MODS_DIRS=1;;
1467 alewis 68
        -clean)                 CLEAN=1;;
69
        -ShellBuild)            SHELL_BUILD="$val";;
70
        -BuildName)             BUILD_NAME=$val;;
71
        -BuildVersion)          BUILD_VERSION=$val;;
72
        -Platform)              PLATFORM=$val;;
73
        -Type)                  TYPE=$val;;
74
        -Arch)                  ARCH=$val;;
75
        -MachType)              MACHTYPE=$val;;
76
        -BuildRoot)             BUILD_ROOT=$val;;
1475 dpurdie 77
        -InterfaceDir)          INTERFACE_DIR=$val;;
78
        -LocalDir)              LOCAL_DIR=$val;;
1477 dpurdie 79
        -LocalIncDir)           LOCAL_INC_DIR=$val;;
80
        -LocalBinDir)           LOCAL_BIN_DIR=$val;;
81
        -LocalLibDir)           LOCAL_LIB_DIR=$val;;
1469 alewis 82
        -BinDir)                BIN_DIR=$val;;
83
        -LibDir)                LIB_DIR=$val;;
84
        -ObjDir)                OBJ_DIR=$val;;
1467 alewis 85
        -PackageBinDir)         PKG_BIN_DIR=$val;;
86
        -PackageIncDir)         PKG_INC_DIR=$val;;
87
        -PackageLibDir)         PKG_LIB_DIR=$val;;
88
        -PackagePkgDir)         PKG_PKG_DIR=$val;;
89
        -PackageToolDir)        PKG_TOOL_DIR=$val;;
90
        -PackageToolBin)        PKG_TOOL_BIN_DIR=$val;;
91
        -PackageToolScript)     PKG_TOOL_SCRIPT_DIR=$val;;
92
        -PackageDir)            PKG_DIR=$val;;
93
        -CompilerPath)          COMPILER_DIR="$val";;
94
        -DownloadPkg)           DOWNLOAD_PKG="$val";;
1475 dpurdie 95
        -DebianPackage)         DEBIAN_PACKAGE=$val;;
1467 alewis 96
        -ApplyPatches)          APPLY_PATCHES=1;;
97
        -ApplyMods)             APPLY_MODS=1;;
1469 alewis 98
        -ConfigVarient)         CONFIG_VARIENT=$val;;
1477 dpurdie 99
        -WorkDir)               WORK_DIR_NAME=$val;;
1495 alewis 100
        -WorkDirSuffix)         WORK_DIR_SUFFIX=$val;;
4789 alewis 101
        -PatchDir)              PATCHES_DIR=$val;;
6831 cmichael 102
        -IgnorePatchErr)        IGNORE_PATH_ERR=$val;;
1467 alewis 103
        *)                      echo "Unknown tag: $tag=$val"
104
    esac
105
done
106
 
4069 dpurdie 107
if [ "${DOWNLOAD_PKG}" = "-DownloadPkg" ]; then
1467 alewis 108
    DOWNLOAD_PKG_NAME=${BUILD_NAME}
109
    DOWNLOAD_PKG_VER=`echo ${BUILD_VERSION} | sed "s|\.[0-9]\+\.cots||"`
110
    DOWNLOAD_PKG=${DOWNLOAD_PKG_NAME}-${DOWNLOAD_PKG_VER}
111
else
112
    DOWNLOAD_PKG_VER=`echo ${DOWNLOAD_PKG} | sed "s|.*-||"`    
113
    DOWNLOAD_PKG_NAME=`echo ${DOWNLOAD_PKG} | sed "s|-${DOWNLOAD_PKG_VER}||"`    
114
fi
115
 
6831 cmichael 116
if [ "${IGNORE_PATH_ERR}" != "1" ]; then
117
    IGNORE_PATH_ERR=0
118
fi
1467 alewis 119
 
120
#------------------------------------------------------------------------------
121
# Dump JATS information for debugging purposes
122
#------------------------------------------------------------------------------
4069 dpurdie 123
echo "="
1467 alewis 124
echo "   JATS SUPPLIED FIELDS"
4069 dpurdie 125
echo "="
1467 alewis 126
echo " ShellBuild     = ${SHELL_BUILD}"
127
echo " BuildName      = ${BUILD_NAME} ${BUILD_VERSION}"
128
echo " Platform       = ${PLATFORM}"
129
echo " Type           = ${TYPE}"
130
echo " Arch           = ${ARCH}"
131
echo " MachType       = ${MACHTYPE}"
132
echo " BuildRoot      = ${BUILD_ROOT}"
1483 alewis 133
echo " InterfaceDir   = ${INTERFACE_DIR}"
134
echo " LocalDir       = ${LOCAL_DIR}"
1467 alewis 135
if [ ${DOWNLOAD_PKG} ]; then
136
    echo " DownloadPkg    = ${DOWNLOAD_PKG}"
137
fi    
1469 alewis 138
echo " BinDir         = ${BIN_DIR}"
139
echo " LibDir         = ${LIB_DIR}"
140
echo " ObjDir         = ${OBJ_DIR}"
1475 dpurdie 141
echo " PkgDir         = ${PKG_DIR}"
1467 alewis 142
echo " PackageBinDir  = ${PKG_BIN_DIR}"
143
echo " PackageIncDir  = ${PKG_INC_DIR}"
144
echo " PackageLibDir  = ${PKG_LIB_DIR}"
145
echo " PackagePkgDir  = ${PKG_PKG_DIR}"
146
echo " CompilerDir    = ${COMPILER_DIR}"
4789 alewis 147
echo " PatchDir       = ${PATCHES_DIR}"
6831 cmichael 148
echo " IgnorePatchErr = ${IGNORE_PATH_ERR}"
4069 dpurdie 149
echo "="
1467 alewis 150
echo
151
echo
152
 
153
 
154
#------------------------------------------------------------------------------
155
# Determine host and build environments
156
#------------------------------------------------------------------------------
157
case ${MACHTYPE} in
158
    linux_i386)  
159
        COMPILE_BUILD="i386-cross-linux-gnu"
160
        ;;
5400 dpurdie 161
 
162
	linux_x64)
163
        COMPILE_BUILD="x86_64-linux-gnu"
164
        ;;
165
 
1467 alewis 166
    *)      
167
        echo "Unknown MACHTYPE=${MACHTYPE}"
168
        exit 1
169
        ;;
170
esac
171
 
172
case ${ARCH} in
173
    *603E*|*powerpc*)  
174
        COMPILE_HOST="powerpc-603e-linux-gnu"
175
        LINUX_HOST_ARCH=powerpc
176
        ;;
177
 
1469 alewis 178
    ARMV9*)  
179
        COMPILE_HOST="arm-9tdmi-linux-gnu"
1481 thunter 180
        LINUX_HOST_ARCH=arm
1469 alewis 181
        ;;
1483 alewis 182
 
183
    ARM926EJ*)
1481 thunter 184
        COMPILE_HOST="arm-926ejs-linux-gnueabi"
185
        LINUX_HOST_ARCH=arm
1483 alewis 186
        if [ "${XGCC_IN_PATH}" != "" ]; then
187
            echo "-XGccInPath is *NOT* supported by this platform by this version of ShellBuild"
188
            echo "Correct your shellbuild script so that it is not required."
189
            exit 1
190
        fi
1481 thunter 191
        ;;
5436 dpurdie 192
 
4165 dpurdie 193
    armiwmmxt*)
194
        COMPILE_HOST="arm-iwmmxt-linux-gnueabi"
195
        LINUX_HOST_ARCH=arm
196
        if [ "${XGCC_IN_PATH}" != "" ]; then
197
            echo "-XGccInPath is *NOT* supported by this platform by this version of ShellBuild"
198
            echo "Correct your shellbuild script so that it is not required."
199
            exit 1
200
        fi
201
        ;;
5436 dpurdie 202
 
203
    armunknown*)
204
        COMPILE_HOST="arm-unknown-linux-gnueabi"
205
        LINUX_HOST_ARCH=arm
206
        if [ "${XGCC_IN_PATH}" != "" ]; then
207
            echo "-XGccInPath is *NOT* supported by this platform by this version of ShellBuild"
208
            echo "Correct your shellbuild script so that it is not required."
209
            exit 1
210
        fi
211
        ;;
212
 
1467 alewis 213
    *I386*)
4069 dpurdie 214
        if [ "${PLATFORM}" = "LINUX_I386" ]; then
1469 alewis 215
            COMPILE_HOST="i386-cross-linux-gnu"
5721 dpurdie 216
 
217
        elif [ "${PLATFORM}" = "UBUNTU12C11" ] || [ "${PLATFORM}" = "UBUNTU12C11_INSTRUMENT" ] ; then
218
            COMPILE_HOST="i686-vix_ubuntu12_c11-linux-gnu"
219
 
220
        elif [ "${PLATFORM}" = "UBUNTU12" ] || [ "${PLATFORM}" = "UBUNTU12_INSTRUMENT" ] ; then
4604 alewis 221
            COMPILE_HOST="i686-linux-gnu"
4608 alewis 222
 
223
            # Hack to create missing tools expected by the build process.
4680 mdell 224
            SHELLBUILD_PATH="$(pwd)/${BUILD_ROOT}/_shellbuild"
225
            rm -fr "${SHELLBUILD_PATH}"
226
            mkdir -p "${SHELLBUILD_PATH}/bin"
227
            PATH="${PATH}:${SHELLBUILD_PATH}/bin"
228
            ln -s /usr/bin/ar "${SHELLBUILD_PATH}/bin/${COMPILE_HOST}-ar"
229
            ln -s /usr/bin/ranlib "${SHELLBUILD_PATH}/bin/${COMPILE_HOST}-ranlib"
1469 alewis 230
        else
231
            COMPILE_HOST="i586-unknown-linux-gnu"
232
        fi
1467 alewis 233
        LINUX_HOST_ARCH=x86
234
        ;;
235
 
5400 dpurdie 236
	X86_64)
237
        COMPILE_HOST="x86_64-linux-gnu"
238
        LINUX_HOST_ARCH=x86_64
239
		;;
240
 
1477 dpurdie 241
    *)
1467 alewis 242
        echo "Unknown ARCH=${ARCH}"
243
        exit 1
244
        ;;
245
esac
246
 
247
# Setup the location of the cross compiler
5400 dpurdie 248
if [ "${COMPILE_HOST}" = "i386-redhat-linux" ] || [ "${COMPILER_DIR}" = "gcc" ] || [ "${COMPILE_HOST}" = "i686-linux-gnu" ] || [ "${COMPILE_HOST}" = "x86_64-linux-gnu" ]; then
1467 alewis 249
    XGCC_BASE_DIR=
4789 alewis 250
    STRIP=strip
1467 alewis 251
else
252
    XGCC_BASE_DIR=`echo ${COMPILER_DIR} | sed 's|/[^/]*/[^/]*$||'`
253
    XGCC_BASE_DIR=`cleanup_dir ${XGCC_BASE_DIR}`
4789 alewis 254
    STRIP=${XGCC_BASE_DIR}/bin/${COMPILE_HOST}-strip
1467 alewis 255
fi
256
 
257
# Determine the location of the generated files
258
CWD=`pwd`
1469 alewis 259
BIN_DIR=`cleanup_dir ${CWD}/${BIN_DIR}`
260
LIB_DIR=`cleanup_dir ${CWD}/${LIB_DIR}`
261
OBJ_DIR=`cleanup_dir ${CWD}/${OBJ_DIR}`
1475 dpurdie 262
PKG_DIR=`cleanup_dir ${CWD}/${PKG_DIR}`
1467 alewis 263
PKG_BIN_DIR=`cleanup_dir ${CWD}/${PKG_BIN_DIR}`
264
PKG_INC_DIR=`cleanup_dir ${CWD}/${PKG_INC_DIR}`
265
PKG_LIB_DIR=`cleanup_dir ${CWD}/${PKG_LIB_DIR}`
266
PKG_PKG_DIR=`cleanup_dir ${CWD}/${PKG_PKG_DIR}`
267
 
268
PKG_TOOL_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_DIR}`
269
PKG_TOOL_BIN_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_BIN_DIR}`
270
PKG_TOOL_SCRIPT_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_SCRIPT_DIR}`
271
 
272
BASE_DIR=`cleanup_dir ${CWD}/${BUILD_ROOT}`
1475 dpurdie 273
INTERFACE_DIR=`cleanup_dir ${CWD}/${INTERFACE_DIR}`
274
LOCAL_DIR=`cleanup_dir ${CWD}/${LOCAL_DIR}`
1477 dpurdie 275
LOCAL_INC_DIR=`cleanup_dir ${CWD}/${LOCAL_INC_DIR}`
276
LOCAL_BIN_DIR=`cleanup_dir ${CWD}/${LOCAL_BIN_DIR}`
277
LOCAL_LIB_DIR=`cleanup_dir ${CWD}/${LOCAL_LIB_DIR}`
1469 alewis 278
LCL_SRC_DIR=${BASE_DIR}/src
279
SHARE_SRC_DIR=${LCL_SRC_DIR}
280
SHARE_BASE_DIR=${BASE_DIR}
1467 alewis 281
 
4789 alewis 282
DEB_PKG_DIR=$(echo ${BIN_DIR} | sed "s|\.BIN$|\.DEBPKG|")
1469 alewis 283
AFC_DIR=${DEB_PKG_DIR}/afc
284
AFC_BIN_DIR=${AFC_DIR}/bin
285
AFC_LIB_DIR=${AFC_DIR}/lib
286
AFC_SHARE_DIR=${AFC_DIR}/share
287
 
1475 dpurdie 288
DEB_DIR=`cleanup_dir ${CWD}/${DEBIAN_PACKAGE}`
1469 alewis 289
 
1467 alewis 290
# Find the launch script
1469 alewis 291
LAUNCH_SCRIPT=`cleanup_dir ${LCL_SRC_DIR}/${SHELL_BUILD}`
1467 alewis 292
 
293
if [ ! -f ${LAUNCH_SCRIPT} ]; then
294
    echo "Specified shell build script ${LAUNCH_SCRIPT} does not exist."
295
    exit 1
296
fi
297
 
1491 alewis 298
REL_BASE_DIR=../..
1467 alewis 299
if [ ${DOWNLOAD_PKG} ]; then
1469 alewis 300
 
301
    # This is the set of available download directories, consisting of downloads/
302
    # and a download directory that is offset from the location of the build
303
    # script src directory.
304
    unset TAR_DECOMP_ARG
305
    TMP=`echo ${SHELL_BUILD} | sed "s|/src/.*||"`
306
    TMP=`cleanup_dir ${CWD}/${TMP}`
1491 alewis 307
    DDIR_ELSEWHERE=${TMP}
1469 alewis 308
    DOWNLOAD_DIRS="${TMP} ${BASE_DIR}"
309
    for DDIR in ${DOWNLOAD_DIRS}; do
310
        TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.bz2
311
        if [ -e ${TMP} ]; then
312
            TARBALL_FILE=${TMP}
313
            SHARE_SRC_DIR=${DDIR}/src
314
            SHARE_BASE_DIR=${DDIR}
315
            TAR_DECOMP_ARG=j
1467 alewis 316
        else
1469 alewis 317
            TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.gz
318
            if [ -e ${TMP} ]; then
319
                TARBALL_FILE=${TMP}
320
                SHARE_SRC_DIR=${DDIR}/src
321
                SHARE_BASE_DIR=${DDIR}
1467 alewis 322
                TAR_DECOMP_ARG=z
323
            else
1469 alewis 324
                TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tgz
325
                if [ -e ${TMP} ]; then
326
                    TARBALL_FILE=${TMP}
327
                    SHARE_SRC_DIR=${DDIR}/src
328
                    SHARE_BASE_DIR=${DDIR}
329
                    TAR_DECOMP_ARG=z
3848 bmyers 330
                else
331
                    TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.zip
332
                    if [ -e ${TMP} ]; then
333
                        TARBALL_FILE=${TMP}
334
                        SHARE_SRC_DIR=${DDIR}/src
335
                        SHARE_BASE_DIR=${DDIR}
336
                        TAR_DECOMP_ARG=unzip
337
                    fi
1469 alewis 338
                fi
1467 alewis 339
            fi
1469 alewis 340
        fi    
341
    done
4069 dpurdie 342
    if [ "${SHARE_BASE_DIR}" = "${DDIR_ELSEWHERE}" ]; then
1491 alewis 343
        REL_BASE_DIR=../$(echo ${SHELL_BUILD} | sed "s|/src/.*||")
344
    fi
4069 dpurdie 345
    if [ "${TAR_DECOMP_ARG}" = "" ]; then
3848 bmyers 346
        echo "Could not find download file ${DOWNLOAD_PKG}.<tar.gz|tar.bz2|tgz|zip> in any of { ${DOWNLOAD_DIRS} }"
1469 alewis 347
        exit 1
348
    fi
1483 alewis 349
    UNTAR_DIR=${LCL_SRC_DIR}/${DOWNLOAD_PKG}
350
    WORK_DIR=${UNTAR_DIR}.${PLATFORM}${TYPE}
1467 alewis 351
else
1489 alewis 352
    WORK_DIR=${LCL_SRC_DIR}
1467 alewis 353
fi
354
 
1475 dpurdie 355
#
1477 dpurdie 356
#   Setup WORK_DIR
357
#   This can be deduced from the tar-file, but in some cases the name
358
#   must be specified
359
#
360
if [ ${WORK_DIR_NAME} ]; then
361
    WORK_DIR=${LCL_SRC_DIR}/${WORK_DIR_NAME}
362
fi
1495 alewis 363
if [ ${WORK_DIR_SUFFIX} ]; then
364
    WORK_DIR=${WORK_DIR}${WORK_DIR_SUFFIX}
365
fi    
1477 dpurdie 366
 
367
#
1475 dpurdie 368
#   Extend compiler and linker search paths to access data within
369
#   packages imported via BuildPkgArchive
370
#
371
#   Include the packageing directory - its used for builds that
372
#   build multiple packages.
373
#
374
#   Only include paths that exist
375
#
376
INCLUDE=
377
LIBPATH=
4853 alewis 378
NORMAL_PLATFORM=$(echo ${PLATFORM} | sed "s|_INSTRUMENT$||")
1467 alewis 379
 
4853 alewis 380
 
1475 dpurdie 381
DJOIN=""
382
DLIST="
383
${PKG_INC_DIR}
384
${LOCAL_DIR}/inc
385
${INTERFACE_DIR}/include/${PLATFORM}
1497 bmyers 386
${INTERFACE_DIR}/include/LINUX
1475 dpurdie 387
${INTERFACE_DIR}/include
388
"
1497 bmyers 389
 
4853 alewis 390
# Modify for derivative platforms.
391
if [ "${NORMAL_PLATFORM}" != "${PLATFORM}" ]; then
392
    DLIST="${DLIST} ${INTERFACE_DIR}/include/${NORMAL_PLATFORM}"
393
fi
394
 
1475 dpurdie 395
for dtest in ${DLIST} ; do
396
    if [ -d $dtest ] ; then
397
        INCLUDE="${INCLUDE}${DJOIN}-I$dtest"
398
        DJOIN=" "
399
    fi
400
done
1467 alewis 401
 
1475 dpurdie 402
DJOIN=""
403
DLIST="
404
${PKG_LIB_DIR}
405
${LOCAL_DIR}/lib/${PLATFORM}
406
${INTERFACE_DIR}/lib/${PLATFORM}
407
"
4853 alewis 408
 
409
# Modify for derivative platforms.
410
if [ "${NORMAL_PLATFORM}" != "${PLATFORM}" ]; then
411
    DLIST="${DLIST} ${INTERFACE_DIR}/lib/${NORMAL_PLATFORM}"
412
fi
413
 
1475 dpurdie 414
for dtest in ${DLIST} ; do
415
    if [ -d $dtest ] ; then
416
        LIBPATH="${LIBPATH}${DJOIN}-L$dtest"
417
        DJOIN=" "
418
    fi
419
done
1467 alewis 420
 
4853 alewis 421
 
422
 
1467 alewis 423
# Dump configuration
4069 dpurdie 424
echo "="
1467 alewis 425
echo "   BUILD CONFIGURATION"
4069 dpurdie 426
echo "="
1467 alewis 427
echo " Compile Host   = ${COMPILE_HOST}"
428
echo " Compile Build  = ${COMPILE_BUILD}"
429
echo " XGCC Base Dir  = ${XGCC_BASE_DIR}"
430
echo " Base Dir       = ${BASE_DIR}"
1477 dpurdie 431
 
432
if [ ${WORK_DIR_NAME} ]; then
433
    echo " Work Dir Name  = ${WORK_DIR_NAME}"
434
fi  
435
 
1467 alewis 436
if [ ${DOWNLOAD_PKG} ]; then
437
    echo " Tarball File   = ${TARBALL_FILE}"
438
    echo " Working Dir    = ${WORK_DIR}"
1477 dpurdie 439
fi
440
 
441
TITLE="Includes       ="
1475 dpurdie 442
for INC in ${INCLUDE}; do
1477 dpurdie 443
        echo " ${TITLE} ${INC}"
444
        TITLE="                "
1469 alewis 445
done
1477 dpurdie 446
 
447
TITLE="Library Path   ="
1483 alewis 448
for LIB in ${LIBPATH}; do
1477 dpurdie 449
        echo " ${TITLE} ${LIB}"
450
        TITLE="                "
1469 alewis 451
done
1477 dpurdie 452
 
4789 alewis 453
echo " Debian Package = ${DEB_PKG_DIR}"
1477 dpurdie 454
 
1467 alewis 455
echo " Launch Script  = ${LAUNCH_SCRIPT}"
4069 dpurdie 456
echo "="
1467 alewis 457
echo
458
echo
459
 
460
# Prepare the environment
461
echo " --> Preparing environment"
462
 
1483 alewis 463
LIBTOOL=${XGCC_BASE_DIR}/bin/${COMPILE_HOST}-libtool
464
if [ -e ${LIBTOOL} ]; then
465
    echo " --> Using toolchain libtool"
466
else
467
    echo " --> Using environment libtool"
468
    LIBTOOL=/usr/bin/libtool
4594 alewis 469
fi
1467 alewis 470
export LIBTOOL
471
 
1473 dpurdie 472
unset CC
473
unset CXX
474
unset CPP
475
unset CPPFLAGS
476
unset LD_LIBRARY_PATH
477
export CC CXX CPP CPPFLAGS LD_LIBRARY_PATH
478
 
4594 alewis 479
 
1467 alewis 480
unset MAKE
481
unset MAKEFLAGS
482
unset MAKEOVERRIDES
483
unset MAKELEVEL
1473 dpurdie 484
export CFLAGS="${CFLAGS} ${INCLUDE}"
1475 dpurdie 485
export CXXFLAGS="${CXXFLAGS} ${INCLUDE}"
1473 dpurdie 486
export CCFLAGS="${CCFLAGS} ${INCLUDE}"
4483 dpurdie 487
export CPPFLAGS="${CPPFLAGS} ${INCLUDE}"
1467 alewis 488
export LDFLAGS="${LDFLAGS} ${LIBPATH}"
489
 
4594 alewis 490
 
1483 alewis 491
if [ "${XGCC_IN_PATH}" != "" ]; then
1493 dpurdie 492
    XGCC_COMPILER_PATH="${XGCC_BASE_DIR}/${COMPILE_HOST}/bin"
1483 alewis 493
    XGCC_IN_PATH_PREFIX_DIR=${XGCC_BASE_DIR}/${COMPILE_HOST}
1493 dpurdie 494
else
495
    XGCC_COMPILER_PATH="${XGCC_BASE_DIR}/bin"
1483 alewis 496
    XGCC_IN_PATH_PREFIX_DIR=/afc
1467 alewis 497
fi
498
 
4594 alewis 499
 
1493 dpurdie 500
#
501
#   Do not prepend the compiler path if it is already present in PATH
502
#   In particular do not prepend /usr/bin as this will prevent tools
503
#   provided in packages (eg bison) from overriding local versions
504
#
4594 alewis 505
if ! expr -- ":${PATH}:" : ".*:${XGCC_COMPILER_PATH}:" > /dev/null ; then
1493 dpurdie 506
    export PATH="${XGCC_COMPILER_PATH}:${PATH}"
4594 alewis 507
    echo " --> Prepending compiler path"
1493 dpurdie 508
fi
1475 dpurdie 509
 
4594 alewis 510
 
1475 dpurdie 511
#
1483 alewis 512
# Environment - CHOST is used by some packages (e.g., zlib) to set the 
513
# host environment compiler.
514
#
515
export CHOST=${COMPILE_HOST}
516
 
517
#
518
# These are special files used to track completion of tasks allowing for partial
519
# rebuilds during development.
520
#
521
COMPLETE_PREFIX=${LCL_SRC_DIR}/.complete${DOWNLOAD_PKG}.${PLATFORM}${TYPE}.
1495 alewis 522
COMPLETE_DECOMPRESS=${COMPLETE_PREFIX}decompress${WORK_DIR_SUFFIX}
523
COMPLETE_CONFIGURE=${COMPLETE_PREFIX}configure${WORK_DIR_SUFFIX}
1483 alewis 524
 
525
#
1475 dpurdie 526
#   Clean up request
527
#   No building - just a clean of previous builds
528
#
1467 alewis 529
if [ ${CLEAN} ]; then
1483 alewis 530
    echo " --> Removing all completion tags"
1487 alewis 531
    rm -fr ${LCL_SRC_DIR}/.complete*
1483 alewis 532
 
1467 alewis 533
    if [ ${DOWNLOAD_PKG} ]; then
534
        echo " --> Cleaning generated files"
535
        cd ${BASE_DIR}
536
        rm -fr ${WORK_DIR}
537
    fi        
1469 alewis 538
 
539
    echo " --> Deleting binary, object, and library directories"
540
    rm -fr ${BIN_DIR}
541
    rm -fr ${LIB_DIR}
542
    rm -fr ${OBJ_DIR}
4789 alewis 543
    rm -fr ${DEB_PKG_DIR}
1475 dpurdie 544
 
545
    if [ ${DEBIAN_PACKAGE} ]; then
546
        echo " --> Deleting Debian Build Files "
547
        rm -fr ${DEB_DIR}
548
    fi
1469 alewis 549
 
1467 alewis 550
    exit 0
551
fi
552
 
553
 
554
echo " --> Creating package directories"
555
mkdir -p ${PKG_BIN_DIR}
556
mkdir -p ${PKG_INC_DIR}
557
mkdir -p ${PKG_LIB_DIR}
558
mkdir -p ${PKG_PKG_DIR}
559
mkdir -p ${AFC_DIR}
560
mkdir -p ${AFC_BIN_DIR}
561
mkdir -p ${AFC_LIB_DIR}
562
mkdir -p ${AFC_SHARE_DIR}
563
mkdir -p ${PKG_TOOL_DIR}
564
mkdir -p ${PKG_TOOL_BIN_DIR}
565
mkdir -p ${PKG_TOOL_SCRIPT_DIR}
566
 
4594 alewis 567
unset MENUCONFIG_FILE
1467 alewis 568
 
4594 alewis 569
 
1467 alewis 570
if [ ${DOWNLOAD_PKG} ]; then
4594 alewis 571
 
572
    MODS_DIR=${SHARE_BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods
573
 
574
    # Find and export the configuration file (if any).
575
    VIX_CONFIG=${MODS_DIR}/vix.config
576
    if [ ! -f ${VIX_CONFIG} ]; then
577
        VIX_CONFIG=${MODS_DIR}/VXP.config
578
        if [ ! -f ${VIX_CONFIG} ]; then
579
            VIX_CONFIG=${MODS_DIR}/ERG.config
580
        fi
581
    fi
582
    if [ -f ${VIX_CONFIG} ]; then
583
        echo " --> Config file is $VIX_CONFIG"
584
        MENUCONFIG_FILE=`echo "${VIX_CONFIG}" | sed "s|${MODS_DIR}|${REL_BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods|g"`
585
        export MENUCONFIG_FILE
586
    else
587
        echo " --> No configuration file found"
588
    fi
589
 
1483 alewis 590
    if [ -e ${COMPLETE_DECOMPRESS} ]; then
591
        echo " --> Already extracted ${DOWNLOAD_PKG}"
592
    else
593
        echo " --> Deleting existing build objects directory"
594
        rm -fr ${UNTAR_DIR}
595
        rm -fr ${WORK_DIR}
1467 alewis 596
 
1483 alewis 597
        echo " --> Extracting ${DOWNLOAD_PKG}"
598
        cd ${LCL_SRC_DIR}
3848 bmyers 599
        # For Zip file use unzip instead of tar
4069 dpurdie 600
        if [ "${TAR_DECOMP_ARG}" = "unzip" ]; then
3848 bmyers 601
            unzip ${TARBALL_FILE}
602
        else
603
            tar -x${TAR_DECOMP_ARG}pf ${TARBALL_FILE}
604
        fi
1483 alewis 605
 
606
        cd ${UNTAR_DIR}
4789 alewis 607
        PATCHES_DIR=${SHARE_BASE_DIR}/${PATCHES_DIR}
1483 alewis 608
        if [ -d ${PATCHES_DIR} ]; then
609
            PATCHES=`cd ${PATCHES_DIR} && find . -name "*.patch" | sort`
610
            if [ "${PATCHES}" != "" ]; then
611
                echo " --> Apply external patches"
612
                for PATCH in ${PATCHES}; do
613
                    if patch -p1 < ${PATCHES_DIR}/${PATCH}; then
614
                        echo "Applied patch ${PATCH}"
615
                        echo ""
616
                    else
6831 cmichael 617
                        if [ "${IGNORE_PATH_ERR}" = "1" ]; then
618
                            echo "Patch ${PATCH} errors ignored"
619
                        else 
620
                            echo "Patch ${PATCH} failed"
621
                            exit 1
622
                        fi
1483 alewis 623
                    fi
624
                done    
625
            fi
1467 alewis 626
        fi
1483 alewis 627
 
1491 alewis 628
        #
629
        #   When a 'mods' directory is present we need to sym-link all the 
630
        #   files from there into the source tree.
631
        #
1483 alewis 632
        cd ${UNTAR_DIR}
633
        if [ -d ${MODS_DIR} ]; then
1491 alewis 634
            echo " --> Applying modifications from ${MODS_DIR}"
635
            echo "     Base relative directory is  ${REL_BASE_DIR}"
636
            if [ "${COPY_MODS_DIRS}" != "" ]; then
637
                echo "     Directories are copied"
638
            else
639
                echo "     Directories are symlinked"
640
            fi                
641
 
4594 alewis 642
            create_mods()
643
            {
1491 alewis 644
                local SRC
645
                local REL
646
                local DST
647
                local NAME
648
                local MOD_DIR=$1
649
                local REL_DEPTH=$2
650
                for SRC in `ls ${MOD_DIR}`; do
651
                    SRC=${MOD_DIR}${SRC}
652
                    REL=`echo "${SRC}" | sed "s|${MODS_DIR}|${REL_DEPTH}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods|g"`
653
                    DST=`echo "${SRC}" | sed "s|${MODS_DIR}/||g"`
654
                    if [ -d "${SRC}" ]; then
655
                        if [ -e "${DST}" ]; then
656
                            create_mods ${SRC}/ ../${REL_DEPTH}
657
                        else
658
                            if [ "${COPY_MODS_DIRS}" != "" ]; then
659
                                echo "       * Creating directory ${DST}"
660
                                mkdir -p ${DST}
661
                                create_mods ${SRC}/ ../${REL_DEPTH}
662
                            else
663
                                echo "       * Creating directory ${DST} symlink"
664
                                ln -s ${REL} ${DST}
665
                                if [ $? != 0 ]; then
666
                                    echo "ERROR: Could not create symlink from ${REL} to ${DST}"
667
                                    exit 1
668
                                fi
669
                            fi                                
670
                        fi
671
                    else
672
                        if [ -e "${DST}" ]; then
673
                            echo "       * Replacing file ${DST} with symlink"
674
                            rm -f ${DST}
675
                        else
676
                            echo "       * Creating file ${DST} symlink"
677
                        fi
678
                        ln -s ${REL} ${DST}
679
                        if [ $? != 0 ]; then
680
                            echo "ERROR: Could not create symlink from ${REL} to ${DST}"
681
                            exit 1
682
                        fi
683
                    fi
684
                done
685
            }
686
 
687
            create_mods ${MODS_DIR}/ ${REL_BASE_DIR}
4594 alewis 688
            if [ "$MENUCONFIG_FILE" != "" ]; then
1491 alewis 689
                if [ -e .config ]; then
690
                    echo "       * Replacing .config with symlink"
691
                    rm -f .config
692
                else
693
                    echo "       * Creating .config symlink"
694
                fi
4594 alewis 695
                ln -s ${MENUCONFIG_FILE} .config
1483 alewis 696
            fi
1467 alewis 697
        fi
698
 
1483 alewis 699
        mv ${UNTAR_DIR} ${WORK_DIR} 
700
 
701
        touch ${COMPLETE_DECOMPRESS}
702
    fi        
1475 dpurdie 703
fi
1467 alewis 704
 
1491 alewis 705
 
1475 dpurdie 706
#
707
#   Source the users script
708
#   This is processed in the context of this script
709
#
1485 alewis 710
mkdir -p ${WORK_DIR}
1483 alewis 711
cd ${WORK_DIR}
4069 dpurdie 712
. ${LAUNCH_SCRIPT}
1467 alewis 713
 
714
 
715
if [ ${DEBIAN_PACKAGE} ]; then 
716
    echo " --> Creating Debian packaging scripts"
717
    unset TOOL_DIR
718
    for DIR in `echo ${PATH} | sed "s|\:| |g"`; do
719
        if [ -f ${DIR}/debbuild.pl ]; then
720
            TOOL_DIR=`cleanup_dir ${DIR}`
721
        fi
722
    done
723
    if [ ${TOOL_DIR} ]; then
724
        DEBBUILD_PL=${TOOL_DIR}/debbuild.pl
1469 alewis 725
        echo "      - Found ${DEBBUILD_PL}"
1467 alewis 726
 
727
        rm -fr ${DEB_DIR}
728
        mkdir -p ${DEB_DIR}
1475 dpurdie 729
 
730
        # Replace TAGS in the debbuild.pl file
1467 alewis 731
        DEB_DESC="${BUILD_NAME} ${BUILD_VERSION} for ${PLATFORM}"
4857 alewis 732
        cat ${DEBBUILD_PL} | sed "-es|TAG_DESCRIPTION|${DEB_DESC}|" "-es|TAG_POSTINSTALL|${DEB_DIR}/postinstall|" "-es|TAG_DEBPKGDIR|${DEB_PKG_DIR}|" > ${DEB_DIR}/debbuild.pl
1467 alewis 733
        cp ${TOOL_DIR}/postinstall ${DEB_DIR}/postinstall
734
    else
735
        echo "ERROR: Cannot find debbuild.pl in the PATH"
736
        exit 1
737
    fi
738
fi    
739
 
1469 alewis 740
echo " --> Removing unnecesary files resulting from the make install"
1477 dpurdie 741
if [ -d ${PKG_LIB_DIR} ] ; then
742
    DEL_FILES=`find ${PKG_LIB_DIR} -type f -name '*.la'`
743
    for FILE in ${DEL_FILES}; do
744
            echo "      - Deleting ${FILE}"
745
            rm -f ${FILE}
746
    done
747
fi
1469 alewis 748
 
749
echo " --> Cleaning up empty directories"
750
# Deletes directory $1 if it does not contain any other files or directories
4069 dpurdie 751
rmdir_empty()
1469 alewis 752
{
1477 dpurdie 753
    if [ -d "$1" ] ; then
754
        # -A = do not list . and ..
755
        # -Q = enclose entry names in double quotes
756
        # -l = list one file per line
757
        # -F = appends each directory with a '/' 
758
        DIRS=`ls -A -Q -l -F "$1" | grep "\".*\"\/" | sed "s|.* \"||" | sed "s|\"\/||"`
759
        for DIR in ${DIRS}; do
760
            rmdir_empty $1/${DIR}
761
        done
1469 alewis 762
 
1477 dpurdie 763
        LS=`ls -A -Q -l -F "$1" | grep "\"" | sed "s|^.* \"||" | sed "s|\".*||"`
4069 dpurdie 764
        if [ "${LS}" = "" ]; then
1477 dpurdie 765
            rmdir $1
766
        fi
1469 alewis 767
    fi
768
}
1477 dpurdie 769
 
4789 alewis 770
rmdir_empty ${AFC_DIR}
771
rmdir_empty ${AFC_BIN_DIR}
772
rmdir_empty ${AFC_LIB_DIR}
773
rmdir_empty ${AFC_SHARE_DIR}
1469 alewis 774
rmdir_empty ${BASE_DIR}/pkg
775
 
1473 dpurdie 776
echo " --> End of ShellBuild"
1469 alewis 777