#!/usr/bin/make -f include /usr/share/dpkg/pkg-info.mk export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-pie # source equivalent of nodejs -e 'console.log(process.versions.modules)' ABI = $(shell awk '/^\#define NODE_MODULE_VERSION/ {print $$3}' src/node_version.h) # archs ARCHS := amd64 arm64 armhf i386 kfreebsd-i386 kfreebsd-amd64 mips mips64el mips64r6el mipsel ppc64 ppc64el s390x # branch BRANCH := $(word 1, $(subst .,$(space), $(DEB_UPSTREAM_VERSION))) LANG=C export LANG DEB_CONFIGURE_NORMAL_ARGS = DEB_CONFIGURE_EXTRA_FLAGS = \ --verbose \ --without-npm \ --shared \ --shared-zlib \ --shared-cares \ --shared-brotli \ --with-intl=system-icu \ --prefix=/usr \ --openssl-use-def-ca-store \ --arch-triplet=$(DEB_HOST_MULTIARCH) \ --node-relative-path="lib/$(DEB_HOST_MULTIARCH)/nodejs:share/nodejs:lib/nodejs" DEB_CONFIGURE_EXTRA_FLAGS += --shared-nghttp2 DEB_CONFIGURE_EXTRA_FLAGS += --shared-libuv DEB_CONFIGURE_EXTRA_FLAGS += --shared-openssl # map HOST ARCH AND OS, and if unknown let upstream guess destCpu = destCpu := $(or $(destCpu),$(if $(filter i386,$(DEB_HOST_ARCH)),ia32)) destCpu := $(or $(destCpu),$(if $(filter x32,$(DEB_HOST_ARCH)),x32)) destCpu := $(or $(destCpu),$(if $(filter kfreebsd-i386,$(DEB_HOST_ARCH)),ia32)) destCpu := $(or $(destCpu),$(if $(filter hurd-i386,$(DEB_HOST_ARCH)),ia32)) destCpu := $(or $(destCpu),$(if $(filter amd64,$(DEB_HOST_ARCH)),x64)) destCpu := $(or $(destCpu),$(if $(filter kfreebsd-amd64,$(DEB_HOST_ARCH)),x64)) destCpu := $(or $(destCpu),$(if $(filter armel,$(DEB_HOST_ARCH)),unsupported)) destCpu := $(or $(destCpu),$(if $(filter armhf,$(DEB_HOST_ARCH)),arm)) destCpu := $(or $(destCpu),$(if $(filter aarch64,$(DEB_HOST_ARCH)),arm64)) destCpu := $(or $(destCpu),$(if $(filter mipsel,$(DEB_HOST_ARCH)),mipsel)) destCpu := $(or $(destCpu),$(if $(filter mips64el,$(DEB_HOST_ARCH)),mips64el)) destCpu := $(or $(destCpu),$(if $(filter mips64r6el,$(DEB_HOST_ARCH)),mips64el)) destCpu := $(or $(destCpu),$(if $(filter mips,$(DEB_HOST_ARCH)),mips)) destCpu := $(or $(destCpu),$(if $(filter powerpc,$(DEB_HOST_ARCH)),unsupported)) destCpu := $(or $(destCpu),$(if $(filter ppc64,$(DEB_HOST_ARCH)),ppc64)) destCpu := $(or $(destCpu),$(if $(filter s390x,$(DEB_HOST_ARCH)),s390x)) # solaris freebsd openbsd linux destOs = destOs := $(or $(destOs),$(if $(filter linux,$(DEB_HOST_ARCH_OS)),linux)) destOs := $(or $(destOs),$(if $(filter kfreebsd,$(DEB_HOST_ARCH_OS)),freebsd)) ifneq (, $(destOs)) DEB_CONFIGURE_EXTRA_FLAGS += --dest-os=$(destOs) endif ifeq (unsupported, $(destCpu)) $(error "nodejs cannot run on $(DEB_HOST_ARCH), please consult maintainers") endif ifneq (, $(destCpu)) DEB_CONFIGURE_EXTRA_FLAGS += --dest-cpu=$(destCpu) endif ifeq (freebsd, $(destOs)) LDFLAGS += -lbsd endif # mips and fpu # https://github.com/paul99/v8m-rb/issues/192 # https://bugs.debian.org/800410 # mips and big binaries # http://gcc.gnu.org/wiki/DebugFission # https://bugs.debian.org/829139 # use r2, which is the supported variant for these architectures # https://lists.debian.org/debian-mips/2016/07/msg00000.html ifeq (mipsel, $(DEB_HOST_ARCH)) DEB_CONFIGURE_EXTRA_FLAGS += --with-mips-arch-variant=r2 --with-mips-fpu-mode=fpxx CFLAGS += -gsplit-dwarf CPPFLAGS += -gsplit-dwarf endif ifeq (mips, $(DEB_HOST_ARCH)) DEB_CONFIGURE_EXTRA_FLAGS += --with-mips-arch-variant=r2 --with-mips-fpu-mode=fpxx CFLAGS += -gsplit-dwarf CPPFLAGS += -gsplit-dwarf endif # mips32r1 or greater, detected at runtime ifeq (mips64el, $(DEB_HOST_ARCH)) DEB_CONFIGURE_EXTRA_FLAGS += --with-mips-arch-variant=rx --with-mips-fpu-mode=fp64 CFLAGS += -gsplit-dwarf CPPFLAGS += -gsplit-dwarf endif ifeq (mips64r6el, $(DEB_HOST_ARCH)) DEB_CONFIGURE_EXTRA_FLAGS += --with-mips-arch-variant=rx --with-mips-fpu-mode=fp64 CFLAGS += -gsplit-dwarf CPPFLAGS += -gsplit-dwarf endif ifeq (armel, $(DEB_HOST_ARCH)) DEB_CONFIGURE_EXTRA_FLAGS += --with-arm-float-abi=softfp ifeq ($(shell dpkg-vendor --is ubuntu && echo true),true) # Ubuntu targets armv7+ with VFP and thumb2 support by default for armel DEB_CONFIGURE_EXTRA_FLAGS += --with-arm-fpu=vfpv3 else # debian defaults # v8 does not support < armv5 CXXFLAGS += -march=armv5t DEB_CONFIGURE_EXTRA_FLAGS += --with-arm-fpu=vfp endif endif ifeq (armhf, $(DEB_HOST_ARCH)) DEB_CONFIGURE_EXTRA_FLAGS += --with-arm-float-abi=hard ifeq ($(shell dpkg-vendor --derives-from raspbian && echo true),true) # enable vfp, disable armv7 DEB_CONFIGURE_EXTRA_FLAGS += --with-arm-fpu=vfp else # enable armv7 vfpv3 DEB_CONFIGURE_EXTRA_FLAGS += --with-arm-fpu=vfpv3 endif endif DEB_DESTDIR = $(CURDIR)/debian/tmp DEB_MAKE_CLEAN_TARGET = clean DEB_MAKE_BUILD_TARGET = build # relax regression tests when targeted experimental suite export HOME = $(CURDIR)/tmp export FLAKY_TESTS = dontcare export TEST_CI_ARGS = --arch=$(destCpu) --timeout=3000 export CI_JS_SUITES = message parallel sequential export NODE_TEST_DIR = $(CURDIR)/tmp # needed for tests to avoid "ee key too small" errors export OPENSSL_CONF = ./deps/openssl/openssl/apps/openssl.cnf # keep in mind ./debian/rules check is also invoked by adt-run, see debian/tests/ exp-relax-check := $(if $(shell dpkg-parsechangelog | grep -x 'Distribution: \(experimental\|UNRELEASED\)'),-i) DEB_MAKE_CHECK_TARGET = $(exp-relax-check) test-ci-js # build -fPIC CFLAGS += -fPIC CPPFLAGS += -fPIC ifeq ($(DEB_HOST_ARCH_BITS),32) CFLAGS += -g1 CPPFLAGS += -g1 DH_FLAGS += --max-parallel=1 export JOBS = 1 else CFLAGS += -g CPPFLAGS += -g endif # hardening gyp CXXFLAGS += $(CPPFLAGS) export CPPFLAGS export CXXFLAGS export CFLAGS export LDFLAGS export PYTHON = python3 # disable DNS requests during tests export RES_OPTIONS = attempts:0 %: dh $@ $(DH_FLAGS) # properly clean files from build, test, python override_dh_auto_clean: dh_auto_clean rm -f icu_config.gypi rm -rf test/addons/doc-* rm -f test/addons/.buildstamp rm -f test/addons/.docbuildstamp rm -rf test/addons/*/build rm -f config.gypi rm -f config.mk rm -f config.status rm -f test/fixtures/hello.txt rm -rf $(NODE_TEST_DIR) find . -name "*.pyc" -delete rm -rf out rm -rf deps/acorn/ rm -f debian/libnode$(ABI).install rm -f debian/libnode-dev.links # remove *.json files from documentation override_dh_installdocs: dh_installdocs find debian/nodejs-doc/usr/share/doc/nodejs-doc -name *.json -delete || true override_dh_auto_configure: ./configure $(DEB_CONFIGURE_EXTRA_FLAGS) override_dh_auto_build-arch: mkdir -p $(NODE_TEST_DIR) mkdir -p deps/acorn/ ln -sTf $(shell nodepath acorn) deps/acorn/acorn ln -sTf $(shell nodepath acorn-walk) deps/acorn/acorn-walk dh_auto_build override_dh_auto_build-indep: NODE_PATH=/usr/share/nodejs:/usr/lib/nodejs $(MAKE) doc-only override_dh_auto_test-indep: # skip tests override_dh_auto_test-arch: $(MAKE) test-ci-js override_dh_auto_install-indep: # skip install all override_dh_auto_install-arch: dh_auto_install override_dh_install-arch: sed 's/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g' debian/libnode.install > debian/libnode$(ABI).install sed -e 's/@DEB_HOST_MULTIARCH@/$(DEB_HOST_MULTIARCH)/g' -e 's/@ABI@/$(ABI)/g' debian/libnode-dev.links.in > debian/libnode-dev.links dh_install override_dh_dwz: # Double up the limit of debug information entries # Also, ignore failures (on 32-bit archs it might fail) -dh_dwz -- --max-die-limit 100000000 override_dh_gencontrol: dh_gencontrol -- \ -V"types:Node=$(shell jq --raw-output .version