#!/usr/bin/make -f

# prefix for builds - without leading slash
PF ?= usr

# Linaro toolchain backports PPA support
PPA := false

# if debian/ppa is present then we do PPA
ifneq ($(wildcard debian/ppa),)
  PPA := true
endif

DISTRO ?= $(shell lsb_release -is)

ifeq ($(DISTRO),Debian)
  MIN_VER_EGLIBC := 2.13-5~
  MIN_VER_LINUX  := 3.2
  MIN_VER_GCC46  := 4.6.2-16
  MIN_VER_GCC47  := 4.7.0-3
  VER_LINUX      := $(shell apt-cache policy linux-source|grep '\*\*\*'|sed -e 's/ ... \([0-9\.]*\)+.*/\1/g')
  DEB_VER_LINUX  := $(shell apt-cache policy linux-source-3.2|grep '\*\*\*'|sed -e 's/ ... \([0-9\.\-]*\).*/\1/g')
# default version of gcc which will be used
  VER_GCC_BASE   := 4.7
else
  MIN_VER_EGLIBC := 2.13-20~
  MIN_VER_LINUX  := 3.5.0-0~
  MIN_VER_GCC46  := 4.6.2-16
  MIN_VER_GCC47  := 4.7.0-3
  VER_LINUX      := 3.5.0
# default version of gcc which will be used
  VER_GCC_BASE := 4.7
endif

EXTRA_DEPS := gcc-4.6-source (>= $(MIN_VER_GCC46)),

