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
45
for arg in "$@" ; do
46
    val=${arg##*=}
47
    tag=${arg%%=*}
48
    case $tag in
49
        -clean)                 CLEAN=1;;
50
        -XGccInPath)            XGCC_IN_PATH=1;;
51
        -ShellBuild)            SHELL_BUILD="$val";;
52
        -BuildName)             BUILD_NAME=$val;;
53
        -BuildVersion)          BUILD_VERSION=$val;;
54
        -Platform)              PLATFORM=$val;;
55
        -Type)                  TYPE=$val;;
56
        -Arch)                  ARCH=$val;;
57
        -MachType)              MACHTYPE=$val;;
58
        -BuildRoot)             BUILD_ROOT=$val;;
59
        -PackageBinDir)         PKG_BIN_DIR=$val;;
60
        -PackageIncDir)         PKG_INC_DIR=$val;;
61
        -PackageLibDir)         PKG_LIB_DIR=$val;;
62
        -PackagePkgDir)         PKG_PKG_DIR=$val;;
63
        -PackageToolDir)        PKG_TOOL_DIR=$val;;
64
        -PackageToolBin)        PKG_TOOL_BIN_DIR=$val;;
65
        -PackageToolScript)     PKG_TOOL_SCRIPT_DIR=$val;;
66
        -PackageDir)            PKG_DIR=$val;;
67
        -CompilerPath)          COMPILER_DIR="$val";;
68
        -DownloadPkg)           DOWNLOAD_PKG="$val";;
69
        -DebianPackage)         DEBIAN_PACKAGE=1;;
70
        -ApplyPatches)          APPLY_PATCHES=1;;
71
        -ApplyMods)             APPLY_MODS=1;;
72
        *)                      echo "Unknown tag: $tag=$val"
73
    esac
74
done
75
 
76
if [ "${DOWNLOAD_PKG}" == "-DownloadPkg" ]; then
77
    DOWNLOAD_PKG_NAME=${BUILD_NAME}
78
    DOWNLOAD_PKG_VER=`echo ${BUILD_VERSION} | sed "s|\.[0-9]\+\.cots||"`
79
    DOWNLOAD_PKG=${DOWNLOAD_PKG_NAME}-${DOWNLOAD_PKG_VER}
80
else
81
    DOWNLOAD_PKG_VER=`echo ${DOWNLOAD_PKG} | sed "s|.*-||"`    
82
    DOWNLOAD_PKG_NAME=`echo ${DOWNLOAD_PKG} | sed "s|-${DOWNLOAD_PKG_VER}||"`    
83
fi
84
 
85
 
86
#------------------------------------------------------------------------------
87
# Dump JATS information for debugging purposes
88
#------------------------------------------------------------------------------
89
echo "================================================================================"
90
echo "   JATS SUPPLIED FIELDS"
91
echo "================================================================================"
92
echo " ShellBuild     = ${SHELL_BUILD}"
93
echo " BuildName      = ${BUILD_NAME} ${BUILD_VERSION}"
94
echo " Platform       = ${PLATFORM}"
95
echo " Type           = ${TYPE}"
96
echo " Arch           = ${ARCH}"
97
echo " MachType       = ${MACHTYPE}"
98
echo " BuildRoot      = ${BUILD_ROOT}"
99
if [ ${DOWNLOAD_PKG} ]; then
100
    echo " DownloadPkg    = ${DOWNLOAD_PKG}"
101
fi    
102
echo " PackageBinDir  = ${PKG_BIN_DIR}"
103
echo " PackageIncDir  = ${PKG_INC_DIR}"
104
echo " PackageLibDir  = ${PKG_LIB_DIR}"
105
echo " PackagePkgDir  = ${PKG_PKG_DIR}"
106
echo " CompilerDir    = ${COMPILER_DIR}"
107
echo "================================================================================"
108
echo
109
echo
110
 
111
 
112
 
113
 
