Subversion Repositories DevTools

Rev

Rev 6796 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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