#! /usr/bin/make -f

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

REL_NO	:= 1
GCC_VER := 4.8.2

# minimum required gcc-X.Y versions
REQV		:= (>= $(GCC_VER)-$(REL_NO))

CV_CPP		:= $(GCC_VER)-$(REL_NO)
CV_GCC		:= $(GCC_VER)-$(REL_NO)
CV_GPP		:= $(GCC_VER)-$(REL_NO)
CV_GOBJC	:= $(GCC_VER)-$(REL_NO)
CV_GOBJCXX	:= $(GCC_VER)-$(REL_NO)
CV_GFORT	:= $(GCC_VER)-$(REL_NO)
CV_GGO		:= $(GCC_VER)-$(REL_NO)
CV_GDC		:= $(GCC_VER)-$(REL_NO)
CV_GCJ		:= $(GCC_VER)-$(REL_NO)

REQV_CPP	= $(REQV)
REQV_GCC	= $(REQV)
REQV_GPP	= $(REQV)
REQV_GOBJC	= $(REQV)
REQV_GOBJCXX	= $(REQV)
REQV_GFORT	= $(REQV)
REQV_GGO	= $(REQV)
REQV_GDC	= $(REQV)
REQV_GCJ	= $(REQV)

CROSS_ARCH       := $(shell dpkg-parsechangelog| sed -n 's/^Source: gcc-defaults-\(.*\)-cross/\1/p')
CROSS_GNU_TYPE   := $(shell dpkg-architecture -a${CROSS_ARCH} -qDEB_HOST_GNU_TYPE -f)

ifneq (,$(filter $(CROSS_ARCH),armel armhf amd64 i386 mips mipsel powerpc ppc64 s390 s390x sparc sparc64))
  MULTILIB = -multilib
endif
ifneq (,$(filter $(CROSS_ARCH),amd64 i386 mips mipsel powerpc ppc64 s390 s390x sparc sparc64))
  MULTIGOLIB = -multilib
endif

host_archs = amd64 i386 arm64

print:
	@echo ${CROSS_ARCH}
	@echo ${CROSS_GNU_TYPE}

EPOCH=4
distribution := $(shell lsb_release -is)
all_packages    := \
	g++-${CROSS_GNU_TYPE} \
	gfortran-${CROSS_GNU_TYPE} \
	gdc-${CROSS_GNU_TYPE} \
	gcj-${CROSS_GNU_TYPE} \
	gobjc-${CROSS_GNU_TYPE} \
	gobjc++-${CROSS_GNU_TYPE} \
	gccgo-${CROSS_GNU_TYPE} \
	pkg-config-${CROSS_GNU_TYPE}

no_packages	:=

packages := $(filter-out $(no_packages), $(all_packages))

# derived version number (without release)
V_CPP	:= $(shell echo $(CV_CPP)   | sed 's/-[^-]*$$//')
V_GCC	:= $(shell echo $(CV_GCC)   | sed 's/-[^-]*$$//')
V_GPP	:= $(shell echo $(CV_GPP)   | sed 's/-[^-]*$$//')
V_GOBJC	:= $(shell echo $(CV_GOBJC) | sed 's/-[^-]*$$//')
V_GOBJCXX	:= $(shell echo $(CV_GOBJCXX) | sed 's/-[^-]*$$//')
V_GFORT	:= $(shell echo $(CV_GFORT) | sed 's/-[^-]*$$//')
V_GGO	:= $(shell echo $(CV_GGO) | sed 's/-[^-]*$$//')
V_GDC	:= $(shell echo $(CV_GDC) | sed 's/-[^-]*$$//')
V_GCJ	:= $(shell echo $(CV_GCJ) | sed 's/-[^-]*$$//')

