#!/usr/bin/make -f

export DH_COMPAT=3

# Lowest version with fully ABI compatible libraries
SHLIB_VERSION=0.2

DEB_BUILD_ARCH=$(shell dpkg-architecture -qDEB_BUILD_ARCH)
OSVER=$(shell lsb_release -s -i)
ifeq (Debian,$(OSVER))
	ROOT=emul/ia32-linux
	SUFFIX=
else
	ROOT=
	SUFFIX=32
endif

ifeq (amd64,$(DEB_BUILD_ARCH))
	gencontrol_flags = -- \
		'-Vdep:ia32libs=libc6-i386' \
		'-Vdep:ia32devs=libstdc++6-4.0-dev, libc6-dev-i386'
endif

IA32_VERSION	= ia32.libs.$(shell dpkg-parsechangelog \
				| grep ^Version | awk '{print $$2}')
LIBSTDCXX_VERSION= $(shell dpkg -I pkgs/libstdc++6_*deb \
				| awk '/Version/ {print $$2; exit}')
LIBGCC_VERSION	= $(shell dpkg -I pkgs/libgcc1_*deb \
				| awk '/Version/ {print $$2; exit}')
ZLIB_VERSION	= $(shell dpkg -I pkgs/zlib1g_*deb \
				| awk '/Version/ {print $$2; exit}')

build:

clean:
	dh_testdir
	dh_testroot
	rm -rf DEBIAN
	rm -f debian/create-diversions debian/remove-diversions
	rm -f debian/ia32-libs-dev.preinst debian/ia32-libs-dev.postrm
	dh_clean

install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

