Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

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