tazwok diff chroot-scripts/cook-toolchain @ rev 315

Move tazwok-related chroot scripts from tazchroot to tazwok sources
author Antoine Bodin <gokhlayeh@slitaz.org>
date Fri Feb 18 18:13:38 2011 +0100 (2011-02-18)
parents
children 32b8fbc44418
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/chroot-scripts/cook-toolchain	Fri Feb 18 18:13:38 2011 +0100
     1.3 @@ -0,0 +1,173 @@
     1.4 +#!/bin/bash
     1.5 +#
     1.6 +# An attempt to cook a new toolchain from scratch.
     1.7 +
     1.8 +# Important settings and variables.
     1.9 +source /usr/lib/slitaz/libtaz
    1.10 +source /etc/slitaz/tazwok.conf
    1.11 +source_lib report
    1.12 +report start
    1.13 +
    1.14 +report step "Cooking temporary toolchain"
    1.15 +report open-bloc
    1.16 +
    1.17 +report step "Initializing tools & environment"
    1.18 +
    1.19 +# Theses fours packages will be needed later.
    1.20 +for p in libtaz tazwok-experimental slitaz-base-files tazpkg; do
    1.21 +	tazwok cook $p
    1.22 +done
    1.23 +
    1.24 +set +h
    1.25 +umask 022
    1.26 +PS1='\u:\w\$ '
    1.27 +LANG=POSIX
    1.28 +LC_ALL=POSIX
    1.29 +
    1.30 +# Set BUILD_HOST to something like $ARCH-tmp-linux-gnu to enable
    1.31 +# of the temporary toolchain.
    1.32 +BUILD_HOST=$(echo $BUILD_HOST | sed 's/\(.*\)-\(.*\)-linux-gnu/\1-tmp-linux-gnu/')
    1.33 +
    1.34 +PATH=/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin:/bin:/usr/bin:/sbin:/usr/sbin
    1.35 +CONFIG_SITE="/etc/config.site.tmptoolchain"
    1.36 +echo 'prefix=/tools' > /etc/config.site.tmptoolchain
    1.37 +
    1.38 +export LANG LC_ALL PATH PS1 MAKEFLAGS CONFIG_SITE
    1.39 +unset CC CXX CPP CFLAGS CXXFLAGS LD_LIBRARY_PATH LD_PRELOAD DESTDIR
    1.40 +
    1.41 +# Create the dir for the temporary toolchain and link in root of host 
    1.42 +# system.
    1.43 +[ -d /tools ] && rm -r /tools
    1.44 +mkdir /tools
    1.45 +
    1.46 +# Use some tweaked code from tazwok.
    1.47 +prepare_package()
    1.48 +{
    1.49 +	tazwok clean $PACKAGE
    1.50 +	tazwok get-src $PACKAGE
    1.51 +	unset SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \
    1.52 +		MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED
    1.53 +	. $WOK/$PACKAGE/receipt
    1.54 +	src=$WOK/$PACKAGE/$PACKAGE-$VERSION
    1.55 +	cd $WOK/$PACKAGE
    1.56 +}
    1.57 +LOCAL_REPOSITORY=$SLITAZ_DIR/$SLITAZ_VERSION
    1.58 +[ "$undigest" ] && LOCAL_REPOSITORY=$SLITAZ_DIR/$undigest
    1.59 +WOK=$LOCAL_REPOSITORY/wok
    1.60 +
    1.61 +report end-step
    1.62 +
    1.63 +# Binutils and gcc need to be compiled twice.
    1.64 +for PACKAGE in binutils gcc; do
    1.65 +	rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html 2>/dev/null
    1.66 +	report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html
    1.67 +	report step "Compiling $PACKAGE, first pass"
    1.68 +	report open-bloc
    1.69 +	prepare_package
    1.70 +	report step "Running compilation rules"
    1.71 +	precook_tmp_toolchain
    1.72 +	report end-step || exit 1
    1.73 +	report close-bloc
    1.74 +	report end-sublog
    1.75 +done
    1.76 +
    1.77 +# Compile temporary toolchain using the $TOOLCHAIN variable.
    1.78 +for PACKAGE in $SLITAZ_TOOLCHAIN; do
    1.79 +	rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html 2>/dev/null
    1.80 +	report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html
    1.81 +	report step "Compiling $PACKAGE"
    1.82 +	report open-bloc
    1.83 +	prepare_package
    1.84 +	report step "Running compilation rules"
    1.85 +	
    1.86 +	# Use compile_rules if there's not function cook_tmp_toolchain in
    1.87 +	# the receipt. Works well if both functions are the same, as
    1.88 +	# cook-toolchain use it's own config.site to set different defaults
    1.89 +	# pathes.
    1.90 +	if grep -q ^cook_tmp_toolchain\(\)$ $WOK/$PACKAGE/receipt; then
    1.91 +		cook_tmp_toolchain
    1.92 +	else
    1.93 +		compile_rules
    1.94 +	fi
    1.95 +	
    1.96 +	report end-step || exit 1
    1.97 +	report close-bloc
    1.98 +	report end-sublog
    1.99 +done
   1.100 +
   1.101 +# Now we erase previous chroot tools and we switch to temporary
   1.102 +# toolchain.
   1.103 +
   1.104 +report step "Setting up temporary toolchain environnment"
   1.105 +
   1.106 +PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin
   1.107 +export PATH
   1.108 +
   1.109 +# Ajout manuel de libtaz et tazwok dans ce chroot.
   1.110 +cp -a /etc/slitaz/tazpkg.conf /tmp/tazpkg.conf
   1.111 +mkdir -p /tmp/backup/var/lib/tazpkg
   1.112 +cp -a /var/lib/tazpkg/* /tmp/backup/var/lib/tazpkg
   1.113 +sed 's/^AUTO_INSTALL_DEPS="yes"/AUTO_INSTALL_DEPS="no"/' -i \
   1.114 +	/etc/slitaz/tazpkg.conf
   1.115 +BASE_PKGS="tazpkg tazwok-experimental slitaz-base-files libtaz"
   1.116 +for i in $BASE_PKGS; do
   1.117 +	echo N | tazpkg get-install $i --root=/tmp/backup --forced
   1.118 +done
   1.119 +mkdir -p /tmp/backup/var/log/slitaz /tmp/backup/etc/slitaz 
   1.120 +if [ -d /var/log/slitaz ]; then
   1.121 +	cp -a /var/log/slitaz/* /tmp/backup/var/log/slitaz
   1.122 +fi
   1.123 +cp -a /etc/slitaz/* /tmp/backup/etc/slitaz
   1.124 +cp -a /tmp/tazpkg.conf /tmp/backup/etc/slitaz
   1.125 +cp -a /etc/resolv.conf /tmp/backup/etc
   1.126 +# make sure that if /bin/sh link is not delete we use bash in tools for sh
   1.127 +# otherwise you may get sigment fail
   1.128 +mkdir -p /tmp/backup/bin
   1.129 +ln -s /tools/bin/bash /tmp/backup/bin/sh
   1.130 +
   1.131 +rm -r /bin /etc /lib /sbin /usr /var
   1.132 +cp -a /tmp/backup/* /
   1.133 +#rm -r /tmp/backup
   1.134 +
   1.135 +case $ARCH in
   1.136 + x86_64) ln -sv lib /lib64 && ln -sv lib /usr/lib64 ;;
   1.137 +esac
   1.138 +
   1.139 +mkdir -p /bin /usr/bin /usr/lib
   1.140 +# doing a loop so we don't get {bash,cat,echo,pwd,stty} softlink
   1.141 +BASIC_APPS="bash cat echo pwd stty"
   1.142 +for i in $BASIC_APPS; do
   1.143 +	ln -s /tools/bin/$i /bin/$i
   1.144 +done
   1.145 +BASIC_LIBS="libgcc_s.so libgcc_s.so.1 libstdc++.so libstdc++.so.6"
   1.146 +for i in $BASIC_LIBS; do
   1.147 +	ln -sf /tools/lib/$i /usr/lib/$i
   1.148 +done
   1.149 +
   1.150 +ln -s /tools/bin/perl /usr/bin
   1.151 +ln -s /tools/bin/gettext.sh /usr/bin
   1.152 +
   1.153 +report end-step
   1.154 +
   1.155 +# Finally, cook final* version of the toolchain packages.
   1.156 +# * : recook toolchain against itself minus linux-api-headers
   1.157 +# glibc binutils & gcc can be a good idea to make things
   1.158 +# more robust & stable; in some cases it solves dependencies
   1.159 +# loops.
   1.160 +
   1.161 +# Incoming packages as the only source for packages.
   1.162 +rm -r /var/lib/tazpkg/undigest
   1.163 +tazpkg setup-mirror $SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}/packages-incoming
   1.164 +tazpkg recharge
   1.165 +
   1.166 +# Get toolchain cooklist.
   1.167 +tazwok gen-cooklist ${undigest:+--undigest=$undigest} > /tmp/toolchain.list
   1.168 +
   1.169 +# Next cook packages one by one.
   1.170 +# Cooking the list doesn't works because sh wouldn't take care
   1.171 +# of the presence of new executables even if they're first in
   1.172 +# $PATH.
   1.173 +
   1.174 +cat /tmp/toolchain.list | while read PACKAGE; do
   1.175 +	tazwok cook $PACKAGE || exit 1
   1.176 +done