# $MirOS: contrib/hosted/tg/deb/pcc/debian/meat,v 1.7 2011/04/22 21:37:01 tg Exp $

SHELL=$(whence -p mksh)
CONFIG_SHELL=$SHELL
export SHELL CONFIG_SHELL LC_ALL=C; unset LANGUAGE

eval "$(sed '/^#EOR/,$d' debian/control.in)"
for arch in ${pccarchs[*]}; do
	x=$(dpkg-architecture -f -a$arch -qDEB_HOST_MULTIARCH 2>/dev/null)
	eval triplet_$arch=\$x
	[[ -n $x ]] && continue
	print -ru2 Error: DEB_HOST_MULTIARCH for "'$arch'" is empty!
	exit 1
done

pccver=1.1.0.DEVEL
debver=$(dpkg-parsechangelog -n1 | sed -n '/^Version: /s///p')
export MPVERSION=Debian:pcc_${debver}

bma=$(dpkg-architecture -f -qDEB_BUILD_MULTIARCH 2>/dev/null)
hma=$(dpkg-architecture -f -qDEB_HOST_MULTIARCH 2>/dev/null)

if [[ -z $bma ]]; then
	print -ru2 Error: DEB_BUILD_MULTIARCH is empty!
	exit 1
fi
if [[ -z $hma ]]; then
	print -ru2 Error: DEB_HOST_MULTIARCH is empty!
	exit 1
fi

[[ $bma = "$hma" ]]; iscross=$?

# get flags used for bootstrapping pcc (things built with pcc have
# either -O or -g since these are mutually exclusive there)
CFLAGS=$(dpkg-buildflags --get CFLAGS 2>/dev/null) || CFLAGS='-O2 -g'
CPPFLAGS=$(dpkg-buildflags --get CPPFLAGS 2>/dev/null)
LDFLAGS=$(dpkg-buildflags --get LDFLAGS 2>/dev/null)
export CC=${CC:-gcc} CFLAGS CPPFLAGS LDFLAGS
hflags='-O -g'	# or just -O

set -e

