#! /usr/bin/make -f

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

# This is the debhelper compatability version to use.
export DH_COMPAT=2

# version number of the defaults package
VDEF	:= $(strip $(shell dpkg-parsechangelog | awk -F: '/^Version:/ {print $$NF}'))

# assuming, we don't reset the minor version of the gcc-defaults source
REL_NO	:= $(shell dpkg-parsechangelog | awk -F. '/^Version:/ {print $$NF}')
# gcc-defaults 0.8 is the first version for 2.95.4.
REL_NO_295	:= $(shell expr $(REL_NO) - 7)
# gcc-defaults 0.6 is the first version with 2.96 support.
REL_NO_296	:= $(shell expr $(REL_NO) - 5)
# gcc-defaults 0.17 is the first version with 3.0.4 support.
REL_NO_30	:= $(shell expr $(REL_NO) - 16)


# architecture dependent variables
DEB_HOST_ARCH		:= $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_GNU_SYSTEM	:= $(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM)
DEB_HOST_GNU_TYPE	:= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)

# CV_XXX is the complete version number, including the release, without epoch
CV_CPP	:= 2.95.4-$(REL_NO_295)
CV_GCC	:= 2.95.4-$(REL_NO_295)
CV_GPP	:= 2.95.4-$(REL_NO_295)
CV_GOBJC:= 2.95.4-$(REL_NO_295)
CV_G77	:= 2.95.4-$(REL_NO_295)
CV_CHILL:= 2.95.4-$(REL_NO_295)
CV_GPC	:= 2.95.4-$(REL_NO_295)

CV_GCJ	:= 3.0.4-$(REL_NO_30)
CV_GIJ	:= 3.0.4-$(REL_NO_30)

EPOCH=2
OS_NAME	:= Linux
packages := chill c++ fortran java objc pascal

ifeq ($(DEB_HOST_GNU_TYPE),alpha-linux)
endif

ifeq ($(DEB_HOST_GNU_TYPE),arm-linux)
    CV_G77 := 3.0.4-$(REL_NO_30)
endif

ifeq ($(DEB_HOST_GNU_TYPE),ia64-linux)
    CV_CPP	:= 2.96-$(REL_NO_296)
    CV_GCC	:= 2.96-$(REL_NO_296)
    CV_GPP	:= 2.96-$(REL_NO_296)
    CV_GOBJC	:= 3.0.4-$(REL_NO_30)
    CV_G77	:= 2.96-$(REL_NO_296)
    CV_CHILL	:= 2.96-$(REL_NO_296)
    CV_GPC	:= 2.96-$(REL_NO_296)
    packages	:= c++ fortran java objc
endif

ifeq ($(DEB_HOST_GNU_TYPE),i386-linux)
endif

ifeq ($(DEB_HOST_GNU_TYPE),sparc-linux)
endif

ifeq ($(DEB_HOST_GNU_TYPE),hppa-linux)
    CV_CPP	:= 3.0.4-$(REL_NO_30)
    CV_GCC	:= 3.0.4-$(REL_NO_30)
    CV_GPP	:= 3.0.4-$(REL_NO_30)
    CV_GOBJC	:= 3.0.4-$(REL_NO_30)
    CV_G77	:= 3.0.4-$(REL_NO_30)
    CV_CHILL	:= 3.0.4-$(REL_NO_30)
    CV_GCJ	:= 3.0.4-$(REL_NO_30)
    CV_GIJ	:= 3.0.4-$(REL_NO_30)
    CV_GPC	:= 3.0.4-$(REL_NO_30)
    packages	:= c++ fortran objc
endif

ifeq ($(DEB_HOST_GNU_TYPE),mips-linux)
    packages := chill c++ fortran objc pascal
endif

ifeq ($(DEB_HOST_GNU_TYPE),mipsel-linux)
    packages := chill c++ fortran objc pascal
endif

ifeq ($(DEB_HOST_GNU_TYPE),i386-gnu)
    OS_NAME	:= Hurd
