Magellan Linux

Contents of /branches/mage-next/src/smage2.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 33 - (show annotations) (download) (as text)
Thu Jan 6 02:57:12 2005 UTC (19 years, 4 months ago) by niro
Original Path: trunk/mage/usr/lib/mage/smage2.sh
File MIME type: application/x-sh
File size: 8629 byte(s)
fixed version tags

1 #!/bin/bash
2
3 # compiles/installs .smage2 source install scripts
4 # needs pkgbuild_dir (mage)
5
6 # SMAGE2
7 # version: 0.3.6-r9
8
9 #01.10.2004
10 # added ccache support
11 # added distcc support
12
13 ## setup ##
14 SMAGEVERSION=0.3.6-r8
15 PKGSUFFIX="mpk"
16 SMAGENAME="$1"
17 SMAGESUFFIX="smage2"
18 #SOURCEDIR="/bootstrap/sources"
19 #SMAGESCRIPTSDIR="/bootstrap/smage2-install-scripts"
20 #SMAGE2RSYNC="rsync://192.168.0.2/smage2-scripts"
21 MLIBDIR=/usr/lib/mage
22
23 source /etc/mage.rc
24
25 showversion() {
26 echo -en "Magellan Source Install v${SMAGEVERSION} "
27 echo -e "-- Niels Rogalla (niro@magellan-linux.de)"
28 }
29
30 die() {
31 xtitleclean
32 echo "SMAGE failed: $@"
33 exit 1
34 }
35
36 xtitle() {
37 if [ ${TERM} == "xterm" ]
38 then
39 echo -ne "\033]0;[sMage: $@]\007"
40 fi
41 return 0
42 }
43
44 xtitleclean() {
45 if [ ${TERM} == "xterm" ]
46 then
47 echo -ne "\033]0;\007"
48 fi
49 return 0
50 }
51
52 syncsmage2() {
53 xtitle "Updating smage2-script tree ..."
54 local i
55 for i in ${SMAGE2RSYNC}
56 do
57 rsync \
58 --recursive \
59 --links \
60 --perms \
61 --times \
62 --devices \
63 --timeout=600 \
64 --verbose \
65 --compress \
66 --progress \
67 --stats \
68 --delete \
69 --delete-after \
70 ${i} ${SMAGESCRIPTSDIR}
71
72 if [ "$?" == "0" ]
73 then
74 break
75 else
76 continue
77 fi
78
79 done
80
81 #clean up backup files (foo~)
82 find ${SMAGESCRIPTSDIR} -name *~ -exec rm '{}' ';'
83
84 xtitleclean
85 }
86
87 # dummy function, used if that not exist in smage file
88 src_prepare() {
89 echo "no src_prepare defined"
90 sleep 2
91 return 0
92 }
93
94 # dummy function, used if that not exist in smage file
95 src_compile() {
96 echo "no src_compile defined"
97 sleep 2
98 return 0
99 }
100
101 # dummy function, used if that not exist in smage file
102 src_install() {
103 echo "no src_install defined"
104 sleep 2
105 return 0
106 }
107
108
109 build_mage_script() {
110 return 0
111 }
112
113 mconfigure() {
114 if [ -x ./configure ]
115 then
116 ./configure \
117 --prefix=/usr \
118 --host=${CHOST} \
119 --mandir=/usr/share/man \
120 --infodir=/usr/share/info \
121 --datadir=/usr/share \
122 --sysconfdir=/etc \
123 --localstatedir=/var/lib \
124 "$@" || die "mconfigure failed"
125 else
126 echo "configure is not an executable ..."
127 exit 1
128 fi
129 }
130
131 minstall() {
132 if [ -f ./[mM]akefile -o -f ./GNUmakefile ] ; then
133 make prefix=${BINDIR}/usr \
134 datadir=${BINDIR}/usr/share \
135 infodir=${BINDIR}/usr/share/info \
136 localstatedir=${BINDIR}/var/lib \
137 mandir=${BINDIR}/usr/share/man \
138 sysconfdir=${BINDIR}/etc \
139 "$@" install || die "minstall failed"
140 else
141 die "no Makefile found"
142 fi
143 }
144
145 mmake() {
146 make ${MAKEOPTS} ${EXTRA_EMAKE} "$@"
147 }
148
149 munpack() {
150 local SRCFILE
151 local IFTAR
152 local DEST
153
154 SRCFILE=$1
155
156 if [ -z "$2" ]
157 then
158 DEST=${BUILDDIR}
159 else
160 DEST=$2
161 fi
162
163 case "${SRCFILE##*.}" in
164 bz2)
165 IFTAR="$(basename $SRCFILE .bz2)"
166 IFTAR="${IFTAR##*.}"
167 if [ "${IFTAR}" == "tar" ]
168 then
169 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
170 fi
171 ;;
172 gz)
173 IFTAR="$(basename $SRCFILE .gz)"
174 IFTAR="${IFTAR##*.}"
175 if [ "${IFTAR}" == "tar" ]
176 then
177 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
178 fi
179 ;;
180 tbz2)
181 tar --no-same-owner -xvjf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
182 ;;
183 tgz)
184 tar --no-same-owner -xvzf ${SOURCEDIR}/${PNAME}/${SRCFILE} -C ${DEST}
185 ;;
186 *)
187 die "munpack failed"
188 ;;
189 esac
190 }
191
192 mpatch() {
193 local PATCHOPTS
194 local PATCHFILE
195
196 PATCHOPTS=$1
197 PATCHFILE=$2
198
199 patch "${PATCHOPTS}" -i ${SOURCEDIR}/${PNAME}/${PATCHFILE}
200 }
201
202
203 minstalldocs() {
204 local docfiles
205
206 docfiles="$@"
207
208 if [ ! -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} ]
209 then
210 install -d ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "creating doc dirs."
211 fi
212
213 for i in ${docfiles}
214 do
215 cat ${i} | gzip -9c > ${i}.gz || die "gzipping docs."
216 install -m 0644 ${SRCDIR}/${i}.gz \
217 ${BINDIR}/usr/share/doc/${PNAME}-${PVER} || die "coping docs."
218 done
219 }
220
221 setup_distcc_environment(){
222 if [ -x /usr/bin/distcc ]
223 then
224 echo "Using DistCC for compilation ..."
225 export PATH=/usr/lib/distcc/bin:${PATH} || die "distcc: could not export new $PATH"
226
227 #export distcc as compiler
228 # export CC="distcc"
229 # export CXX=distcc
230
231 export DISTCC_DIR="${DISTCC_DIR}" || die "distcc_dir export failed"
232
233
234 #ccache + distcc together
235 if [ "${SMAGE_USE_CCACHE}" == "true" ]
236 then
237 if [ -x /usr/bin/ccache ]
238 then
239 echo "Preparing DistCC to work together with CCache ..."
240 #export CCACHE_PREFIX="distcc" || die "distcc: could not set ccach_prefix"
241 # export CC="ccache distcc"
242 # export CXX="ccache distcc"
243 fi
244 fi
245
246 #creating distcc tempdir
247 install -o distcc -g daemon -d ${DISTCC_DIR}
248 chmod 1777 ${DISTCC_DIR}
249 fi
250 }
251
252 setup_ccache_environment(){
253 if [ -x /usr/bin/ccache ]
254 then
255 echo "Using CCache for compilation ..."
256 export PATH=/usr/lib/ccache/bin:${PATH} || die "ccache: could not export new $PATH"
257 #unset CC CXX
258 fi
259 }
260
261 if [ -z "$1" ]
262 then
263 showversion
264 echo
265 echo "No .smage2 file given. Exiting."
266 echo
267 exit 1
268 fi
269
270 #updating smage2-scripts
271 if [ "$1" == "update" ]
272 then
273 showversion
274 if [ ! -d ${SMAGESCRIPTSDIR} ]
275 then
276 install -d ${SMAGESCRIPTSDIR}
277 fi
278 syncsmage2
279 exit 0
280 fi
281
282
283 if [ ! -e ${MLIBDIR}/pkgbuild_dir.sh ]
284 then
285 die "Error: ${MLIBDIR}/pkgbuild_dir.sh not found. Aborting."
286 fi
287
288 if [ -z "`basename ${SMAGENAME}|grep .${SMAGESUFFIX}`" ]
289 then
290 die "File '`basename ${SMAGENAME}`' is not a sMage v${SMAGEVERSION} file. Aborting."
291 fi
292
293 if [ -z "${SOURCEDIR}" ]
294 then
295 die "\$SOURCEDIR not found. Please setup your mage.rc correctly."
296 fi
297
298 if [ -z "${SMAGESCRIPTSDIR}" ]
299 then
300 die "\$SMAGESCRIPTSDIR not found. Please setup your mage.rc correctly."
301 fi
302
303 if [ -z "${SMAGE2RSYNC}" ]
304 then
305 echo "\$SMAGE2RSYNC not found. Please setup your mage.rc correctly."
306 exit 1
307 fi
308
309 if [ -z "${BINDIR}" ]
310 then
311 die "no BINDIR variable found in /etc/mage.rc"
312 fi
313
314 if [ -z "${CHOST}" ]
315 then
316 die "no CHOST variable found in /etc/mage.rc"
317 fi
318
319 if [ -z "${CFLAGS}" ]
320 then
321 die "no CFLAGS variable found in /etc/mage.rc"
322 fi
323
324 if [ -z "${CXXFLAGS}" ]
325 then
326 die "no CXXFLAGS variable found in /etc/mage.rc"
327 fi
328
329
330 source ${SMAGENAME} || die "source failed"
331 PKGNAME="${PNAME}-${PVER}-${CHOST%%-*}-${PBUILD}"
332
333 xtitle "Compiling ${PKGNAME}"
334 #fixes some issues with these functions
335 export -f src_prepare || die "src_prepare export failed"
336 export -f src_compile || die "src_compile export failed"
337 export -f src_install || die "src_install export failed"
338
339 #fixes some compile issues
340 export CHOST="${CHOST}" || die "CHOST export failed"
341 export CFLAGS="${CFLAGS}" || die "CFLAGS export failed"
342 export CXXFLAGS="${CFLAGS}" || die "CXXFLAGS export failed"
343 export BINDIR="${BINDIR}" || die "BINDIR export failed"
344 export MAKEOPTS="${MAKEOPTS}" || die "MAKEOPTS export failed"
345
346
347 #setup distcc
348 #distcc mus be setup *before* ccache, as ccache need to be before distcc in path
349 if [ "${SMAGE_USE_DISTCC}" == "true" ]
350 then
351 setup_distcc_environment
352 fi
353
354 #setup ccache
355 if [ "${SMAGE_USE_CCACHE}" == "true" ]
356 then
357 setup_ccache_environment
358 fi
359
360
361 # small sleep to show our settings
362 sleep 1
363
364 #debug
365 #echo "CC=${CC}"
366 #echo "CXX=${CXX}"
367 #echo "DISTCC_DIR=${DISTCC_DIR}"
368 #echo "PATH: ${PATH}"
369 #echo "--------------------------------------"
370 #env
371 #echo "--------------------------------------"
372 #read
373 #debug end
374
375 #cleans up build if a previously one exists
376 if [ -d ${BUILDDIR} ]
377 then
378 rm -rf ${BUILDDIR}/* || die "couldn't cleanup \$BUILDDIR."
379 fi
380 install -d ${BUILDDIR} || die "couldn't create \$BUILDDIR."
381
382 #cleans up srcdir if a previously unpacked one exists
383 if [ -d ${SRCDIR} ]
384 then
385 rm -rf ${SRCDIR}
386 fi
387
388 #cleans up bindir if a previous build exists or creates a new one
389 if [ -d ${BINDIR} ]
390 then
391 rm -rf ${BINDIR}
392 fi
393 install -d ${BINDIR} || die "couldn't create \$BINDIR."
394
395 #cleans up package temp dir if a previous build exists
396 if [ -d ${BUILDDIR}/${PKGNAME} ]
397 then
398 rm -rf ${BUILDDIR}/${PKGNAME}
399 fi
400
401 #cleans up timestamp if one exists
402 if [ -f /var/tmp/timestamp ]
403 then
404 mage rmstamp
405 fi
406
407 src_prepare || die "src_prepare failed"
408 src_compile || die "src_compile failed"
409 src_install || die "src_install failed"
410
411
412 #compressing doc, info & man files
413 echo -e "Compressing man-pages ..."
414 if [ -d ${BUILDDIR}/builded/usr/share/man ]
415 then
416 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/man
417 fi
418
419 echo -e "Compressing info-pages ..."
420 if [ -d ${BUILDDIR}/builded/usr/share/info ]
421 then
422 ${MLIBDIR}/compressdoc -g -9 ${BUILDDIR}/builded/usr/share/info
423 fi
424
425 #the new buildpkg command
426 case ${NOPKGBUILD} in
427 true|TRUE|yes|y)
428 echo -e "NOPGKBUILD=true detected; Package will not be build ..."
429 ;;
430 *)
431 ${MLIBDIR}/pkgbuild_dir.sh ${PKGNAME} ${BINDIR} || die "package-build failed"
432 echo -e "\nPackage ${PKGNAME} successfully builded.\n"
433 ;;
434 esac
435
436 #for sure
437 unset NOPKGBUILD
438
439 xtitleclean
440 #echo -e "\nPackage ${PKGNAME} successfully builded.\n"

Properties

Name Value
svn:executable *