Subversion Repositories DevTools

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1467 alewis 1
# Force failed command to exit this shell - all commands must report success
2
set -e
3
echo
4
echo
5
 
6
 
7
 
8
#------------------------------------------------------------------------------
9
# Takes $1 and removes all relative paths (. and ..) from it.  The cleaned up
10
# directory is written to stdout.
11
#------------------------------------------------------------------------------
12
function cleanup_dir
13
{
14
    DIR_PARTS=`echo $1 | sed "s|/| |g"`
15
 
16
    CLEANUP_DIR=""
17
    for PART in ${DIR_PARTS}; do
18
        if [ "${PART}" != "." ]; then
19
 
20
            if [ "${PART}" == ".." ]; then
21
                CLEANUP_DIR=`echo "${CLEANUP_DIR}" | sed "s|/[^/]*$||"`
22
            else
23
                CLEANUP_DIR="${CLEANUP_DIR}/${PART}"
24
            fi
25
        fi
26
    done
27
 
28
    echo ${CLEANUP_DIR}
29
} 
30
 
31
 
32
 
33
 
34
#------------------------------------------------------------------------------
35
# Extract arguments - order not important except that the first argument is
36
# the launch script
37
#------------------------------------------------------------------------------
38
unset CLEAN
39
unset DOWNLOAD_PKG
40
unset DOWNLOAD_PKG_AUTO
41
unset XGCC_IN_PATH
42
unset DEBIAN_PACKAGE
43
unset APPLY_PATCHES
44
unset APPLY_MODS
1469 alewis 45
unset CONFIG_VARIENT
1467 alewis 46
for arg in "$@" ; do
47
    val=${arg##*=}
48
    tag=${arg%%=*}
49
    case $tag in
50
        -clean)                 CLEAN=1;;
51
        -XGccInPath)            XGCC_IN_PATH=1;;
52
        -ShellBuild)            SHELL_BUILD="$val";;
53
        -BuildName)             BUILD_NAME=$val;;
54
        -BuildVersion)          BUILD_VERSION=$val;;
55
        -Platform)              PLATFORM=$val;;
56
        -Type)                  TYPE=$val;;
57
        -Arch)                  ARCH=$val;;
58
        -MachType)              MACHTYPE=$val;;
59
        -BuildRoot)             BUILD_ROOT=$val;;
1469 alewis 60
        -BinDir)                BIN_DIR=$val;;
61
        -LibDir)                LIB_DIR=$val;;
62
        -ObjDir)                OBJ_DIR=$val;;
1467 alewis 63
        -PackageBinDir)         PKG_BIN_DIR=$val;;
64
        -PackageIncDir)         PKG_INC_DIR=$val;;
65
        -PackageLibDir)         PKG_LIB_DIR=$val;;
66
        -PackagePkgDir)         PKG_PKG_DIR=$val;;
67
        -PackageToolDir)        PKG_TOOL_DIR=$val;;
68
        -PackageToolBin)        PKG_TOOL_BIN_DIR=$val;;
69
        -PackageToolScript)     PKG_TOOL_SCRIPT_DIR=$val;;
70
        -PackageDir)            PKG_DIR=$val;;
71
        -CompilerPath)          COMPILER_DIR="$val";;
72
        -DownloadPkg)           DOWNLOAD_PKG="$val";;
73
        -DebianPackage)         DEBIAN_PACKAGE=1;;
74
        -ApplyPatches)          APPLY_PATCHES=1;;
75
        -ApplyMods)             APPLY_MODS=1;;
1469 alewis 76
        -ConfigVarient)         CONFIG_VARIENT=$val;;
1467 alewis 77
        *)                      echo "Unknown tag: $tag=$val"
78
    esac
79
done
80
 
81
if [ "${DOWNLOAD_PKG}" == "-DownloadPkg" ]; then
82
    DOWNLOAD_PKG_NAME=${BUILD_NAME}
83
    DOWNLOAD_PKG_VER=`echo ${BUILD_VERSION} | sed "s|\.[0-9]\+\.cots||"`
84
    DOWNLOAD_PKG=${DOWNLOAD_PKG_NAME}-${DOWNLOAD_PKG_VER}
85
else
86
    DOWNLOAD_PKG_VER=`echo ${DOWNLOAD_PKG} | sed "s|.*-||"`    
87
    DOWNLOAD_PKG_NAME=`echo ${DOWNLOAD_PKG} | sed "s|-${DOWNLOAD_PKG_VER}||"`    
88
fi
89
 
