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

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;" \
      < $(1) > $(2)
endef

# These are used for cross-compiling and for saving the configure script
# from having to guess our platform (since we know it already)
DEB_HOST_GNU_TYPE   ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

deb_cflags := -O2 -g

ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -g
endif
ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
	INSTALL_PROGRAM += -s
endif

configure_args = \
  --host=$(DEB_HOST_GNU_TYPE) \
  --build=$(DEB_BUILD_GNU_TYPE) \
  --disable-error-on-warning \
  --disable-silent-rules \
  --prefix=/usr

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:
# DISABLED, breaks version detection code in other packages
#	echo \
#	  '$(upstream_ver)-deb+$(deb_src_src_rev)-$(deb_src_rev)' > .version
	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:
	CFLAGS="$(deb_cflags)" ./configure ${configure_args}

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/effective-version.texi \
	 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)
	dh_auto_install

override_dh_install: $(autogen_install_files)
	rm -f debian/tmp/usr/lib/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

	perl -pi \
	  -e "s|^#!\s*/usr/bin/guile([^-])|#!$(deb_guile_bin_path)\$$1|o" \
	  -e ' if $$. == 1;' \
	  debian/$(deb_pkg_basename)-dev/usr/bin/guile-config \
	  debian/$(deb_pkg_basename)-dev/usr/bin/guile-snarf \
	  debian/$(deb_pkg_basename)-dev/usr/bin/guile-tools

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

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