Subversion Repositories DevTools

Rev

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