#!/usr/bin/make -f

# uncomment for debugging
# export DH_VERBOSE=1

# The version for gcc-x.y-doc, used in "Depends:" field.
DOC_VER_4.4 := 4.4.7-4
DOC_VER_4.6 := 4.6.4-3
DOC_VER_4.7 := 4.7.4-1
DOC_VER_4.8 := 4.8.3-1
DOC_VER_4.9 := 4.9.1-2

# The version for binary packages: gcc-doc-base, gcc-doc, etc.
# This should be updated for every upload.
DEBIAN_EPOCH := 5
PKG_VER_4.4 := 4.4.7-9
PKG_VER_4.6 := 4.6.4-8
PKG_VER_4.7 := 4.7.4-4
PKG_VER_4.8 := 4.8.3-5
PKG_VER_4.9 := 4.9.1-3
PKG_VER_BASE := $(PKG_VER_4.8)

# gccgo doesn't exist on all archs
go_archs = amd64 arm64 armel armhf i386 ia64 mips mipsel \
	   powerpc ppc64 ppc64el s390 s390x x32

no_packages :=
ifeq (,$(filter $(DEB_HOST_ARCH),$(go_archs)))
  no_packages += gccgo
endif

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

# Some stub info files, with direntry but no real content, for
# info(1) to work.
GENFILES += $(patsubst %,info/%.texi, $(BASES))
GENFILES_INFO := $(patsubst %,info/%.info, $(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)
ifneq (,$(filter $(DEB_HOST_ARCH),$(go_archs)))
  GCCGO_VER    := $(call get_default_version,gccgo)
endif

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)))
ifneq (,$(filter $(DEB_HOST_ARCH),$(go_archs)))
  GCCGO_DEP_VER := gccgo-$(GCCGO_VER)-doc (>= $(DOC_VER_$(GCCGO_VER)))
endif

# 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))

SEDCMD_GO = s/%GCCGO_ARCHS%/$(go_archs)/g;

# 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):$(PKG_VER_$($(call uc, $(1))_VER));
# all commands:
SETTING_VERSIONS = $(foreach base,$(BASES), $(call set_version, $(base)))

# new-style dh default rule
%:
	dh $@

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

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

$(GENFILES_INFO): %.info : %.texi
	dh_testdir
	makeinfo $< -o $@

override_dh_auto_build: debian/control $(GENFILES) $(GENFILES_INFO)

override_dh_clean:
	dh_clean $(GENFILES) $(GENFILES_INFO)

override_dh_installchangelogs-arch:
	dh_installchangelogs -a
	# These packages should be treated as non-native.
	for packname in $(BASES); do \
	  mv debian/$$packname-doc/usr/share/doc/$$packname-doc/changelog debian/$$packname-doc/usr/share/doc/$$packname-doc/changelog.Debian; \
	done

override_dh_installchangelogs-indep:
	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

override_dh_installdocs-arch:
	dh_installdocs -a -Ngcc-doc-base -A debian/README

ovverride_dh_installdocs-indep:
	dh_installdocs -pgcc-doc-base
	dh_installdocs -i --remaining-packages -A debian/README

override_dh_gencontrol-arch:
	# call dh_gencontrol one at a time for *-doc packages
	$(SETTING_VERSIONS)
	dh_gencontrol -a --remaining-packages

override_dh_gencontrol-indep:
	dh_gencontrol -pgcc-doc-base -- -v$(PKG_VER_BASE)
	dh_gencontrol -i --remaining-packages

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

.PHONY: show-versions