ifeq ($(PPA),false)

  VER_GCC46        := $(shell dpkg-parsechangelog -l/usr/src/gcc-4.6/debian/changelog | egrep '^Version:' | cut -f 2 -d ' '|cut -f 1 -d '-')
  VER_GCC47        := $(shell dpkg-parsechangelog -l/usr/src/gcc-${VER_GCC_BASE}/debian/changelog | egrep '^Version:' | cut -f 2 -d ' '|cut -f 1 -d '-')
  DEB_VER_GCC46    := $(shell dpkg-parsechangelog -l/usr/src/gcc-4.6/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')
  DEB_VER_GCC47    := $(shell dpkg-parsechangelog -l/usr/src/gcc-${VER_GCC_BASE}/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')
  VER_BINUTILS     := $(shell dpkg-parsechangelog -l/usr/src/binutils/debian/changelog | egrep '^Version:' | cut -f 2 -d ' '|cut -f 1 -d '-'|cut -d '.' -f1-3)
  PKG_VER_BINUTILS := $(shell dpkg-parsechangelog -l/usr/src/binutils/debian/changelog | egrep '^Version:' | cut -f 2 -d ' '|cut -f 1 -d '-')
  DEB_VER_BINUTILS := $(shell dpkg-parsechangelog -l/usr/src/binutils/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')
  VER_EGLIBC       := $(shell dpkg-parsechangelog -l/usr/src/glibc/debian/changelog | egrep '^Version:' | cut -f 2 -d ' '|cut -f 1 -d '-')
  DEB_VER_EGLIBC   := $(shell dpkg-parsechangelog -l/usr/src/glibc/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')

  BINUTILS_DIR  := /usr/src/binutils
  EGLIBC_DIR    := /usr/src/glibc
  GCC_DIR46     := /usr/src/gcc-4.6
  GCC_DIR47     := /usr/src/gcc-${VER_GCC_BASE}

  ifeq ($(DISTRO),Debian)

    EGLIBC_PATCHES := $(CURDIR)/debian/patches/eglibc/debian
    LINUX_SERIES   := $(CURDIR)/debian/patches/linux/series-debian

  else # Ubuntu

    DEB_VER_LINUX    := $(shell dpkg-parsechangelog -l/usr/src/linux-source-$(VER_LINUX)/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')

    EGLIBC_PATCHES := $(CURDIR)/debian/patches/eglibc/ubuntu
    LINUX_SERIES   := $(CURDIR)/debian/patches/linux/series-ubuntu

  endif

else # Linaro toolchain backport PPA

  VER_GCC46        := 4.6.3
  VER_GCC47        := 4.7.1
  VER_EGLIBC       := 2.15
  VER_BINUTILS     := 2.22.52
  EXTRA_DEPS       := gcc-4.6-${VER_GCC46}-source,

  DEB_VER_LINUX    := $(shell dpkg-parsechangelog -l/usr/src/linux-source-$(VER_LINUX)/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')
  DEB_VER_GCC46    := $(shell dpkg-parsechangelog -l/usr/src/gcc-4.6-${VER_GCC46}/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')
  DEB_VER_GCC47    := $(shell dpkg-parsechangelog -l/usr/src/gcc-${VER_GCC_BASE}-${VER_GCC47}/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')
  DEB_VER_EGLIBC   := $(shell dpkg-parsechangelog -l/usr/src/glibc-${VER_EGLIBC}/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')
  PKG_VER_BINUTILS := $(shell dpkg-parsechangelog -l/usr/src/binutils-${VER_BINUTILS}/debian/changelog | egrep '^Version:' | cut -f 2 -d ' '|cut -f 1 -d '-')
  DEB_VER_BINUTILS := $(shell dpkg-parsechangelog -l/usr/src/binutils-${VER_BINUTILS}/debian/changelog | egrep '^Version:' | cut -f 2 -d ' ')

  BINUTILS_DIR  := /usr/src/binutils-${VER_BINUTILS}
  EGLIBC_DIR    := /usr/src/glibc-${VER_EGLIBC}
  GCC_DIR46     := /usr/src/gcc-4.6-${VER_GCC46}
  GCC_DIR47     := /usr/src/gcc-${VER_GCC_BASE}-${VER_GCC47}

  EGLIBC_PATCHES := $(CURDIR)/debian/patches/eglibc/ubuntu
  LINUX_SERIES   := $(CURDIR)/debian/patches/linux/series-ubuntu

endif

DEB_NAME_ACT     := $(shell dpkg-parsechangelog| sed -n 's/-*//; s/^Source: \(.*\)/\1/p')
DEB_VER_ACT      := $(shell dpkg-parsechangelog| sed -n 's/^Version: \(.*\)/\1/p')

CROSS_ARCH       := $(shell dpkg-parsechangelog| sed -n 's/-[^-]*//; s/^Source: \(.*\)-.*-.*/\1/p')
CROSS_GNU_TYPE   := $(shell dpkg-architecture -a${CROSS_ARCH} -qDEB_HOST_GNU_TYPE -f)
HOST_ARCH        := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
HOST_GNU_TYPE    := $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
stamp            := stamp-dir/

# taken from gcc packaging
define unpack_tarball
	tar -x -f $1
endef

info:
	@echo "Binutils version:         ${VER_BINUTILS}	${DEB_VER_BINUTILS}	${PKG_VER_BINUTILS}"
	@echo "GCC 4.6 version:          ${VER_GCC46}     	${DEB_VER_GCC46}"
	@echo "GCC 4.7 version:          ${VER_GCC47}     	${DEB_VER_GCC47}          ${VER_GCC_BASE}"
	@echo "Eglibc version:           ${VER_EGLIBC}  	${DEB_VER_EGLIBC}"
	@echo "Linux version:            ${VER_LINUX}   	${DEB_VER_LINUX}"
	@echo
	@echo "Target architecture:      ${CROSS_ARCH}"
	@echo "Target GNU type:          ${CROSS_GNU_TYPE}"
	@echo "Host architecture:        ${HOST_ARCH}"
	@echo "Host GNU type:            ${HOST_GNU_TYPE}"

$(stamp)init-dirs:
	mkdir debian/tmp -p
	touch $@

init: $(stamp)init-binutils $(stamp)init-gcc47 $(stamp)init-gcc $(stamp)init-eglibc

$(stamp)init-linux:
ifeq ($(DISTRO),Debian)
	$(call unpack_tarball, /usr/src/linux-source-${VER_LINUX}.tar.bz2)
	cd linux-source-${VER_LINUX} && QUILT_PATCHES=${CURDIR}/debian/patches/linux quilt push -a
else
	$(call unpack_tarball, /usr/src/linux-source-${VER_LINUX}/linux-source-${VER_LINUX}.tar.bz2)
	cp -a /usr/src/linux-source-${VER_LINUX}/debian linux-source-${VER_LINUX}/debian
	cp -a /usr/src/linux-source-${VER_LINUX}/debian.master linux-source-${VER_LINUX}/debian.master
	mkdir linux-source-${VER_LINUX}/debian/stamps/
endif
	touch $@

ifeq ($(DISTRO),Debian)
$(stamp)build-linux: $(stamp)init-linux
	set -e; \
	export DEBMAIL="`dpkg-parsechangelog |grep ^Maintainer | sed -e 's/^Maintainer: //g'`"; \
	export DEBEMAIL="`echo $$DEBMAIL | sed -e 's/.*<\(.*\)>/\1/g'`"; \
	export DEBFULLNAME="`echo $$DEBMAIL | sed -e 's/\(.*\)<.*>/\1/g'`"; \
	cd linux-source-${VER_LINUX} ;\
	export ARCH=arm ;\
	make omap2plus_defconfig ;\
	make oldnoconfig ;\
	echo 1 >.version ;\
	make deb-pkg
	rm -rf tmp
	install -d tmp
	dpkg-deb -x linux-libc-dev_${DEB_VER_LINUX}_armel.deb tmp
	dpkg-deb -e linux-libc-dev_${DEB_VER_LINUX}_armel.deb tmp/DEBIAN
	sed -i -e 's/armel/${CROSS_ARCH}/g' tmp/DEBIAN/control
	cd tmp/usr/include ;\
	rm -rf drm scsi ;\
	rm -f `find . -name .install` ;\
	rm -f `find . -name ..install.cmd`
	PKG_IGNORE_CURRENTLY_BUILDING=1 dpkg-deb -b tmp linux-libc-dev_${DEB_VER_LINUX}_${CROSS_ARCH}.deb
	rm -rf tmp
	install -d tmp
	touch $@
else
$(stamp)build-linux: $(stamp)init-linux
	set -e; \
	cd linux-source-${VER_LINUX} ;\
	fakeroot make -f debian/rules clean ;\
	DEB_STAGE=stage1 PKG_IGNORE_CURRENTLY_BUILDING=1 BACKPORT=false dpkg-buildpackage -b -uc -us -a${CROSS_ARCH} -d
	touch $@
endif

$(stamp)install-linux: $(stamp)build-linux $(stamp)init-dirs
	dpkg-deb -x linux-libc-dev_${DEB_VER_LINUX}*_${CROSS_ARCH}.deb debian/tmp
ifeq ($(DISTRO),Ubuntu)
# linux-libc-dev got multiarched in 2.6.38-8.42 and we need to take care of it - LP: #750585
	ln -sf $(CURDIR)/debian/tmp/usr/include/${CROSS_GNU_TYPE}/asm/ $(CURDIR)/debian/tmp/usr/include/asm
endif
	touch $@

define init_binutils
	$(call unpack_tarball, ${BINUTILS_DIR}/binutils-${VER_BINUTILS}.tar.xz)
	cd binutils-${PKG_VER_BINUTILS} ;\
	cp -a ${BINUTILS_DIR}/debian/ . ;\
	QUILT_PATCHES=${CURDIR}/debian/patches/binutils quilt push -a; \
	echo ${CROSS_ARCH} > debian/target;
endef

$(stamp)init-binutils:
	$(call init_binutils)
	touch $@

$(stamp)build-binutils: $(stamp)init-binutils
	set -e ;\
	cd binutils-${PKG_VER_BINUTILS} ;\
	WITH_SYSROOT=${CURDIR}/debian/tmp PATCHED_SOURCES=yes PKG_IGNORE_CURRENTLY_BUILDING=1 BACKPORT=false dpkg-buildpackage -b -uc -us -nc -d
	# binutils wants dejagnu to generate docs which are not generate during cross build
	touch $@

$(stamp)install-binutils: $(stamp)build-binutils $(stamp)init-dirs
	dpkg-deb -x binutils-${CROSS_GNU_TYPE}_${DEB_VER_BINUTILS}_${HOST_ARCH}.deb debian/tmp
	touch $@

$(stamp)init-gcc:
	mkdir gcc -p ; \
	cd gcc ; \
	ln -sf ${GCC_DIR46}/gcc-${VER_GCC46}.tar.xz gcc-${VER_GCC46}.tar.xz ;\
	cp -a  ${GCC_DIR46}/debian/ . ; \
	QUILT_PATCHES=${CURDIR}/debian/patches/gcc-4.6 quilt push -a ; \
	echo ${CROSS_ARCH} >debian/target
	touch $@

$(stamp)build-gcc1: $(stamp)init-gcc $(stamp)install-binutils
	export PATH=${CURDIR}/debian/tmp/$(PF)/bin/:${PATH} ;\
	export LD_LIBRARY_PATH=${CURDIR}/debian/tmp/$(PF)/$(HOST_GNU_TYPE)/${CROSS_GNU_TYPE}/lib/ ;\
	cd gcc && DEB_CROSS_NO_BIARCH=yes DEB_STAGE=stage1 PKG_IGNORE_CURRENTLY_BUILDING=1 BACKPORT=false dpkg-buildpackage -b -uc -us -d
	touch $@

$(stamp)install-gcc1: $(stamp)build-gcc1
	$(call install_gcc)
	touch $@

define install_gcc
	dpkg-deb -x gcc-4.6-${CROSS_GNU_TYPE}_${DEB_VER_GCC46}_${HOST_ARCH}.deb debian/tmp
	dpkg-deb -x cpp-4.6-${CROSS_GNU_TYPE}_${DEB_VER_GCC46}_${HOST_ARCH}.deb debian/tmp
	cd debian/tmp/$(PF)/bin/ && \
	ln -sf ${CROSS_GNU_TYPE}-gcc-4.6 ${CROSS_GNU_TYPE}-gcc && \
	ln -sf ${CROSS_GNU_TYPE}-cpp-4.6 ${CROSS_GNU_TYPE}-cpp && \
	ln -sf ${CROSS_GNU_TYPE}-gcov-4.6 ${CROSS_GNU_TYPE}-gcov
endef

$(stamp)build-gcc2: $(stamp)init-gcc $(stamp)install-eglibc1
	export PATH=${CURDIR}/debian/tmp/$(PF)/bin/:${PATH} ;\
	export LD_LIBRARY_PATH=${CURDIR}/debian/tmp/$(PF)/$(HOST_GNU_TYPE)/${CROSS_GNU_TYPE}/lib/:${CURDIR}/debian/tmp/usr/lib:${CURDIR}/debian/tmp/lib ;\
	cd gcc && DEB_CROSS_NO_BIARCH=yes WITH_BUILD_SYSROOT=${CURDIR}/debian/tmp DEB_STAGE=stage2 PKG_IGNORE_CURRENTLY_BUILDING=1 BACKPORT=false dpkg-buildpackage -b -uc -us -d
	touch $@

$(stamp)install-gcc2: $(stamp)build-gcc2
	$(call install_gcc)
	dpkg-deb -x libgcc1-${CROSS_ARCH}-cross_${DEB_VER_GCC46}_all.deb debian/tmp
	touch $@

$(stamp)init-gcc47:
	mkdir gcc47 -p ; \
	cd gcc47 ; \
	ln -sf ${GCC_DIR47}/gcc-${VER_GCC47}.tar.xz gcc-${VER_GCC47}.tar.xz ;\
	cp -a  ${GCC_DIR47}/debian/ . ; \
	QUILT_PATCHES=${CURDIR}/debian/patches/gcc-4.7 quilt push -a ; \
	echo ${CROSS_ARCH} >debian/target
	touch $@

$(stamp)build-gcc3: $(stamp)init-gcc47 $(stamp)install-eglibc2
	export PATH=${CURDIR}/debian/tmp/$(PF)/bin/:${PATH} ;\
	export LD_LIBRARY_PATH=${CURDIR}/debian/tmp/$(PF)/$(HOST_GNU_TYPE)/${CROSS_GNU_TYPE}/lib/:${CURDIR}/debian/tmp/usr/lib:${CURDIR}/debian/tmp/lib ;\
	cd gcc47 && DEB_CROSS_NO_BIARCH=yes WITH_BUILD_SYSROOT=${CURDIR}/debian/tmp DEB_STAGE=stage2 PKG_IGNORE_CURRENTLY_BUILDING=1 BACKPORT=false dpkg-buildpackage -b -uc -us -d
	touch $@

$(stamp)init-eglibc:
	rm -rf eglibc-${VER_EGLIBC}
	$(call unpack_tarball, ${EGLIBC_DIR}/eglibc-${VER_EGLIBC}.tar.xz)
	cp -a ${EGLIBC_DIR}/debian/ eglibc-${VER_EGLIBC}
	# copy of file with armhf stuff dropped
	cp ${CURDIR}/debian/hacks/eglibc/arm*.mk eglibc-${VER_EGLIBC}/debian/sysdeps/
	cd eglibc-${VER_EGLIBC} ; \
	QUILT_PATCHES=${EGLIBC_PATCHES} quilt push -a && \
	rm -rf .pc/
	touch $@

$(stamp)build-eglibc1: $(stamp)init-eglibc $(stamp)install-linux $(stamp)install-gcc1
	export PATH=${CURDIR}/debian/tmp/$(PF)/bin/:${PATH} ;\
	export LD_LIBRARY_PATH=${CURDIR}/debian/tmp/$(PF)/$(HOST_GNU_TYPE)/${CROSS_GNU_TYPE}/lib/:${CURDIR}/gcc/debian/libgcc1-armel-cross/usr/${CROSS_GNU_TYPE}/lib/ ;\
	export LINUX_SOURCE=${CURDIR}/debian/tmp/usr ;\
	cp -r ${CURDIR}/debian/tmp/usr/include/${CROSS_GNU_TYPE}/asm ${CURDIR}/debian/tmp/usr/include/asm ;\
	cd eglibc-${VER_EGLIBC} ;\
	PATCHED_SOURCES=yes WITH_BUILD_SYSROOT=${CURDIR}/debian/tmp DEB_STAGE=stage1 PKG_IGNORE_CURRENTLY_BUILDING=1 BACKPORT=false fakeroot dpkg-buildpackage -b -uc -us -a${CROSS_ARCH} -d
	touch $@

$(stamp)install-eglibc1: $(stamp)build-eglibc1
	dpkg-deb -x libc6-dev_${DEB_VER_EGLIBC}_${CROSS_ARCH}.deb debian/tmp
	touch $@

$(stamp)build-eglibc2: $(stamp)init-eglibc $(stamp)install-gcc2
	export PATH=${CURDIR}/debian/tmp/$(PF)/bin/:${PATH} ;\
	export LD_LIBRARY_PATH=${CURDIR}/debian/tmp/$(PF)/$(HOST_GNU_TYPE)/${CROSS_GNU_TYPE}/lib/:${CURDIR}/gcc/debian/libgcc1-armel-cross/usr/${CROSS_GNU_TYPE}/lib/ ;\
	export LINUX_SOURCE=${CURDIR}/debian/tmp/usr ;\
	export DEB_BUILD_OPTIONS="nocheck notest notests" ; \
	cd eglibc-${VER_EGLIBC} && PATCHED_SOURCES=yes WITH_BUILD_SYSROOT=${CURDIR}/debian/tmp PKG_IGNORE_CURRENTLY_BUILDING=1 BACKPORT=false fakeroot dpkg-buildpackage -b -uc -us -a${CROSS_ARCH} -d
	touch $@

$(stamp)install-eglibc2: $(stamp)build-eglibc2
	for deb in *${DEB_VER_EGLIBC}*.deb; \
	do \
		dpkg-deb -x $$deb debian/tmp; \
	done; \
	bash debian/fix-links ${CROSS_GNU_TYPE}; \
	touch $@

clean:
	rm -rf linux-source-${VER_LINUX}
	rm -rf eglibc-${VER_EGLIBC}
	rm -rf gcc gcc47
	rm -rf binutils-${PKG_VER_BINUTILS}
	rm -rf debian/tmp debian/files
	rm -f *.*deb *.changes
	rm -rf repackfiles tmp
	rm -rf $(stamp)
	mkdir $(stamp)

# using wildcard for DEB_LIST_ALL gave only problems
DEB_LIST_ALL = \
           libc6-${CROSS_ARCH}-cross_${VER_EGLIBC}-*_all.deb  \
           libc6-dbg-${CROSS_ARCH}-cross_${VER_EGLIBC}-*_all.deb  \
           libc6-dev-${CROSS_ARCH}-cross_${VER_EGLIBC}-*_all.deb  \
           linux-libc-dev-${CROSS_ARCH}-cross_${DEB_VER_LINUX}*_all.deb  \
           libgcc1-${CROSS_ARCH}-cross_${DEB_VER_GCC47}_all.deb  \
           libgcc1-dbg-${CROSS_ARCH}-cross_${DEB_VER_GCC47}_all.deb  \

#
# Repack resulting packages to make some changes;
# - I want libgcc1 to contain changelog etc which normally are in gcc-${VER_GCC_BASE}-*-base package
# - libgcc1(-dbg) should depend on proper version libgcc1 (epoch hardcoded)
# - libgcc1-dbg needs to have doc symlink to libgcc1
# - linux-libc-dev gets copyright and changelog
# - libc6 gets copyright and changelog
# - libc6-dev-arm(el|hf)-cross provides libc6-dev-arm(hf|el)-arm(hf|el)-cross
# - libc6-dev-armhf-cross ships symlink to /usr/arm-linux-gnueabi/lib/hf for multilib cross compiler
define repack_debs
	@for deb in $1; \
	do \
	    rm -rf tmp/*; \
	    dpkg-deb -x $$deb tmp; \
	    dpkg-deb -e $$deb tmp/DEBIAN; \
	    pkgname=`echo $$deb | cut -d'_' -f1`; \
	    sed -i -e's/^Source:.*/Source: ${DEB_NAME_ACT} (${DEB_VER_ACT})/' tmp/DEBIAN/control; \
	    sed -i -e "s/${DEB_VER_LINUX}/${DEB_VER_LINUX}cross${DEB_VER_ACT}/g" tmp/DEBIAN/control ; \
	    sed -i -e "s/Version: ${VER_LINUX}-\(.*\)$$/Version: ${VER_LINUX}-\1cross${DEB_VER_ACT}/g" tmp/DEBIAN/control ; \
	    sed -i -e "s/${DEB_VER_EGLIBC}/${DEB_VER_EGLIBC}cross${DEB_VER_ACT}/g" tmp/DEBIAN/control ; \
	    sed -i -e "s/${DEB_VER_GCC47}/${DEB_VER_GCC47}cross${DEB_VER_ACT}/g" tmp/DEBIAN/control ; \
	    sed -i -e "s/cross${DEB_VER_ACT}cross${DEB_VER_ACT}/cross${DEB_VER_ACT}/g" tmp/DEBIAN/control ; \
	    if [ -e debian/overrides/$$pkgname ]; then \
		  mkdir -p tmp/usr/share/lintian/overrides; \
		  cp debian/overrides/$$pkgname tmp/usr/share/lintian/overrides/; \
	    fi; \
	    if [ 'libgcc1-dbg-${CROSS_ARCH}-cross' = $$pkgname ]; then \
	      sed -i -e 's/^Depends.*/Depends: libgcc1-${CROSS_ARCH}-cross (= 1:${DEB_VER_GCC47}cross${DEB_VER_ACT})/g' tmp/DEBIAN/control; \
	      ln -sf libgcc1-${CROSS_ARCH}-cross tmp/usr/share/doc/libgcc1-dbg-${CROSS_ARCH}-cross; \
	    fi; \
	    if [ 'libgcc1-${CROSS_ARCH}-cross' = $$pkgname ]; then \
	      sed -i -e'/^Depends/d' tmp/DEBIAN/control; \
	      rm tmp/usr/share/doc/libgcc1-${CROSS_ARCH}-cross; \
	      mkdir -p tmp/usr/share/doc/libgcc1-${CROSS_ARCH}-cross; \
	      cp gcc47/debian/gcc-${VER_GCC_BASE}-${CROSS_GNU_TYPE}-base/usr/share/doc/gcc-${VER_GCC_BASE}-${CROSS_GNU_TYPE}-base/* tmp/usr/share/doc/libgcc1-${CROSS_ARCH}-cross; \
	      mv tmp/usr/share/doc/libgcc1-${CROSS_ARCH}-cross/changelog.Debian.gz \
	         tmp/usr/share/doc/libgcc1-${CROSS_ARCH}-cross/changelog.Debian.gcc-${VER_GCC_BASE}.gz; \
	      gzip -c9 debian/changelog > tmp/usr/share/doc/libgcc1-${CROSS_ARCH}-cross/changelog.Debian.gz;\
	    fi; \
	    if [ 'linux-libc-dev-${CROSS_ARCH}-cross' = $$pkgname ]; then \
	      mkdir -p tmp/usr/share/doc/$$pkgname; \
	      cp repackfiles/linux/usr/share/doc/linux-libc-dev/copyright tmp/usr/share/doc/$$pkgname; \
	      cp repackfiles/linux/usr/share/doc/linux-libc-dev/changelog.Debian.gz tmp/usr/share/doc/$$pkgname; \
	    fi; \
	    if [ 'libc6-dev-armel-cross' = $$pkgname ]; then \
		  install -d tmp/usr/arm-linux-gnueabihf/lib; \
		  cd tmp/usr/arm-linux-gnueabihf/lib; \
		  ln -sf ../../arm-linux-gnueabi/lib sf; \
		  cd $(CURDIR); \
	    fi; \
	    if [ 'libc6-dev-armhf-cross' = $$pkgname ]; then \
		  install -d tmp/usr/arm-linux-gnueabi/lib; \
		  cd tmp/usr/arm-linux-gnueabi/lib; \
		  ln -sf ../../arm-linux-gnueabihf/lib hf; \
		  cd $(CURDIR); \
	    fi; \
	    if [ 'libc6' = `echo $$pkgname | cut -d'-' -f1` ]; then \
	      mkdir -p tmp/usr/share/doc/$$pkgname; \
	      cp repackfiles/eglibc/usr/share/doc/libc6/copyright tmp/usr/share/doc/$$pkgname; \
	      cp repackfiles/eglibc/usr/share/doc/libc6/changelog.Debian.gz tmp/usr/share/doc/$$pkgname; \
	    fi; \
	    (cd tmp && md5sum `find usr -type f` >>DEBIAN/md5sums);\
	    newdeb=`echo $$deb|sed -e "s/\(.*\)_\(.*\)_\(.*\)/\1_\2cross${DEB_VER_ACT}_\3/g"`; \
	    PKG_IGNORE_CURRENTLY_BUILDING=1 dpkg-deb -b tmp/ ../$$newdeb; \
	    rm -rf tmp/*; \
	done
endef

repack-debs-indep: dpkg-cross
	install -d repackfiles/eglibc repackfiles/linux
	dpkg-deb -x libc6_${DEB_VER_EGLIBC}_${CROSS_ARCH}.deb  repackfiles/eglibc
	dpkg-deb -x linux-libc-dev_${DEB_VER_LINUX}_${CROSS_ARCH}.deb  repackfiles/linux
	$(call repack_debs, ${DEB_LIST_ALL})

build-arch:
build-indep: build
build: $(stamp)build-gcc3
	# we do not need those packages
	rm -f cpp-*_${HOST_ARCH}.*deb
	rm -f gcc-*_${HOST_ARCH}.*deb
	rm -f linux-headers*.*deb
	rm -f *-doc*.*deb
	rm -f *-source*.*deb
	rm -f linux-tools-common_*.*deb
	rm -f nscd*deb

binary: binary-arch binary-indep
binary-arch:  build-arch
binary-indep: build dpkg-cross mangle-debian-files-indep $(stamp)make-dummies

DUMMYNAME = 
ifeq ($(CROSS_ARCH),armel)
	DUMMYNAME = armel-armhf
else ifeq ($(CROSS_ARCH),armhf)
	DUMMYNAME = armhf-armel
endif

$(stamp)make-dummies: $(stamp)debian-files-base
	install -d tmp2/DEBIAN
ifneq (,$(DUMMYNAME))
	install -m 0644 debian/dummies/libc6-dev-$(DUMMYNAME)-cross tmp2/DEBIAN/control
	sed -i -e 's/VERSION/$(DEB_VER_EGLIBC)cross$(DEB_VER_ACT)/g' tmp2/DEBIAN/control
	sed -i -e 's/SRCNAME/$(DEB_NAME_ACT) ($(DEB_VER_ACT))/g' tmp2/DEBIAN/control
	PKG_IGNORE_CURRENTLY_BUILDING=1 dpkg-deb -b tmp2 ../libc6-dev-$(DUMMYNAME)-cross_$(DEB_VER_EGLIBC)cross$(DEB_VER_ACT)_all.deb
	$(call generate_debian_files, ../libc6-dev-$(DUMMYNAME)-cross_$(DEB_VER_EGLIBC)cross$(DEB_VER_ACT)_all.deb)

	install -m 0644 debian/dummies/libc6-$(DUMMYNAME)-cross tmp2/DEBIAN/control
	sed -i -e 's/VERSION/$(DEB_VER_EGLIBC)cross$(DEB_VER_ACT)/g' tmp2/DEBIAN/control
	sed -i -e 's/SRCNAME/$(DEB_NAME_ACT) ($(DEB_VER_ACT))/g' tmp2/DEBIAN/control
	PKG_IGNORE_CURRENTLY_BUILDING=1 dpkg-deb -b tmp2 ../libc6-$(DUMMYNAME)-cross_$(DEB_VER_EGLIBC)cross$(DEB_VER_ACT)_all.deb
	$(call generate_debian_files, ../libc6-$(DUMMYNAME)-cross_$(DEB_VER_EGLIBC)cross$(DEB_VER_ACT)_all.deb)
endif
	touch $@

$(stamp)debian-files-base:
	rm -f debian/files
	touch $@

define generate_debian_files
	@for deb in $1; \
	do \
		echo -n "`basename $$deb` " >>debian/files; \
		dpkg-deb -I $$deb | grep Section  | cut -d ' ' -f 3 | tr "\n" ' ' >>debian/files; \
		dpkg-deb -I $$deb | grep Priority | cut -d ' ' -f 3 | tr -d "\n" >>debian/files; \
		echo "" >>debian/files; \
	done
endef

mangle-debian-files-indep: $(stamp)debian-files-base repack-debs-indep $(stamp)make-dummies
	$(call generate_debian_files,   ${DEB_LIST_ALL})
	sed -i -e "s/_all.deb/cross${DEB_VER_ACT}_all.deb/g" debian/files
	sed -i -e "s/_${HOST_ARCH}.deb/cross${DEB_VER_ACT}_${HOST_ARCH}.deb/g" debian/files
	sed -i -e "s/cross${DEB_VER_ACT}cross${DEB_VER_ACT}/cross${DEB_VER_ACT}/g" debian/files

dpkg-cross: build
	for deb in libc6_*_${CROSS_ARCH}.deb libc6-d*_${CROSS_ARCH}.deb linux-libc-dev_*_${CROSS_ARCH}.deb; \
	do \
	    PKG_IGNORE_CURRENTLY_BUILDING=1 dpkg-cross -M -a ${CROSS_ARCH} -X dpkg -X findutils -X tzdata -X libc-bin -X libc-dev-bin -b $$deb; \
	done

control:
	@sed -e "s/CROSS_ARCH/${CROSS_ARCH}/g" \
	    -e "s/CROSS_GNU_TYPE/${CROSS_GNU_TYPE}/g" \
	    -e "s/MIN_VER_EGLIBC/${MIN_VER_EGLIBC}/g" \
	    -e "s/MIN_VER_LINUX/${MIN_VER_LINUX}/g" \
	    -e "s/VER_LINUX/${VER_LINUX}/g" \
	    -e "s/MIN_VER_GCC/${MIN_VER_GCC47}/g" \
	    -e "s/VER_GCC_BASE/${VER_GCC_BASE}/g" \
	    -e "s/EXTRA_DEPS/${EXTRA_DEPS}/g" \
	    $(CURDIR)/debian/control.in >$(CURDIR)/debian/control
ifeq ($(PPA),true)
	@sed  \
	    -e "s/binutils-source/binutils-${VER_BINUTILS}-source/g" \
	    -e "s/eglibc-source/eglibc-${VER_EGLIBC}-source/g" \
	    -e "s/linux-source/linux-source-${VER_LINUX}/g" \
	    -e "s/1.16.0~ubuntu6/1.15.5/g" \
	    -e "s/gcc-${VER_GCC_BASE}-source/gcc-${VER_GCC_BASE}-${VER_GCC47}-source/g" \
	    -i $(CURDIR)/debian/control
endif