# Extract all debs
	for i in `cd pkgs ; /bin/ls *.deb` ; do \
		PKGNAME=$$(echo $$i | sed 's,_.*,,'); \
		case "$$PKGNAME" in libgcc1|zlib1g|libstdc++6) continue; esac; \
		if [ "$$(uname -m)" = "x86_64" ]; then \
			case "$$PKGNAME" in libc6|libc6-dev|libncurses*) continue; esac; \
		fi; \
		echo "extracting $$PKGNAME ..."; \
		dpkg-deb -x pkgs/$$i debian/ia32-libs/ ; done

	if [ "$$(uname -m)" = "ia64" ]; then \
		dpkg-deb -x pkgs/libgcc1_*deb debian/lib32gcc1 ; \
		mkdir -p debian/lib32gcc1/$(ROOT)/lib$(SUFFIX) ; \
		mv debian/lib32gcc1/lib/* debian/lib32gcc1/$(ROOT)/lib$(SUFFIX) ; \
		mv debian/lib32gcc1/usr/share/doc/libgcc1 debian/lib32gcc1/usr/share/doc/lib32gcc1 ; \
		rm -rf debian/lib32gcc1/usr/share/lintian; \
		dpkg-deb -x pkgs/zlib1g_*deb debian/lib32z1 ; \
		mkdir -p debian/lib32z1/$(ROOT)/usr/lib$(SUFFIX) ; \
		mv debian/lib32z1/usr/lib/* debian/lib32z1/$(ROOT)/usr/lib$(SUFFIX) ; \
		mv debian/lib32z1/usr/share/doc/zlib1g debian/lib32z1/usr/share/doc/lib32z1 ; \
		dpkg-deb -x pkgs/libstdc++6_*deb debian/lib32stdc++6 ; \
		mkdir -p debian/lib32stdc++6/$(ROOT)/usr/lib$(SUFFIX) ; \
		mv debian/lib32stdc++6/usr/lib/* debian/lib32stdc++6/$(ROOT)/usr/lib$(SUFFIX) ; \
		mv debian/lib32stdc++6/usr/share/doc/libstdc++6 debian/lib32stdc++6/usr/share/doc/lib32stdc++6 ; \
	fi

	mkdir -p debian/ia32-libs/$(ROOT)
	mkdir -p debian/ia32-libs/$(ROOT)/usr
	mkdir -p debian/ia32-libs/$(ROOT)/usr/X11R6

	mv debian/ia32-libs/lib debian/ia32-libs/$(ROOT)/lib$(SUFFIX)
	mv debian/ia32-libs/usr/lib debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)
	mv debian/ia32-libs/usr/X11R6/lib debian/ia32-libs/$(ROOT)/usr/X11R6/lib$(SUFFIX)

ifeq (Debian,$(OSVER))
	mkdir -p  debian/ia32-libs/$(ROOT)/bin
	mv debian/ia32-libs/bin/uname debian/ia32-libs/$(ROOT)/bin
	ln -s /$(ROOT)/usr/lib$(SUFFIX) debian/ia32-libs/usr/lib32
endif

	rm -r debian/ia32-libs/usr/include
	rm -r debian/ia32-libs/usr/X11R6
	rm -r debian/ia32-libs/usr/share
	rm -r debian/ia32-libs/usr/sbin
	-rm -r debian/ia32-libs/sys
	rm -r debian/ia32-libs/bin
	-rm -r debian/ia32-libs/sbin
	-rm -r debian/ia32-libs/etc
	-rm -r debian/ia32-libs/var
	-rm debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)/pt_chown

ifeq (amd64,$(DEB_BUILD_ARCH))
	rm -rf debian/ia32-libs/usr/bin
endif
ifeq (ia64,$(DEB_BUILD_ARCH))
# Make ldd work for 32-bit and 64-bit binaries.
	[ -x debian/ia32-libs/usr/bin/ldd ]
	case $$(uname -m) in \
		x86_64) \
			rm -rf debian/ia32-libs/usr/bin ; \
		;; \
		ia64) \
			RTLDLIST="/lib/ld-linux-ia64.so.2 /lib/ld-linux.so.2" ;\
			sed < debian/ia32-libs/usr/bin/ldd "s%RTLDLIST=.*%RTLDLIST=\" $$RTLDLIST\"%" | sed 's%verify_out=`$${rtld} --verify "$$file"`%verify_out=`$${rtld} --verify "$$file" 2>\&1`%' > debian/ia32-libs/ldd ;\
		rm -rf debian/ia32-libs/usr/bin ; \
		mkdir -p debian/ia32-libs/usr/bin ; \
		mv debian/ia32-libs/ldd debian/ia32-libs/usr/bin/ ; \
		chmod u=rwx,go=rx debian/ia32-libs/usr/bin/ldd \
		;; \
		*) \
			echo "Unsupported architecture"; exit 1 \
		;; \
	esac ; \

	mkdir -p debian/ia32-libs/lib/
	ln -s /$(ROOT)/lib$(SUFFIX)/ld-linux.so.2 debian/ia32-libs/lib/ld-linux.so.2 
endif

# Add doc dir and lintian overrides
	mkdir -p debian/ia32-libs/usr/share/doc/ia32-libs
	mkdir -p debian/ia32-libs/usr/share/lintian/overrides
	cp debian/ia32-libs.overrides debian/ia32-libs/usr/share/lintian/overrides/ia32-libs
	mkdir -p debian/ia32-libs-dev/usr/share/lintian/overrides
	cp debian/ia32-libs-dev.overrides debian/ia32-libs-dev/usr/share/lintian/overrides/ia32-libs-dev

# Extract shlibs info from libc6
	mkdir debian/ia32-libs/DEBIAN
ifeq (ia64,$(DEB_BUILD_ARCH))
	dpkg -e pkgs/libc6_*deb
	sed "s/libc6 (.*)/ia32-libs (>= $(SHLIB_VERSION))/" < DEBIAN/shlibs >debian/ia32-libs/DEBIAN/shlibs
endif
	dpkg -e pkgs/libncurses5_*deb
	sed "s/libncurses5 (.*)/ia32-libs (>= $(SHLIB_VERSION))/" < DEBIAN/shlibs >>debian/ia32-libs/DEBIAN/shlibs

	# Fix symlinks.
	for link in $$(find debian/ia32-libs/$(ROOT) -type l); do		\
	  dest=$$(readlink $$link);					\
	  rm -f $$link;							\
	  ln -s $$(echo $$dest | sed -e 's,^/,$(ROOT)/,' -e 's,/lib/,/lib$(SUFFIX)/,') $$link;	\
	done

ifeq (ia64,$(DEB_BUILD_ARCH))
	# Fix up GROUP commands in linker scripts
	for lib in libc.so libpthread.so; do				\
	  cat debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)/$$lib				\
	    | sed -e '/^GROUP/ { s, /, /$(ROOT)/,g ; s,/lib/,/lib$(SUFFIX)/,g }' > $$lib; \
	  mv -f $$lib debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)/$$lib;		\
	done
endif

	echo -e "# packages used in the creation of ia32-libs\n" > \
		debian/ia32-libs/usr/share/doc/ia32-libs/Manifest
	(cd pkgs; /bin/ls *.deb) >> debian/ia32-libs/usr/share/doc/ia32-libs/Manifest

	# Separate out development files.
	mkdir -p debian/ia32-libs-dev/usr/share/doc
	ln -s ia32-libs debian/ia32-libs-dev/usr/share/doc/ia32-libs-dev

#	mv debian/ia32-libs/usr/include debian/ia32-libs-dev/usr/include
	mkdir -p debian/ia32-libs-dev/$(ROOT)/usr/lib$(SUFFIX)
	mv debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)/*.so debian/ia32-libs-dev/$(ROOT)/usr/lib$(SUFFIX)
	mv debian/ia32-libs-dev/$(ROOT)/usr/lib$(SUFFIX)/libdb-*.so debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)/
	-mv debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)/*.a debian/ia32-libs-dev/$(ROOT)/usr/lib$(SUFFIX)
ifeq (ia64,$(DEB_BUILD_ARCH))
	mv debian/ia32-libs/$(ROOT)/usr/lib$(SUFFIX)/*.o debian/ia32-libs-dev/$(ROOT)/usr/lib$(SUFFIX)
endif

binary-indep:

binary-arch: build install
	dh_testdir -s
	dh_testroot -s 
	dh_installdocs -s
	dh_installexamples -s
	dh_installchangelogs -s
#	dh_link
#	dh_strip
	dh_compress -s
	dh_fixperms --exclude "*/ld-*" -s
#	dh_makeshlibs
	dh_installdeb -s
#	dh_shlibdeps
	dh_gencontrol -pia32-libs $(gencontrol_flags)
ifeq (ia64,$(DEB_BUILD_ARCH))
	dh_gencontrol -pia32-libs-dev $(gencontrol_flags)
	dh_gencontrol -plib32stdc++6 -- -v$(LIBSTDCXX_VERSION)+$(IA32_VERSION)
	dh_gencontrol -plib32gcc1 -- -v$(LIBGCC_VERSION)+$(IA32_VERSION)
	dh_gencontrol -plib32z1 -- -v$(ZLIB_VERSION)+$(IA32_VERSION)
endif
	dh_md5sums -s
	dh_builddeb -s

binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure
