#!/usr/bin/make -f

export DH_COMPAT=4

ORIGVERSION=$(shell dpkg-parsechangelog | grep ^Version | sed -e 's/Version: //' -e 's/-[[:alnum:]]*$$//')
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, lib32stdc++6, lib32asound2, lib32ncurses5
  FILTER = zlib1g libc6 libgcc1 libasound2 libstdc++6 libncurses5
  EXTRA_INSTALL =
else
  lib_depends = 
  FILTER = libgcc1
  EXTRA_INSTALL = install-ia32-libs-dev install-lib32gcc1
  LIBGCC_VERSION := $(shell dpkg -I pkgs/libgcc1_*deb | awk '/Version/ {print $$2; exit}')
  LIBGCC_VER1 := $(shell echo $(LIBGCC_VERSION) | sed 's/+b[0-9]*//')
  LIBGCC_VER2 := +ia32.libs.$(shell dpkg-parsechangelog  | grep ^Version | awk '{print $$2}')
  LIBGCC_VER3 := $(shell echo $(LIBGCC_VERSION) | sed -n 's/.*\(+b[0-9]*\)/\1/p')
  LIB32GCC_VERSION := $(LIBGCC_VER1)$(LIBGCC_VER2)$(LIBGCC_VER3)
endif

copyright:
	sed -n -i '/^========/ q; p' debian/copyright
	find srcs -maxdepth 2 -type -d | xargs -r rm -rf
	cd srcs; \
	for i in *.dsc; do \
	  dpkg-source -q -x $$i; \
	  p=$$(echo $$i | sed 's/_.*$$//'); \
	  echo >&2 "SRC $$p: $$(find -name copyright)"; \
	  echo ==================== $$p ====================; \
	  cat $$p-[0-9]*/debian/copyright || echo "no copyright file in source package"; \
	  echo ''; \
	  rm -rf $$p-[0-9]*; \
	done | grep -v '^dpkg-source:' >> ../debian/copyright

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 gcc-4.2-base

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
	# removed in glibc 2.5
	#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-linux.so.2 $(DEST)/lib/ld-linux.so.2 

	# Add /lib32 and /usr/lib32 to ld search path
	mkdir -p $(DEST)/etc/ld.so.conf.d
	cp -p debian/ia32-libs.conf $(DEST)/etc/ld.so.conf.d/

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

	# Add locale symlink
	ls -l $(DEST)/usr/lib$(SUFFIX)
	ln -s ../lib/locale $(DEST)/usr/lib$(SUFFIX)/locale
	
	# Add wine symlinks
	cd $(DEST)/emul/ia32-linux/usr/lib/ && \
	ln -s libGL.so.1 libGL.so && \
	ln -s libGLU.so.1 libGLU.so && \
	ln -s libICE.so.6 libICE.so && \
	ln -s libSM.so.6 libSM.so && \
	ln -s libX11.so.6 libX11.so && \
	ln -s libXau.so.6 libXau.so && \
	ln -s libXcursor.so.1 libXcursor.so && \
	ln -s libXdmcp.so.6 libXdmcp.so && \
	ln -s libXext.so.6 libXext.so && \
	ln -s libXfixes.so.3 libXfixes.so && \
	ln -s libXi.so.6 libXi.so && \
	ln -s libXinerama.so.1 libXinerama.so && \
	ln -s libXmu.so.6 libXmu.so && \
	ln -s libXrandr.so.2 libXrandr.so && \
	ln -s libXrender.so.1 libXrender.so && \
	ln -s libXt.so.6 libXt.so && \
	ln -s libXxf86vm.so.1 libXxf86vm.so && \
	ln -s libartsc.so.0 libartsc.so && \
	ln -s libaudiofile.so.0 libaudiofile.so && \
	ln -s libaudio.so.2 libaudio.so && \
	ln -s libcairo.so.2 libcairo.so && \
	ln -s libesd.so.0 libesd.so && \
	ln -s libexif.so.12 libexif.so && \
	ln -s libfontconfig.so.1 libfontconfig.so && \
	ln -s libfreetype.so.6 libfreetype.so && \
	ln -s libgcrypt.so.11 libgcrypt.so && \
	ln -s libglut.so.3 libglut.so && \
	ln -s libgmodule-2.0.so.0 libgmodule-2.so && \
	ln -s libgnutls.so.13 libgnutls.so && \
	ln -s libgpg-error.so.0 libgpg-error.so && \
	ln -s libgphoto2_port.so.0 libgphoto2_port.so && \
	ln -s libgphoto2.so.2 libgphoto2.so && \
	ln -s libgthread-2.0.so.0 libgthread-2.so && \
	ln -s libieee1284.so.3 libieee1284.so && \
	ln -s libjpeg.so.62 libjpeg.so && \
	ln -s liblber.so.2 liblber.so && \
	ln -s liblcms.so.1 liblcms.so && \
	ln -s libldap_r.so.2 libldap_r.so && \
	ln -s libltdl.so.3 libltdl.so && \
	ln -s libsane.so.1 libsane.so && \
	ln -s libsasl2.so.2 libsasl2.so && \
	ln -s libtasn1.so.3 libtasn1.so && \
	ln -s libtiff.so.4 libtiff.so && \
	ln -s /lib32/libusb-0.1.so.4 libusb-0.so && \
	ln -s libxml2.so.2 libxml2.so && \
	ln -s libxslt.so.1 libxslt.so || true

	# install gtk-2.0 configuration files for finding pixbuf
	# loaders and immodules
