Subversion Repositories DevTools

Rev

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