#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk

# 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.4-1~
DOC_VER_4.9 := 4.9.2-1~
DOC_VER_5   := 5.1.0-1~
DOC_VER_6   := 6.4.0-1~
DOC_VER_7   := 7.2.0-1~

# The version for binary packages: gcc-doc-base, gcc-doc, etc.
# Automatic set debian revision, adapted from gcc-defaults' rules.

VDEF         := $(strip $(shell dpkg-parsechangelog | awk -F' ' '/^Version:/ {print $$NF}'))
VMAJOR       := $(shell echo $(VDEF) | awk -F: '{print $$2}' | awk -F. '{print $$1}')
#DEBIAN_EPOCH := 5
DEBIAN_EPOCH := $(shell echo $(VDEF) | awk -F: '{print $$1}')

#PKG_VER_4.4 := 4.4.7-10
#PKG_VER_4.6 := 4.6.4-9
#PKG_VER_4.7 := 4.7.4-5
#PKG_VER_4.8 := 4.8.4-1
#PKG_VER_4.9 := 4.9.2-1
#PKG_VER_5   := 5.1.0-1
#PKG_VER_6   := 6.1.0-1

PKG_VER_4.4 := 4.4.7-$(shell expr $(VMAJOR) - 5)
PKG_VER_4.6 := 4.6.4-$(shell expr $(VMAJOR) - 6)
PKG_VER_4.7 := 4.7.4-$(shell expr $(VMAJOR) - 10)
PKG_VER_4.8 := 4.8.4-$(shell expr $(VMAJOR) - 14)
PKG_VER_4.9 := 4.9.2-$(shell expr $(VMAJOR) - 14)
PKG_VER_5   := 5.1.0-$(shell expr $(VMAJOR) - 14)
PKG_VER_6   := 6.4.0-$(shell expr $(VMAJOR) - 16)
PKG_VER_7   := 7.2.0-$(shell expr $(VMAJOR) - 16)
PKG_VER_7   := 7.2.0-$(shell expr $(VMAJOR) - 15)

#PKG_VER_BASE := $(PKG_VER_4.9)
PKG_VER_BASE := $(PKG_VER_7)

# Keep in sync with gcc-defaults, gccgo doesn't exist on all archs
go_archs = alpha amd64 arm64 armel armhf i386 ia64 \
        mips mips64 mips64el mipsel \
        powerpc powerpcspe ppc64 ppc64el s390 s390x sparc sparc64 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/%-default.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,gnat)
ifneq (,$(filter $(DEB_HOST_ARCH),$(go_archs)))
  GCCGO_VER    := $(call get_default_version,gccgo)
  # FIXME: docs for 8 are not yet packaged
  GCCGO_VER    := $(GCC_VER)
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)))
  # FIXME: docs for 8 are not yet packaged
  GCCGO_DEP_VER := $(GCC_DEP_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): %-default.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:
	# VDEF      <$(VDEF)>
	# EPOCH     <$(DEBIAN_EPOCH)>
	# VMAJOR    <$(VMAJOR)>
	# cpp       $(CPP_VER)
	# gcc       $(GCC_VER)
	# gfortran  $(GFORTRAN_VER)
	# gnat      $(GNAT_VER)
	# gcj       $(GCJ_VER)
	# gccgo     $(GCCGO_VER)
	# pkg-ver   $(PKG_VER_4.4)
	# pkg-ver   $(PKG_VER_4.6)
	# pkg-ver   $(PKG_VER_4.7)
	# pkg-ver   $(PKG_VER_4.8)
	# pkg-ver   $(PKG_VER_4.9)
	# pkg-ver   $(PKG_VER_5)
	# pkg-ver   $(PKG_VER_6)

.PHONY: show-versions