114
#------------------------------------------------------------------------------
115
# Determine host and build environments
116
#------------------------------------------------------------------------------
117
case ${MACHTYPE} in
118
    linux_i386)  
119
        COMPILE_BUILD="i386-cross-linux-gnu"
120
        ;;
121
    *)      
122
        echo "Unknown MACHTYPE=${MACHTYPE}"
123
        exit 1
124
        ;;
125
esac
126
 
127
case ${ARCH} in
128
    *603E*|*powerpc*)  
129
        COMPILE_HOST="powerpc-603e-linux-gnu"
130
        LINUX_HOST_ARCH=powerpc
131
        ;;
132
 
133
    *I386*)
134
        COMPILE_HOST="i386-redhat-linux"
135
        LINUX_HOST_ARCH=x86
136
        ;;
137
 
138
    *)      
139
        echo "Unknown ARCH=${ARCH}"
140
        exit 1
141
        ;;
142
esac
143
 
144
# Setup the location of the cross compiler
145
if [ "${COMPILE_HOST}" == "i386-redhat-linux" ]; then
146
    XGCC_BASE_DIR=
147
    XGCC_DIR=
148
    XGCC=gcc
149
else
150
    XGCC_BASE_DIR=`echo ${COMPILER_DIR} | sed 's|/[^/]*/[^/]*$||'`
151
    XGCC_BASE_DIR=`cleanup_dir ${XGCC_BASE_DIR}`
152
    XGCC_DIR=${XGCC_BASE_DIR}/${COMPILE_HOST}
153
    XGCC=${XGCC_DIR}/bin/gcc
154
fi
155
 
156
# Determine the location of the generated files
157
CWD=`pwd`
158
PKG_BIN_DIR=`cleanup_dir ${CWD}/${PKG_BIN_DIR}`
159
PKG_INC_DIR=`cleanup_dir ${CWD}/${PKG_INC_DIR}`
160
PKG_LIB_DIR=`cleanup_dir ${CWD}/${PKG_LIB_DIR}`
161
PKG_PKG_DIR=`cleanup_dir ${CWD}/${PKG_PKG_DIR}`
162
AFC_DIR=${PKG_PKG_DIR}/afc
163
AFC_BIN_DIR=${AFC_DIR}/bin
164
AFC_LIB_DIR=${AFC_DIR}/lib
165
AFC_SHARE_DIR=${AFC_DIR}/share
166
 
167
PKG_TOOL_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_DIR}`
168
PKG_TOOL_BIN_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_BIN_DIR}`
169
PKG_TOOL_SCRIPT_DIR=`cleanup_dir ${CWD}/${PKG_TOOL_SCRIPT_DIR}`
170
 
171
BASE_DIR=`cleanup_dir ${CWD}/${BUILD_ROOT}`
172
DOWNLOADS_DIR=${BASE_DIR}/downloads
173
SRC_DIR=${BASE_DIR}/src
174
 
175
# Find the launch script
176
LAUNCH_SCRIPT=`cleanup_dir ${SRC_DIR}/${SHELL_BUILD}`
177
 
178
if [ ! -f ${LAUNCH_SCRIPT} ]; then
179
    echo "Specified shell build script ${LAUNCH_SCRIPT} does not exist."
180
    exit 1
181
fi
182
 
