Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

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