#!/usr/bin/make -f

# New stable upstream release TODO:
#   s/A.B/C.D/go in debian/control.
#   Adjust debian/changelog.
#   Adjust "ver" variables below.
#   Adjust debian/guile-libs.lintian.
#   Adjust guile-X.Y.info patch.
#   Adjust debian/.gitignore.

SHELL := /bin/bash

pf := set -o pipefail

# Make sure the build process doesn't touch the real HOME.
export HOME := $(CURDIR)/debian/no-trespassing

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

# The version from the changelog (i.e. 2.0.3-1)
deb_src_ver := $(shell $(pf); dpkg-parsechangelog | egrep '^Version:')
deb_src_ver := $(shell $(pf); echo $(deb_src_ver) | perl -pe 's/Version:\s+//o')

# The Debian revision, everything after the last '-' (i.e. the 1 from 2.0.3-1)
deb_src_rev := $(shell $(pf); echo $(deb_src_ver) | perl -pe 's/.*-//o')

# Upstream version, everything before the last '-'.
deb_src_ver := $(shell $(pf); echo $(deb_src_ver) | perl -pe 's/-[^-]*//o')

upstream_ver := $(shell $(pf); echo $(deb_src_ver) | perl -pe 's/-[^-]*//o')
deb_src_src_rev := \
  $(shell $(pf); echo $(upstream_ver) | perl -pe 's/.*\+(\d+).*/\1/o')
upstream_ver := $(shell $(pf); echo $(upstream_ver) | perl -pe 's/\+.*//o')

# Upstream components
deb_src_maj_ver := \
  $(shell $(pf); echo $(upstream_ver) | perl -pe 's/(\d+).*/\1/o')
deb_src_min_ver := \
  $(shell $(pf); echo $(upstream_ver) | perl -pe 's/\d+\.(\d+).*/\1/o')
deb_src_mic_ver := \
  $(shell $(pf); echo $(upstream_ver) | perl -pe 's/\d+\.\d+\.(\d+).*/\1/o')

deb_src_eff_ver := $(deb_src_maj_ver).$(deb_src_min_ver)
deb_pkg_basename := guile-$(deb_src_eff_ver)
deb_guile_bin_path := /usr/bin/guile-$(deb_src_eff_ver)

multiarch := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
ifneq ($(multiarch),)
  march = $(multiarch)/
else
  march =
endif

define deb_sub
  perl -p \
    -e "s|\@UPSTREAM_VER\@|$(upstream_ver)|go;" \
    -e "s|\@DEB_SRC_VER\@|$(deb_src_ver)|go;" \
    -e "s|\@DEB_SRC_MAJ_VER\@|$(deb_src_maj_ver)|go;" \
    -e "s|\@DEB_SRC_MIN_VER\@|$(deb_src_min_ver)|go;" \
    -e "s|\@DEB_SRC_MIC_VER\@|$(deb_src_mic_ver)|go;" \
    -e "s|\@DEB_SRC_EFF_VER\@|$(deb_src_eff_ver)|go;" \
    -e "s|\@DEB_PKG_BASENAME\@|$(deb_pkg_basename)|go;" \
    -e "s|\@MARCH\@|$(march)|go;" \
      < $(1) > $(2)
endef

export DEB_CFLAGS_APPEND := \
  -DPACKAGE_PACKAGER='"Debian"' \
  -DPACKAGE_PACKAGER_VERSION='"$(upstream_ver)-deb+$(deb_src_src_rev)-$(deb_src_rev)"' \
  -DPACKAGE_PACKAGER_BUG_REPORTS='"http://www.debian.org/Bugs/Reporting"'

define checkdir
  dh_testdir debian/guile.postinst
endef

%:
	dh $@ --parallel --with autoreconf

.PHONY: buildpackage
buildpackage:
	$(checkdir)
	dpkg-buildpackage -D -us -uc -rfakeroot -i'\.git|\.pc'

.PHONY: check-vars
check-vars:
	@echo "    UPSTREAM_VER:" $(upstream_ver)
	@echo "     DEB_SRC_VER:" $(deb_src_ver)
	@echo " DEB_SRC_MAJ_VER:" $(deb_src_maj_ver)
	@echo " DEB_SRC_MIN_VER:" $(deb_src_min_ver)
	@echo " DEB_SRC_MIC_VER:" $(deb_src_mic_ver)
	@echo " DEB_SRC_EFF_VER:" $(deb_src_eff_ver)
	@echo "DEB_PKG_BASENAME:" $(deb_pkg_basename)
	@echo
	@echo "deb_pkg_basename:" $(deb_pkg_basename)
	@echo "     deb_src_ver:" $(deb_src_ver)
	@echo " deb_src_maj_ver:" $(deb_src_maj_ver)
	@echo " deb_src_min_ver:" $(deb_src_min_ver)
	@echo " deb_src_mic_ver:" $(deb_src_mic_ver)
	@echo " deb_src_src_rev:" $(deb_src_src_rev)
	@echo "     deb_src_rev:" $(deb_src_rev)


