#!/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=2.4

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

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.3-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 "# packages used in the creation of $(notdir $(DEST))" \
	     > $(DEST)/DEBIAN/Manifest
	echo >> $(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 * ---> libX Y <DEST> (>= SHLIB_VERSION)
	dpkg-deb -e pkgs/$*_*.deb $(DEST)/t/DEBIAN
	if [ -f $(DEST)/t/DEBIAN/shlibs ]; then \
	  grep -v "^udeb:" < $(DEST)/t/DEBIAN/shlibs \
	  | sed "s/^\(\S*\s*\S*\).*/\1 $(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 the ia32-linux paths to the library search path
	mkdir -p $(DEST)/etc/ld.so.conf.d/
	cp debian/ld.so.conf.ia64 $(DEST)/etc/ld.so.conf.d/ia32-libs.conf

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 symlinks for wine and znes compiling
	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 libgnutls.so.26 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 libieee1284.so.3 libieee1284.so && \
	ln -s libjpeg.so.62 libjpeg.so && \
	ln -s liblber-2.4.so.2 liblber.so && \
	ln -s liblcms.so.1 liblcms.so && \
	ln -s libldap_r-2.4.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 libxml2.so.2 libxml2.so && \
	ln -s libxslt.so.1 libxslt.so && \
	ln -s libSDL-1.2.so.0 libSDL-1.2.so && \
	ln -s libpng12.so.0 libpng12.so && \
	ln -s libpng12.so.0 libpng.so && \
	ln -s libcups.so.2  libcups.so && \
	ln -s libpulse.so.0.4.1 libpulse.so && \
	ln -s libpulse-simple.so.0.0.1 libpulse-simple.so && \
	ln -s libssl.so.0.9.8   libssl.so && \
	ln -s libXcomposite.so.1 libXcomposite.so && \
	ln -s libhal.so.1 libhal.so && \
	ln -s libcapi20.so.3 libcapi20.so && \
	ln -s libjack.so.0 libjack.so && \
	ln -s libcrypto.so.0.9.8 libcrypto.so

	cd $(DEST)/emul/ia32-linux/lib/ && \
	ln -s libusb-0.1.so.4 libusb.so && \
	ln -s libcap.so.2     libcap.so

	# 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.3-base/$$FILE $(DEST)/usr/share/doc/lib32gcc1/lib32gcc1.$$FILE; \
	  done )
	rm -rf $(DEST)/usr/share/doc/gcc-4.3-base

	# Remove unwanted directories and contents
	rm -r $(DEST)/t
	#rm $(DEST)/usr/share/doc/gcc-4.3-base/.changelog.Debian.gz
	#rm $(DEST)/usr/share/doc/gcc-4.3-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

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