Source: nodejs Version: 12.22.5~dfsg-6 Tags: patch User: debian-cr...@lists.debian.org Usertags: ftcbfs
nodejs fails to cross build from source, because its configure.py detects build architecture build tools such as gcc or pkg-config without the relevant host architecture prefix. (Do note that I'm using the gnu terminology also used in man dpkg-architecture here and that nodejs seems to be using a confusing mix of terminology.) It seems that configure.py expects that you export standard environment variables such as CC or PKG_CONFIG. The attached patch implements that. Unfortunately, it does not make nodejs cross buildable. A build then fails running gen-regexp-special-case with an "Exec format error", which typically means that the binary was compiled for the host architecture but needed for the build architecture. I researched this a bit and noticed that other cross distributions have run into the same problem. PtxDist: https://lore.ptxdist.org/ptxdist/20200113101809.3260-1-b.es...@pengutronix.de/ buildroot: https://github.com/buildroot/buildroot/blob/master/package/nodejs/nodejs.mk In essence what they do is build nodejs twice. Once for the build architecture. Then they steal the relevant tools from that build tree and patch the build system to use those other tools. Likely Debian should do the same (or upstream should gain a sane solution here). I attempted doing this, but my native build for some reason didn't emit gen-regexp-special-cases. At that point, I gave up on this. While looking into this, I also noticed that you make the build non-parallel when building for a 32bit architecture. Is the intention really to make a cross build on amd64 for armhf non-parallel and leaving a cross build from on say mips for riscv64 parallel? I guess that you do mean the build architecture here. Please consider applying the attached patch to fix the obvious. At that point, please close the bug regardless of the other mentioned issues. Helmut
diff --minimal -Nru nodejs-12.22.5~dfsg/debian/changelog nodejs-12.22.5~dfsg/debian/changelog --- nodejs-12.22.5~dfsg/debian/changelog 2021-10-10 10:48:05.000000000 +0200 +++ nodejs-12.22.5~dfsg/debian/changelog 2021-10-11 10:03:16.000000000 +0200 @@ -1,3 +1,10 @@ +nodejs (12.22.5~dfsg-6.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Improve cross building: Use host tools. (Closes: #-1) + + -- Helmut Grohne <hel...@subdivi.de> Mon, 11 Oct 2021 10:03:16 +0200 + nodejs (12.22.5~dfsg-6) unstable; urgency=medium * Team upload diff --minimal -Nru nodejs-12.22.5~dfsg/debian/rules nodejs-12.22.5~dfsg/debian/rules --- nodejs-12.22.5~dfsg/debian/rules 2021-10-10 10:43:51.000000000 +0200 +++ nodejs-12.22.5~dfsg/debian/rules 2021-10-11 10:03:16.000000000 +0200 @@ -1,6 +1,8 @@ #!/usr/bin/make -f +include /usr/share/dpkg/architecture.mk include /usr/share/dpkg/pkg-info.mk +include /usr/share/dpkg/buildtools.mk export DEB_BUILD_MAINT_OPTIONS = hardening=+all,-pie # source equivalent of nodejs -e 'console.log(process.versions.modules)' @@ -199,7 +201,7 @@ find debian/nodejs-doc/usr/share/doc/nodejs-doc -name *.json -delete || true override_dh_auto_configure: - ./configure $(DEB_CONFIGURE_EXTRA_FLAGS) + CC=$(CC) CXX=$(CXX) PKG_CONFIG=$(PKG_CONFIG) ./configure $(DEB_CONFIGURE_EXTRA_FLAGS) override_dh_auto_build-arch: mkdir -p $(NODE_TEST_DIR)