Subversion Repositories DevTools

Rev

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