Subversion Repositories DevTools

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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