90
 
91
#------------------------------------------------------------------------------
92
# Dump JATS information for debugging purposes
93
#------------------------------------------------------------------------------
94
echo "================================================================================"
95
echo "   JATS SUPPLIED FIELDS"
96
echo "================================================================================"
97
echo " ShellBuild     = ${SHELL_BUILD}"
98
echo " BuildName      = ${BUILD_NAME} ${BUILD_VERSION}"
99
echo " Platform       = ${PLATFORM}"
100
echo " Type           = ${TYPE}"
101
echo " Arch           = ${ARCH}"
102
echo " MachType       = ${MACHTYPE}"
103
echo " BuildRoot      = ${BUILD_ROOT}"
104
if [ ${DOWNLOAD_PKG} ]; then
105
    echo " DownloadPkg    = ${DOWNLOAD_PKG}"
106
fi    
1469 alewis 107
echo " BinDir         = ${BIN_DIR}"
108
echo " LibDir         = ${LIB_DIR}"
109
echo " ObjDir         = ${OBJ_DIR}"
1467 alewis 110
echo " PackageBinDir  = ${PKG_BIN_DIR}"
111
echo " PackageIncDir  = ${PKG_INC_DIR}"
112
echo " PackageLibDir  = ${PKG_LIB_DIR}"
113
echo " PackagePkgDir  = ${PKG_PKG_DIR}"
114
echo " CompilerDir    = ${COMPILER_DIR}"
115
echo "================================================================================"
116
echo
117
echo
118
 
119
 
120
 
121
 
122
#------------------------------------------------------------------------------
123
# Determine host and build environments
124
#------------------------------------------------------------------------------
125
case ${MACHTYPE} in
126
    linux_i386)  
127
        COMPILE_BUILD="i386-cross-linux-gnu"
128
        ;;
129
    *)      
130
        echo "Unknown MACHTYPE=${MACHTYPE}"
131
        exit 1
132
        ;;
133
esac
134
 
135
case ${ARCH} in
136
    *603E*|*powerpc*)  
137
        COMPILE_HOST="powerpc-603e-linux-gnu"
138
        LINUX_HOST_ARCH=powerpc
139
        ;;
140
 
1469 alewis 141
    ARMV9*)  
142
        COMPILE_HOST="arm-9tdmi-linux-gnu"
143
        ;;
144
 
1467 alewis 145
    *I386*)
1469 alewis 146
        if [ "${PLATFORM}" == "LINUX_I386" ]; then
147
            COMPILE_HOST="i386-cross-linux-gnu"
148
        else
149
            COMPILE_HOST="i586-unknown-linux-gnu"
150
        fi
1467 alewis 151
        LINUX_HOST_ARCH=x86
152
        ;;
153
 
154
    *)      
155
        echo "Unknown ARCH=${ARCH}"
156
        exit 1
157
        ;;
158
esac
159
 
160
# Setup the location of the cross compiler
1469 alewis 161
if [ "${COMPILE_HOST}" == "i386-redhat-linux" ] || [ "${COMPILER_DIR}" == "gcc" ]; then
1467 alewis 162
    XGCC_BASE_DIR=
163
    XGCC_DIR=
164
    XGCC=gcc
165
else
166
    XGCC_BASE_DIR=`echo ${COMPILER_DIR} | sed 's|/[^/]*/[^/]*$||'`
167
    XGCC_BASE_DIR=`cleanup_dir ${XGCC_BASE_DIR}`
168
    XGCC_DIR=${XGCC_BASE_DIR}/${COMPILE_HOST}
169
    XGCC=${XGCC_DIR}/bin/gcc
170
fi
171
 
172
# Determine the location of the generated files
173
CWD=`pwd`
1469 alewis 174
BIN_DIR=`cleanup_dir ${CWD}/${BIN_DIR}`
175
LIB_DIR=`cleanup_dir ${CWD}/${LIB_DIR}`
176
OBJ_DIR=`cleanup_dir ${CWD}/${OBJ_DIR}`
1467 alewis 177
PKG_BIN_DIR=`cleanup_dir ${CWD}/${PKG_BIN_DIR}`
178
PKG_INC_DIR=`cleanup_dir ${CWD}/${PKG_INC_DIR}`
179
PKG_LIB_DIR=`cleanup_dir ${CWD}/${PKG_LIB_DIR}`
180
PKG_PKG_DIR=`cleanup_dir ${CWD}/${PKG_PKG_DIR}`
181
 
