# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: package/.../glibc/glibc.conf
# Copyright (C) 2006 - 2008 The OpenSDE Project
# Copyright (C) 2004 - 2006 The T2 SDE Project
#
# More information can be found in the files COPYING and README.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. A copy of the
# GNU General Public License can be found in the file COPYING.
# --- SDE-COPYRIGHT-NOTE-END ---

# overwrite prefix to not point to the tools, but the real root for the headers
if atstage toolchain; then
	# hack due to sane variable not available and prefix is tools prefix
	# -ReneR
	confopt="--prefix=$base/build/$SDECFG_ID/usr \
	         --with-headers=$base/build/$SDECFG_ID/usr/include \$extraconfopt"
	includedir="/../../usr/include"

	# MIPS injects -mabi - the host CC does not know about it for header gen
	var_append SYSCC_WRAPPER_REMOVE ' ' '-mabi*'
	var_append SYSCPP_WRAPPER_REMOVE ' ' '-mabi*'
else
	var_append confopt " " "--with-headers=$root/usr/include"
fi

# use at least "-O" when build without optimisation for debugging ...
var_insert GCC_WRAPPER_INSERT " " "-O"
# glibc does not like -ffast-math
var_insert GCC_WRAPPER_REMOVE " " "-ffast-math"

# Disable glibc internal debuging but build debuging and profile
# code so we can use this glibc to debug other programs.
pkg_glibc_preconf(){
	configprefix='CFLAGS="$CFLAGS -g -DNDEBUG=1"'
	configscript="../configure"
}
hook_add preconf 3 "pkg_glibc_preconf"

# We have to use an 'objdir' directory for building glibc and make its
# name unique by appending $arch_target to distinguish while building
# a multilib capable glibc using buildloops.
pkg_glibc_objdir(){
	mkdir -p "objdir-$arch_target"
	cd "objdir-$arch_target"
}
hook_add preconf 9 "pkg_glibc_objdir"

var_append confopt " " "--with-gnu-binutils --build=${arch_build} --host=${arch_target}"

if pkginstalled libgd; then
	var_append confopt " " "--with-gd=/usr --with-gd-lib=/usr/lib --with-gd-include=/usr/include"
fi

# --enable-add-ons expects a comma seperated list of add-ons
glibc_addons="ports"

# ckeck whether to enable nptl if supported by the architecture
if [ $SDECFG_PKG_GLIBC_TLS = 1 ]; then
	var_append glibc_addons "," "nptl"
	var_append extraconfopt " " "--with-tls"
	var_append extraconfopt " " "--with-__thread"
else
	var_append glibc_addons "," "linuxthreads"
	var_append extraconfopt " " "--without-__thread"
	var_append extraconfopt " " "--disable-sanity-checks"

	[[ $arch = mips* ]] && \
		var_append extraconfopt " " "--without-tls"
fi

# ckeck whether to enable libidn support
if [ $SDECFG_PKG_GLIBC_LIBIDN = 1 ]; then
	var_append glibc_addons "," "libidn"
fi

var_append extraconfopt " " "--enable-add-ons=$glibc_addons"

# control whether to include profiling support
if [ $SDECFG_PKG_GLIBC_ENABLE_PROFILE = 1 ] ; then
	var_append extraconfopt " " "--enable-profile"
else
	var_append extraconfopt " " "--disable-profile"
fi

var_append makeopt " " "slibdir=/\$slibdir"
var_append makeinstopt " " "slibdir=/\$slibdir install_root=\$root"

