Subversion Repositories DevTools

Rev

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