# number for the package name
PV_CPP	:= $(shell echo $(V_CPP)   | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GCC	:= $(shell echo $(V_GCC)   | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GPP	:= $(shell echo $(V_GPP)   | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GOBJC:= $(shell echo $(V_GOBJC) | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GOBJCXX:= $(shell echo $(V_GOBJCXX) | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GFORT:= $(shell echo $(V_GFORT) | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GGO	:= $(shell echo $(V_GGO) | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GDC	:= $(shell echo $(V_GDC) | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GCJ	:= $(shell echo $(V_GCJ) | awk -F. '{printf "%d.%d", $$1, $$2}')

substvars:
	( \
	  echo 'version:cpp=$(EPOCH):$(CV_CPP)'; \
	  echo 'version:gcc=$(EPOCH):$(CV_GCC)'; \
	  echo 'version:gpp=$(EPOCH):$(CV_GPP)'; \
	  echo 'version:gobjc=$(EPOCH):$(CV_GOBJC)'; \
	  echo 'version:gfort=$(EPOCH):$(CV_GFORT)'; \
	  echo 'pv:cpp=$(PV_CPP)'; \
	  echo 'pv:gcc=$(PV_GCC)'; \
	  echo 'pv:gpp=$(PV_GPP)'; \
	  echo 'pv:gobjc=$(PV_GOBJC)'; \
	  echo 'pv:gobjcxx=$(PV_GOBJCXX)'; \
	  echo 'pv:gfort=$(PV_GFORT)'; \
	  echo 'pv:ggo=$(PV_GGO)'; \
	  echo 'pv:gdc=$(PV_GDC)'; \
	  echo 'pv:gcj=$(PV_GCJ)'; \
	  echo 'reqv:cpp=$(REQV_CPP)'; \
	  echo 'reqv:gcc=$(REQV_GCC)'; \
	  echo 'reqv:gpp=$(REQV_GPP)'; \
	  echo 'reqv:gobjc=$(REQV_GOBJC)'; \
	  echo 'reqv:gobjcxx=$(REQV_GOBJCXX)'; \
	  echo 'reqv:gfort=$(REQV_GFORT)'; \
	  echo 'reqv:ggo=$(REQV_GGO)'; \
	  echo 'reqv:gdc=$(REQV_GDC)'; \
	  echo 'reqv:gcj=$(REQV_GCJ)'; \
	) > debian/substvars.local

build: build-stamp
build-stamp:
	dh_testdir
	touch build-stamp

clean:
	dh_testdir
	dh_testroot
	rm -f *-stamp
	rm -rf build
	rm -f debian/control.tmp*
	rm -f debian/substvars.local
	rm -rf *-${CROSS_GNU_TYPE}
	rm -f *-stamp
	dh_clean

install: build substvars
	dh_testdir
	dh_testroot
	dh_clean -k

	for p in `dh_listpackages`; do \
	  cp -l debian/substvars.local debian/$$p.substvars; \
	done

nopkgs :=-s $(foreach p, $(no_packages),-N$(p))

build-indep:

binary-indep: build-indep
	:

build-arch: build
binary-arch: build-arch install
	dh_testdir
	dh_testroot
#	dh_installdebconf
	dh_installdocs -pcpp-${CROSS_GNU_TYPE}
	for p in `dh_listpackages $(nopkgs) -Ncpp-${CROSS_GNU_TYPE} -Npkg-config-${CROSS_GNU_TYPE}`; do \
	  echo ln -sf cpp-${CROSS_GNU_TYPE} debian/$$p/usr/share/doc/$$p; \
	  mkdir -p debian/$$p/usr/share/doc; \
	  rm -f debian/$$p/usr/share/doc/$$p; \
	  ln -sf cpp-${CROSS_GNU_TYPE} debian/$$p/usr/share/doc/$$p; \
	done

	dh_link -ppkg-config-${CROSS_GNU_TYPE} \
	   /usr/share/pkg-config-crosswrapper /usr/bin/${CROSS_GNU_TYPE}-pkg-config

	dh_link -pcpp-${CROSS_GNU_TYPE} \
          /usr/bin/${CROSS_GNU_TYPE}-cpp-$(PV_CPP) /usr/bin/${CROSS_GNU_TYPE}-cpp \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-cpp-$(PV_CPP).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-cpp.1.gz

	dh_link -pgcc-${CROSS_GNU_TYPE} \
          /usr/bin/${CROSS_GNU_TYPE}-gcc-$(PV_GCC) /usr/bin/${CROSS_GNU_TYPE}-gcc \
          /usr/bin/${CROSS_GNU_TYPE}-gcov-$(PV_GCC) /usr/bin/${CROSS_GNU_TYPE}-gcov \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-gcc-$(PV_GCC).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-gcc.1.gz \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-gcov-$(PV_GCC).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-gcov.1.gz 

	dh_link -pg++-${CROSS_GNU_TYPE} \
          /usr/bin/${CROSS_GNU_TYPE}-g++-$(PV_GPP) /usr/bin/${CROSS_GNU_TYPE}-g++ \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-g++-$(PV_GPP).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-g++.1.gz \

	dh_link -pgfortran-${CROSS_GNU_TYPE} \
          /usr/bin/${CROSS_GNU_TYPE}-gfortran-$(PV_GFORT) /usr/bin/${CROSS_GNU_TYPE}-gfortran \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-gfortran-$(PV_GFORT).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-gfortran.1.gz 

	dh_link -pgccgo-${CROSS_GNU_TYPE} \
          /usr/bin/${CROSS_GNU_TYPE}-gccgo-$(PV_GGO) /usr/bin/${CROSS_GNU_TYPE}-gccgo \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-gccgo-$(PV_GGO).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-gccgo.1.gz
	dh_link -pgdc-${CROSS_GNU_TYPE} \
          /usr/bin/${CROSS_GNU_TYPE}-gdc-$(PV_GDC) /usr/bin/${CROSS_GNU_TYPE}-gdc \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-gdc-$(PV_GDC).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-gdc.1.gz

	dh_link -pgcj-${CROSS_GNU_TYPE} \
          /usr/bin/${CROSS_GNU_TYPE}-gcj-$(PV_GCJ) /usr/bin/${CROSS_GNU_TYPE}-gcj \
          /usr/share/man/man1/${CROSS_GNU_TYPE}-gcj-$(PV_GCJ).1.gz /usr/share/man/man1/${CROSS_GNU_TYPE}-gcj.1.gz

	dh_installchangelogs -pcpp-${CROSS_GNU_TYPE}
	mv debian/cpp-${CROSS_GNU_TYPE}/usr/share/doc/cpp-${CROSS_GNU_TYPE}/changelog \
		debian/cpp-${CROSS_GNU_TYPE}/usr/share/doc/cpp-${CROSS_GNU_TYPE}/changelog.Debian
	dh_compress -s $(nopkgs)
	dh_fixperms -s $(nopkgs)
	dh_installdeb -s $(nopkgs)
	dh_gencontrol -pcpp-${CROSS_GNU_TYPE}     -u-v$(EPOCH):$(CV_CPP)
	dh_gencontrol -pgcc-${CROSS_GNU_TYPE}     -u-v$(EPOCH):$(CV_GCC)
	dh_gencontrol -ppkg-config-${CROSS_GNU_TYPE} -u-v$(EPOCH):$(CV_GCC)
ifneq (,$(filter g++-${CROSS_GNU_TYPE}, $(packages)))
	dh_gencontrol -pg++-${CROSS_GNU_TYPE}     -u-v$(EPOCH):$(CV_GPP)
endif
ifneq (,$(filter gobjc-${CROSS_GNU_TYPE}, $(packages)))
	dh_gencontrol -pgobjc-${CROSS_GNU_TYPE}   -u-v$(EPOCH):$(CV_GOBJC)
endif
ifneq (,$(filter gobjc++-${CROSS_GNU_TYPE}, $(packages)))
	dh_gencontrol -pgobjc++-${CROSS_GNU_TYPE}   -u-v$(EPOCH):$(CV_GOBJCXX)
endif
ifneq (,$(filter gfortran-${CROSS_GNU_TYPE}, $(packages)))
	dh_gencontrol -pgfortran-${CROSS_GNU_TYPE}     -u-v$(EPOCH):$(CV_GFORT)
endif
ifneq (,$(filter gccgo-${CROSS_GNU_TYPE}, $(packages)))
	dh_gencontrol -pgccgo-${CROSS_GNU_TYPE}     -u-v$(EPOCH):$(CV_GGO)
endif
ifneq (,$(filter gdc-${CROSS_GNU_TYPE}, $(packages)))
	dh_gencontrol -pgdc-${CROSS_GNU_TYPE}     -u-v$(EPOCH):$(CV_GDC)
endif
ifneq (,$(filter gcj-${CROSS_GNU_TYPE}, $(packages)))
	dh_gencontrol -pgcj-${CROSS_GNU_TYPE}     -u-v$(EPOCH):$(CV_GCJ)
endif
	dh_md5sums -s $(nopkgs)
	dh_builddeb -s $(nopkgs)

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

control:
	sed -e "s/CROSS_ARCH/${CROSS_ARCH}/g" \
	    -e "s/CROSS_GNU_TYPE/${CROSS_GNU_TYPE}/g" \
	    -e "s/CROSS_GNU_TYPE/${CROSS_GNU_TYPE}/g" \
	    -e "s/MULTILIB/${MULTILIB}/g" \
	    -e "s/MULTIGOLIB/${MULTIGOLIB}/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_GCC}/g" \
	    -e "s/VER_GCC_BASE/${VER_GCC_BASE}/g" \
	    -e "s/EXTRA_DEPS/${EXTRA_DEPS}/g" \
	    -e "s/@host_archs@/${host_archs}/g" \
	    $(CURDIR)/debian/control.in >$(CURDIR)/debian/control
