source: builder/runrooted @ 0105685

gcc484ntopperl-5.22
Last change on this file since 0105685 was c5c522c, checked in by Edwin Eefting <edwin@datux.nl>, 8 years ago

initial commit, transferred from cleaned syn3 svn tree

  • Property mode set to 100755
File size: 7.1 KB
Line 
1#!/bin/bash
2#(C)DatuX 2005 - all rights reserved
3#-kijkt of er een goede (ongewijzigde) buildroot aanwezig is
4#-genereerd indien nodig een nieuwe buildroot (oude word dan gewist)
5#-copy de directory waar het programma staat naar de buildroot
6#-start het programma chrootted
7#-kopieer nieuwe files in de directory (niet de subdirs) terug naar orginenele plek
8#-geeft een overzicht van de gewijzigde files. (als het programma de buildroot dus sloopt)
9#-de tmp dir in de buildroot word niet meegenomene met wijzigingen en word altijd
10# opnieuw gemaakt.
11
12
13if [ -z $1 ]; then
14    echo "Geef scriptnaam op!"
15    echo "$0 <scriptnaam> [nocheck] [nodep]"
16#    echo " rebuildroot: haal hele buildroot weg, alles opnieuw"
17    echo " nocheck:   repareer de buildroot niet. "
18    echo "              (alleen als je zelfde package nog een keer bouwt)"
19    echo " nodep:     installeer dependencies niet"
20    echo " progress: progress indicator tonen. (pv dient geinstalleerd te zijn voor progress indicators)"
21    exit 1
22fi
23
24for PAR in $*; do eval "$PAR=1" &>/dev/null; done
25
26#unieke identifier voor deze lokale svn checkout. Op dit moment gebruiken we hier het lokale pad voor:
27SVNID=`pwd|tr / _`
28
29export ROOTCOPY=/tmp/buildroot.copy.$SVNID
30
31#bepaal welke buildroot 'vrij' is om te gebruiken
32NR=0
33export BUILDROOT=/tmp/buildroot$NR.$SVNID
34while ! lockfile-create -r0 $BUILDROOT ; do
35        (( NR++ ))
36        BUILDROOT=/tmp/buildroot$NR.$SVNID
37        if [ "$NR" -ge 10 ]; then
38                echo "No more free buildroots, giving up."
39                exit 1
40        fi
41done
42#always remove lockfile on exit!
43trap "rm $BUILDROOT.lock &>/dev/null" 0
44
45
46PGMPATH=$1
47DIR=`dirname "$PGMPATH"`;
48PGM=`basename "$PGMPATH"`;
49ROOTEDWORKDIR=/tmp/build
50WORKDIR=$BUILDROOT$ROOTEDWORKDIR
51
52if [ ! -x $PGMPATH ] || [ ! -f $PGMPATH ]; then
53    echo "Exectubable $PGMPATH bestaat niet!"
54    exit 1
55fi
56
57#root helemaal rebuilden?
58#if [ "$rebuildroot" ]; then
59#    echo "Deleting old buildroot..."
60#    rm -r $BUILDROOT
61#fi
62
63#ivm snelheid
64#echo "Buildroot opschonen.."
65#rm -rf $BUILDROOT/tmp/* &>/dev/null
66
67
68#buildroot controleren/fixen/voorbereiden?
69if [ "$nocheck" ] ; then
70    echo "(skipping buildroot check..)"
71else
72    mkdir $BUILDROOT &>/dev/null
73    ./chkbuildroot $BUILDROOT $ROOTCOPY $* || exit 1
74fi
75
76
77if [ "$nodep" ]; then
78    echo "(skipping dependency install..)"
79else
80        CONFIG=
81        #bepaal de build dependencies:
82
83        NEEDS=`../npl/findbuilddeps $PGMPATH` || exit 1
84        for NEED in $NEEDS; do
85                #already installed?
86                if grep -x "$NEED" ../npl/buildroot.list >/dev/null; then
87                        continue
88                fi
89
90                CONFIG=1
91                echo -n "Build-dependency $NEED installeren: "
92                TGZ=`../npl/findpkg "$NEED"` || exit 1
93                echo "$TGZ"
94
95                #Bepaal waar het pakketje in de buildroot moet terecht komen, ivm crosscompiling.
96                #Zon pakketje mag niet in de buildroot zelf, omdat dan de bestaande libraries overschreven kunnen worden met die van een andere architectuur.
97                #eerst moeten we de architectuur van het pakketje weten:
98                NEEDHOST=
99                if NEEDBUILD=`../npl/findbuild "$NEED"`; then
100                    #FIXME: dit klopt niet, bij perlmod_XML_Parser pakt hij nu buildmods.arch ipv perlmod_XML_Parser.arch!
101                    NEEDHOST=`cat $NEEDBUILD.arch 2>/dev/null`
102                fi
103                #als het er een directory naast npl bestaat is het een crosscomplile architectuur:
104                if [ "$NEEDHOST" ] && [ -e ../$NEEDHOST ]; then
105                    #cross-architectuur, install
106                    #in een subdirectory onder buildroot, met naam van architectuur:
107                    echo "(Cross architecture detected, installing package in $NEEDHOST toolchain directory)"
108                    export ROOT=$BUILDROOT/usr/$NEEDHOST/$NEEDHOST
109                else
110                    #gewoon direct in de buildroot pleuren:
111                    export ROOT=$BUILDROOT
112                fi
113
114                installpkg "$TGZ" >/dev/null || exit 1
115
116                #_dev niet gespecificeerd?
117#NO: findbuilddeps does this now
118#               if ! echo "$NEEDS" | grep "$NEED""_dev"; then
119#                       #bestaat er wel een dev?
120#                       if TGZ=`../npl/findpkg "$NEED""_dev" 2>/dev/null`; then
121#                               echo "Auto selecting development package: $TGZ"
122#                               installpkg "$TGZ" >/dev/null || exit 1
123#                       fi
124#               fi
125
126        done
127
128        if [ "$CONFIG" ]; then
129                echo "Nieuwe packages ldconfiggen..."
130                ldconfig -r $BUILDROOT || exit 1
131                echo "etc-update doen"
132                chroot $BUILDROOT "/bin/bash" -l -c "etc-update" || exit 1
133        fi
134
135        #paden fixen ivm cross compile?
136        if [ "$HOST" ]; then
137                echo -n "Adjusting crossplatform library configs in toolchain directory..."
138                #fix pkgconfig files that are in crossplatform-path:
139                sed -i "s@=/usr@=/usr/$NEEDHOST/$NEEDHOST/usr@" $BUILDROOT/usr/$HOST/$HOST/usr/lib/pkgconfig/*.pc
140                #fix *-config files that are in crossplatform-path:
141                sed -i "s@=/usr@=/usr/$HOST/$HOST/usr@" $BUILDROOT/usr/$HOST/$HOST/usr/bin/*-config
142                sed -i "s@\"/usr@\"/usr/$HOST/$HOST/usr@" $BUILDROOT/usr/$HOST/$HOST/usr/bin/*-config
143                echo "DONE"
144        fi
145
146fi
147
148#hack kernel versie tools
149cat arch > $BUILDROOT/bin/arch
150chmod +x $BUILDROOT/bin/arch
151KVER=`ls $BUILDROOT/lib/modules 2>/dev/null|cut -f1 -d'/'`
152if [ "$KVER" == "" ]; then
153        KVER=`cat ../npl/kernel/linux_src/linux_src.version` || exit 1
154fi
155cat uname |sed "s/#KVER#/$KVER/g" > $BUILDROOT/bin/uname
156chmod +x $BUILDROOT/bin/uname
157
158#vanaf hier is er een goede buildroot
159echo "$DIR word gekopieerd naar werkdirectory $WORKDIR"
160cp -a $DIR $WORKDIR || exit 1
161chown -R root:root $WORKDIR || exit 1
162
163#proc is needed for all kinds of things:
164umount $BUILDROOT/proc &>/dev/null
165mount -t proc none $BUILDROOT/proc || exit 1
166
167#pts is needed for programs like 'Expect':
168umount $BUILDROOT/dev/pts &>/dev/null
169mount -t devpts none $BUILDROOT/dev/pts -o rw,nosuid,noexec,gid=5,mode=620 || exit 1
170
171#put the logfile in top of the buildroot and not in /tmp/build, to not 'disrupt' smart SlackBuild that use file-times.
172export LOG="$BUILDROOT/$PGM.log"
173
174#log output and show progress info if pv is installed
175progress()
176{
177        #use old logfile as reference for progress indication
178        SIZE=`zcat $BUILDROOT/tmp/build/$PGM.log.gz 2>/dev/null|wc -c`
179        if [ "$progress" ] && which pv &>/dev/null; then
180                pv -s $SIZE -p -t -e  | tee $LOG
181        else
182                tee $LOG
183        fi
184}
185
186#clear environment, set some variables and do the actual chrooting:
187echo -e "\e[1;33m*** Chroot naar $BUILDROOT en starten van $PGM in $ROOTEDWORKDIR:\e[0m" >&2
188CHROOT=`which chroot`
189env - $CHROOT $BUILDROOT "/bin/bash" -l -c "
190        export MAKEFLAGS='$MAKEFLAGS'
191        cd $ROOTEDWORKDIR
192        export PS4='\[\e[1;32m\]\$LINENO \$PWD > \[\e[0m\]'
193        export HOST=$HOST
194        bash -x ./$PGM" 2>&1 | progress ;
195
196if [ "${PIPESTATUS[0]}" != "0" ]; then
197        echo -e "\e[1;31m*** Er ging iets mis tijdens het bakken in de buildroot!\e[0m" >&2
198        echo "Chroot naar $BUILDROOT zodat je kunt onderzoeken (ctrl-d om te stoppen):"
199        env - $CHROOT $BUILDROOT "/bin/bash" -l -c "
200            export MAKEFLAGS='$MAKEFLAGS'
201            export TERM='$TERM'
202            cd $ROOTEDWORKDIR
203            export HOST=$HOST
204            bash" 2>&1
205
206        umount $BUILDROOT/proc
207        umount $BUILDROOT/dev/pts
208        echo "Om verder te testen/onderzoeken, tik:"
209        echo "chroot $BUILDROOT"
210        echo "Logfile: $LOG"
211        exit 1
212else
213        echo -e "\e[1;32m*** Build gelukt.\e[0m" >&2
214fi
215
216umount $BUILDROOT/proc
217umount $BUILDROOT/dev/pts
218
219echo "* Packages terugmoven naar originele directory..";
220echo $WORKDIR/*.arch ...
221mv $WORKDIR/*.arch $DIR || exit 1
222echo $WORKDIR/*.version ...
223mv $WORKDIR/*.version $DIR || exit 1
224echo $WORKDIR/*.pkg ...
225mv $WORKDIR/*.pkg $DIR || exit 1
226echo Compressing $LOG ...
227gzip $LOG || exit 1
228mv $LOG.gz $DIR || exit 1
229
230
231echo
232echo "* Klaar ja!";
Note: See TracBrowser for help on using the repository browser.