Subversion Repositories DevTools

Rev

Rev 7478 | 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" ;;
7480 dpurdie 282
            ANDROIDARMV7)   COMPILE_HOST="arm-linux-androideabi" ;;
283
            ANDROIDARM64)   COMPILE_HOST="aarch64-linux-android" ;;
284
            ANDROIDMIPS64)  COMPILE_HOST="mips64el-linux-android" ;;
285
            ANDROIDX86_64)  COMPILE_HOST="x86_64-linux-android" ;;
7478 dpurdie 286
 
6601 dpurdie 287
            *)
288
                echo "Unknown ARCH=${ARCH}"
289
                exit 1
290
                ;;
291
        esac
292
 
1467 alewis 293
esac
294
 
295
# Setup the location of the cross compiler
5400 dpurdie 296
if [ "${COMPILE_HOST}" = "i386-redhat-linux" ] || [ "${COMPILER_DIR}" = "gcc" ] || [ "${COMPILE_HOST}" = "i686-linux-gnu" ] || [ "${COMPILE_HOST}" = "x86_64-linux-gnu" ]; then
1467 alewis 297
    XGCC_BASE_DIR=
4789 alewis 298
    STRIP=strip
1467 alewis 299
else
300
    XGCC_BASE_DIR=`echo ${COMPILER_DIR} | sed 's|/[^/]*/[^/]*$||'`
301
    XGCC_BASE_DIR=`cleanup_dir ${XGCC_BASE_DIR}`
4789 alewis 302
    STRIP=${XGCC_BASE_DIR}/bin/${COMPILE_HOST}-strip
1467 alewis 303
fi
304
 
305
# Determine the location of the generated files
306
CWD=`pwd`
1469 alewis 307
BIN_DIR=`cleanup_dir ${CWD}/${BIN_DIR}`
308
LIB_DIR=`cleanup_dir ${CWD}/${LIB_DIR}`
309
OBJ_DIR=`cleanup_dir ${CWD}/${OBJ_DIR}`
1475 dpurdie 310
PKG_DIR=`cleanup_dir ${CWD}/${PKG_DIR}`
1467 alewis 311
PKG_BIN_DIR=`cleanup_dir ${CWD}/${PKG_BIN_DIR}`
312
PKG_INC_DIR=`cleanup_dir ${CWD}/${PKG_INC_DIR}`
313
PKG_LIB_DIR=`cleanup_dir ${CWD}/${PKG_LIB_DIR}`
314
PKG_PKG_DIR=`cleanup_dir ${CWD}/${PKG_PKG_DIR}`
315
 
