#!/bin/sh
# Copyright 2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
# - March 2006 <solar@gentoo.org>

CFLAGS="-Os -pipe"
CBUILD=$(portageq envvar CHOST)
CXXFLAGS="${CFLAGS}"

USE_SAVE="${USE}"
if [ ! -x /usr/bin/qlist ]; then
	echo "please emerge portage-utils"
	exit 1
fi

gcc_executables=$(qlist -oeCI gcc| sort -u | grep ^cross | sed s/cross-//g | tr / -)

if [[ "$1" == "--libc" ]]; then
	shift
	DO_LIBC=1
	do_libc=1
fi

if [[ $1 == "--target" ]]; then
	shift
	ctarget_only=$1
	shift
fi


function cross_env_update() {
	mkdir -p ${ROOT}/etc
	for lpath in /usr/local/lib /usr/${CTARGET}/lib /usr/lib/gcc/${CTARGET}/$(${CTARGET}-gcc -dumpversion) /usr/lib/libstdc++-v3/; do
		echo "${lpath}" >> ${ROOT}/etc/ld.so.conf
	done
}

function cmerge() {
	CHOST=${1}
	shift

	export CTARGET=${CHOST}
	ARCH=$(echo ${CTARGET} | cut -d '-' -f 1)
	CC=${CTARGET}-gcc
	CXX=${CTARGET}-g++
	PKGDIR=${HOME}/packages/${CHOST}
	ROOT="${HOME}/ROOT-${CHOST}"
	LDFLAGS="-L${ROOT}/lib -L${ROOT}/usr/lib"

	do_libc=${DO_LIBC}
	unset ELIBC
	case ${CTARGET} in
		*-linux-gnu)    ELIBC=glibc;;
		*-linux-uclibc) ELIBC=uclibc;;
		avr) ELIBC=avr-libc;;
	esac
	export ELIBC
	[[ $ELIBC == "" ]] && do_libc=0

	USE="${ARCH} ${USE_SAVE}"
	case ${ARCH} in
		armeb) ARCH=arm;;
		s390x) ARCH=s390;;
		mips*) ARCH=mips;;
		powerpc64) ARCH=ppc64;;
		sparc*) ARCH=sparc;;
		powerpc) ARCH=ppc;;
		hppa*) ARCH=hppa;;
		sh4*|sheb) ARCH=sh;;
		x86_64) ARCH=amd64;;
		avr|ee|iop|cris) ARCH="x86";;
		i?86) ARCH=x86;;
	esac
	ACCEPT_KEYWORDS="${ARCH}"

	USE="-* ${ARCH} ${USE} elibc_${ELIBC} multicall make-symlinks"

	export ARCH ACCEPT_KEYWORDS CFLAGS CXXFLAGS LDFLAGS ROOT CBUILD CHOST CTARGET CC CXX PKGDIR USE

		mkdir -p ${ROOT}/etc
	if [[ $ELIBC != "" ]]; then
		if [ -e ${ROOT}/etc/ld.so.conf ]; then
			[ "$(md5sum ${ROOT}/etc/ld.so.conf|awk '{print $1}')" == "b18efa8c9f95b6aecc0974c0f54d8bb9" ] && cross_env_update
		else
			cross_env_update
		fi
	fi

	if [[ "$do_libc" == 1 ]]; then
		emerge -b cross-${CHOST}/${ELIBC} $*
	else
		emerge -b $*
	fi

	unset ARCH ACCEPT_KEYWORDS LDFLAGS ROOT CHOST CTARGET CC CXX PKGDIR USE ELIBC
}

for gnugcc in ${gcc_executables}; do
        [ -e /usr/bin/${gnugcc} ] || { echo bummer $gnugcc ; continue; }
	# include=$($gnugcc -print-file-name=)
	[[ $ctarget_only != "" ]] && [[ ${gnugcc/-gcc/} != $ctarget_only ]] && continue
	cmerge "${gnugcc/-gcc/}" "$*"
done