glibc_prepatch() {
	local tarball= tarname=
	local addon= addons="ports"

	[ "$SDECFG_PKG_GLIBC_LIBIDN" != '1' ] || var_append addons ' ' 'libidn'
	[ "$SDECFG_PKG_GLIBC_TLS" = 1 ] || var_append addons ' ' 'linuxthreads'

	for addon in $addons; do
		tarball=$( match_source_file -p $addon )
		tarname=${tarball##*/}; tarname=${tarname%.tar.*}

		# extract each addon into the definitive folder
		mkdir -pv $addon
		ln -sv $addon $tarname
		tar -v ${taropt} $tarball
		rm $tarname
	done

	mkdir -p $root$includedir/gnu/

	if [ $pkg == glibc ]; then
		touch $root$includedir/gnu/stubs.h
		if [ $slibdir = lib64 ]; then
			touch $root$includedir/gnu/stubs{-32,-64}.h
		fi
	fi
}

glibc_postmake()
{
	if atstage toolchain; then
	  cp -v ../include/features.h $root$includedir
	  mkdir -p $includedir/{bits,gnu}
	  [ -e $root$includedir/bits/stdio_lim.h ] ||
	  touch $root$includedir/bits/stdio_lim.h
	  return
	fi

	ln -sf libbsd-compat.a $root/usr/$slibdir/libbsd.a

	# Misc. stuff
	#
	if atstage native; then

		# install locales
		#
		eval $MAKE localedata/install-locales
		cp ../localedata/SUPPORTED $root/usr/share/i18n/

		if [ "$SDECFG_PKG_GLIBC_TLS" != 1 ]; then
			# install linuxthread manpages
			#
			mkdir -p $root/usr/share/man/man3
			if [ -f /usr/bin/perl ]; then
				eval $MAKE -C ../linuxthreads/man \
					MANDIR=$root/usr/share/man/man3 all install
			fi

			# copy linuxthreads documentation
			#
			for x in ChangeLog Changes README FAQ.html Examples; do
				cp -a ../linuxthreads/$x \
					$docdir/$x.threads
			done
		fi

		# copy crypt documentation
		#
		cp ../crypt/README.ufc-crypt   $docdir/README.crypt

		# NSCD Init script and config
		#
		cp $confdir/nscd.conf $confdir/nsswitch.conf $root/etc/
	fi

	# Install ld.so.conf
	#
	if [ "$SDECFG_MULTILIB" == 1 ] ; then
		cat > $root/etc/ld.so.conf <<-EOT
		/lib64
		/lib32
		/lib
		/usr/lib64
		/usr/lib32
		/usr/lib
		/usr/*/lib64
		/usr/*/lib32
		/usr/*/lib
		/opt/*/lib64
		/opt/*/lib32
		/opt/*/lib
		/usr/local/lib64
		/usr/local/lib32
		/usr/local/lib
EOT
	else
		cat > $root/etc/ld.so.conf <<-EOT
		/lib
		/usr/lib
		/usr/*/lib
		/opt/*/lib
		/usr/local/lib
EOT
	fi

	# Move 'ldconfig' and 'sln' binaries
	#
	if [ -f "$root/usr/sbin/ldconfig" ] ; then
		mv -v $root/usr/sbin/ldconfig $root/sbin/ldconfig
	fi
	if [ -f "$root/usr/sbin/sln" ] ; then
		mv -v $root/usr/sbin/sln $root/sbin/sln
	fi

	# Create /lib/ld-lsb.so.1 symlink
	#
	if [ -f $root/$slibdir/ld-linux-$arch_machine.so.2 ] ; then
		ln -vfs ld-linux-$arch_machine.so.2 $root/$slibdir/ld-lsb.so.1
	elif [ -f $root/$slibdir/ld-linux.so.2 ] ; then
		ln -vfs ld-linux.so.2 $root/$slibdir/ld-lsb.so.1
	fi
}

# in stage 0 we only extract the headers and all is a bit easier ...
if atstage toolchain; then
	makeopt=
	makeinstopt="-k cross-compiling=yes install-headers"
fi

[[ $libdir = *lib64 ]] && slibdir=lib64 || slibdir=lib

#if atstage cross; then
#	var_append patchfiles " " $confdir/no_path_in_glibcso.diff
#fi

hook_add prepatch 3 "glibc_prepatch"
hook_add postmake 5 "glibc_postmake"