#!/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 debian/.gitignore. # Fix deb_alt_priority below. SHELL := /bin/bash pf := set -o pipefail # Mess to check the exit status of shell commands. To use it, make sure # all shell invocations end with $(rc) to print $?, and then pass the # shell output through shout, which will strip off the exit status if # it's 0, or crash with diagnostic information if it's not. chop = $(wordlist 2,$(words $1),x $1) rc := echo " $$?" diesh = $(info $(call chop,$(1)))$(info exit: $(lastword $(1)))$(error ($2)) shout = $(if $(lastword $(1)),$(if $(subst 0,,$(lastword $(1))),$(call diesh,$(1),$(2)),$(call chop,$(1))),$(call diesh,$(1),$(2))) # Make sure the build process doesn't touch the real HOME. export HOME := $(CURDIR)/debian/no-trespassing # Keep this in sync with guile-doc.install expected_info := guile.info $(foreach n,1 2 3 4 5 6 7 8 9 10 11,guile.info-$(n)) joblimit := $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) ifeq (,$(joblimit)) joblimit := 1 endif # 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 dpkg-parsechangelog -S version; $(rc)) deb_src_ver := $(call shout,$(deb_src_ver),dpkg-parsechangelog failed) # 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) | sed -e 's/.*-//'; $(rc)) deb_src_rev := $(call shout,$(deb_src_rev),unable to get deb_src_rev) # Upstream version, everything before the last '-'. deb_src_ver := $(shell $(pf); echo $(deb_src_ver) | sed -e 's/-[^-]*//'; $(rc)) deb_src_ver := $(call shout,$(deb_src_ver),unable to get deb_src_ver) deb_src_src_rev := \ $(shell $(pf); echo $(deb_src_ver) | sed -re 's/.*\+([0-9]+).*/\1/'; $(rc)) deb_src_src_rev := $(call shout,$(deb_src_src_rev),unable to get deb_src_src_rev) upstream_ver := $(shell $(pf); echo $(deb_src_ver) | sed -e 's/\+.*//'; $(rc)) upstream_ver := $(call shout,$(upstream_ver),unable to get upstream_ver) # Upstream components deb_src_maj_ver := $(shell $(pf); echo $(upstream_ver) | cut -d. -f 1; $(rc)) deb_src_min_ver := $(shell $(pf); echo $(upstream_ver) | cut -d. -f 2; $(rc)) deb_src_mic_ver := $(shell $(pf); echo $(upstream_ver) | cut -d. -f 3; $(rc)) deb_src_maj_ver := $(call shout,$(deb_src_maj_ver),unable to get deb_src_maj_ver) deb_src_min_ver := $(call shout,$(deb_src_min_ver),unable to get deb_src_min_ver) deb_src_mic_ver := $(call shout,$(deb_src_mic_ver),unable to get deb_src_mic_ver) 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) ifneq (ok,$(shell x='$(deb_src_min_ver)'; [ "$${x}" -lt 1000 ] && echo ok;)) $(error ERROR: alternatives priority expects min version < 1000) endif # Up to and including some releases of 2.0.11, this was (incorrectly) # majminmic (i.e. 2011 for 2.0.11). As of 3.0, we switched to this, # i.e. 3.0 -> 3000, 3.1 -> 3001, 3.2 -> 3002, etc. deb_alt_priority := $(deb_src_maj_ver)$(shell printf "%03d" $(deb_src_min_ver)) multiarch := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH; $(rc)) multiarch := $(call shout,$(multiarch),dpkg-architecture failed) ifneq ($(multiarch),) march = $(multiarch)/ else march = endif deb_target_arch := $(shell dpkg-architecture -qDEB_TARGET_ARCH) ifneq (,$(filter $(deb_target_arch),armel armhf x32)) deb_config_args += --enable-jit=no endif ifneq (,$(filter $(deb_target_arch),alpha)) deb_config_args += --without-threads endif export DEB_CFLAGS_MAINT_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"' # https://debbugs.gnu.org/29464 export DEB_CFLAGS_MAINT_APPEND += -fno-stack-protector define checkdir dh_testdir debian/guile.postinst endef %: dh $@ --parallel --with autoreconf .PHONY: check-vars check-vars: @echo " upstream_ver:" $(upstream_ver) @echo "deb_pkg_basename:" $(deb_pkg_basename) @echo " deb_src_ver:" $(deb_src_ver) @echo " deb_src_eff_ver:" $(deb_src_eff_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) @echo "deb_alt_priority:" $(deb_alt_priority) # For now, assumes there are no "|" characters in the expansions. debian/autogen.sed: debian/rules debian/changelog echo "s|@UPSTREAM_VER@|$(upstream_ver)|g" > "$@.tmp" echo "s|@DEB_SRC_VER@|$(deb_src_ver)|g" >> "$@.tmp" echo "s|@DEB_SRC_MAJ_VER@|$(deb_src_maj_ver)|g" >> "$@.tmp" echo "s|@DEB_SRC_MIN_VER@|$(deb_src_min_ver)|g" >> "$@.tmp" echo "s|@DEB_SRC_MIC_VER@|$(deb_src_mic_ver)|g" >> "$@.tmp" echo "s|@DEB_SRC_EFF_VER@|$(deb_src_eff_ver)|g" >> "$@.tmp" echo "s|@DEB_PKG_BASENAME@|$(deb_pkg_basename)|g" >> "$@.tmp" echo "s|@DEB_ALT_PRIORITY@|$(deb_alt_priority)|g" >> "$@.tmp" echo "s|@MARCH@|$(march)|g" >> "$@.tmp" mv "$@.tmp" "$@" autogen_install_files := $(addprefix debian/, \ guile-$(deb_src_eff_ver).install \ guile-$(deb_src_eff_ver).links \ guile-$(deb_src_eff_ver).menu \ guile-$(deb_src_eff_ver).undocumented \ guile-$(deb_src_eff_ver)-dev.install \ guile-$(deb_src_eff_ver)-doc.README.Debian \ guile-$(deb_src_eff_ver)-doc.install \ guile-$(deb_src_eff_ver)-libs.install \ guile-$(deb_src_eff_ver)-libs.lintian-overrides) autogen_installdeb_files := $(addprefix debian/, \ guile-$(deb_src_eff_ver).postinst \ guile-$(deb_src_eff_ver).prerm \ guile-$(deb_src_eff_ver)-dev.postinst \ guile-$(deb_src_eff_ver)-dev.prerm \ guile-$(deb_src_eff_ver)-doc.postinst \ guile-$(deb_src_eff_ver)-doc.prerm \ guile-$(deb_src_eff_ver)-libs.postinst \ guile-$(deb_src_eff_ver)-libs.prerm \ guile-$(deb_src_eff_ver)-libs.triggers) debian/guile-$(deb_src_eff_ver).%: debian/guile.% debian/autogen.sed sed -f debian/autogen.sed "$<" > "$@.tmp" mv "$@.tmp" "$@" debian/guile-$(deb_src_eff_ver)-dev.%: debian/guile-dev.% debian/autogen.sed sed -f debian/autogen.sed "$<" > "$@.tmp" mv "$@.tmp" "$@" debian/guile-$(deb_src_eff_ver)-doc.%: debian/guile-doc.% debian/autogen.sed sed -f debian/autogen.sed "$<" > "$@.tmp" mv "$@.tmp" "$@" debian/guile-$(deb_src_eff_ver)-libs.%: debian/guile-libs.% debian/autogen.sed sed -f debian/autogen.sed "$<" > "$@.tmp" mv "$@.tmp" "$@" debian/guile-$(deb_src_eff_ver)-doc.postinst: DEB_PKG_BASENAME="$(deb_pkg_basename)" \ DEB_INFO_SUBDIR="$(deb_pkg_basename)" \ DEB_ALT_PRIORITY="$(deb_alt_priority)" \ debian/guile-doc.postinst.gen $(addprefix doc/ref/,$(expected_info)) \ > "$@".tmp mv "$@.tmp" "$@" override_dh_testdir: $(checkdir) override_dh_autoreconf: echo '$(upstream_ver)' > .version cp -a .version .tarball-version dh_autoreconf ./autogen.sh override_dh_auto_configure: dh_auto_configure -- --disable-error-on-warning --disable-rpath \ --program-suffix "-$(deb_src_eff_ver)" $(deb_config_args) # Because some of the bootstrapping files compile for a very long time # with no output, the buildds don't have per-package limits, and we # don't want to raise the global limit that high for the slower # architectures. override_dh_auto_build: timeout 10h bash \ -c 'while true; do echo "still going" 1>&2; sleep 600; done' & \ trap "kill $$!" EXIT \ && $(MAKE) -j "$(joblimit)" 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: -$(MAKE) -C prebuilt clean dh_clean $(autogen_install_files) $(autogen_installdeb_files) \ .tarball-version \ .version \ blarg-clean \ bootstrap/ice-9/ \ bootstrap/language/ \ bootstrap/srfi/ \ bootstrap/system/ \ debian/autogen.sed \ doc/r5rs/r5rs.info \ doc/ref/autoconf-macros.texi \ doc/ref/effective-version.texi \ doc/ref/guile.info \ doc/ref/guile.info-1 \ doc/ref/guile.info-10 \ doc/ref/guile.info-11 \ doc/ref/guile.info-2 \ doc/ref/guile.info-3 \ doc/ref/guile.info-4 \ doc/ref/guile.info-5 \ doc/ref/guile.info-6 \ doc/ref/guile.info-7 \ doc/ref/guile.info-8 \ doc/ref/guile.info-9 \ doc/ref/stamp-vti \ doc/ref/version.texi \ filesys-test-link.tmp \ guile-procedures.txt \ libguile/c-tokenize.c \ libguile/cpp-E.c \ libguile/cpp-SIG.c \ libguile/vm-operations.h # Info pages are installed to /usr/share/info/guile-X.Y/ via # guile-doc.install, and handled via update-alternatives. override_dh_installinfo: true override_dh_auto_install: $(autogen_install_files) make DESTDIR="$$(pwd)/debian/tmp" INSTALL='install -p' install rm -f debian/tmp/usr/lib/$(march)libguile*.la mkdir -p debian/tmp/usr/share/doc/$(deb_pkg_basename)-dev cp -a examples debian/tmp/usr/share/doc/$(deb_pkg_basename)-dev cd debian/tmp/usr/share/doc/$(deb_pkg_basename)-dev/examples \ && rm Makefile Makefile.in 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-arch: $(autogen_install_files) cd debian/tmp/usr/bin && mv -i guile-$(deb_src_eff_ver) guile cd debian/tmp/usr/share/aclocal && mv -i guile.m4 guile-$(deb_src_eff_ver).m4 dh_install -a dh_missing -a --fail-missing \ -Xusr/lib/$(march)guile/$(deb_src_eff_ver)/extensions/guile-readline.a \ -Xusr/lib/$(march)guile/$(deb_src_eff_ver)/extensions/guile-readline.la test -e $(gdb_ext) mkdir -p $(gdb_ext_dir) mv $(gdb_ext) $(gdb_ext_dir) override_dh_install-indep: $(autogen_install_files) # Glob should match the one in debian/guile-doc.install test "$(sort $(expected_info))" = \ "$(sort $(shell cd debian/tmp/usr/share/info && ls guile.info*))" dh_install -i dh_missing -i --fail-missing \ -Xusr/bin/guile-$(deb_src_eff_ver) \ -Xusr/share/info/dir \ -Xusr/share/info/r5rs.info \ -Xusr/lib/$(march)guile/$(deb_src_eff_ver)/extensions/guile-readline.a \ -Xusr/lib/$(march)guile/$(deb_src_eff_ver)/extensions/guile-readline.la \ -Xusr/share/aclocal/guile.m4 test ! -e debian/guile-$(deb_src_eff_ver)-doc/usr/share/info/dir override_dh_installdeb: $(autogen_installdeb_files) dh_installdeb