#!/bin/bash
#
# This script is the second stage in bootstrapping a Fedora build to a
# new platform or architecture.  Running stage1 with no arguments
# builds a cross-development environment, then cross-builds a minimal
# rootfs.  Once you have this minimal rootfs booted (or chroot'd), run
# stage2 (this script) in that rootfs to build the rest of the
# bootstrap packages.
#
# This script assumes that all the needed sources are installed in
# $SRC (below) by stage1.  Each build installs into /usr.
#
# You may pass a single package name on the command line to rebuild
# just that one package.
#
# The master upstream for this script is:
#   git://fedorapeople.org/~djdelorie/bootstrap.git
#
# ------------------------------------------------------------
#
#	      --- NOTES FOR PACKAGE PORTING ---
#
# This script is stage TWO of a bootstrap process.  EVERYTHING that
# this script uses MUST be provided by the stage ONE script -
# filesystem, utilities, sources, etc.  Please keep this in mind when
# editing this script - anything you do manually to "prepare" for your
# build, will NOT be reproducible.
#
# Please make sure your package is not in either stage1 or stage2, and
# that nobody else is already working on your package, before
# starting.  Grep is your friend.  See the wiki page for details.
#
# There are FOUR places you must edit when adding packages to the
# bootstrap build:
#
# 1. Add a clause at the end of this script to actually build your
#    package.
#
# 2. Add your package to the "" case at the beginning of the package
#    list, about a page down from these comments.  Put in the order in
#    which it needs to build based on its dependencies.
#
# 3. Add your SRPM to the list at the end of the stage1 script so that
#    your sources are available in the bootstrap rootfs.
#
# 4. Update the Fedora/ARM bootstrap wiki page.
#
# If you attempt to add a package and discover some unsatisfied build
# dependency, add a clause for it here that documents the dependency
# and exits with a non-zero code.  In that case, do not add your
# package to the "" case.
#
# ------------------------------------------------------------

#set -vx

TOP=/stage2
MYDIR=${0%/*}
STAGE2=$MYDIR/stage2

SRC=$TOP/rpmbuild/BUILD
J=-j2

BUILDDIR=$TOP/builds

# The cross-compiler target
TARGET=armv7hl-mandriva-linux-gnueabi

if [ -f $MYDIR/local.conf ]
then
    . $MYDIR/local.conf
fi

if [ ! -c /dev/null -a -w / ]
then
    echo Creating /dev devices...
    mkdir /dev
    mknod /dev/null		c   1 3
    mknod /dev/zero		c   1 5
    mknod /dev/random		c   1 8
    mknod /dev/urandom		c   1 9
    mknod /dev/tty		c   5 0
    mknod /dev/console		c   5 1
    mknod /dev/sda		b   8 0
    mknod /dev/sda1		b   8 1
    mknod /dev/sda2		b   8 2
    mknod /dev/sda3		b   8 3
    mknod /dev/sda4		b   8 4
    mknod /dev/mmcblk0		b 179 0
    mknod /dev/mmcblk0p1	b 179 1
    mknod /dev/mmcblk0p2	b 179 2
    mknod /dev/mmcblk0p3	b 179 3
    mknod /dev/mmcblk0p4	b 179 4
    mknod /dev/ttyO0		c 253 0
    mknod /dev/ttyO1		c 253 1
    mknod /dev/ttyO2		c 253 2
    mknod /dev/ttyO3		c 253 3
    chmod a+rw /dev/null /dev/zero
fi

if [ ! -d /tmp ]
then
    echo Creating /tmp...
    mkdir /tmp
    chmod 1777 /tmp
fi

# ------------------------------------------------------------

mkdirp()
{
    test -d $1 || mkdir -p $1
}

mkdirp $ROOTFS
mkdirp $PREFIX
mkdirp $BUILDDIR

export PATH=$PREFIX/bin:$PATH

go()
{
  "$0" "$@"
}

mcd()
{
    test -d $1 || mkdir -p $1
    cd $1
}

notparallel()
{
    echo .NOTPARALLEL: >> Makefile
}

fix_la()
{
    for la in $ROOTFS/usr/lib/*$1*.la
    do
	rm $la
    done
}

case "$1" in
    "" )
	go clean

    # build recipes are now in /stage2/recipe.d/
    # enabled recipes start with [0-9]{4}-
    # disabled recipes start with XXXX-

    for PKG in /stage2/recipe.d/[0-9][0-9][0-9][0-9]-*
    do
        PKG="$(basename $PKG|sed 's/^[0-9]*-//')"
        go "$PKG"
    done
	;;

    "clean" )
	;;

    # Packages built by stage1

    binutils | gcc | glibc | kernel | x-loader | u-boot \
    | gmp | mpfr | libmpc | mpc | ppl | cloog | libselinux | zlib \
    | bash | make | sed | coreutils | util-linux | tar | gzip \
    | bzip2 | diffutils | findutils | gawk | patch | unzip | which | gz | grep )

        echo "$1 is built in stage1" >&2
        exit 1
        ;;

#--------------------------------------------------

    * )
    	if [ -f "/stage2/recipe.d/"[0-9][0-9][0-9][0-9]"-$1" ]
    	then
    		. /stage2/recipe.d/[0-9][0-9][0-9][0-9]-$1
    	else
    		echo "No build recipe found for $1" >&2
    		exit 2
    	fi

esac

exit 0

