view contrib/packaging/debian/rules @ 47305:33e7508b0ae9

hg-cpython: fix new occuring TypeError dd339191f2dc introduced a minor refactoring of error types that highlighted a fragile error creation mechanism that was in place in the Rust `MixedIndex`. `PyErr::from_instance` also accepts a Python class, as long as it's an `Exception` class. Before the aforementioned commit, we never ran into a case where this duck-typing mechanism failed. We rectify this behavior by doing the instantiation ourselves. Differential Revision: https://phab.mercurial-scm.org/D10764
author Raphaël Gomès <rgomes@octobus.net>
date Fri, 21 May 2021 17:37:53 +0200
parents 2fd5e0054dd9
children 8d7eaff92f9c
line wrap: on
line source

#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
# export DH_VERBOSE=1

# By default we build a .deb where the native components are built with the
# current "default" version of py3 on the build machine. If you wish to build a
# .deb that has native components built for multiple versions of py3:
#
#   1. install python3.x and python3.x-dev for each version you want
#   2. set DEB_HG_MULTI_VERSION=1 or DEB_HG_PYTHON_VERSIONS in your environment
#      (if both are set, DEB_HG_PYTHON_VERSIONS has precedence)
#
# If you choose `DEB_HG_MULTI_VERSION=1`, it will build for every "supported"
# version of py3 that's installed on the build machine. This may not be equal to
# the actual versions that are installed, see the comment above where we set
# DEB_HG_PYTHON_VERSIONS below. If you choose to set `DEB_HG_PYTHON_VERSIONS`
# yourself, set it to a space-separated string of python version numbers, like:
#   DEB_HG_PYTHON_VERSIONS="3.7 3.8" make deb
DEB_HG_MULTI_VERSION?=0

# Set to 1 to make /usr/bin/hg a symlink to chg, and move hg to
# /usr/lib/mercurial/hg.
DEB_HG_CHG_BY_DEFAULT?=0

CPUS=$(shell cat /proc/cpuinfo | grep -E ^processor | wc -l)

# By default, only build for the version of python3 that the system considers
# the 'default' (which should be the one invoked by just running 'python3'
# without a minor version). If DEB_HG_PYTHON_VERSIONS is set, this is ignored.
ifeq ($(DEB_HG_MULTI_VERSION), 1)
	# If we're building for multiple versions, use all of the "supported" versions
	# on the build machine. Note: the mechanism in use here (`py3versions`) is the
	# recommended one, but it relies on a file written by the python3-minimal
	# package, and this file is not dynamic and does not account for manual
	# installations, just the ones that would be installed by `python3-all`. This
	# includes the `-i` flag, which claims it's to list all "installed" versions,
	# but it doesn't. This was quite confusing, hence this tale of woe. :)
	DEB_HG_PYTHON_VERSIONS?=$(shell py3versions -vs)
else
	# If we're building for only one version, identify the "default" version on
	# the build machine and use that when building; this is just so that we don't
	# have to duplicate the rules below for multi-version vs. single-version. The
	# shebang line will still be /usr/bin/python3 (no minor version).
	DEB_HG_PYTHON_VERSIONS?=$(shell py3versions -vd)
endif

ifeq ($(DEB_HG_CHG_BY_DEFAULT), 1)
	# Important: the "real" hg must have a 'basename' of 'hg'. Otherwise, hg
	# behaves differently when setting $HG and breaks aliases that use that.
	export HGPATH=/usr/lib/mercurial/hg
endif

export HGPYTHON3=1
export PYTHON=python3

%:
	dh $@ --with python3

# Note: testing can be disabled using the standard `DEB_BUILD_OPTIONS=nocheck`
override_dh_auto_test:
	http_proxy='' dh_auto_test -- TESTFLAGS="-j$(CPUS)"

override_dh_python3:
	dh_python3 --shebang=/usr/bin/python3

override_dh_auto_clean:
	$(MAKE) cleanbutpackages
	$(MAKE) -C contrib/chg clean

override_dh_auto_build:
	$(MAKE) all
	$(MAKE) -C contrib/chg all

# Build the native extensions for a specfic python3 version (which must be
# installed on the build machine).
install-python%:
	python$* setup.py install --root "$(CURDIR)"/debian/mercurial --install-layout=deb

# Build the final package. This rule has a dependencies section that causes the
# native extensions to be compiled for every version of python3 listed in
# DEB_HG_PYTHON_VERSIONS.
override_dh_auto_install: $(DEB_HG_PYTHON_VERSIONS:%=install-python%)
	# chg
	make -C contrib/chg \
		DESTDIR="$(CURDIR)"/debian/mercurial \
		PREFIX=/usr \
		install
	make install-doc PREFIX="$(CURDIR)"/debian/mercurial/usr
	cp contrib/hg-ssh "$(CURDIR)"/debian/mercurial/usr/bin
	mkdir -p "$(CURDIR)"/debian/mercurial/usr/share/mercurial
	cp contrib/hgk "$(CURDIR)"/debian/mercurial/usr/share/mercurial
	mkdir -p "$(CURDIR)"/debian/mercurial/etc/mercurial/hgrc.d/
	cp contrib/packaging/debian/*.rc "$(CURDIR)"/debian/mercurial/etc/mercurial/hgrc.d/
	# completions
	mkdir -p "$(CURDIR)"/debian/mercurial/usr/share/bash-completion/completions
	cp contrib/bash_completion "$(CURDIR)"/debian/mercurial/usr/share/bash-completion/completions/hg
	mkdir -p "$(CURDIR)"/debian/mercurial/usr/share/zsh/vendor-completions
	cp contrib/zsh_completion "$(CURDIR)"/debian/mercurial/usr/share/zsh/vendor-completions/_hg
	if [ "$(DEB_HG_CHG_BY_DEFAULT)" -eq 1 ]; then \
		mkdir -p "$(CURDIR)"/debian/mercurial/usr/lib/mercurial; \
		mv "$(CURDIR)"/debian/mercurial/usr/bin/hg "$(CURDIR)"/debian/mercurial/usr/lib/mercurial/hg; \
		ln -s chg "$(CURDIR)"/debian/mercurial/usr/bin/hg; \
	fi