Hi, On Mon, Oct 29, 2018 at 09:34:00PM +0100, Helmut Grohne wrote: > The attached patch fixes all of the issues above. After applying it, > nginx fails finding accept4, struct in6_pktinfo and NGX_SYS_NERR. > Likely, some checks are still broken. Still I think that the patch is an > incremental step in the right direction. Please consider applying it and > close this bug when doing so.
I've updated the patch to actually make nginx fully cross buildable. Helmut
diff --minimal -Nru nginx-1.22.1/debian/changelog nginx-1.22.1/debian/changelog --- nginx-1.22.1/debian/changelog 2022-12-08 14:15:15.000000000 +0100 +++ nginx-1.22.1/debian/changelog 2022-12-11 12:05:06.000000000 +0100 @@ -1,3 +1,19 @@ +nginx (1.22.1-4.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Fix FTCBFS: (Closes: #912284) + + cross.patch: Accept a compiler without running binaries. + + Pass a C compiler to configure. + + cross.patch: Implement auto/cc/name without running. + + Pass --crossbuild to configure. + + cross.patch: When passing --crossbuild, set NGX_CROSSBUILD. + + cross.patch: When NGX_CROSSBUILD, assume that gcc does atomics. + + cross.patch: When NGX_CROSSBUILD, only build the MAP_ANON test. + + B-D: perl-xs-dev. + + debian/rules: Fix build vs host confusion. + + -- Helmut Grohne <hel...@subdivi.de> Sun, 11 Dec 2022 12:05:06 +0100 + nginx (1.22.1-4) unstable; urgency=medium * d/t/*-module-deps: updated, added curl timeout 300 seconds and diff --minimal -Nru nginx-1.22.1/debian/control nginx-1.22.1/debian/control --- nginx-1.22.1/debian/control 2022-12-08 14:15:15.000000000 +0100 +++ nginx-1.22.1/debian/control 2022-12-11 12:05:06.000000000 +0100 @@ -12,9 +12,9 @@ libmhash-dev, libpam0g-dev, libpcre3-dev, - libperl-dev, libssl-dev, libxslt1-dev, + perl-xs-dev, po-debconf, quilt, zlib1g-dev diff --minimal -Nru nginx-1.22.1/debian/patches/cross.patch nginx-1.22.1/debian/patches/cross.patch --- nginx-1.22.1/debian/patches/cross.patch 1970-01-01 01:00:00.000000000 +0100 +++ nginx-1.22.1/debian/patches/cross.patch 2022-12-11 12:05:06.000000000 +0100 @@ -0,0 +1,146 @@ +--- nginx-1.22.1.orig/auto/cc/name ++++ nginx-1.22.1/auto/cc/name +@@ -7,7 +7,7 @@ + + ngx_feature="C compiler" + ngx_feature_name= +- ngx_feature_run=yes ++ ngx_feature_run=no + ngx_feature_incs= + ngx_feature_path= + ngx_feature_libs= +--- nginx-1.22.1.orig/auto/types/sizeof ++++ nginx-1.22.1/auto/types/sizeof +@@ -26,7 +26,7 @@ + $NGX_INCLUDE_AUTO_CONFIG_H + + int main(void) { +- printf("%d", (int) sizeof($ngx_type)); ++ char canary[1 - 2 * (sizeof($ngx_type) != 8)]; + return 0; + } + +@@ -38,20 +38,55 @@ + + eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1" + ++if [ -x $NGX_AUTOTEST ]; then ++ ngx_size_is_8=yes ++else ++ ngx_size_is_8=no ++fi ++ ++rm -rf $NGX_AUTOTEST* ++ ++cat << END > $NGX_AUTOTEST.c ++ ++#include <sys/types.h> ++#include <sys/time.h> ++$NGX_INCLUDE_UNISTD_H ++#include <signal.h> ++#include <stdio.h> ++#include <sys/resource.h> ++$NGX_INCLUDE_INTTYPES_H ++$NGX_INCLUDE_AUTO_CONFIG_H ++ ++int main(void) { ++ char canary[1 - 2 * (sizeof($ngx_type) != 4)]; ++ return 0; ++} ++ ++END ++ ++ ++ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \ ++ -o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs" ++ ++eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1" + + if [ -x $NGX_AUTOTEST ]; then +- ngx_size=`$NGX_AUTOTEST` +- echo " $ngx_size bytes" ++ ngx_size_is_4=yes ++else ++ ngx_size_is_4=no + fi + ++rm -rf $NGX_AUTOTEST* + +-case $ngx_size in +- 4) ++case $ngx_size_is_8:$ngx_size_is_4 in ++ no:yes) ++ ngx_size=4 + ngx_max_value=2147483647 + ngx_max_len='(sizeof("-2147483648") - 1)' + ;; + +- 8) ++ yes:no) ++ ngx_size=8 + ngx_max_value=9223372036854775807LL + ngx_max_len='(sizeof("-9223372036854775808") - 1)' + ;; +@@ -66,11 +101,7 @@ + echo $ngx_test >> $NGX_AUTOCONF_ERR + echo "----------" >> $NGX_AUTOCONF_ERR + +- rm -rf $NGX_AUTOTEST* +- + exit 1 + esac + +- +-rm -rf $NGX_AUTOTEST* +- ++echo " $ngx_size bytes" +--- nginx-1.22.1.orig/auto/cc/conf ++++ nginx-1.22.1/auto/cc/conf +@@ -180,6 +180,9 @@ + + if [ "$NGX_CC_NAME" = "sunc" ]; then + echo "checking for gcc builtin atomic operations ... disabled" ++ elif [ "$NGX_CC_NAME" = gcc ] && [ "$NGX_CROSSBUILD" = YES ]; then ++ echo "checking for gcc builtin atomic operations ... assumed available during cross build with gcc" ++ have=NGX_HAVE_GCC_ATOMIC . auto/have + else + ngx_feature="gcc builtin atomic operations" + ngx_feature_name=NGX_HAVE_GCC_ATOMIC +--- nginx-1.22.1.orig/auto/options ++++ nginx-1.22.1/auto/options +@@ -34,6 +34,7 @@ + NGX_TEST_BUILD_SOLARIS_SENDFILEV=NO + + NGX_PLATFORM= ++NGX_CROSSBUILD=NO + NGX_WINE= + + EVENT_FOUND=NO +@@ -197,7 +198,10 @@ + --user=*) NGX_USER="$value" ;; + --group=*) NGX_GROUP="$value" ;; + +- --crossbuild=*) NGX_PLATFORM="$value" ;; ++ --crossbuild=*) ++ NGX_PLATFORM="$value" ++ NGX_CROSSBUILD=YES ++ ;; + + --build=*) NGX_BUILD="$value" ;; + --builddir=*) NGX_OBJS="$value" ;; +--- nginx-1.22.1.orig/auto/unix ++++ nginx-1.22.1/auto/unix +@@ -805,7 +805,12 @@ + + ngx_feature="mmap(MAP_ANON|MAP_SHARED)" + ngx_feature_name="NGX_HAVE_MAP_ANON" +-ngx_feature_run=yes ++if [ "$NGX_CROSSBUILD" = YES ]; then ++ # Assume that mmap works if it is defined and the macros work. ++ ngx_feature_run=no ++else ++ ngx_feature_run=yes ++fi + ngx_feature_incs="#include <sys/mman.h>" + ngx_feature_path= + ngx_feature_libs= diff --minimal -Nru nginx-1.22.1/debian/patches/series nginx-1.22.1/debian/patches/series --- nginx-1.22.1/debian/patches/series 2022-12-08 14:15:15.000000000 +0100 +++ nginx-1.22.1/debian/patches/series 2022-12-11 12:05:06.000000000 +0100 @@ -2,3 +2,4 @@ nginx-fix-pidfile.patch nginx-ssl_cert_cb_yield.patch bug-1024605.patch +cross.patch diff --minimal -Nru nginx-1.22.1/debian/rules nginx-1.22.1/debian/rules --- nginx-1.22.1/debian/rules 2022-12-08 14:15:15.000000000 +0100 +++ nginx-1.22.1/debian/rules 2022-12-11 12:05:06.000000000 +0100 @@ -2,6 +2,8 @@ export DH_VERBOSE=1 export DEB_BUILD_MAINT_OPTIONS=hardening=+all +include /usr/share/dpkg/architecture.mk +include /usr/share/dpkg/buildtools.mk debian_cflags:=$(shell dpkg-buildflags --get CFLAGS) -fPIC $(shell dpkg-buildflags --get CPPFLAGS) debian_ldflags:=$(shell dpkg-buildflags --get LDFLAGS) -fPIC @@ -30,11 +32,14 @@ BASEDIR = $(CURDIR) $(foreach flavour,$(FLAVOURS) src ,$(eval BUILDDIR_$(flavour) = $(CURDIR)/debian/build-$(flavour))) -DEB_BUILD_ARCH ?=$(shell dpkg-architecture -qDEB_BUILD_ARCH) -ifeq ($(DEB_BUILD_ARCH),sparc) +ifeq ($(DEB_HOST_ARCH),sparc) debian_cflags += -m32 -mcpu=ultrasparc endif +ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) +export PERL5LIB=/usr/lib/$(DEB_HOST_MULTIARCH)/perl/cross-config-$(shell perl -MConfig -e 'print $$Config{version}') +endif + ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) MAKEFLAGS += -j$(NUMJOBS) @@ -70,10 +75,23 @@ --with-threads common_configure_flags := \ + --with-cc="$(CC)" \ --with-cc-opt="$(debian_cflags)" \ --with-ld-opt="$(debian_ldflags)" \ $(basic_configure_flags) +ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) + ifeq ($(DEB_HOST_ARCH_OS),linux) + common_configure_flags += --crossbuild=Linux:: + endif + ifeq ($(DEB_HOST_ARCH_OS),kfreebsd) + common_configure_flags += --crossbuild=FreeBSD:: + endif + ifeq ($(DEB_HOST_ARCH_OS),hurd) + common_configure_flags += --crossbuild=GNU:: + endif +endif + light_configure_flags := \ $(common_configure_flags) \ --with-http_gzip_static_module \