#!/usr/bin/make -f

export DH_COMPAT=4

DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)

# Lowest version with fully ABI compatible libraries
SHLIB_VERSION=1.6

OSVER=$(shell lsb_release -s -i)
ifeq (Debian,$(OSVER))
	ROOT=/emul/ia32-linux/
	ROOTL=emul_ia32-linux_
	SUFFIX=
	SUFFIXL=
else
	ROOT=/
	ROOTL=
	SUFFIX=32
	SUFFIXL=32
endif

# Set Arch specific variables
# On amd64 some package compile 32bit debs directly.
# Skip converting them and Depend on them instead.
ifeq (amd64,$(DEB_HOST_ARCH))
  lib_depends = libc6-i386 (>= 2.3.6-2), lib32z1
  FILTER = zlib1g libc6 libgcc1
  EXTRA_INSTALL =
else
  lib_depends = 
  FILTER = libgcc1
  EXTRA_INSTALL = install-ia32-libs-dev install-lib32gcc1
endif

build:
#	./fetch-and-build

clean:
	dh_testdir
	dh_testroot
	dh_clean

install-prefix:
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs

######################################################################
# common variables
######################################################################

MAKE := $(MAKE) -f debian/rules
DEBS_ALL := $(shell cd pkgs; ls *.deb | cut -d"_" -f1)

DEBS_ia32-libs     := $(filter-out %-dev $(FILTER),$(DEBS_ALL))
DEBS_ia32-libs-dev := $(filter %-dev,$(DEBS_ALL))
DEBS_lib32gcc1     := libgcc1

EXTRACT_ia32-libs     := $(addprefix extract-,$(DEBS_ia32-libs))
EXTRACT_ia32-libs-dev := $(addprefix extract-,$(DEBS_ia32-libs-dev))
EXTRACT_lib32gcc1     := $(addprefix extract-,$(DEBS_lib32gcc1))

######################################################################
# common helper
######################################################################
# All helpers expect DEST to be set to debian/<pkg>

.PRECIOUS: %/DEBIAN/Manifest
%/DEBIAN/Manifest:
	mkdir -p $(DEST)/DEBIAN/
	echo -e "# packages used in the creation of $(notdir $(DEST))\n" \
	     > $(DEST)/DEBIAN/Manifest

extract-%: $(DEST)/DEBIAN/Manifest
	cd pkgs && echo $*_*.deb >> ../$(DEST)/DEBIAN/Manifest
	dpkg-deb -x pkgs/$*_*.deb $(DEST)/t

	# change shlibs information
	# libX Y $* [| A] (>= V) ---> libX Y <DEST> (>= SHLIB_VERSION)
	# libX Y $* [| A]        ---> libX Y <DEST> (>= SHLIB_VERSION)
	dpkg-deb -e pkgs/$*_*.deb $(DEST)/t/DEBIAN
	if [ -f $(DEST)/t/DEBIAN/shlibs ]; then \
	  sed "s/^\([^ ]* *[^ ]* *\)$*[^(]*(.*)/\1$(notdir $(DEST)) (>= $(SHLIB_VERSION))/" \
	      < $(DEST)/t/DEBIAN/shlibs \
	  | sed "s/$*.*$$/$(notdir $(DEST)) (>= $(SHLIB_VERSION))/" \
	      >>$(DEST)/DEBIAN/shlibs; \
	fi
	rm -r $(DEST)/t/DEBIAN

move-libs:
	# Move libraries to new places
	[ ! -d $(DEST)/t/lib ] \
	|| ( mkdir -p $(DEST)$(ROOT) \
	   && mv $(DEST)/t/lib $(DEST)$(ROOT)lib$(SUFFIX) )
	[ ! -d $(DEST)/t/usr/lib ] \
	|| ( mkdir -p $(DEST)$(ROOT)usr \
	   && mv $(DEST)/t/usr/lib $(DEST)$(ROOT)usr/lib$(SUFFIX) )
	[ ! -d $(DEST)/t/usr/X11R6/lib ] \
	|| ( mkdir -p $(DEST)$(ROOT)usr/X11R6 \
	   && mv $(DEST)/t/usr/X11R6/lib $(DEST)$(ROOT)usr/X11R6/lib$(SUFFIX) )

