#!/bin/sh -e fetch() { for s in $source; do filename=${s##*/} if [ "$s" != "$filename" ]; then if [ ! -f $SRCDIR/$filename ]; then echo "fetching $s" curl -C - -L --fail --ftp-pasv --retry 999 --retry-delay 3 -o $SRCDIR/$filename.part $s && \ mv $SRCDIR/$filename.part $SRCDIR/$filename || { echo "failed fetch $s" exit 1 } fi fi done } unpack() { rm -fr "$WORKDIR/$pkg" mkdir -p "$WORKDIR/$pkg" for src in $source; do filename=${src##*/} case $src in *.tar|*.tar.gz|*.tar.Z|*.tgz|*.tar.bz2|*.tbz2|*.tar.xz|*.txz|*.tar.lzma|*.zip) echo "extracting $filename..." tar -xf "$SRCDIR/$filename" -C "$WORKDIR/$pkg" || { echo "failed extracting $filename" exit 1 };; esac done } buildtc() { cd $WORKDIR/$name (set -e -x; build) if [ $? -ne 0 ]; then echo "!!! build $name-$version failed !!!" exit 1 else echo "--- build $name-$version success ---" fi [ "$name" ] && rm -fr $WORKDIR/$name echo $name-$version > $LFS/tools/$(basename $script) } checkdone() { if [ -e $LFS/tools/$(basename $script) ]; then echo "*** skip $(basename $script) ***" return 1 else echo ">>> building $(basename $script) <<<" return 0 fi } build() { : } main() { for script in $TCDIR/[0-9][0-9]-*; do checkdone || continue cd $CWD . $script pkg=$name fetch unpack buildtc unset source name version build #build_stage1 $script done } if [ $(id -u) = 0 ]; then echo "$0 script need to run as regular user!" exit 1 fi CWD=$PWD if [ -f $CWD/config ]; then . $CWD/config fi PATH=/tools/bin:/bin:/usr/bin TCDIR=$CWD/toolchain PATCHDIR=$CWD/patches FILEDIR=$CWD/files LFS_TGT=x86_64-lfs-linux-gnu LFS_TGT32=i686-lfs-linux-gnu MAKEFLAGS="${MAKEFLAGS:--j$(nproc)}" LFS="${LFS:-$CWD/lfs-rootfs}" PKGDIR="${PKGDIR:-$CWD/pkg}" SRCDIR="${SRCDIR:-$CWD/src}" WORKDIR="${WORKDIR:-$CWD/work}" CFLAGS="${CFLAGS:--O2 -march=x86-64 -pipe}" export LC_ALL=C PATH MAKEFLAGS LFS LFS_TGT LFS_TGT32 mkdir -p $SRCDIR $PKGDIR $WORKDIR if [ ! -d $LFS/tools ]; then mkdir -pv $LFS/tools fi if [ ! -w $LFS ]; then echo "'$LFS' directory has no right access" echo "Please run 'chown -Rv $USER:$USER $LFS' as root" exit 1 fi if [ ! -L /tools ] || [ $(realpath /tools) != $LFS/tools ]; then echo "Please create required '/tools' symlink by running 'ln -svf $LFS/tools /tools' as root" exit 1 fi main $@ exit 0