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 |