#!/usr/bin/make -f

DOC_VER_4.4 := 4.4.7-1
DOC_VER_4.6 := 4.6.3-1
DOC_VER_4.7 := 4.7.2-1
DOC_VER_4.8 := 4.8.0-1
DOC_VER_BASE := $(DOC_VER_4.8)
# for setting versions of binary packages
DEBIAN_EPOCH := 5

BASES := cpp gcc gfortran gnat gcj
GENFILES := $(patsubst %,debian/%-doc.links, $(BASES))

# get default version by symlinks, eg. /usr/bin/gcc -> gcc-4.7
PREFIX_BIN := /usr/bin/
get_default_version = $(shell bash -c 'readlink $(PREFIX_BIN)$(1)|perl -pe "s/^.*-//"')

# default versions depend on arch
CPP_VER      := $(call get_default_version,cpp)
GCC_VER      := $(call get_default_version,gcc)
GFORTRAN_VER := $(call get_default_version,gfortran)
GNAT_VER     := $(call get_default_version,gnatgcc)
GCJ_VER      := $(call get_default_version,gcj)

CPP_DEP_VER := cpp-$(CPP_VER)-doc (>= $(DOC_VER_$(CPP_VER)))
GCC_DEP_VER := gcc-$(GCC_VER)-doc (>= $(DOC_VER_$(GCC_VER)))
GFORTRAN_DEP_VER := gfortran-$(GFORTRAN_VER)-doc (>= $(DOC_VER_$(GFORTRAN_VER)))
GNAT_DEP_VER := gnat-$(GNAT_VER)-doc (>= $(DOC_VER_$(GNAT_VER)))
GCJ_DEP_VER := gcj-$(GCJ_VER)-doc (>= $(DOC_VER_$(GCJ_VER)))

# for substitution in control.in, *-doc.links
uppercase = $(shell echo $(x) | tr a-z A-Z)
sedcmd1 = s/%$(uppercase)_DEP_VER%/$($(uppercase)_DEP_VER)/g;
SEDCMD1 := $(foreach x,$(BASES),$(sedcmd1))
sedcmd2 = s/%$(uppercase)_VER%/$($(uppercase)_VER)/g;
SEDCMD2 := $(foreach x,$(BASES),$(sedcmd2))

# for setting binary package versions
# uppercase function:
uc = $(shell echo $(1)| tr a-z A-Z)
# individual command:
set_version = dh_gencontrol -p$(1)-doc -- -v$(DEBIAN_EPOCH):$(DOC_VER_$($(call uc, $(1))_VER));
# all commands:
SETTING_VERSIONS = $(foreach base,$(BASES), $(call set_version, $(base)))

debian/control:
	dh_testdir
	sed '$(SEDCMD1)' < debian/control.in > debian/control

$(GENFILES): % : %.in
	dh_testdir
	sed '$(SEDCMD2)' < $< > $@

build: debian/control $(GENFILES)

build-arch: build

build-indep:

install: build
	dh_testdir
	dh_testroot
	dh_clean -k
	dh_installdirs -a

clean:
	dh_testdir
	dh_testroot
	rm -f $(GENFILES)
	dh_clean


binary-arch: build install
	dh_testdir
	dh_testroot
	dh_installdocs -a -Ngcc-doc-base -A debian/README
	dh_installchangelogs -a
	mv debian/cpp-doc/usr/share/doc/cpp-doc/changelog \
	   debian/cpp-doc/usr/share/doc/cpp-doc/changelog.Debian
	mv debian/gcc-doc/usr/share/doc/gcc-doc/changelog \
	   debian/gcc-doc/usr/share/doc/gcc-doc/changelog.Debian
	mv debian/gfortran-doc/usr/share/doc/gfortran-doc/changelog \
	   debian/gfortran-doc/usr/share/doc/gfortran-doc/changelog.Debian
	mv debian/gnat-doc/usr/share/doc/gnat-doc/changelog \
	   debian/gnat-doc/usr/share/doc/gnat-doc/changelog.Debian
	mv debian/gcj-doc/usr/share/doc/gcj-doc/changelog \
	   debian/gcj-doc/usr/share/doc/gcj-doc/changelog.Debian
	dh_lintian -a
	dh_link -a
	dh_compress -a
	dh_fixperms -a
	dh_installdeb -a
	$(SETTING_VERSIONS)
	dh_gencontrol -a --remaining-packages
	dh_md5sums -a
	dh_builddeb -a

binary-indep: build install
	dh_testdir
	dh_testroot
	dh_installdocs -pgcc-doc-base
	dh_installdocs -i --remaining-packages -A debian/README
	dh_installman -i
	dh_installchangelogs -i
	mv debian/gcc-doc-base/usr/share/doc/gcc-doc-base/changelog \
	   debian/gcc-doc-base/usr/share/doc/gcc-doc-base/changelog.Debian
	dh_lintian -i
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -pgcc-doc-base -- -v$(DOC_VER_BASE)
	dh_gencontrol -i --remaining-packages
	dh_md5sums -i
	dh_builddeb -i

binary: binary-indep binary-arch

# debug helper
show-versions:
	# cpp       $(CPP_VER)
	# gcc       $(GCC_VER)
	# gfortran  $(GFORTRAN_VER)
	# gnat      $(GNAT_VER)
	# gcj       $(GCJ_VER)

.PHONY: build install clean binary-indep binary-arch binary \
	debian/control $(GENFILES) show-versions