topdir=$(realpath .)
rm -rf builddir debian/*.install debian/*.links
mkdir builddir{,/.lintian}

topsrc=$(realpath .)
autoconf2.59
autoheader2.59
rm -rf autom4te.cache config.{guess,sub}
cp /usr/share/misc/config.{guess,sub} .
cd libs
toplibs=$(realpath .)
autoconf2.59
rm -rf autom4te.cache config.{guess,sub}
cp /usr/share/misc/config.{guess,sub} .
cd "$topdir"

for arch in ${pccarchs[*]}; do
	eval tma=\$triplet_$arch
	tcan=$($SHELL /usr/share/misc/config.sub $tma)
	mkdir builddir/$arch{,/{comp,libs,tmp}}

	if [[ $tma = "$hma" ]]; then
		# creating a native compiler
		harch=$arch
		hcan=$tcan
		cat >debian/pcc-for-${tma//_/-}.install <<-EOF
			builddir/$arch/tmp/usr/bin/pcc usr/bin
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/libexec/ccom usr/lib/pcc/$tcan/$pccver/libexec
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/libexec/cpp usr/lib/pcc/$tcan/$pccver/libexec
			builddir/$arch/tmp/usr/share/man/man1/ccom.1 usr/share/man/man1
			builddir/$arch/tmp/usr/share/man/man1/cpp.1 usr/share/man/man1
			builddir/$arch/tmp/usr/share/man/man1/pcc.1 usr/share/man/man1
		EOF
		cat >debian/pcc-for-${tma//_/-}.links <<-EOF
			usr/bin/pcc usr/bin/$tma-pcc
			usr/share/man/man1/pcc.1 usr/share/man/man1/$tma-pcc.1
		EOF
		(( iscross )) || cat >debian/pcc-libs-${tma//_/-}.install <<-EOF
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/float.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/iso646.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/libpcc_float.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/libpcc_limits.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/libpcc_stdarg.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/libpcc_stdbool.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/libpcc_stddef.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/limits.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/stdarg.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/stdbool.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/include/stddef.h usr/lib/pcc/$tcan/$pccver/include
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/crt0.o usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/crt1.o usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/crtbegin.o usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/crtend.o usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/crti.o usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/crtn.o usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/gcrt1.o usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/libpcc.a usr/lib/pcc/$tcan/$pccver/lib
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/lib/libpccsoftfloat.a usr/lib/pcc/$tcan/$pccver/lib
			builddir/.lintian/pcc-libs-${tma//_/-} usr/share/lintian/overrides
		EOF
	else
		# creating a cross compiler
		cat >debian/pcc-for-${tma//_/-}.install <<-EOF
			builddir/$arch/tmp/usr/bin/$tma-pcc usr/bin
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/libexec/$tma-ccom usr/lib/pcc/$tcan/$pccver/libexec
			builddir/$arch/tmp/usr/lib/pcc/$tcan/$pccver/libexec/$tma-cpp usr/lib/pcc/$tcan/$pccver/libexec
			builddir/$arch/tmp/usr/share/man/man1/$tma-ccom.1 usr/share/man/man1
			builddir/$arch/tmp/usr/share/man/man1/$tma-cpp.1 usr/share/man/man1
			builddir/$arch/tmp/usr/share/man/man1/$tma-pcc.1 usr/share/man/man1
		EOF
	fi

	cd builddir/$arch/comp
	set -A args
	args[${#args[*]}]=--prefix=/usr
	args[${#args[*]}]=--libexecdir=/usr/lib/pcc/$tcan/$pccver/libexec
	args[${#args[*]}]=--sysconfdir=/etc
	args[${#args[*]}]=--mandir=/usr/share/man
	args[${#args[*]}]=--build=$bma
	args[${#args[*]}]=--host=$hma
	args[${#args[*]}]=--target=$tma
	set -x
	$SHELL "$topsrc"/configure "${args[@]}"
	make
	make install DESTDIR="$topdir"/builddir/$arch/tmp strip=no
	set +x
	cd "$topdir"
done

if (( !iscross )); then
	arch=$harch

	cd builddir/$arch/comp
	set -A args
	args[${#args[*]}]=--prefix=/usr
	args[${#args[*]}]=--libexecdir="$topdir"/builddir/$arch/tmp/usr/lib/pcc/$hcan/$pccver/libexec
	args[${#args[*]}]=--sysconfdir=/etc
	args[${#args[*]}]=--mandir=/usr/share/man
	args[${#args[*]}]=--build=$hma
	args[${#args[*]}]=--host=$hma
	args[${#args[*]}]=--target=$hma
	set -x
	$SHELL "$topsrc"/configure "${args[@]}"
	cd cc/cc
	make clean
	make
	hcc=$(realpath pcc)
	set +x
	cd "$topdir"

	cd builddir/$arch/libs
	set -A args
	args[${#args[*]}]=--prefix=/usr
	args[${#args[*]}]=--libexecdir=/usr/lib
	args[${#args[*]}]=--sysconfdir=/etc
	args[${#args[*]}]=--mandir=/usr/share/man
	args[${#args[*]}]=--build=$hma
	args[${#args[*]}]=--host=$hma
	args[${#args[*]}]=--target=$hma
	set -x
	export CC=$hcc CFLAGS=$hflags
	$SHELL "$toplibs"/configure "${args[@]}"
	make
	make install DESTDIR="$topdir"/builddir/$arch/tmp strip=no
	set +x
	cd "$topdir"

	$SHELL debian/control.in pcc-libs-${hma//_/-} >debian/control
	cat >builddir/.lintian/pcc-libs-${hma//_/-} <<-EOF
		pcc-libs-${hma//_/-}: arch-independent-package-contains-binary-or-object *
	EOF
fi
