tazwok annotate chroot-scripts/cook-toolchain @ rev 550

Merge hotfixes from default branch
author Antoine Bodin <gokhlayeh@slitaz.org>
date Sat Dec 10 03:42:32 2011 +0100 (2011-12-10)
parents fcc1dc4dd1af 713a5580cf9a
children
rev   line source
gokhlayeh@315 1 #!/bin/bash
gokhlayeh@315 2 #
gokhlayeh@315 3 # An attempt to cook a new toolchain from scratch.
gokhlayeh@315 4
gokhlayeh@315 5 # Important settings and variables.
gokhlayeh@315 6 source /usr/lib/slitaz/libtaz
gokhlayeh@315 7 source /etc/slitaz/tazwok.conf
gokhlayeh@352 8
gokhlayeh@542 9 LOCAL_REPOSITORY=$SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}
gokhlayeh@542 10 if [ -f $LOCAL_REPOSITORY/tazwok.conf ]; then
gokhlayeh@542 11 source $LOCAL_REPOSITORY/tazwok.conf
gokhlayeh@542 12 fi
gokhlayeh@542 13 WOK=$LOCAL_REPOSITORY/wok
gokhlayeh@542 14
gokhlayeh@352 15 # Report progress on webserver.
gokhlayeh@352 16 log_step="$LOCAL_REPOSITORY/log/step"
gokhlayeh@352 17 run_on_exit="$run_on_exit
gokhlayeh@352 18 rm -f $LOCAL_REPOSITORY/log/step
gokhlayeh@352 19 rm -f $LOCAL_REPOSITORY/log/package"
gokhlayeh@352 20
gokhlayeh@315 21 source_lib report
gokhlayeh@315 22 report start
gokhlayeh@315 23
gokhlayeh@315 24 report step "Cooking temporary toolchain"
gokhlayeh@315 25 report open-bloc
gokhlayeh@315 26
gokhlayeh@441 27 report step "Refreshing SliTaz tools"
gokhlayeh@441 28 report open-bloc
paul@427 29 # These four packages will be needed later.
gokhlayeh@334 30 for p in libtaz tazwok slitaz-base-files tazpkg; do
gokhlayeh@315 31 tazwok cook $p
gokhlayeh@315 32 done
gokhlayeh@441 33 report close-bloc
gokhlayeh@315 34
gokhlayeh@454 35 report step "Configuring repositories"
gokhlayeh@454 36 # Incoming packages as the only source for packages.
gokhlayeh@454 37 rm -r /var/lib/tazpkg/undigest
slaxemulator@545 38 tazpkg setup-mirror $LOCAL_REPOSITORY/packages-incoming
gokhlayeh@454 39 tazpkg recharge
gokhlayeh@454 40
gokhlayeh@441 41 report step "Setting up environnement"
gokhlayeh@315 42 set +h
gokhlayeh@315 43 umask 022
gokhlayeh@315 44 PS1='\u:\w\$ '
gokhlayeh@315 45 LANG=POSIX
gokhlayeh@315 46 LC_ALL=POSIX
gokhlayeh@315 47
gokhlayeh@542 48 # Set HOST_SYSTEM to something like $ARCH-tmp-linux-gnu to enable
paul@427 49 # the temporary toolchain.
gokhlayeh@542 50 HOST_SYSTEM=$(echo $HOST_SYSTEM | sed 's/\(.*\)-\(.*\)-linux-gnu/\1-tmp-linux-gnu/')
gokhlayeh@315 51
gokhlayeh@315 52 PATH=/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin:/bin:/usr/bin:/sbin:/usr/sbin
gokhlayeh@315 53 CONFIG_SITE="/etc/config.site.tmptoolchain"
gokhlayeh@542 54 echo "prefix=/tools" > /etc/config.site.tmptoolchain
gokhlayeh@315 55
gokhlayeh@315 56 export LANG LC_ALL PATH PS1 MAKEFLAGS CONFIG_SITE
gokhlayeh@315 57 unset CC CXX CPP CFLAGS CXXFLAGS LD_LIBRARY_PATH LD_PRELOAD DESTDIR
gokhlayeh@315 58
gokhlayeh@542 59 # Create the dir for the temporary toolchain and link in root of build
gokhlayeh@315 60 # system.
gokhlayeh@441 61 rm -rf /tools
gokhlayeh@315 62 mkdir /tools
gokhlayeh@315 63
gokhlayeh@441 64 report end-step
gokhlayeh@441 65
gokhlayeh@315 66 # Use some tweaked code from tazwok.
gokhlayeh@315 67 prepare_package()
gokhlayeh@315 68 {
gokhlayeh@315 69 tazwok clean $PACKAGE
gokhlayeh@315 70 tazwok get-src $PACKAGE
gokhlayeh@315 71 unset SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
slaxemulator@497 72 MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED \
slaxemulator@497 73 stuff wanted_stuff
gokhlayeh@315 74 . $WOK/$PACKAGE/receipt
gokhlayeh@315 75 src=$WOK/$PACKAGE/$PACKAGE-$VERSION
gokhlayeh@473 76 stuff=$WOK/$PACKAGE/stuff
gokhlayeh@473 77 [ "$WANTED" ] && wanted_stuff=$WOK/$WANTED/stuff
gokhlayeh@315 78 cd $WOK/$PACKAGE
gokhlayeh@315 79 }
gokhlayeh@315 80
gokhlayeh@542 81
gokhlayeh@315 82 # Binutils and gcc need to be compiled twice.
gokhlayeh@315 83 for PACKAGE in binutils gcc; do
gokhlayeh@315 84 rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html 2>/dev/null
gokhlayeh@315 85 report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html
gokhlayeh@352 86 echo "tmp-toolchain-$PACKAGE-firstpass" > $LOCAL_REPOSITORY/log/package
gokhlayeh@315 87 report step "Compiling $PACKAGE, first pass"
gokhlayeh@315 88 report open-bloc
gokhlayeh@315 89 prepare_package
gokhlayeh@315 90 report step "Running compilation rules"
gokhlayeh@548 91 precook_tmp_toolchain
gokhlayeh@315 92 report end-step || exit 1
gokhlayeh@315 93 report close-bloc
gokhlayeh@315 94 report end-sublog
gokhlayeh@315 95 done
gokhlayeh@315 96
gokhlayeh@315 97 # Compile temporary toolchain using the $TOOLCHAIN variable.
gokhlayeh@315 98 for PACKAGE in $SLITAZ_TOOLCHAIN; do
gokhlayeh@315 99 rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html 2>/dev/null
gokhlayeh@315 100 report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html
gokhlayeh@352 101 echo "tmp-toolchain-$PACKAGE" > $LOCAL_REPOSITORY/log/package
gokhlayeh@315 102 report step "Compiling $PACKAGE"
gokhlayeh@315 103 report open-bloc
gokhlayeh@315 104 prepare_package
gokhlayeh@315 105 report step "Running compilation rules"
gokhlayeh@315 106
paul@427 107 # Use compile_rules if there's no function cook_tmp_toolchain in
gokhlayeh@315 108 # the receipt. Works well if both functions are the same, as
paul@427 109 # cook-toolchain uses its own config.site to set different default
paul@427 110 # paths.
gokhlayeh@315 111 if grep -q ^cook_tmp_toolchain\(\)$ $WOK/$PACKAGE/receipt; then
gokhlayeh@315 112 cook_tmp_toolchain
gokhlayeh@315 113 else
gokhlayeh@315 114 compile_rules
gokhlayeh@315 115 fi
gokhlayeh@315 116
gokhlayeh@315 117 report end-step || exit 1
gokhlayeh@315 118 report close-bloc
gokhlayeh@315 119 report end-sublog
gokhlayeh@315 120 done
gokhlayeh@315 121
paul@427 122 # Now we erase previous chroot tools and switch to temporary
gokhlayeh@315 123 # toolchain.
gokhlayeh@315 124
gokhlayeh@315 125 report step "Setting up temporary toolchain environnment"
gokhlayeh@315 126
gokhlayeh@315 127 PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin
gokhlayeh@315 128 export PATH
gokhlayeh@315 129
gokhlayeh@315 130 # Ajout manuel de libtaz et tazwok dans ce chroot.
gokhlayeh@315 131 cp -a /etc/slitaz/tazpkg.conf /tmp/tazpkg.conf
gokhlayeh@315 132 mkdir -p /tmp/backup/var/lib/tazpkg
gokhlayeh@315 133 sed 's/^AUTO_INSTALL_DEPS="yes"/AUTO_INSTALL_DEPS="no"/' -i \
gokhlayeh@315 134 /etc/slitaz/tazpkg.conf
gokhlayeh@458 135 cp -a /var/lib/tazpkg/* /tmp/backup/var/lib/tazpkg
gokhlayeh@334 136 BASE_PKGS="tazpkg tazwok slitaz-base-files libtaz"
gokhlayeh@315 137 for i in $BASE_PKGS; do
gokhlayeh@315 138 echo N | tazpkg get-install $i --root=/tmp/backup --forced
gokhlayeh@315 139 done
gokhlayeh@315 140 mkdir -p /tmp/backup/var/log/slitaz /tmp/backup/etc/slitaz
gokhlayeh@315 141 if [ -d /var/log/slitaz ]; then
gokhlayeh@315 142 cp -a /var/log/slitaz/* /tmp/backup/var/log/slitaz
gokhlayeh@315 143 fi
gokhlayeh@315 144 cp -a /etc/slitaz/* /tmp/backup/etc/slitaz
gokhlayeh@315 145 cp -a /tmp/tazpkg.conf /tmp/backup/etc/slitaz
gokhlayeh@315 146 cp -a /etc/resolv.conf /tmp/backup/etc
gokhlayeh@315 147
gokhlayeh@322 148 # Switch to temp toolchain tools entirely.
gokhlayeh@315 149 rm -r /bin /etc /lib /sbin /usr /var
gokhlayeh@315 150 cp -a /tmp/backup/* /
gokhlayeh@322 151 rm -r /tmp/backup
gokhlayeh@315 152
gokhlayeh@315 153 case $ARCH in
gokhlayeh@315 154 x86_64) ln -sv lib /lib64 && ln -sv lib /usr/lib64 ;;
gokhlayeh@315 155 esac
gokhlayeh@315 156
gokhlayeh@315 157 mkdir -p /bin /usr/bin /usr/lib
paul@427 158 # Doing a loop so we don't get {bash,cat,echo,pwd,stty} softlink
gokhlayeh@315 159 BASIC_APPS="bash cat echo pwd stty"
gokhlayeh@315 160 for i in $BASIC_APPS; do
gokhlayeh@315 161 ln -s /tools/bin/$i /bin/$i
gokhlayeh@315 162 done
gokhlayeh@458 163 BASIC_LIBS="libgcc_s.so libgcc_s.so.1 libstdc++.so libstdc++.so.6 ld*.so"
gokhlayeh@315 164 for i in $BASIC_LIBS; do
gokhlayeh@315 165 ln -sf /tools/lib/$i /usr/lib/$i
gokhlayeh@315 166 done
gokhlayeh@315 167
gokhlayeh@315 168 ln -s /tools/bin/perl /usr/bin
gokhlayeh@315 169 ln -s /tools/bin/gettext.sh /usr/bin
gokhlayeh@322 170 ln -s /tools/bin/busybox /bin/sh
gokhlayeh@315 171
gokhlayeh@458 172 # Touch /etc/config.site.tmptoolchain to make tazwok know
gokhlayeh@458 173 # we still cook the toolchain.
gokhlayeh@458 174 # (= non-conventional repositories configuration into chroot).
gokhlayeh@458 175 touch /etc/config.site.tmptoolchain
gokhlayeh@458 176
gokhlayeh@315 177 report end-step
gokhlayeh@315 178
gokhlayeh@315 179 # Finally, cook final* version of the toolchain packages.
gokhlayeh@315 180 # * : recook toolchain against itself minus linux-api-headers
gokhlayeh@315 181 # glibc binutils & gcc can be a good idea to make things
paul@427 182 # more robust & stable; in some cases it solves dependency
gokhlayeh@315 183 # loops.
gokhlayeh@315 184
gokhlayeh@315 185 # Get toolchain cooklist.
gokhlayeh@315 186 tazwok gen-cooklist ${undigest:+--undigest=$undigest} > /tmp/toolchain.list
gokhlayeh@315 187
gokhlayeh@315 188 # Next cook packages one by one.
paul@427 189 # Cooking the list doesn't work because sh won't take care
gokhlayeh@315 190 # of the presence of new executables even if they're first in
gokhlayeh@315 191 # $PATH.
gokhlayeh@315 192
gokhlayeh@441 193 cat /tmp/toolchain.list | while read PACKAGE; do
gokhlayeh@315 194 tazwok cook $PACKAGE || exit 1
gokhlayeh@315 195 done