316
PKG_TOOL_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_DIR}`
317
PKG_TOOL_BIN_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_BIN_DIR}`
318
PKG_TOOL_SCRIPT_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_SCRIPT_DIR}`
319
 
320
BASE_DIR=`cleanup_dir ${CWD}/${BUILD_ROOT}`
1475 dpurdie 321
INTERFACE_DIR=`cleanup_dir ${CWD}/${INTERFACE_DIR}`
322
LOCAL_DIR=`cleanup_dir ${CWD}/${LOCAL_DIR}`
1477 dpurdie 323
LOCAL_INC_DIR=`cleanup_dir ${CWD}/${LOCAL_INC_DIR}`
324
LOCAL_BIN_DIR=`cleanup_dir ${CWD}/${LOCAL_BIN_DIR}`
325
LOCAL_LIB_DIR=`cleanup_dir ${CWD}/${LOCAL_LIB_DIR}`
1469 alewis 326
LCL_SRC_DIR=${BASE_DIR}/src
327
SHARE_SRC_DIR=${LCL_SRC_DIR}
328
SHARE_BASE_DIR=${BASE_DIR}
1467 alewis 329
 
4789 alewis 330
DEB_PKG_DIR=$(echo ${BIN_DIR} | sed "s|\.BIN$|\.DEBPKG|")
1469 alewis 331
AFC_DIR=${DEB_PKG_DIR}/afc
332
AFC_BIN_DIR=${AFC_DIR}/bin
333
AFC_LIB_DIR=${AFC_DIR}/lib
334
AFC_SHARE_DIR=${AFC_DIR}/share
335
 
1475 dpurdie 336
DEB_DIR=`cleanup_dir ${CWD}/${DEBIAN_PACKAGE}`
1469 alewis 337
 
1467 alewis 338
# Find the launch script
1469 alewis 339
LAUNCH_SCRIPT=`cleanup_dir ${LCL_SRC_DIR}/${SHELL_BUILD}`
1467 alewis 340
 
341
if [ ! -f ${LAUNCH_SCRIPT} ]; then
342
    echo "Specified shell build script ${LAUNCH_SCRIPT} does not exist."
343
    exit 1
344
fi
345
 
1491 alewis 346
REL_BASE_DIR=../..
1467 alewis 347
if [ ${DOWNLOAD_PKG} ]; then
1469 alewis 348
 
349
    # This is the set of available download directories, consisting of downloads/
350
    # and a download directory that is offset from the location of the build
351
    # script src directory.
352
    unset TAR_DECOMP_ARG
353
    TMP=`echo ${SHELL_BUILD} | sed "s|/src/.*||"`
354
    TMP=`cleanup_dir ${CWD}/${TMP}`
1491 alewis 355
    DDIR_ELSEWHERE=${TMP}
1469 alewis 356
    DOWNLOAD_DIRS="${TMP} ${BASE_DIR}"
357
    for DDIR in ${DOWNLOAD_DIRS}; do
358
        TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.bz2
359
        if [ -e ${TMP} ]; then
360
            TARBALL_FILE=${TMP}
361
            SHARE_SRC_DIR=${DDIR}/src
362
            SHARE_BASE_DIR=${DDIR}
363
            TAR_DECOMP_ARG=j
1467 alewis 364
        else
1469 alewis 365
            TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.gz
366
            if [ -e ${TMP} ]; then
367
                TARBALL_FILE=${TMP}
368
                SHARE_SRC_DIR=${DDIR}/src
369
                SHARE_BASE_DIR=${DDIR}
1467 alewis 370
                TAR_DECOMP_ARG=z
371
            else
1469 alewis 372
                TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tgz
373
                if [ -e ${TMP} ]; then
374
                    TARBALL_FILE=${TMP}
375
                    SHARE_SRC_DIR=${DDIR}/src
376
                    SHARE_BASE_DIR=${DDIR}
377
                    TAR_DECOMP_ARG=z
3848 bmyers 378
                else
379
                    TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.zip
380
                    if [ -e ${TMP} ]; then
381
                        TARBALL_FILE=${TMP}
382
                        SHARE_SRC_DIR=${DDIR}/src
383
                        SHARE_BASE_DIR=${DDIR}
384
                        TAR_DECOMP_ARG=unzip
385
                    fi
1469 alewis 386
                fi
1467 alewis 387
            fi
1469 alewis 388
        fi    
389
    done
4069 dpurdie 390
    if [ "${SHARE_BASE_DIR}" = "${DDIR_ELSEWHERE}" ]; then
1491 alewis 391
        REL_BASE_DIR=../$(echo ${SHELL_BUILD} | sed "s|/src/.*||")
392
    fi
4069 dpurdie 393
    if [ "${TAR_DECOMP_ARG}" = "" ]; then
3848 bmyers 394
        echo "Could not find download file ${DOWNLOAD_PKG}.<tar.gz|tar.bz2|tgz|zip> in any of { ${DOWNLOAD_DIRS} }"
1469 alewis 395
        exit 1
396
    fi
6152 dpurdie 397
    if [ -n "${WORK_DIR_NAME}" ] ; then
398
        UNTAR_DIR=${LCL_SRC_DIR}/${WORK_DIR_NAME}
399
    else
400
        UNTAR_DIR=${LCL_SRC_DIR}/${DOWNLOAD_PKG}
401
    fi
1483 alewis 402
    WORK_DIR=${UNTAR_DIR}.${PLATFORM}${TYPE}
1467 alewis 403
else
1489 alewis 404
    WORK_DIR=${LCL_SRC_DIR}
6152 dpurdie 405
    if [ ${WORK_DIR_NAME} ]; then
406
        WORK_DIR=${LCL_SRC_DIR}/${WORK_DIR_NAME}
407
    fi
1467 alewis 408
fi
409
 
1475 dpurdie 410
#
6152 dpurdie 411
#   Suffix allows the package to be built multiple times for the one target
6601 dpurdie 412
#   Example: Client/Server or Native/Host or Static/Dynamic ...
6152 dpurdie 413
#   
1495 alewis 414
if [ ${WORK_DIR_SUFFIX} ]; then
415
    WORK_DIR=${WORK_DIR}${WORK_DIR_SUFFIX}
416
fi    
1477 dpurdie 417
 
418
#
1475 dpurdie 419
#   Extend compiler and linker search paths to access data within
420
#   packages imported via BuildPkgArchive
421
#
422
#   Include the packageing directory - its used for builds that
423
#   build multiple packages.
424
#
425
#   Only include paths that exist
426
#
427
INCLUDE=
428
LIBPATH=
4853 alewis 429
NORMAL_PLATFORM=$(echo ${PLATFORM} | sed "s|_INSTRUMENT$||")
1467 alewis 430
 
4853 alewis 431
 
1475 dpurdie 432
DJOIN=""
433
DLIST="
434
${PKG_INC_DIR}
435
${LOCAL_DIR}/inc
436
${INTERFACE_DIR}/include/${PLATFORM}
1497 bmyers 437
${INTERFACE_DIR}/include/LINUX
1475 dpurdie 438
${INTERFACE_DIR}/include
439
"
1497 bmyers 440
 
4853 alewis 441
# Modify for derivative platforms.
442
if [ "${NORMAL_PLATFORM}" != "${PLATFORM}" ]; then
443
    DLIST="${DLIST} ${INTERFACE_DIR}/include/${NORMAL_PLATFORM}"
444
fi
445
 
1475 dpurdie 446
for dtest in ${DLIST} ; do
447
    if [ -d $dtest ] ; then
448
        INCLUDE="${INCLUDE}${DJOIN}-I$dtest"
449
        DJOIN=" "
450
    fi
451
done
1467 alewis 452
 
1475 dpurdie 453
DJOIN=""
454
DLIST="
455
${PKG_LIB_DIR}
456
${LOCAL_DIR}/lib/${PLATFORM}
457
${INTERFACE_DIR}/lib/${PLATFORM}
458
"
4853 alewis 459
 
460
# Modify for derivative platforms.
461
if [ "${NORMAL_PLATFORM}" != "${PLATFORM}" ]; then
462
    DLIST="${DLIST} ${INTERFACE_DIR}/lib/${NORMAL_PLATFORM}"
463
fi
464
 
1475 dpurdie 465
for dtest in ${DLIST} ; do
466
    if [ -d $dtest ] ; then
467
        LIBPATH="${LIBPATH}${DJOIN}-L$dtest"
468
        DJOIN=" "
469
    fi
470
done
1467 alewis 471
 
4853 alewis 472
 
473
 
1467 alewis 474
# Dump configuration
6152 dpurdie 475
banner "BUILD CONFIGURATION"
476
pitem "Compile Host"    "${COMPILE_HOST}"
477
pitem "Compile Build"   "${COMPILE_BUILD}"
478
pitem "XGCC Base Dir"   "${XGCC_BASE_DIR}"
479
pitem "Base Dir"        "${BASE_DIR}"
480
pitem "Work Dir Name"   "${WORK_DIR_NAME}"
1477 dpurdie 481
 
1467 alewis 482
if [ ${DOWNLOAD_PKG} ]; then
6152 dpurdie 483
    pitem  "Tarball File" "${TARBALL_FILE}"
484
    pitem3 "UnTar Dir" "${UNTAR_DIR}" "${WORK_DIR_NAME}"
485
    pitem  "Working Dir" "${WORK_DIR}"
1477 dpurdie 486
fi
487
 
6152 dpurdie 488
plist "Includes" ${INCLUDE}
489
plist "Library Path" ${LIBPATH}
490
pitem "Debian Package"  "${DEB_PKG_DIR}"
491
pitem "Launch Script"   "${LAUNCH_SCRIPT}"
1477 dpurdie 492
 
6152 dpurdie 493
banner "Package Build"
1467 alewis 494
# Prepare the environment
495
echo " --> Preparing environment"
496
 
1483 alewis 497
LIBTOOL=${XGCC_BASE_DIR}/bin/${COMPILE_HOST}-libtool
498
if [ -e ${LIBTOOL} ]; then
499
    echo " --> Using toolchain libtool"
500
else
501
    echo " --> Using environment libtool"
502
    LIBTOOL=/usr/bin/libtool
4594 alewis 503
fi
1467 alewis 504
export LIBTOOL
505
 
1473 dpurdie 506
unset CC
507
unset CXX
508
unset CPP
509
unset CPPFLAGS
510
unset LD_LIBRARY_PATH
511
export CC CXX CPP CPPFLAGS LD_LIBRARY_PATH
512
 
4594 alewis 513
 
1467 alewis 514
unset MAKE
515
unset MAKEFLAGS
516
unset MAKEOVERRIDES
517
unset MAKELEVEL
1473 dpurdie 518
export CFLAGS="${CFLAGS} ${INCLUDE}"
1475 dpurdie 519
export CXXFLAGS="${CXXFLAGS} ${INCLUDE}"
1473 dpurdie 520
export CCFLAGS="${CCFLAGS} ${INCLUDE}"
4483 dpurdie 521
export CPPFLAGS="${CPPFLAGS} ${INCLUDE}"
1467 alewis 522
export LDFLAGS="${LDFLAGS} ${LIBPATH}"
523
 
4594 alewis 524
 
1483 alewis 525
if [ "${XGCC_IN_PATH}" != "" ]; then
1493 dpurdie 526
    XGCC_COMPILER_PATH="${XGCC_BASE_DIR}/${COMPILE_HOST}/bin"
1483 alewis 527
    XGCC_IN_PATH_PREFIX_DIR=${XGCC_BASE_DIR}/${COMPILE_HOST}
1493 dpurdie 528
else
529
    XGCC_COMPILER_PATH="${XGCC_BASE_DIR}/bin"
1483 alewis 530
    XGCC_IN_PATH_PREFIX_DIR=/afc
1467 alewis 531
fi
532
 
4594 alewis 533
 
1493 dpurdie 534
#
535
#   Do not prepend the compiler path if it is already present in PATH
536
#   In particular do not prepend /usr/bin as this will prevent tools
537
#   provided in packages (eg bison) from overriding local versions
538
#
4594 alewis 539
if ! expr -- ":${PATH}:" : ".*:${XGCC_COMPILER_PATH}:" > /dev/null ; then
1493 dpurdie 540
    export PATH="${XGCC_COMPILER_PATH}:${PATH}"
4594 alewis 541
    echo " --> Prepending compiler path"
1493 dpurdie 542
fi
1475 dpurdie 543
 
4594 alewis 544
 
1475 dpurdie 545
#
1483 alewis 546
# Environment - CHOST is used by some packages (e.g., zlib) to set the 
547
# host environment compiler.
548
#
549
export CHOST=${COMPILE_HOST}
550
 
551
#
552
# These are special files used to track completion of tasks allowing for partial
553
# rebuilds during development.
554
#
6601 dpurdie 555
#   COMPLETE_DECOMPRESS - Source extracted
556
#   COMPLETE_CONFIGURE - CONFIGURE completed
557
#   COMPLETE_BUILD - Build competed
558
#
559
COMPLETE_PREFIX=${WORK_DIR}/.complete-
560
COMPLETE_DECOMPRESS=${COMPLETE_PREFIX}decompress
561
COMPLETE_CONFIGURE=${COMPLETE_PREFIX}configure
562
COMPLETE_BUILD=${COMPLETE_PREFIX}build
1483 alewis 563
 
564
#
1475 dpurdie 565
#   Clean up request
566
#   No building - just a clean of previous builds
567
#
1467 alewis 568
if [ ${CLEAN} ]; then
1483 alewis 569
 
1467 alewis 570
    if [ ${DOWNLOAD_PKG} ]; then
571
        echo " --> Cleaning generated files"
572
        cd ${BASE_DIR}
573
        rm -fr ${WORK_DIR}
574
    fi        
6112 dpurdie 575
 
576
    echo " --> Deleting temp work area"
577
    SHELLBUILD_PATH="$(pwd)/_shellbuild"
578
    rm -fr "${SHELLBUILD_PATH}"
1469 alewis 579
 
580
    echo " --> Deleting binary, object, and library directories"
581
    rm -fr ${BIN_DIR}
582
    rm -fr ${LIB_DIR}
583
    rm -fr ${OBJ_DIR}
4789 alewis 584
    rm -fr ${DEB_PKG_DIR}
1475 dpurdie 585
 
586
    if [ ${DEBIAN_PACKAGE} ]; then
587
        echo " --> Deleting Debian Build Files "
588
        rm -fr ${DEB_DIR}
589
    fi
1469 alewis 590
 
1467 alewis 591
    exit 0
592
fi
593
 
6601 dpurdie 594
#
595
#   Attempt to bypass the enture build
596
#   If its already been compeleted without error
597
#
598
if [ -e ${COMPLETE_BUILD} ]; then
599
    echo " --> Build already completed for ${PLATFORM}${TYPE}"
600
    exit 0
601
fi
1467 alewis 602
 
603
echo " --> Creating package directories"
604
mkdir -p ${PKG_BIN_DIR}
605
mkdir -p ${PKG_INC_DIR}
606
mkdir -p ${PKG_LIB_DIR}
607
mkdir -p ${PKG_PKG_DIR}
608
mkdir -p ${AFC_DIR}
609
mkdir -p ${AFC_BIN_DIR}
610
mkdir -p ${AFC_LIB_DIR}
611
mkdir -p ${AFC_SHARE_DIR}
612
 
6112 dpurdie 613
if [ ${ISA_TOOLSET} ]; then
614
    echo " --> Creating package toolset directories"
615
    mkdir -p ${PKG_TOOL_DIR}
616
    mkdir -p ${PKG_TOOL_BIN_DIR}
617
    mkdir -p ${PKG_TOOL_SCRIPT_DIR}
618
fi
619
 
4594 alewis 620
unset MENUCONFIG_FILE
1467 alewis 621
 
622
if [ ${DOWNLOAD_PKG} ]; then
4594 alewis 623
 
624
    MODS_DIR=${SHARE_BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods
625
 
626
    # Find and export the configuration file (if any).
627
    VIX_CONFIG=${MODS_DIR}/vix.config
628
    if [ ! -f ${VIX_CONFIG} ]; then
629
        VIX_CONFIG=${MODS_DIR}/VXP.config
630
        if [ ! -f ${VIX_CONFIG} ]; then
631
            VIX_CONFIG=${MODS_DIR}/ERG.config
632
        fi
633
    fi
634
    if [ -f ${VIX_CONFIG} ]; then
635
        echo " --> Config file is $VIX_CONFIG"
636
        MENUCONFIG_FILE=`echo "${VIX_CONFIG}" | sed "s|${MODS_DIR}|${REL_BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods|g"`
637
        export MENUCONFIG_FILE
638
    else
639
        echo " --> No configuration file found"
640
    fi
641
 
1483 alewis 642
    if [ -e ${COMPLETE_DECOMPRESS} ]; then
643
        echo " --> Already extracted ${DOWNLOAD_PKG}"
644
    else
645
        echo " --> Deleting existing build objects directory"
646
        rm -fr ${UNTAR_DIR}
647
        rm -fr ${WORK_DIR}
1467 alewis 648
 
1483 alewis 649
        echo " --> Extracting ${DOWNLOAD_PKG}"
650
        cd ${LCL_SRC_DIR}
3848 bmyers 651
        # For Zip file use unzip instead of tar
4069 dpurdie 652
        if [ "${TAR_DECOMP_ARG}" = "unzip" ]; then
3848 bmyers 653
            unzip ${TARBALL_FILE}
654
        else
655
            tar -x${TAR_DECOMP_ARG}pf ${TARBALL_FILE}
656
        fi
6152 dpurdie 657
 
658
        if [ ! -d ${UNTAR_DIR} ] ; then
659
            echo "Error: Tar file did not extract into the expected directory"
660
            echo "       Expected: ${UNTAR_DIR}"
661
            exit 1
662
        fi
663
 
1483 alewis 664
        cd ${UNTAR_DIR}
4789 alewis 665
        PATCHES_DIR=${SHARE_BASE_DIR}/${PATCHES_DIR}
1483 alewis 666
        if [ -d ${PATCHES_DIR} ]; then
667
            PATCHES=`cd ${PATCHES_DIR} && find . -name "*.patch" | sort`
668
            if [ "${PATCHES}" != "" ]; then
669
                echo " --> Apply external patches"
670
                for PATCH in ${PATCHES}; do
6152 dpurdie 671
                    if patch -t -p1 < ${PATCHES_DIR}/${PATCH}; then
1483 alewis 672
                        echo "Applied patch ${PATCH}"
673
                        echo ""
674
                    else
6114 dpurdie 675
                        if [ "${IGNORE_PATH_ERR}" = "1" ]; then
676
                            echo "Patch ${PATCH} errors ignored"
677
                        else 
678
                            echo "Patch ${PATCH} failed"
679
                            exit 1
680
                        fi
1483 alewis 681
                    fi
682
                done    
683
            fi
1467 alewis 684
        fi
6152 dpurdie 685
        PATCHES_DIR=${PATCHES_DIR}.${PLATFORM}
686
        if [ -d ${PATCHES_DIR} ]; then
687
            PATCHES=`cd ${PATCHES_DIR} && find . -name "*.patch" | sort`
688
            if [ "${PATCHES}" != "" ]; then
689
                echo " --> Apply external patches for ${PLATFORM}"
690
                for PATCH in ${PATCHES}; do
691
                    if patch -t -p1 < ${PATCHES_DIR}/${PATCH}; then
692
                        echo "Applied patch ${PATCH}"
693
                        echo ""
694
                    else
695
                        if [ "${IGNORE_PATH_ERR}" = "1" ]; then
696
                            echo "Patch ${PATCH} errors ignored"
697
                        else 
698
                            echo "Patch ${PATCH} failed"
699
                            exit 1
700
                        fi
701
                    fi
702
                done    
703
            fi
704
        fi
1483 alewis 705
 
1491 alewis 706
        #
707
        #   When a 'mods' directory is present we need to sym-link all the 
708
        #   files from there into the source tree.
709
        #
1483 alewis 710
        cd ${UNTAR_DIR}
711
        if [ -d ${MODS_DIR} ]; then
1491 alewis 712
            echo " --> Applying modifications from ${MODS_DIR}"
713
            echo "     Base relative directory is  ${REL_BASE_DIR}"
714
            if [ "${COPY_MODS_DIRS}" != "" ]; then
715
                echo "     Directories are copied"
716
            else
717
                echo "     Directories are symlinked"
718
            fi                
719
 
4594 alewis 720
            create_mods()
721
            {
1491 alewis 722
                local SRC
723
                local REL
724
                local DST
725
                local NAME
726
                local MOD_DIR=$1
727
                local REL_DEPTH=$2
728
                for SRC in `ls ${MOD_DIR}`; do
729
                    SRC=${MOD_DIR}${SRC}
730
                    REL=`echo "${SRC}" | sed "s|${MODS_DIR}|${REL_DEPTH}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods|g"`
731
                    DST=`echo "${SRC}" | sed "s|${MODS_DIR}/||g"`
732
                    if [ -d "${SRC}" ]; then
733
                        if [ -e "${DST}" ]; then
734
                            create_mods ${SRC}/ ../${REL_DEPTH}
735
                        else
736
                            if [ "${COPY_MODS_DIRS}" != "" ]; then
737
                                echo "       * Creating directory ${DST}"
738
                                mkdir -p ${DST}
739
                                create_mods ${SRC}/ ../${REL_DEPTH}
740
                            else
741
                                echo "       * Creating directory ${DST} symlink"
742
                                ln -s ${REL} ${DST}
743
                                if [ $? != 0 ]; then
744
                                    echo "ERROR: Could not create symlink from ${REL} to ${DST}"
745
                                    exit 1
746
                                fi
747
                            fi                                
748
                        fi
749
                    else
750
                        if [ -e "${DST}" ]; then
751
                            echo "       * Replacing file ${DST} with symlink"
752
                            rm -f ${DST}
753
                        else
754
                            echo "       * Creating file ${DST} symlink"
755
                        fi
756
                        ln -s ${REL} ${DST}
757
                        if [ $? != 0 ]; then
758
                            echo "ERROR: Could not create symlink from ${REL} to ${DST}"
759
                            exit 1
760
                        fi
761
                    fi
762
                done
763
            }
764
 
765
            create_mods ${MODS_DIR}/ ${REL_BASE_DIR}
4594 alewis 766
            if [ "$MENUCONFIG_FILE" != "" ]; then
1491 alewis 767
                if [ -e .config ]; then
768
                    echo "       * Replacing .config with symlink"
769
                    rm -f .config
770
                else
771
                    echo "       * Creating .config symlink"
772
                fi
4594 alewis 773
                ln -s ${MENUCONFIG_FILE} .config
1483 alewis 774
            fi
1467 alewis 775
        fi
776
 
1483 alewis 777
        mv ${UNTAR_DIR} ${WORK_DIR} 
778
 
779
        touch ${COMPLETE_DECOMPRESS}
780
    fi        
1475 dpurdie 781
fi
1467 alewis 782
 
1491 alewis 783
 
1475 dpurdie 784
#
785
#   Source the users script
786
#   This is processed in the context of this script
787
#
1485 alewis 788
mkdir -p ${WORK_DIR}
1483 alewis 789
cd ${WORK_DIR}
4069 dpurdie 790
. ${LAUNCH_SCRIPT}
1467 alewis 791
 
792
 
793
if [ ${DEBIAN_PACKAGE} ]; then 
794
    echo " --> Creating Debian packaging scripts"
795
    unset TOOL_DIR
796
    for DIR in `echo ${PATH} | sed "s|\:| |g"`; do
797
        if [ -f ${DIR}/debbuild.pl ]; then
798
            TOOL_DIR=`cleanup_dir ${DIR}`
799
        fi
800
    done
801
    if [ ${TOOL_DIR} ]; then
802
        DEBBUILD_PL=${TOOL_DIR}/debbuild.pl
1469 alewis 803
        echo "      - Found ${DEBBUILD_PL}"
1467 alewis 804
 
805
        rm -fr ${DEB_DIR}
806
        mkdir -p ${DEB_DIR}
1475 dpurdie 807
 
808
        # Replace TAGS in the debbuild.pl file
1467 alewis 809
        DEB_DESC="${BUILD_NAME} ${BUILD_VERSION} for ${PLATFORM}"
4857 alewis 810
        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 811
        cp ${TOOL_DIR}/postinstall ${DEB_DIR}/postinstall
812
    else
813
        echo "ERROR: Cannot find debbuild.pl in the PATH"
814
        exit 1
815
    fi
816
fi    
817
 
1469 alewis 818
echo " --> Removing unnecesary files resulting from the make install"
1477 dpurdie 819
if [ -d ${PKG_LIB_DIR} ] ; then
820
    DEL_FILES=`find ${PKG_LIB_DIR} -type f -name '*.la'`
821
    for FILE in ${DEL_FILES}; do
822
            echo "      - Deleting ${FILE}"
823
            rm -f ${FILE}
824
    done
825
fi
1469 alewis 826
 
827
echo " --> Cleaning up empty directories"
828
# Deletes directory $1 if it does not contain any other files or directories
4069 dpurdie 829
rmdir_empty()
1469 alewis 830
{
1477 dpurdie 831
    if [ -d "$1" ] ; then
832
        # -A = do not list . and ..
833
        # -Q = enclose entry names in double quotes
834
        # -l = list one file per line
835
        # -F = appends each directory with a '/' 
836
        DIRS=`ls -A -Q -l -F "$1" | grep "\".*\"\/" | sed "s|.* \"||" | sed "s|\"\/||"`
837
        for DIR in ${DIRS}; do
838
            rmdir_empty $1/${DIR}
839
        done
1469 alewis 840
 
1477 dpurdie 841
        LS=`ls -A -Q -l -F "$1" | grep "\"" | sed "s|^.* \"||" | sed "s|\".*||"`
4069 dpurdie 842
        if [ "${LS}" = "" ]; then
1477 dpurdie 843
            rmdir $1
844
        fi
1469 alewis 845
    fi
846
}
1477 dpurdie 847
 
4789 alewis 848
rmdir_empty ${AFC_DIR}
849
rmdir_empty ${AFC_BIN_DIR}
850
rmdir_empty ${AFC_LIB_DIR}
851
rmdir_empty ${AFC_SHARE_DIR}
6601 dpurdie 852
rmdir_empty ${DEB_PKG_DIR}
1469 alewis 853
rmdir_empty ${BASE_DIR}/pkg
854
 
6601 dpurdie 855
touch ${COMPLETE_BUILD}
1473 dpurdie 856
echo " --> End of ShellBuild"
1469 alewis 857