summaryrefslogtreecommitdiff
path: root/debian/rules
diff options
context:
space:
mode:
Diffstat (limited to 'debian/rules')
-rwxr-xr-xdebian/rules318
1 files changed, 318 insertions, 0 deletions
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..59431c3
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,318 @@
+#!/usr/bin/make -f
+
+include /usr/share/dpkg/pkg-info.mk
+
+# at least LOCALTIME_{MIN,MAX} are affected by this, see #791362
+export TZ=UTC
+
+# these are used by executible dh_install files
+export fullversion := $(shell /bin/bash debian/config.debian --full-version)
+export archtriplet := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+export version := $(shell /bin/bash debian/config.debian --version)
+
+nextversion := $(shell /bin/bash debian/config.debian --next-version)
+srcdir := $(shell pwd)
+tmp = debian/tmp
+lib = usr/lib/$(archtriplet)/perl/$(version)
+baselib = usr/lib/$(archtriplet)/perl-base
+share = usr/share/perl/$(version)
+patchlevel = patchlevel-debian.h
+
+# we put the generated config.sh files here
+configdata = $(tmp)/usr/lib/$(archtriplet)/perl/debian-config-data-$(fullversion)
+
+# If nonempty, this will determine $Config{debian_abi} and Provides: entries
+# (otherwise, the Provides: entries will be generated by debian/mkprovides)
+perlabi =
+
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+
+# the static flavour is for perl-base;
+# shared is for libperl5.xx and debug goes into perl-debug
+flavours = static shared debug
+
+# Invoking PERL_TO_USE is expected to find its standard library
+# without additional command line arguments, so include lib/ here
+# in its definition.
+ifeq ($(DEB_HOST_GNU_TYPE), $(DEB_BUILD_GNU_TYPE))
+ PERL_TO_USE = $(srcdir)/build-static/perl -I $(srcdir)/build-static/lib
+else
+ PERL_TO_USE = $(shell which perl)
+ export TIME_HIRES_DONT_RUN_PROBES=1
+endif
+
+# this gets prepended to the patch names in patchlevel.h
+patchprefix = DEBPKG:
+
+# control file substitutions
+subst_upstream = -VUpstream-Version=$(DEB_VERSION_UPSTREAM)
+subst_next_upstream = -VNext-Upstream-Version=$(nextversion)
+
+ifeq (,$(perlabi))
+subst_perlapi = -Vperlapi:Provides="`$(PERL_TO_USE) debian/mkprovides`"
+else
+subst_perlapi = -Vperlapi:Provides="perlapi-$(perlabi)"
+endif
+
+# for cpan/Compress-Raw-Zlib
+export BUILD_ZLIB=False
+export ZLIB_INCLUDE=/usr/include
+export ZLIB_LIB=/usr/lib
+
+# for cpan/Compress-Raw-Bzip2
+export BUILD_BZIP2=0
+export BZIP2_INCLUDE=/usr/include
+export BZIP2_LIB=/usr/lib
+
+# disable tests declared upstream as not useful for packaging
+export PERL_BUILD_PACKAGING=1
+
+# Debian Bug #896827: riscv64 currently has excessively slow build hosts
+DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH)
+ifeq (riscv64,$(DEB_BUILD_ARCH))
+export PERL_TEST_TIME_OUT_FACTOR=3
+endif
+
+# not really quite this simple :)
+%:
+ dh $@
+
+verify-configure-stamp: update-configure-stamp
+ if ! diff -u Configure.orig Configure || ! diff -u config_h.SH.orig config_h.SH; then \
+ echo "Unexpected modifications after rebuilding Configure, aborting" 1>&2; \
+ echo '(See "A special note on patching Configure" in README.source for details)' 1>&2; \
+ exit 1; \
+ fi
+ touch $@
+
+# manual target documented in README.source
+update-configure: update-configure-stamp
+ # sanity check
+ test -f Configure
+
+update-configure-stamp:
+ mv Configure Configure.orig
+ mv config_h.SH config_h.SH.orig
+ ln -s regen-configure/U
+ ln -s regen-configure/.package
+ metaconfig -X .metaconf-exclusions.txt -m -L regen-configure/dist
+ ./Porting/config_h.pl # reorders config_h.SH
+ chmod +x config_h.SH Configure # placate t/porting/exec-bit.t
+ touch $@
+
+perl-config-%-stamp: verify-configure-stamp
+ $(SHELL) debian/config.debian --$*
+ touch $@
+
+perl-build-%-stamp: perl-config-%-stamp $(patchlevel)
+ ln -s ../$(patchlevel) build-$*/$(pathlevel)
+ if [ "$*" = "shared" ]; then \
+ ln -s libperl.so.$(fullversion) build-$*/libperl.so.$(version); \
+ ln -s libperl.so.$(version) build-$*/libperl.so; \
+ dh_auto_build --builddirectory=build-$* -- SHRPLDFLAGS='$$(LDDLFLAGS) -Wl,-soname,libperl.so.$(version)'; \
+ elif [ "$*" = "debug" ]; then \
+ dh_auto_build --builddirectory=build-$* -- perl; \
+ else \
+ dh_auto_build --builddirectory=build-$*; \
+ fi
+ touch $@
+
+perl-test-%-stamp: perl-build-%-stamp
+ dh_auto_test --builddirectory=build-$*
+ touch $@
+
+$(patchlevel): debian/patches/series
+ $(checkdir)
+ test -f $< # maintainer sanity check
+ debian/gen-patchlevel -p $(patchprefix) -v $(DEB_VERSION) $< > $@
+ # patchlevel_date in perlbug is extracted from patchlevel.h mtime, let's set
+ # it to highest mtime of Debian patches for build reproducibility
+ patchdate=`debian/gen-patchlevel -d`; touch --date="@$$patchdate" patchlevel.h
+
+override_dh_auto_configure-indep: perl-config-shared-stamp
+
+override_dh_auto_configure-arch: $(addsuffix -stamp,$(addprefix perl-config-,$(flavours)))
+
+override_dh_auto_build-indep: perl-build-shared-stamp
+
+override_dh_auto_build-arch: $(addsuffix -stamp,$(addprefix perl-build-,$(flavours)))
+
+override_dh_auto_test-indep: perl-test-shared-stamp
+
+override_dh_auto_test-arch: perl-test-static-stamp perl-test-shared-stamp
+
+perl-install-shared-stamp:
+ dh_auto_install --builddirectory=build-shared --destdir=debian/tmp
+ touch $@
+
+override_dh_auto_install-indep: perl-install-shared-stamp
+ # move to full version; symlinks to match @INC will be created after dh_install
+ mv $(tmp)/$(share) $(tmp)/usr/share/perl/$(fullversion)
+
+override_dh_auto_install-arch: perl-install-shared-stamp
+ # install the perl-base version of %Config early so we can mangle it below
+ for file in Config.pm Config_heavy.pl; do \
+ install -D -m 644 build-static/lib/$$file $(tmp)/$(baselib)/$$file; \
+ done
+
+ # store probed configuration to support cross builds
+ for flavour in $(flavours); do \
+ install -D -m 644 build-$$flavour/config.sh $(configdata)/config.sh.$$flavour; \
+ gzip -n $(configdata)/config.sh.$$flavour; \
+ done
+
+ifeq (,$(perlabi))
+else
+ # support \$Config{debian_abi} (see the Debian Perl policy)
+ for instdir in $(lib) $(baselib); do \
+ sed -i -e "/version =>/i\ debian_abi => '$(perlabi)'," \
+ $(tmp)/$$instdir/Config.pm; \
+ done
+endif
+
+ # avoid exposing the point release in libperl names, to
+ # avoid unnecessary breakage
+ # see #759989
+ for instdir in $(lib) $(baselib); do \
+ for file in Config.pm Config_heavy.pl; do \
+ $(PERL_TO_USE) -i -p \
+ -e 's/^(libperl='\''libperl\.so)\.$(fullversion)'\''/$$1.$(version)'\''/' \
+ $(tmp)/$$instdir/$$file; \
+ done; \
+ done
+
+ # remove dpkg-buildflags effects from %Config
+ # see #657853
+ for instdir in $(lib) $(baselib); do \
+ for file in Config.pm Config_heavy.pl; do \
+ if which dpkg-buildflags >/dev/null 2>&1; then \
+ for flag in $(shell dpkg-buildflags --get CPPFLAGS) \
+ $(shell dpkg-buildflags --get CFLAGS); do \
+ case "$$flag" in -fstack-protector) ;; \
+ *) export flag; $(PERL_TO_USE) -i -pe "/^(cc|cpp)flags/ and \
+ s/(['\s])\Q\$$ENV{flag}\E(['\s])/\1\2/ and s/ +/ /" \
+ $(tmp)/$$instdir/$$file ;; \
+ esac; done; \
+ for flag in $(shell dpkg-buildflags --get LDFLAGS); do \
+ export flag; $(PERL_TO_USE) -i -pe "/^ld(dl)?flags/ and \
+ s/(['\s])\Q\$$ENV{flag}\E(['\s])/\1\2/ and s/ +/ /" \
+ $(tmp)/$$instdir/$$file ; \
+ done; \
+ fi; \
+ done; \
+ done
+
+ # convert required header files
+ -cd /usr/include; \
+ $(srcdir)/debian/fake-config $(srcdir)/$(tmp)/$(lib) $(PERL_TO_USE) \
+ &$(srcdir)/build-static/utils/h2ph -a -d $(srcdir)/$(tmp)/$(lib) \
+ `cat $(srcdir)/debian/headers`
+
+ # fix up generated headers
+ $(PERL_TO_USE) debian/fixheaders $(tmp)/$(lib)
+
+ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+ # Verify that the headers are usable
+ for ph in `< debian/headers sed -e 's/\.h$$/.ph/'`; do \
+ if [ ! -f $(tmp)/$(lib)/$$ph ]; then \
+ echo "$$ph: missing"; else \
+ echo $$ph | $(PERL_TO_USE) debian/check-require $(tmp) \
+ || exit 1; \
+ fi; \
+ done
+endif
+ # remove some cruft
+ rm -f $(tmp)/$(lib)/.packlist
+
+ # relocate perl library
+ mv $(tmp)/$(lib)/CORE/libperl.so.$(fullversion) $(tmp)/usr/lib/$(archtriplet)
+
+ # replaced by dh_link symlinks
+ rm -f $(tmp)/$(lib)/CORE/libperl.so $(tmp)/$(lib)/CORE/libperl.so.$(version)
+
+ # move to full version; symlinks to match @INC will be created after dh_install
+ mv $(tmp)/$(lib) $(tmp)/usr/lib/$(archtriplet)/perl/$(fullversion)
+
+override_dh_install-indep:
+ # this puts files mostly where they belong
+ dh_install -i
+
+ ln -s $(fullversion) debian/perl-modules-$(version)/$(share)
+
+ # POD files are in perl-doc
+ rm -f debian/perl-modules-$(version)/usr/share/perl/$(fullversion)/pod/*
+
+ # except perldiag.pod which is needed by the diagnostics module
+ mv debian/perl-doc/usr/share/perl/$(fullversion)/pod/perldiag.pod \
+ debian/perl-modules-$(version)/usr/share/perl/$(fullversion)/pod
+
+override_dh_install-arch:
+ # this puts files mostly where they belong
+ dh_install -a
+
+ ln -s $(fullversion) debian/libperl$(version)/$(lib)
+
+ # switch man extensions to 1p and 3pm for vendor module installs
+ for instdir in debian/libperl$(version)/$(lib) debian/perl-base/$(baselib); do \
+ for file in Config.pm Config_heavy.pl; do \
+ $(PERL_TO_USE) -i -p \
+ -e 's/^(man1ext=).*/$$1'\''1p'\''/;' \
+ -e 's/^(man3ext=).*/$$1'\''3pm'\''/;' \
+ $$instdir/$$file; \
+ done; \
+ done
+
+ # put version+arch -specific binaries in libperl5.xx
+ for prefix in perl cpan; do \
+ mv debian/libperl$(version)/usr/bin/$$prefix \
+ debian/libperl$(version)/usr/bin/$${prefix}$(version)-$(archtriplet); \
+ done
+ sed -i "1 s,/usr/bin/perl,/usr/bin/perl$(version)-$(archtriplet)," \
+ debian/libperl$(version)/usr/bin/cpan$(version)-$(archtriplet)
+
+ # perl itself goes in perl-base
+ ln debian/perl-base/usr/bin/perl debian/perl-base/usr/bin/perl$(fullversion)
+ rm debian/perl/usr/bin/perl debian/perl/usr/bin/perl$(fullversion)
+
+ # debugging version has a different name
+ mv debian/perl-debug/usr/bin/perl debian/perl-debug/usr/bin/debugperl
+
+ # put a perldoc stub in the perl package
+ mv debian/perl/usr/bin/perl.perldoc debian/perl/usr/bin/perldoc
+
+ # rip pod out of -base modules
+ $(PERL_TO_USE) debian/stripdoc debian/perl-base
+
+ifeq (,$(findstring nocheck,$(DEB_BUILD_OPTIONS)))
+ # Verify that perl-base stays self contained
+
+ ( cd $(srcdir)/debian/perl-base && find . -name '*.p[hlm]' ) | \
+ $(PERL_TO_USE) $(srcdir)/debian/check-require $(srcdir)/debian/perl-base
+endif
+
+override_dh_installman-arch:
+ dh_installman -a
+ # put version+arch -specific manpages in libperl5.xx
+ for prefix in perl cpan; do \
+ mv debian/libperl$(version)/usr/share/man/man1/$$prefix.1 \
+ debian/libperl$(version)/usr/share/man/man1/$${prefix}$(version)-$(archtriplet).1; \
+ done
+
+override_dh_missing:
+ dh_missing --fail-missing
+
+override_dh_strip:
+ dh_strip --no-package=perl-debug --dbg-package=perl-debug
+
+# subst_perlapi uses build-static/perl, not present in arch-indep builds
+override_dh_gencontrol-indep:
+ dh_gencontrol -- $(subst_upstream) $(subst_next_upstream)
+
+override_dh_gencontrol-arch:
+ dh_gencontrol -- $(subst_upstream) $(subst_next_upstream) $(subst_perlapi)
+
+override_dh_installdocs-arch:
+ dh_installdocs --package=perl-debug --link-doc=perl
+ dh_installdocs --package=perl-base --doc-main-package=perl
+ dh_installdocs --remaining