#!/usr/bin/make -f

include /usr/share/dpkg/architecture.mk
include /usr/share/dpkg/pkg-info.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~
DOC_VER_8   := 8.3.0-1~
DOC_VER_9   := 9.2.0-1~
DOC_VER_10   := 10.1.0-1~
DOC_VER_11   := 11.2.0-1~
DOC_VER_12   := 12.2.0-1~
DOC_VER_13   := 13.1.0-1~
DOC_VER_14   := 14.2.0-1~

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

VDEF         := $(DEB_VERSION)
VMAJOR       := $(shell echo $(VDEF) | sed -e 's/.*:\([0-9]*\).*/\1/g')
VLOCAL       := $(shell echo $(VDEF) | sed -n -e 's/[^~]*\(~.*\)/\1/;T;p')
#DEBIAN_EPOCH := 5
DEBIAN_EPOCH := $(shell echo $(VDEF) | sed -e 's/:.*//g')

# when adding new version, set the sustracted value to the version of
# the latest released gcc-doc-defaults package.
PKG_VER_4.4 := 4.4.7-$(shell expr $(VMAJOR) - 5)$(VLOCAL)
PKG_VER_4.6 := 4.6.4-$(shell expr $(VMAJOR) - 6)$(VLOCAL)
PKG_VER_4.7 := 4.7.4-$(shell expr $(VMAJOR) - 10)$(VLOCAL)
PKG_VER_4.8 := 4.8.4-$(shell expr $(VMAJOR) - 14)$(VLOCAL)
PKG_VER_4.9 := 4.9.2-$(shell expr $(VMAJOR) - 14)$(VLOCAL)
PKG_VER_5   := 5.1.0-$(shell expr $(VMAJOR) - 14)$(VLOCAL)
PKG_VER_6   := 6.4.0-$(shell expr $(VMAJOR) - 16)$(VLOCAL)
PKG_VER_7   := 7.2.0-$(shell expr $(VMAJOR) - 15)$(VLOCAL)
PKG_VER_8   := 8.3.0-$(shell expr $(VMAJOR) - 17)$(VLOCAL)
PKG_VER_9   := 9.2.0-$(shell expr $(VMAJOR) - 18)$(VLOCAL)
PKG_VER_10   := 10.1.0-$(shell expr $(VMAJOR) - 20)$(VLOCAL)
PKG_VER_11   := 11.2.0-$(shell expr $(VMAJOR) - 22)$(VLOCAL)
PKG_VER_12   := 12.2.0-$(shell expr $(VMAJOR) - 25)$(VLOCAL)
PKG_VER_13   := 13.1.0-$(shell expr $(VMAJOR) - 26)$(VLOCAL)
PKG_VER_14   := 14.2.0-$(shell expr $(VMAJOR) - 27)$(VLOCAL)

PKG_VER_BASE := $(PKG_VER_14)

# Keep in sync with gcc-defaults, gccgo doesn't exist on all archs
all_archs_mips = mips mipsel mipsn32 mipsn32el mips64 mips64el mipsr6 mipsr6el mipsn32r6 mipsn32r6el mips64r6 mips64r6el
go_archs = alpha amd64 arm64 armel armhf i386 ia64 \
        $(all_archs_mips) \
        powerpc ppc64 ppc64el riscv64 s390 s390x sparc sparc64 x32

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

BASES_ALL := cpp gcc gfortran gnat 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)
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)))
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): %-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

override_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)>
	# VLOCAL    <$(VLOCAL)>
	# cpp       $(CPP_VER)
	# gcc       $(GCC_VER)
	# gfortran  $(GFORTRAN_VER)
	# gnat      $(GNAT_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)
	# pkg-ver   $(PKG_VER_7)
	# pkg-ver   $(PKG_VER_8)
	# pkg-ver   $(PKG_VER_9)
	# pkg-ver   $(PKG_VER_10)
	# pkg-ver   $(PKG_VER_11)
	# pkg-ver   $(PKG_VER_12)
	# pkg-ver   $(PKG_VER_13)
	# pkg-ver   $(PKG_VER_14)

.PHONY: show-versions