endif

# 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_G77	:= $(shell echo $(CV_G77)   | sed 's/-[^-]*$$//')
V_CHILL	:= $(shell echo $(CV_CHILL) | sed 's/-[^-]*$$//')
V_GCJ	:= $(shell echo $(CV_GCJ)   | sed 's/-[^-]*$$//')
V_GIJ	:= $(shell echo $(CV_GIJ)   | sed 's/-[^-]*$$//')
V_GPC	:= $(shell echo $(CV_GPC)   | 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_G77	:= $(shell echo $(V_G77)   | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_CHILL:= $(shell echo $(V_CHILL) | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GCJ	:= $(shell echo $(V_GCJ)   | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GIJ	:= $(shell echo $(V_GIJ)   | awk -F. '{printf "%d.%d", $$1, $$2}')
PV_GPC	:= $(shell echo $(V_GPC)   | awk -F. '{printf "%d.%d", $$1, $$2}')

control:
	m4 -DPACKAGES="$(packages)" \
	   -DOS_NAME=$(OS_NAME) \
	   -DDEB_ARCH=$(DEB_HOST_ARCH) \
	   -DEPOCH=$(EPOCH) \
	   -DVDEF=$(VDEF) \
	   -DCV_CPP=$(CV_CPP) \
	   -DV_CPP=$(V_CPP)     -DPV_CPP=$(PV_CPP) \
	   -DV_GCC=$(V_GCC)     -DPV_GCC=$(PV_GCC) \
	   -DV_GPP=$(V_GPP)     -DPV_GPP=$(PV_GPP) \
	   -DV_GOBJC=$(V_GOBJC) -DPV_GOBJC=$(PV_GOBJC) \
	   -DV_CHILL=$(V_CHILL) -DPV_CHILL=$(PV_CHILL) \
	   -DV_G77=$(V_G77)     -DPV_G77=$(PV_G77) \
	   -DV_GCJ=$(V_GCJ)     -DPV_GCJ=$(PV_GCJ) \
	   -DV_GIJ=$(V_GIJ)     -DPV_GIJ=$(PV_GIJ) \
	   -DV_GPC=$(V_GPC)     -DPV_GPC=$(PV_GPC) \
		debian/control.m4 > debian/control.tmp2
	uniq debian/control.tmp2 > debian/control.tmp
	rm -f debian/control.tmp2
	[ -e debian/control ] \
	  && cmp -s debian/control debian/control.tmp \
	  && rm -f debian/control.tmp && exit 0; \
	  mv debian/control.tmp debian/control

README:
	m4 -DPACKAGES="$(packages)" \
	   -DOS_NAME=$(OS_NAME) \
	   -DDEB_ARCH=$(DEB_HOST_ARCH) \
	   -DV_CPP=$(V_CPP)     -DPV_CPP=$(PV_CPP) \
	   -DV_GCC=$(V_GCC)     -DPV_GCC=$(PV_GCC) \
	   -DV_GPP=$(V_GPP)     -DPV_GPP=$(PV_GPP) \
	   -DV_GOBJC=$(V_GOBJC) -DPV_GOBJC=$(PV_GOBJC) \
	   -DV_CHILL=$(V_CHILL) -DPV_CHILL=$(PV_CHILL) \
	   -DV_G77=$(V_G77)     -DPV_G77=$(PV_G77) \
	   -DV_GCJ=$(V_GCJ)     -DPV_GCJ=$(PV_GCJ) \
	   -DV_GIJ=$(V_GCJ)     -DPV_GIJ=$(PV_GCJ) \
	   -DV_GPC=$(V_GPC)     -DPV_GPC=$(PV_GPC) \
		debian/README.Debian.m4 > debian/README.Debian.tmp2
	uniq debian/README.Debian.tmp2 > debian/README.Debian.tmp
	rm -f debian/README.Debian.tmp2
	[ -e debian/README.Debian ] \
	  && cmp -s debian/README.Debian debian/README.Debian.tmp \
	  && rm -f debian/README.Debian.tmp && exit 0; \
	  mv debian/README.Debian.tmp debian/README.Debian

build: control README build-stamp
build-stamp:
	dh_testdir

	touch build-stamp

clean:
	dh_testdir
	dh_testroot
	rm -f build-stamp
	rm -f debian/control.tmp*
	dh_clean

install: build
	dh_testdir
	dh_testroot
	dh_clean -k

	: # cpp
	dh_installdirs -pcpp lib usr/bin /usr/share/man/man1 usr/share/doc/cpp
	dh_link -pcpp \
	  /usr/bin/cpp-$(PV_CPP) /lib/cpp \
	  /usr/bin/cpp-$(PV_CPP) /usr/bin/cpp \
	  /usr/share/man/man1/cpp-$(PV_CPP).1.gz /usr/share/man/man1/cpp.1.gz

	: # gcc
	dh_installdirs -pgcc usr/bin /usr/share/man/man1 usr/share/doc
	dh_link -pgcc \
	  /usr/share/doc/cpp /usr/share/doc/gcc \
	  /usr/bin/gcc-$(PV_GCC) /usr/bin/gcc \
	  /usr/share/man/man1/gcc-$(PV_GCC).1.gz /usr/share/man/man1/gcc.1.gz \
	  /usr/bin/gcov-$(PV_GCC) /usr/bin/gcov \
	  /usr/share/man/man1/gcov-$(PV_GCC).1.gz /usr/share/man/man1/gcov.1.gz
	install -m 755 -p c89 debian/gcc/usr/bin/.
	install -m 644 -p c89.1 debian/gcc/usr/share/man/man1/.

ifeq (objc, $(findstring objc, $(packages)))
	: # gobjc
	dh_installdirs -pgobjc usr/share/doc
	dh_link -pgobjc \
	  /usr/share/doc/cpp /usr/share/doc/gobjc
endif

ifeq (c++, $(findstring c++, $(packages)))
	: # g++
	dh_installdirs -pg++ usr/bin /usr/share/man/man1 usr/share/doc
	dh_link -pg++ \
	  /usr/share/doc/cpp /usr/share/doc/g++ \
	  /usr/bin/g++-$(PV_GPP) /usr/bin/g++ \
	  /usr/share/man/man1/g++-$(PV_GPP).1.gz /usr/share/man/man1/g++.1.gz
endif

ifeq (fortran, $(findstring fortran, $(packages)))
	: # g77
	dh_installdirs -pg77 usr/bin /usr/share/man/man1 usr/share/doc
	dh_link -pg77 \
	  /usr/share/doc/cpp /usr/share/doc/g77 \
	  /usr/bin/g77-$(PV_G77) /usr/bin/g77 \
	  /usr/share/man/man1/g77-$(PV_G77).1.gz /usr/share/man/man1/g77.1.gz
endif

ifeq (chill, $(findstring chill, $(packages)))
	: # chill
	dh_installdirs -pchill usr/bin /usr/share/man/man1 usr/share/doc
	dh_link -pchill \
	  /usr/share/doc/cpp /usr/share/doc/chill \
	  /usr/bin/chill-$(PV_CHILL) /usr/bin/chill
	dh_undocumented -pchill chill.1
endif

ifeq (java, $(findstring java, $(packages)))
	: # gcj
	dh_installdirs -pgcj usr/bin /usr/share/man/man1 usr/share/doc
	dh_link -pgcj \
	  /usr/share/doc/cpp /usr/share/doc/gcj \
	  /usr/bin/gcj-$(PV_GCJ) /usr/bin/gcj \
	  /usr/bin/gcjh-$(PV_GCJ) /usr/bin/gcjh \
	  /usr/bin/jv-convert-$(PV_GCJ) /usr/bin/jv-convert \
	  /usr/bin/jv-scan-$(PV_GCJ) /usr/bin/jv-scan \
	  /usr/bin/jcf-dump-$(PV_GCJ) /usr/bin/jcf-dump \
	  /usr/share/man/man1/gcj-$(PV_GCJ).1.gz /usr/share/man/man1/gcj.1.gz \
	  /usr/share/man/man1/gcjh-$(PV_GCJ).1.gz /usr/share/man/man1/gcjh.1.gz \
	  /usr/share/man/man1/jv-convert-$(PV_GCJ).1.gz /usr/share/man/man1/jv-convert.1.gz \
	  /usr/share/man/man1/jv-scan-$(PV_GCJ).1.gz /usr/share/man/man1/jv-scan.1.gz \
	  /usr/share/man/man1/jcf-dump-$(PV_GCJ).1.gz /usr/share/man/man1/jcf-dump.1.gz

	: # gij
	dh_installdirs -pgij usr/bin /usr/share/man/man1 usr/share/doc
	dh_link -pgij \
	  /usr/share/doc/cpp /usr/share/doc/gij \
	  /usr/bin/gij-$(PV_GIJ) /usr/bin/gij \
	  /usr/share/man/man1/gij-$(PV_GIJ).1.gz /usr/share/man/man1/gij.1.gz \
	  /usr/bin/gij-wrapper-$(PV_GIJ) /usr/bin/gij-wrapper \
	  /usr/share/man/man1/gij-wrapper-$(PV_GIJ).1.gz /usr/share/man/man1/gij-wrapper.1.gz
endif

ifeq (pascal, $(findstring pascal, $(packages)))
	: # gpc
	dh_installdirs -pgpc usr/bin /usr/share/man/man1 usr/share/doc
	dh_link -pgpc \
	  /usr/share/doc/cpp /usr/share/doc/gpc \
	  /usr/bin/gpc-$(PV_GPC) /usr/bin/gpc \
	  /usr/share/man/man1/gpc-$(PV_GPC).1.gz /usr/share/man/man1/gpc.1.gz
endif

binary-indep: build install
	: # Nothing needs to be done

binary-arch: build install
	dh_testversion 1.1.17
	dh_testdir
	dh_testroot
#	dh_installdebconf
	dh_installdocs -pcpp
	for p in `dh_listpackages -Ncpp`; do \
	  sh debian/dh_doclink -p$$p cpp; \
	done
	dh_installchangelogs -pcpp
	mv debian/cpp/usr/share/doc/cpp/changelog \
		debian/cpp/usr/share/doc/cpp/changelog.Debian
	dh_compress
	dh_fixperms
	dh_installdeb
#	dh_shlibdeps
	dh_gencontrol -pcpp   -u-v$(EPOCH):$(CV_CPP)
	dh_gencontrol -pgcc   -u-v$(EPOCH):$(CV_GCC)
ifeq (c++, $(findstring c++, $(packages)))
	dh_gencontrol -pg++   -u-v$(EPOCH):$(CV_GPP)
endif
ifeq (objc, $(findstring objc, $(packages)))
	dh_gencontrol -pgobjc -u-v$(EPOCH):$(CV_GOBJC)
endif
ifeq (fortran, $(findstring fortran, $(packages)))
	dh_gencontrol -pg77   -u-v$(EPOCH):$(CV_G77)
endif
ifeq (pascal, $(findstring pascal, $(packages)))
	dh_gencontrol -pgpc   -u-v$(EPOCH):$(CV_GPC)
endif
ifeq (java, $(findstring java, $(packages)))
	dh_gencontrol -pgcj   -u-v$(EPOCH):$(CV_GCJ)
	dh_gencontrol -pgij   -u-v$(EPOCH):$(CV_GIJ)
endif
ifeq (chill, $(findstring chill, $(packages)))
	dh_gencontrol -pchill -u-v$(EPOCH):$(CV_CHILL)
endif
	dh_md5sums
	dh_builddeb

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