# Template file for 'binutils'
pkgname=binutils
version=2.24
revision=1
bootstrap=yes
replaces="chroot-binutils>=0"
short_desc="GNU binary utilities"
maintainer="Juan RP <xtraeme@gmail.com>"
homepage="http://www.gnu.org/software/binutils/"
license="GPL-3"
distfiles="http://ftp.gnu.org/gnu/$pkgname/$pkgname-$version.tar.gz"
checksum=4930b2886309112c00a279483eaef2f0f8e1b1b62010e0239c16b22af7c346d4

if [ "$CHROOT_READY" ]; then
	hostmakedepends="flex perl"
	makedepends="libfl-devel"
fi

makedepends+=" zlib-devel"

pre_configure() {
	# Drop bashism!
	sed -e 's,source,\.,g' -i ld/scripttempl/elf.sc
}

do_configure() {
	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
		CONFIGFLAG="--enable-64-bit-bfd --enable-multilib"
	fi
	if [ "$CROSS_BUILD" ]; then
		# Do not use configure_args nor build_style=gnu-configure,
		# avoiding --with-sysroot to $XBPS_CROSS_BASE.
		CONFIGFLAG="--host=$XBPS_CROSS_TRIPLET --with-build-sysroot=$XBPS_CROSS_BASE"
	fi
	./configure --prefix=/usr --enable-threads \
		--enable-plugins --enable-secureplt --with-mmap \
		--enable-shared --disable-bootstrap \
		--enable-ld=default --enable-gold $CONFIGFLAG
}

do_build() {
	make ${makejobs}

	# Rebuild libiberty.a with -fPIC
	cp -a libiberty libiberty-pic
	make -C libiberty-pic clean
	make CFLAGS="$CFLAGS -fPIC" -C libiberty-pic

	# Rebuild libbfd.a with -fPIC
	# hidden visability prevent 3rd party shared libraries exporting bfd non-stable API
	cp -a bfd bfd-pic
	make -C bfd-pic clean
	make CFLAGS="$CFLAGS -fPIC -fvisibility=hidden" -C bfd-pic

	# Rebuild libopcodes.a with -fPIC
	cp -a opcodes opcodes-pic
	make -C opcodes-pic clean
	make CFLAGS="$CFLAGS -fPIC" -C opcodes-pic
}

do_install() {
	if [ "$XBPS_TARGET_MACHINE" = "x86_64" ]; then
		mkdir -p ${DESTDIR}/usr/lib
		cd ${DESTDIR}/usr
		ln -s lib lib64
		cd ${wrksrc}
	fi
	make DESTDIR=${DESTDIR} tooldir=/usr install

	# Remove ld (hardlink) and make a symlink to ld.bfd.
	rm -f ${DESTDIR}/usr/bin/ld
	ln -sfr ${DESTDIR}/usr/bin/ld.bfd ${DESTDIR}/usr/bin/ld

	# Add some useful headers
	install -m644 include/libiberty.h ${DESTDIR}/usr/include
	install -m644 include/demangle.h ${DESTDIR}/usr/include

	# install libraries rebuilt with -fPIC
	install -m644 libiberty-pic/libiberty.a ${DESTDIR}/usr/lib
	install -m644 bfd-pic/libbfd.a ${DESTDIR}/usr/lib
	install -m644 opcodes-pic/libopcodes.a ${DESTDIR}/usr/lib

	# Remove these symlinks, they are not ABI stable.
	# Programs should compile static to the .a file.
	rm -f ${DESTDIR}/usr/lib/lib{bfd,opcodes}.so
	echo "INPUT ( /usr/lib/libbfd.a -liberty -lz )" \
		>${DESTDIR}/usr/lib/libbfd.so
	echo "INPUT ( /usr/lib/libopcodes.a -lbfd )" \
		>${DESTDIR}/usr/lib/libopcodes.so

	# Remove info file that conflicts with autoconf.
	rm -f ${DESTDIR}/usr/share/info/standards.info
	rm -f ${DESTDIR}/usr/lib64

	# Remove useless manpages.
	for f in dlltool nlmconv windres windmc; do
		rm -f ${DESTDIR}/usr/share/man/man1/${f}.1
	done

	# Fix for multilib builds.
	if [ -d ${DESTDIR}/usr/lib32 ]; then
		mv ${DESTDIR}/usr/lib32/* ${DESTDIR}/usr/lib
		rmdir ${DESTDIR}/usr/lib32
	fi
}

binutils-devel_package() {
	replaces="chroot-binutils>=0"
	depends="binutils>=$version"
	short_desc+=" - development files"
	pkg_install() {
		vmove usr/include
		vmove "usr/lib/*.a"
		vmove usr/lib/libbfd.so
		vmove usr/lib/libopcodes.so
	}
}