# SliTaz package receipt.

PACKED_SIZE="1.3M"
UNPACKED_SIZE="4.3M"
PACKAGE="glibc-base"
VERSION="2.20"
CATEGORY="base-system"
SHORT_DESC="GNU libc minimal libraries and UTF-8 support for SliTaz."
WEB_SITE="http://www.gnu.org/software/libc/"
MAINTAINER="pankso@slitaz.org"
LICENSE="GPL2"
WANTED="glibc"
HOST_ARCH="i486 arm x86_64"

# Locales include by default, other locales are in: locale-** and glibc-locale
DEFAULT_LOCALE="en_US en_GB"

# Handle multiarch compilation.
case "$ARCH" in
	arm*) VERSION="2.13" WANTED="" ;;
esac

# Handle multiarch installation.
case "$SLITAZ_ARCH" in
	arm*) VERSION="2.13" WANTED="" ;;
esac

# Rules to gen a SliTaz package suitable for Tazpkg.
#
# Full glibc is very long to compile (see package glibc for more
# informations). You can use the precompiled package available on
# SliTaz mirror to build a distro without recompiling glibc.
#

# i18n
get_locales()
{
	local path=$1
	for i in $DEFAULT_LOCALE
	do
		cp $install/$path/i18n/locales/$i $fs/usr/share/i18n/locales
	done
}

genpkg_rules()
{
	# Mkdir's.
	for dir in $(cat $stuff/mkdir.list)
	do
		mkdir -p ${fs}$dir
	done

	case "$ARCH" in
		arm*)
			# Eglibc is cross compiled by cross to have a toolchain so we can
			# use these files instead of recooking it. ARM use Eglibc
			echo "Using cross compiled Eglibc..."
			install=/cross/$ARCH/sysroot

			# /usr/{bin,share} /usr/lib/gconv
			for file in $(cat $stuff/arm-files.list)
			do
				cp -a ${install}$file ${fs}$file
			done

			# libs
			for lib in libcrypt libm libc libresolv librt libutil libpthread \
				libnss_* libnsl libanl libdl
			do
				cp -a $install/lib/${lib}-*.so $fs/lib
				cp -a $install/lib/${lib}.so* $fs/lib
				cp -a $install/usr/lib/${lib}.so $fs/usr/lib
			done
			cp -a $install/lib/ld-*.so* $fs/lib
			cp -a $install/usr/lib/libc_nonshared.a $fs/usr/lib
			cp -a $install/usr/lib/libpthread_nonshared.a $fs/usr/lib
			cp $install/etc/rpc $fs/etc
			touch $fs/etc/ld.so.conf
			touch $fs/etc/ld.so.cache
			get_locales "usr/share" ;;
		x86_64_cross)
			# EXPERIMENTAL: Glibc is cross compiled by cross to have a
			# toolchain so we can use these files instead of recooking it.
			echo "Using cross compiled Glibc..."
			install=/usr/cross/$ARCH

			# /usr/{bin,share} /usr/lib/gconv
			for file in $(cat $stuff/arm-files.list)
			do
				cp -a ${install}$file ${fs}/usr/$file
			done

			# /lib
			for lib in libcrypt libm libc libresolv librt libutil libpthread \
				libnss_* libnsl libanl libdl
			do
				cp -a $install/lib/${lib}-*.so $fs/lib
				cp -a $install/lib/${lib}.so* $fs/lib
			done
			cp -a $install/lib/ld-*.so* $fs/lib
			cp -a $install/lib/libc_nonshared.a $fs/lib
			cp -a $install/lib/libpthread_nonshared.a $fs/lib
			cp $install/etc/rpc $fs/etc
			touch $fs/etc/ld.so.conf
			get_locales "share"
			# Fix libraries search path
			sed -i s"|/usr/cross/$ARCH||"g $fs/lib/libc.so
			sed -i s"|/usr/cross/$ARCH||"g $fs/lib/libpthread.so ;;
		*)
			# x86_64 native: glibc may install to lib/ (slibdir=/lib) or lib64/
			if [ "$ARCH" = "x86_64" ]; then
				mkdir -p $fs/lib
				libsrc="lib"
				[ -f "$install/lib64/libc.so.6" ] && libsrc="lib64"
				for file in $(cat $stuff/wanted-files.list | grep "^/lib/")
				do
					cp -a $install/$libsrc/$(basename $file) $fs/lib/ 2>/dev/null || true
				done
				cp -a $install/$libsrc/ld-linux-x86-64.so.2 $fs/lib/
				# usr/ files (on x86_64, glibc installs usr/lib to usr/lib64)
				for file in $(cat $stuff/wanted-files.list | grep "^/usr/")
				do
					mkdir -p $fs$(dirname $file)
					srcpath=$(echo "$file" | sed 's|^/usr/lib/|/usr/lib64/|')
					cp -a $install$srcpath $fs$file 2>/dev/null || true
				done
			else
				for file in $(cat $stuff/wanted-files.list)
				do
					cp -a ${install}$file ${fs}$file
				done
			fi
			get_locales "usr/share"
	esac
}

# Remove an eventual locale-archive since we use directories.
pre_install()
{
	rm -f $root/usr/lib/locale/locale-archive
}

# Glibc-base is auto-updated in chroot but when cross-compiling we need
# to have /usr/cross/$ARCH search path in libc.so
post_install()
{
	# x86_64
	if echo $root | grep -q /usr/cross/x86_64; then
		echo "Fixing x86_64: $root/lib/libc.so"
		cat > $root/lib/libc.so << EOT
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( $root/lib/libc.so.6 $root/lib/libc_nonshared.a AS_NEEDED ( $root/lib/ld-linux-x86-64.so.2 ) )
EOT
	fi
}
