#!/bin/sh

. ./scripts/parse-config

echo -e "\n ** Building cross binutils and gcc for $target ...\n"

if [ $crossnative != cross ] ; then
	echo
	echo "The build system isn't configured for cross compiling."
	echo "So you also don't need to build a cross compiler."
	echo
	exit 1
fi

# Check if there is a compiler for the target already
#
for x in /usr/$target /usr/local/lib/gcc-lib/$target \
         /usr/local/$target /usr/lib/gcc-lib/$target
do
    if [ -e $x ] ; then
	echo
	echo "ERROR: Found $x"
	echo
	echo "Maybe there is a cross-compiler installed already?"
	echo
	exit 1
    fi
done

# Auto-Detect Binutils and GCC versions
#
binutils="`ls pkg-archive/binutils-*.tar.bz2 | tail -1`"
if ! [ -f "$binutils" ] ; then
	echo "No binutils: $binutils -> abort!" ; exit 1
fi
gcc="`ls pkg-archive/gcc-*.tar.bz2 | tail -1`"
if ! [ -f "$gcc" ] ; then
	echo "No gcc: $gcc -> abort!" ; exit 1
fi

echo "Prepare for building cross-binutils and cross-gcc ..."
#
rm -rf src/ ; mkdir src
CC="cc" ; CXX="c++"
unset BUILD_CC BUILD_CXX
unset LD AR RANLIB AS GASP NM
set -e

echo "Building cross-binutils: $binutils ..."
#
cd src
tar --use-compress-program=bzip2 -xf ../$binutils ; cd binutils-*
for x in $base/pkg-config/binutils/*.patch ; do
	[ -f $x ] && { patch -bfp1 < $x || exit 1 ; }
done
./configure --target=$target $build
make all install
cd .. ; rm -rf binutils-*

echo "Building cross-gcc: $gcc ..."
#
set -e
mkdir -p /usr/local/$target/include
[ -d $base/arch-conf/$arch/include ] &&
	cp -r $base/arch-conf/$arch/include/* /usr/local/$target/include/
ln -s local/$target /usr/$target
#
tar --use-compress-program=bzip2 -xf ../$gcc ; cd gcc-*
for x in $base/pkg-config/gcc/*.patch ; do
	[ -f $x ] && { patch -Nfp0 < $x || exit 1 ; }
done
./configure --target=$target $build
cp $base/arch-conf/$arch/libgcc1.a gcc/
make cross install LANGUAGES="c"
cd .. ; rm -rf gcc-*

echo "Modifing it so it works for ROCK Linux compilation ..."
#
cd /usr/local/$target/
rm -rf include lib
mkdir -p include lib
cd lib
#
for x in Mcrt1.o crt1.o crti.o crtn.o gcrt1.o \
         libc.a libc.so libc_nonshared.a
do ln -fs $base/dist/usr/lib/$x $x ; done
for x in ld-linux.so.2 ld.so.1 libc.so.6
do ln -fs $base/dist/lib/$x $x ; done
#
cd /usr/local/lib/gcc-lib/$target/*
mv specs specs.orig
tr '\n' '@' < specs.orig | \
sed "s|@\\*link:@|@*link:@-L $base/dist/lib |" | \
sed "s|@\\*link:@|@*link:@-L $base/dist/usr/lib |" | \
sed "s|@\\*link:@|@*link:@-L $base/dist/usr/local/lib |" | \
sed "s|@\\*link:@|@*link:@-L $base/dist/usr/$target/lib |" | \
sed "s|@\\*link:@|@*link:@-L /usr/$target/lib |" | \
sed "s|@\\*cpp:@|@*cpp:@-I $base/dist/usr/include |" | \
sed "s|@\\*cpp:@|@*cpp:@-I $base/dist/usr/local/include |" | \
sed "s|@\\*cpp:@|@*cpp:@-I $base/dist/usr/$target/include |" | \
sed "s|@\\*cpp:@|@*cpp:@-I $base/dist/usr/$target/include |" | \
sed "s|@\\*cpp:@|@*cpp:@-I /usr/$target/include |" | \
tr '@' '\n' > specs