183
if [ ${DOWNLOAD_PKG} ]; then
184
    TARBALL_FILE=${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.tar.bz2
185
    if [ -e ${TARBALL_FILE} ]; then
186
        TAR_DECOMP_ARG=j
187
    else
188
        TARBALL_FILE=${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.tar.gz
189
        if [ -e ${TARBALL_FILE} ]; then
190
            TAR_DECOMP_ARG=z
191
        else
192
            TARBALL_FILE=${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.tgz
193
            if [ -e ${TARBALL_FILE} ]; then
194
                TAR_DECOMP_ARG=z
195
            else
196
                echo "Could not find download file ${DOWNLOADS_DIR}/${DOWNLOAD_PKG}.<tar.gz|tar.bz2|tgz>"
197
                exit 1
198
            fi
199
        fi
200
    fi    
201
    WORK_DIR=${SRC_DIR}/${DOWNLOAD_PKG}
202
else
203
    WORK_DIR=${SRC_DIR}/work
204
fi
205
 
206
 
207
INCLUDE="-I${PKG_INC_DIR} -I${BASE_DIR}/local/include -I${BASE_DIR}/interface/include"
208
LIBPATH="-L${PKG_LIB_DIR} -L${BASE_DIR}/local/lib/${PLATFORM}  -L${BASE_DIR}/interface/lib/${PLATFORM}"
209
 
210
 
211
# Dump configuration
212
echo "================================================================================"
213
echo "   BUILD CONFIGURATION"
214
echo "================================================================================"
215
echo " Compile Host   = ${COMPILE_HOST}"
216
echo " Compile Build  = ${COMPILE_BUILD}"
217
echo " XGCC Base Dir  = ${XGCC_BASE_DIR}"
218
echo " XGCC Dir       = ${XGCC_DIR}"
219
echo " XGCC           = ${XGCC}"
220
echo " Base Dir       = ${BASE_DIR}"
221
if [ ${DOWNLOAD_PKG} ]; then
222
    echo " Tarball File   = ${TARBALL_FILE}"
223
    echo " Working Dir    = ${WORK_DIR}"
224
fi    
225
echo " Includes       = ${INCLUDE}"
226
echo " Library Path   = ${LIBPATH}"
227
echo " Launch Script  = ${LAUNCH_SCRIPT}"
228
echo "================================================================================"
229
echo
230
echo
231
 
232
# Prepare the environment
233
echo " --> Preparing environment"
234
 
235
 
236
LIBTOOL=libtool
237
export LIBTOOL
238
 
239
ORIG_MAKE=${MAKE}
240
unset MAKE
241
 
242
ORIG_MAKEFLAGS=${MAKEFLAGS}
243
unset MAKEFLAGS
244
 
245
ORIG_MAKEOVERRIDES=${MAKEOVERRIDES}
246
unset MAKEOVERRIDES
247
 
248
ORIG_MAKELEVEL=${MAKELEVEL}
249
unset MAKELEVEL
250
 
251
ORIG_CFLAGS=${CFLAGS}
252
export CFLAGS="${ORIG_CFLAGS} ${INCLUDE}"
253
 
254
ORIG_CCFLAGS=${CCFLAGS}
255
export CCFLAGS="${ORIG_CCFLAGS} ${INCLUDE}"
256
 
257
ORIG_LDFLAGS=${LDFLAGS}
258
export LDFLAGS="${LDFLAGS} ${LIBPATH}"
259
 
260
ORIG_PATH=${PATH}
261
export PATH="${XGCC_BASE_DIR}/bin:${PATH}"
262
if [ ${XGCC_IN_PATH} ]; then
263
    export PATH="${XGCC_DIR}/bin:${PATH}"
264
fi
265
 
266
if [ ${CLEAN} ]; then
267
    if [ ${DOWNLOAD_PKG} ]; then
268
        echo " --> Cleaning generated files"
269
        cd ${BASE_DIR}
270
        rm -fr ${WORK_DIR}
271
    fi        
272
    exit 0
273
fi
274
 
275
 
276
if [ ${DOWNLOAD_PKG} ]; then
277
    echo " --> Deleting existing build objects directory"
278
    rm -fr ${WORK_DIR}
279
fi    
280
 
281
 
282
echo " --> Creating package directories"
283
mkdir -p ${PKG_BIN_DIR}
284
mkdir -p ${PKG_INC_DIR}
285
mkdir -p ${PKG_LIB_DIR}
286
mkdir -p ${PKG_PKG_DIR}
287
mkdir -p ${AFC_DIR}
288
mkdir -p ${AFC_BIN_DIR}
289
mkdir -p ${AFC_LIB_DIR}
290
mkdir -p ${AFC_SHARE_DIR}
291
mkdir -p ${PKG_TOOL_DIR}
292
mkdir -p ${PKG_TOOL_BIN_DIR}
293
mkdir -p ${PKG_TOOL_SCRIPT_DIR}
294
 
295
 
296
if [ ${DOWNLOAD_PKG} ]; then
297
    echo " --> Extracting ${DOWNLOAD_PKG}"
298
    cd ${SRC_DIR}
299
    tar -x${TAR_DECOMP_ARG}pf ${TARBALL_FILE}
300
 
301
    cd ${WORK_DIR}
302
    PATCHES_DIR=${BASE_DIR}/patches
303
    if [ -d ${PATCHES_DIR} ]; then
304
        PATCHES=`cd ${PATCHES_DIR} && ls `
305
        if [ "${PATCHES}" != "" ]; then
306
            echo " --> Apply external patches"
307
            for PATCH in ${PATCHES}; do
308
                if patch -p1 < ${PATCHES_DIR}/$PATCH; then
309
                    echo "Applied patch ${PATCH}"
310
                    echo ""
311
                else
312
                    echo "Patch ${PATCH} failed"
313
                    exit 1
314
                fi
315
            done    
316
        fi
317
    fi
318
 
319
    cd ${WORK_DIR}
320
    MODS_DIR=${BASE_DIR}/${DOWNLOAD_PKG_NAME}_${DOWNLOAD_PKG_VER}_mods
321
    if [ -d ${MODS_DIR} ]; then
322
        echo " --> Applying modifications"
323
        cp -fr ${MODS_DIR}/* .
324
        ERG_CONFIG=${MODS_DIR}/ERG.config
325
        if [ -f ${ERG_CONFIG} ]; then
326
            cp -fr ${ERG_CONFIG} .config
327
        fi
328
    fi
329
 
330
    cd ${WORK_DIR}
331
fi    
332
 
333
 
334
source ${LAUNCH_SCRIPT}
335
 
336
 
337
if [ ${DEBIAN_PACKAGE} ]; then 
338
    echo " --> Creating Debian packaging scripts"
339
    unset TOOL_DIR
340
    for DIR in `echo ${PATH} | sed "s|\:| |g"`; do
341
        if [ -f ${DIR}/debbuild.pl ]; then
342
            TOOL_DIR=`cleanup_dir ${DIR}`
343
        fi
344
    done
345
    if [ ${TOOL_DIR} ]; then
346
        DEBBUILD_PL=${TOOL_DIR}/debbuild.pl
347
        echo " - Found ${DEBBUILD_PL}"
348
 
349
        DEB_DIR=${SRC_DIR}/.deb
350
        rm -fr ${DEB_DIR}
351
        mkdir -p ${DEB_DIR}
352
 
353
        DEB_DESC="${BUILD_NAME} ${BUILD_VERSION} for ${PLATFORM}"
354
        cat ${DEBBUILD_PL} | sed "s|Unknown Debian Package Description|${DEB_DESC}|" > ${DEB_DIR}/debbuild.pl
355
        cp ${TOOL_DIR}/postinstall ${DEB_DIR}/postinstall
356
    else
357
        echo "ERROR: Cannot find debbuild.pl in the PATH"
358
        exit 1
359
    fi
360
fi    
361
 
362
 
363
echo " --> Cleaning up installation environment"
364
export MAKE=${ORIG_MAKE}
365
export MAKEFLAGS=${ORIG_MAKEFLAGS}
366
export MAKEOVERRIDES=${ORIG_MAKEOVERRIDES}
367
export MAKELEVEL=${ORIG_MAKELEVEL}
368
export CCFLAGS=${ORIG_CCFLAGS}
369
export CFLAGS=${ORIG_CFLAGS}
370
export LDFLAGS=${ORIG_LDFLAGS}
371
export PATH=${ORIG_PATH}