#	mkdir -p debian/ia32-libs/etc/gtk-2.0
#	install -m644 debian/*.32 debian/ia32-libs/etc/gtk-2.0/

	sed -i 's,/usr/lib/,/usr/lib32/,g' debian/ia32-libs/usr/lib32/gtk-2.0/2.10.0/*.d/*

	dh_link -pia32-libs /usr/lib32/gtk-2.0/2.10.0 /usr/lib/gtk-2.0/2.10.0/i486-pc-linux-gnu

	# verify and install pango.modules
	PANGOMODS=$$(dpkg-deb -c pkgs/libpango*i386.deb | grep modules/pango | cut -d. -f2- | sed -e 's,/lib/,/lib32/,'); \
	for i in $$(grep -v ^'#' debian/pango.modules | cut -d" " -f1 | sort -u); \
	do \
		if ! echo "$$PANGOMODS" | grep -q ^$$i; then \
			echo "ERROR: Pango module $$i not listed in libpango package." >&2 ; \
			echo "Please update debian/pango.modules" >&2; \
			exit 1; \
		fi; \
	done
	install -m644 debian/pango.modules debian/ia32-libs/usr/lib32/pango/1.6.0/module-files.d/libpango1.0-0.modules

	# 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


######################################################################
# 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) SHLIB_VERSION=$(LIB32GCC_VERSION) 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
	mkdir $(DEST)/usr/share/doc/lib32gcc1
	rm -f $(DEST)/usr/share/doc/libgcc1
	( set -e; for FILE in copyright changelog.Debian.gz; do \
	    mv $(DEST)/usr/share/doc/gcc-4.2-base/$$FILE $(DEST)/usr/share/doc/lib32gcc1/lib32gcc1.$$FILE; \
	  done )
	rm -rf $(DEST)/usr/share/doc/gcc-4.2-base

	# Remove unwanted directories and contents
	rm -r $(DEST)/t
	#rm $(DEST)/usr/share/doc/gcc-4.2-base/.changelog.Debian.gz
	#rm $(DEST)/usr/share/doc/gcc-4.2-base/.copyright

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

	# Add lintian overrides and Manifest
	sed 's/^libgcc1:/lib32gcc1:/' \
	    < $(DEST)/usr/share/lintian/overrides/libgcc1 \
	    > $(DEST)/usr/share/lintian/overrides/lib32gcc1
	rm $(DEST)/usr/share/lintian/overrides/libgcc1
	cat 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$(LIB32GCC_VERSION)
endif
	dh_md5sums -s
	dh_builddeb -s -- -Zlzma

binary: binary-indep binary-arch

make-orig:
	tar cvzf ../ia32-libs_$(ORIGVERSION).orig.tar.gz pkgs srcs

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