fix-links:
	# change links in $(DEST)$(ROOT) to new names
	for link in $$(find $(DEST)$(ROOT) -type l); do		\
	  dest=$$(readlink $$link);				\
	  case "$$dest" in					\
	    /etc*) ;;						\
	    /*) rm -f $$link;					\
	        ln -s $$(echo $$dest | sed -e 's,^/,$(ROOT),' -e 's,/lib/,/lib$(SUFFIX)/,') $$link;	\
	        ;;						\
	  esac;							\
	done

######################################################################
# ia32-libs
######################################################################
install-ia32-libs: DEST=debian/ia32-libs
install-ia32-libs: install-prefix
	# Extract all debs
	$(MAKE) DEST=$(DEST) $(EXTRACT_ia32-libs)

	# Move libraries to new places
	$(MAKE) DEST=$(DEST) move-libs

ifeq (ia64,$(DEB_HOST_ARCH))
	# Make ldd work for 32-bit and 64-bit binaries.
	[ -x $(DEST)/t/usr/bin/ldd ]
	RTLDLIST="/lib/ld-linux-ia64.so.2 /lib/ld-linux.so.2" \
	sed -i "s%RTLDLIST=.*%RTLDLIST=\" $$RTLDLIST\"%" $(DEST)/t/usr/bin/ldd
	sed -i 's%verify_out=`$${rtld} --verify "$$file"`%verify_out=`$${rtld} --verify "$$file" 2>\&1`%' $(DEST)/t/usr/bin/ldd

	# Move ldd into place
	mkdir -p $(DEST)/usr/bin
	mv $(DEST)/t/usr/bin/ldd $(DEST)/usr/bin
	mv $(DEST)/t/usr/bin/lddlibc4 $(DEST)/usr/bin
	chmod u=rwx,go=rx $(DEST)/usr/bin/ldd

	# Link the ld.so into place
	mkdir -p $(DEST)/lib/
	ln -s $(ROOT)lib$(SUFFIX)/ld-2.3.2.so $(DEST)/lib/ld-linux.so.2 

ifneq (/,$(ROOT))
	# Move uname into place
	mkdir -p $(DEST)$(ROOT)bin
	mv $(DEST)/t/bin/uname $(DEST)$(ROOT)bin

	# Create /usr/lib32 link for gcc
	ln -s $(ROOT)usr/lib$(SUFFIX) $(DEST)/usr/lib32
endif
endif

	# Remove unwanted directories and pt_chown
	rm -rf $(DEST)/t
	rm -f $(DEST)$(ROOT)usr/lib$(SUFFIX)/pt_chown

	# Add doc dir, lintian overrides and Manifest
	mkdir -p $(DEST)/usr/share/doc/ia32-libs
	mkdir -p $(DEST)/usr/share/lintian/overrides
	cp debian/ia32-libs.overrides $(DEST)/usr/share/lintian/overrides/ia32-libs
	mv $(DEST)/DEBIAN/Manifest $(DEST)/usr/share/doc/ia32-libs/Manifest.ia32-libs

	# Fix symlinks.
	$(MAKE) DEST=$(DEST) fix-links

	# Create links for ldconfig
	mkdir -p $(DEST)/lib/ldconfig
	ln -s $(ROOT)lib$(SUFFIX) $(DEST)/lib/ldconfig/$(ROOTL)lib$(SUFFIXL)
	ln -s $(ROOT)usr/lib$(SUFFIX) $(DEST)/lib/ldconfig/$(ROOTL)usr_lib$(SUFFIXL)
	ln -s $(ROOT)usr/X11R6/lib$(SUFFIX) $(DEST)/lib/ldconfig/$(ROOTL)usr_X11R6_lib$(SUFFIXL)

######################################################################
# ia32-libs-dev
######################################################################
install-ia32-libs-dev: DEST=debian/ia32-libs-dev
install-ia32-libs-dev: install-prefix
	# Extract all debs
	$(MAKE) DEST=$(DEST) $(EXTRACT_ia32-libs-dev)

	# Move libraries to new places
	$(MAKE) DEST=$(DEST) move-libs

	# Remove unwanted directories and contents
	rm -r $(DEST)/t

	# Fix symlinks.
	$(MAKE) DEST=$(DEST) fix-links

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

	# Create doc link and add lintian overrides and Manifest
	mkdir -p $(DEST)/usr/share/doc/ia32-libs-dev
	mkdir -p $(DEST)/usr/share/lintian/overrides
	cp debian/ia32-libs-dev.overrides $(DEST)/usr/share/lintian/overrides/ia32-libs-dev
	mv $(DEST)/DEBIAN/Manifest $(DEST)/usr/share/doc/ia32-libs-dev/Manifest

######################################################################
# lib32gcc1
######################################################################
install-lib32gcc1: DEST=debian/lib32gcc1
install-lib32gcc1: install-prefix
	# libgcc1 is special since we have versioned depends on it
	# Extract all debs
	$(MAKE) DEST=$(DEST) $(EXTRACT_lib32gcc1)

        # Move lib and usr/share/doc/libgcc1
	$(MAKE) DEST=$(DEST) move-libs
	mv $(DEST)/t/usr $(DEST)/
	mv $(DEST)/usr/share/doc/libgcc1 $(DEST)/usr/share/doc/lib32gcc1

	# Remove unwanted directories and contents
	rm -r $(DEST)/t

	# Fix symlinks.
	$(MAKE) DEST=$(DEST) fix-links

	# Add lintian overrides and Manifest
	mkdir -p $(DEST)/usr/share/lintian/overrides
	cp debian/lib32gcc1.overrides $(DEST)/usr/share/lintian/overrides/lib32gcc1
	mv $(DEST)/DEBIAN/Manifest $(DEST)/usr/share/doc/lib32gcc1/Manifest

install: install-ia32-libs $(EXTRA_INSTALL)

binary-indep:


# Build architecture-dependent files here.

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 -- '-Vlib:Depends=$(lib_depends)'
ifeq (ia64,$(DEB_HOST_ARCH))
	dh_gencontrol -pia32-libs-dev
	dh_gencontrol -plib32gcc1 -- -v`dpkg -I pkgs/libgcc1_*deb | awk '/Version/ {print $$2; exit}'`+ia32.libs.`dpkg-parsechangelog  | grep ^Version | awk '{print $$2}'`
endif
	dh_md5sums -s
	dh_builddeb -s

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