182
PKG_TOOL_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_DIR}`
183
PKG_TOOL_BIN_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_BIN_DIR}`
184
PKG_TOOL_SCRIPT_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_SCRIPT_DIR}`
185
 
186
BASE_DIR=`cleanup_dir ${CWD}/${BUILD_ROOT}`
1469 alewis 187
LCL_SRC_DIR=${BASE_DIR}/src
188
SHARE_SRC_DIR=${LCL_SRC_DIR}
189
SHARE_BASE_DIR=${BASE_DIR}
1467 alewis 190
 
1469 alewis 191
DEB_PKG_DIR=${LIB_DIR}
192
AFC_DIR=${DEB_PKG_DIR}/afc
193
AFC_BIN_DIR=${AFC_DIR}/bin
194
AFC_LIB_DIR=${AFC_DIR}/lib
195
AFC_SHARE_DIR=${AFC_DIR}/share
196
 
197
 
1467 alewis 198
# Find the launch script
1469 alewis 199
LAUNCH_SCRIPT=`cleanup_dir ${LCL_SRC_DIR}/${SHELL_BUILD}`
1467 alewis 200
 
201
if [ ! -f ${LAUNCH_SCRIPT} ]; then
202
    echo "Specified shell build script ${LAUNCH_SCRIPT} does not exist."
203
    exit 1
204
fi
205
 
206
if [ ${DOWNLOAD_PKG} ]; then
1469 alewis 207
 
208
    # This is the set of available download directories, consisting of downloads/
209
    # and a download directory that is offset from the location of the build
210
    # script src directory.
211
    unset TAR_DECOMP_ARG
212
    TMP=`echo ${SHELL_BUILD} | sed "s|/src/.*||"`
213
    TMP=`cleanup_dir ${CWD}/${TMP}`
214
    DOWNLOAD_DIRS="${TMP} ${BASE_DIR}"
215
    for DDIR in ${DOWNLOAD_DIRS}; do
216
        TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.bz2
217
        if [ -e ${TMP} ]; then
218
            TARBALL_FILE=${TMP}
219
            SHARE_SRC_DIR=${DDIR}/src
220
            SHARE_BASE_DIR=${DDIR}
221
            TAR_DECOMP_ARG=j
1467 alewis 222
        else
1469 alewis 223
            TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tar.gz
224
            if [ -e ${TMP} ]; then
225
                TARBALL_FILE=${TMP}
226
                SHARE_SRC_DIR=${DDIR}/src
227
                SHARE_BASE_DIR=${DDIR}
1467 alewis 228
                TAR_DECOMP_ARG=z
229
            else
1469 alewis 230
                TMP=${DDIR}/downloads/${DOWNLOAD_PKG}.tgz
231
                if [ -e ${TMP} ]; then
232
                    TARBALL_FILE=${TMP}
233
                    SHARE_SRC_DIR=${DDIR}/src
234
                    SHARE_BASE_DIR=${DDIR}
235
                    TAR_DECOMP_ARG=z
236
                fi
1467 alewis 237
            fi
1469 alewis 238
        fi    
239
    done
240
    if [ "${TAR_DECOMP_ARG}" == "" ]; then
241
        echo "Could not find download file ${DOWNLOAD_PKG}.<tar.gz|tar.bz2|tgz> in any of { ${DOWNLOAD_DIRS} }"
242
        exit 1
243
    fi
244
    WORK_DIR=${LCL_SRC_DIR}/${DOWNLOAD_PKG}
1467 alewis 245
else
1469 alewis 246
    WORK_DIR=${LCL_SRC_DIR}/work
1467 alewis 247
fi
248
 
249
 
250
INCLUDE="-I${PKG_INC_DIR} -I${BASE_DIR}/local/include -I${BASE_DIR}/interface/include"
1469 alewis 251
LIBPATH="-L${PKG_LIB_DIR} -L${BASE_DIR}/local/lib/${PLATFORM} -L${BASE_DIR}/interface/lib/${PLATFORM}"
1467 alewis 252
 
253
 
254
# Dump configuration
255
echo "================================================================================"
256
echo "   BUILD CONFIGURATION"
257
echo "================================================================================"
258
echo " Compile Host   = ${COMPILE_HOST}"
259
echo " Compile Build  = ${COMPILE_BUILD}"
260
echo " XGCC Base Dir  = ${XGCC_BASE_DIR}"
261
echo " XGCC Dir       = ${XGCC_DIR}"
262
echo " XGCC           = ${XGCC}"
263
echo " Base Dir       = ${BASE_DIR}"
264
if [ ${DOWNLOAD_PKG} ]; then
265
    echo " Tarball File   = ${TARBALL_FILE}"
266
    echo " Working Dir    = ${WORK_DIR}"
1469 alewis 267
fi  
268
unset AFTER_FIRST
269
for INC in ${INCLDUE}; do
270
    if [ ${AFTER_FIRST} ]; then
271
        echo "                  ${INC}"
272
    else
273
        echo " Includes       = ${INC}"
274
        AFTER_FIRST=1
275
    fi
276
done
277
unset AFTER_FIRST
278
for LIB in ${LIBPATH}; do
279
    if [ ${AFTER_FIRST} ]; then
280
        echo "                  ${LIB}"
281
    else
282
        echo " Library Path   = ${LIB}"
283
        AFTER_FIRST=1
284
    fi
285
done
286
echo " Debian Package = ${DEB_PKG_DIR}"
1467 alewis 287
echo " Launch Script  = ${LAUNCH_SCRIPT}"
288
echo "================================================================================"
289
echo
290
echo
291
 
292
# Prepare the environment
293
echo " --> Preparing environment"
294
 
295
 
296
LIBTOOL=libtool
297
export LIBTOOL
298
 
299
ORIG_MAKE=${MAKE}
300
unset MAKE
301
 
302
ORIG_MAKEFLAGS=${MAKEFLAGS}
303
unset MAKEFLAGS
304
 
305
ORIG_MAKEOVERRIDES=${MAKEOVERRIDES}
306
unset MAKEOVERRIDES
307
 
308
ORIG_MAKELEVEL=${MAKELEVEL}
309
unset MAKELEVEL
310
 
311
ORIG_CFLAGS=${CFLAGS}
312
export CFLAGS="${ORIG_CFLAGS} ${INCLUDE}"
313
 
314
ORIG_CCFLAGS=${CCFLAGS}
315
export CCFLAGS="${ORIG_CCFLAGS} ${INCLUDE}"
316
 
317
ORIG_LDFLAGS=${LDFLAGS}
318
export LDFLAGS="${LDFLAGS} ${LIBPATH}"
319
 
320
ORIG_PATH=${PATH}
321
if [ ${XGCC_IN_PATH} ]; then
322
    export PATH="${XGCC_DIR}/bin:${PATH}"
1469 alewis 323
else
324
    export PATH="${XGCC_BASE_DIR}/bin:${PATH}"
1467 alewis 325
fi
326
 
327
if [ ${CLEAN} ]; then
328
    if [ ${DOWNLOAD_PKG} ]; then
329
        echo " --> Cleaning generated files"
330
        cd ${BASE_DIR}
331
        rm -fr ${WORK_DIR}
332
    fi        
1469 alewis 333
 
334
    echo " --> Deleting binary, object, and library directories"
335
    rm -fr ${BIN_DIR}
336
    rm -fr ${LIB_DIR}
337
    rm -fr ${OBJ_DIR}
338
 
1467 alewis 339
    exit 0
340
fi
341
 
342
 
343
if [ ${DOWNLOAD_PKG} ]; then
344
    echo " --> Deleting existing build objects directory"
345
    rm -fr ${WORK_DIR}
346
fi    
347
 
348
 
349
echo " --> Creating package directories"
350
mkdir -p ${PKG_BIN_DIR}
351
mkdir -p ${PKG_INC_DIR}
352
mkdir -p ${PKG_LIB_DIR}
353
mkdir -p ${PKG_PKG_DIR}
354
mkdir -p ${AFC_DIR}
355
mkdir -p ${AFC_BIN_DIR}
356
mkdir -p ${AFC_LIB_DIR}
357
mkdir -p ${AFC_SHARE_DIR}
358
mkdir -p ${PKG_TOOL_DIR}
359
mkdir -p ${PKG_TOOL_BIN_DIR}
360
mkdir -p ${PKG_TOOL_SCRIPT_DIR}
361
 
362
 
363
if [ ${DOWNLOAD_PKG} ]; then
364
    echo " --> Extracting ${DOWNLOAD_PKG}"
1469 alewis 365
    cd ${LCL_SRC_DIR}
1467 alewis 366
    tar -x${TAR_DECOMP_ARG}pf ${TARBALL_FILE}
367
 
368
    cd ${WORK_DIR}
1469 alewis 369
    PATCHES_DIR=${SHARE_BASE_DIR}/patches
1467 alewis 370
    if [ -d ${PATCHES_DIR} ]; then
371
        PATCHES=`cd ${PATCHES_DIR} && ls `
372
        if [ "${PATCHES}" != "" ]; then
373
            echo " --> Apply external patches"
374
            for PATCH in ${PATCHES}; do
375
                if patch -p1 < ${PATCHES_DIR}/$PATCH; then
376
                    echo "Applied patch ${PATCH}"
377
                    echo ""
378
                else
379
                    echo "Patch ${PATCH} failed"
380
                    exit 1
381
                fi
382
            done    
383
        fi
384
    fi
385
 
386
    cd ${WORK_DIR}
1469 alewis 387
    MODS_DIR=${SHARE_BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods
1467 alewis 388
    if [ -d ${MODS_DIR} ]; then
389
        echo " --> Applying modifications"
390
        cp -fr ${MODS_DIR}/* .
391
        ERG_CONFIG=${MODS_DIR}/ERG.config
392
        if [ -f ${ERG_CONFIG} ]; then
393
            cp -fr ${ERG_CONFIG} .config
394
        fi
395
    fi
396
 
397
    cd ${WORK_DIR}
398
fi    
399
 
400
 
401
source ${LAUNCH_SCRIPT}
402
 
403
 
404
if [ ${DEBIAN_PACKAGE} ]; then 
405
    echo " --> Creating Debian packaging scripts"
406
    unset TOOL_DIR
407
    for DIR in `echo ${PATH} | sed "s|\:| |g"`; do
408
        if [ -f ${DIR}/debbuild.pl ]; then
409
            TOOL_DIR=`cleanup_dir ${DIR}`
410
        fi
411
    done
412
    if [ ${TOOL_DIR} ]; then
413
        DEBBUILD_PL=${TOOL_DIR}/debbuild.pl
1469 alewis 414
        echo "      - Found ${DEBBUILD_PL}"
1467 alewis 415
 
1469 alewis 416
        DEB_DIR=${LCL_SRC_DIR}/.deb
1467 alewis 417
        rm -fr ${DEB_DIR}
418
        mkdir -p ${DEB_DIR}
419
 
420
        DEB_DESC="${BUILD_NAME} ${BUILD_VERSION} for ${PLATFORM}"
421
        cat ${DEBBUILD_PL} | sed "s|Unknown Debian Package Description|${DEB_DESC}|" > ${DEB_DIR}/debbuild.pl
422
        cp ${TOOL_DIR}/postinstall ${DEB_DIR}/postinstall
423
    else
424
        echo "ERROR: Cannot find debbuild.pl in the PATH"
425
        exit 1
426
    fi
427
fi    
428
 
429
 
1469 alewis 430
echo " --> Removing unnecesary files resulting from the make install"
431
DEL_FILES=`find ${PKG_LIB_DIR} -type f -name '*.la'`
432
for FILE in ${DEL_FILES}; do
433
        echo "      - Deleting ${FILE}"
434
        rm -f ${FILE}
435
done
436
 
437
echo " --> Cleaning up empty directories"
438
# Deletes directory $1 if it does not contain any other files or directories
439
function rmdir_empty()
440
{
441
    # -A = do not list . and ..
442
    # -Q = enclose entry names in double quotes
443
    # -l = list one file per line
444
    # -F = appends each directory with a '/' 
445
    DIRS=`ls -A -Q -l -F "$1" | grep "\".*\"\/" | sed "s|.* \"||" | sed "s|\"\/||"`
446
    for DIR in ${DIRS}; do
447
        rmdir_empty $1/${DIR}
448
    done
449
 
450
    LS=`ls -A -Q -l -F "$1" | grep "\"" | sed "s|^.* \"||" | sed "s|\".*||"`
451
    if [ "${LS}" == "" ]; then
452
        rmdir $1
453
    fi
454
 
455
}
456
rmdir_empty ${DEB_PKG_DIR}
457
rmdir_empty ${BASE_DIR}/pkg
458
 
459
 
1467 alewis 460
echo " --> Cleaning up installation environment"
461
export MAKE=${ORIG_MAKE}
462
export MAKEFLAGS=${ORIG_MAKEFLAGS}
463
export MAKEOVERRIDES=${ORIG_MAKEOVERRIDES}
464
export MAKELEVEL=${ORIG_MAKELEVEL}
465
export CCFLAGS=${ORIG_CCFLAGS}
466
export CFLAGS=${ORIG_CFLAGS}
467
export LDFLAGS=${ORIG_LDFLAGS}
468
export PATH=${ORIG_PATH}