autogen_install_files := $(addprefix debian/, \
  guile-$(deb_src_eff_ver).install \
  guile-$(deb_src_eff_ver).menu \
  guile-$(deb_src_eff_ver).postinst \
  guile-$(deb_src_eff_ver).prerm \
  guile-$(deb_src_eff_ver).undocumented \
  guile-$(deb_src_eff_ver)-dev.install \
  guile-$(deb_src_eff_ver)-dev.lintian-overrides \
  guile-$(deb_src_eff_ver)-doc.info \
  guile-$(deb_src_eff_ver)-doc.install \
  guile-$(deb_src_eff_ver)-libs.README.Debian \
  guile-$(deb_src_eff_ver)-libs.install \
  guile-$(deb_src_eff_ver)-libs.lintian-overrides \
  guile-$(deb_src_eff_ver)-libs.postinst \
  guile-$(deb_src_eff_ver)-libs.prerm \
  guile-$(deb_src_eff_ver)-libs.triggers)

$(autogen_install_files): debian/rules

debian/guile-$(deb_src_eff_ver).%: debian/guile.%
	$(call deb_sub,$<,$@)
debian/guile-$(deb_src_eff_ver)-dev.%: debian/guile-dev.%
	$(call deb_sub,$<,$@)
debian/guile-$(deb_src_eff_ver)-doc.%: debian/guile-doc.%
	$(call deb_sub,$<,$@)
debian/guile-$(deb_src_eff_ver)-libs.%: debian/guile-libs.%
	$(call deb_sub,$<,$@)

override_dh_testdir:
	$(checkdir)

override_dh_autoreconf:
	echo '$(upstream_ver)' > .version
	cp -a .version .tarball-version
	cd doc/ref && ln -sf guile.texi guile-$(deb_src_eff_ver).texi
	dh_autoreconf ./autogen.sh

override_dh_auto_configure:
	dh_auto_configure -- --disable-error-on-warning
        # Let libtool forget about hardcoding -rpath into the libraries
	sed -i -e "s/^[[:space:]]*hardcode_into_libs=.*/hardcode_into_libs=no/" libtool

override_dh_auto_clean:
        # If Makefile doesn't exist GNUmakefile will abort on distclean.
	if test -e Makefile; then make distclean; fi

override_dh_clean:
	dh_clean $(autogen_install_files) \
	 .tarball-version \
	 .version \
	 doc/ref/autoconf-macros.texi \
	 doc/ref/guile-$(deb_src_eff_ver).info \
	 doc/ref/guile-$(deb_src_eff_ver).info-* \
	 doc/ref/guile-$(deb_src_eff_ver).texi \
	 doc/ref/stamp-vti \
	 doc/ref/version.texi \
	 libguile/cpp-E.c \
	 libguile/cpp-SIG.c \
	 tmp1

override_dh_auto_install: $(autogen_install_files)
	make DESTDIR="$$(pwd)/debian/tmp" INSTALL='install -p' install

gdb_ext := \
  debian/$(deb_pkg_basename)-libs/usr/lib/$(march)libguile-$(deb_src_eff_ver).so*-gdb.scm
gdb_ext_dir := debian/$(deb_pkg_basename)-dev/usr/share/gdb/auto-load


override_dh_install: $(autogen_install_files)
	rm -f debian/tmp/usr/lib/$(march)libguile*.la
	if test -e debian/tmp/usr/share/man/man1/guile.1; then \
	  mv debian/tmp/usr/share/man/man1/guile.1 \
	    debian/tmp/usr/share/man/man1/guile-$(deb_src_eff_ver).1; \
	fi
	dh_install --fail-missing \
	  -Xusr/share/info/dir \
	  -Xusr/share/info/r5rs.info
	test ! -e debian/guile-$(deb_src_eff_ver)-doc/usr/share/info/dir

	sed -i'' '0,\|/usr/bin/guile|s||$(deb_guile_bin_path)|' \
	  debian/$(deb_pkg_basename)-dev/usr/bin/guile-config

	sed -i'' '0,\|\$${exec_prefix}/bin/guile|s||$(deb_guile_bin_path)|' \
	  debian/$(deb_pkg_basename)-dev/usr/bin/guild

	mkdir -p debian/$(deb_pkg_basename)-libs/usr/lib/$(march)$(deb_pkg_basename)/bin
	cp -a debian/$(deb_pkg_basename)/usr/bin/guile \
	  debian/$(deb_pkg_basename)-libs/usr/lib/$(march)$(deb_pkg_basename)/bin

	cd debian/$(deb_pkg_basename)/usr/bin/ \
	  && mv guile guile-$(deb_src_eff_ver)

	test -e $(gdb_ext)
	mkdir -p $(gdb_ext_dir)
	mv $(gdb_ext) $(gdb_ext_dir)
