Subversion Repositories DevTools

Rev

Rev 6839 | Details | Compare with Previous | Last modification | View Log | RSS feed

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