Source: samba Version: 2:4.21.3+dfsg-5 Tags: patch User: debian-cr...@lists.debian.org Usertags: ftcbfs
Hi Michael, thanks for working a lot on making samba cross buildable. As I understand it, you use qemu-user-binfmt for cross building. That's not something a package may rely on generally. For instance, gobject-introspection requires emulation and uses cross-exe-wrapper for doing it. In case of samba, a lot of emulation can be avoided. The build system has basic support for cross building, but it still is somewhat incomplete. I looked into improving the state and have prepared a patch. It's a proposal for some improvements that you may or may not disagree about. I suggest that you cherry-pick those that you like and then close this bug. * If the cross profile is set, pass --cross-compile and --cross-answers. Generate a suitable answers file using a shell script. I understand that this poses extra maintenance down the road as checks may change. Is this something you'd carry? * The largefile check may be disarmed by relying on CHECK_SIZEOF. I hope that this aspect is upstreamable. Then the "configure summary" fails. It needlessly runs a binary and could be converted as well. I can look into that, but appreciate feedback on these steps to see whether such changes are welcome. Helmut
diff --minimal -Nru samba-4.21.3+dfsg/debian/changelog samba-4.21.3+dfsg/debian/changelog --- samba-4.21.3+dfsg/debian/changelog 2025-01-11 22:17:49.000000000 +0100 +++ samba-4.21.3+dfsg/debian/changelog 2025-01-14 07:36:18.000000000 +0100 @@ -1,3 +1,10 @@ +samba (2:4.21.3+dfsg-5.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Improve cross compilation. (Closes: #-1) + + -- Helmut Grohne <hel...@subdivi.de> Tue, 14 Jan 2025 07:36:18 +0100 + samba (2:4.21.3+dfsg-5) unstable; urgency=medium * the Fixing Big Mishaps release. diff --minimal -Nru samba-4.21.3+dfsg/debian/clean samba-4.21.3+dfsg/debian/clean --- samba-4.21.3+dfsg/debian/clean 2024-11-25 17:35:00.000000000 +0100 +++ samba-4.21.3+dfsg/debian/clean 2025-01-14 07:36:18.000000000 +0100 @@ -7,3 +7,5 @@ third_party/waf/waflib/__pycache__/ third_party/waf/waflib/extras/__pycache__/ third_party/waf/waflib/Tools/__pycache__/ +# generated for cross compilation +debian/waf.answers diff --minimal -Nru samba-4.21.3+dfsg/debian/patches/cross.patch samba-4.21.3+dfsg/debian/patches/cross.patch --- samba-4.21.3+dfsg/debian/patches/cross.patch 1970-01-01 01:00:00.000000000 +0100 +++ samba-4.21.3+dfsg/debian/patches/cross.patch 2025-01-14 07:36:18.000000000 +0100 @@ -0,0 +1,94 @@ +--- samba-4.21.3+dfsg.orig/buildtools/wafsamba/samba_conftests.py ++++ samba-4.21.3+dfsg/buildtools/wafsamba/samba_conftests.py +@@ -84,42 +84,42 @@ + @conf + def CHECK_LARGEFILE(conf, define='HAVE_LARGEFILE'): + '''see what we need for largefile support''' +- getconf_cflags = conf.CHECK_COMMAND(['getconf', 'LFS_CFLAGS']) +- if getconf_cflags is not False: +- if (conf.CHECK_CODE('if (sizeof(off_t) < 8) return 1', +- define='WORKING_GETCONF_LFS_CFLAGS', +- execute=True, +- cflags=getconf_cflags, +- msg='Checking getconf large file support flags work')): +- conf.ADD_CFLAGS(getconf_cflags) +- getconf_cflags_list=TO_LIST(getconf_cflags) +- for flag in getconf_cflags_list: +- if flag[:2] == "-D": +- flag_split = flag[2:].split('=') +- if len(flag_split) == 1: +- conf.DEFINE(flag_split[0], '1') +- else: +- conf.DEFINE(flag_split[0], flag_split[1]) ++ if not conf.env.CROSS_COMPILE: ++ getconf_cflags = conf.CHECK_COMMAND(['getconf', 'LFS_CFLAGS']) ++ if getconf_cflags is not False: ++ conf.CHECK_SIZEOF('off_t', ++ define='SIZEOF_GETCONF_OFF_T', ++ cflags=getconf_cflags) ++ if int(conf.env.SIZEOF_GETCONF_OFF_T) >= 8: ++ conf.DEFINE('WORKING_GETCONF_LFS_CFLAGS', 1) ++ conf.ADD_CFLAGS(getconf_cflags) ++ getconf_cflags_list=TO_LIST(getconf_cflags) ++ for flag in getconf_cflags_list: ++ if flag[:2] == "-D": ++ flag_split = flag[2:].split('=') ++ if len(flag_split) == 1: ++ conf.DEFINE(flag_split[0], '1') ++ else: ++ conf.DEFINE(flag_split[0], flag_split[1]) + +- if conf.CHECK_CODE('if (sizeof(off_t) < 8) return 1', +- define, +- execute=True, +- msg='Checking for large file support without additional flags'): ++ conf.CHECK_SIZEOF('off_t', define='SIZEOF_DEFAULT_OFF_T') ++ if int(conf.env.SIZEOF_DEFAULT_OFF_T) >= 8: ++ conf.DEFINE(define, 1) + return True + +- if conf.CHECK_CODE('if (sizeof(off_t) < 8) return 1', +- define, +- execute=True, +- cflags='-D_FILE_OFFSET_BITS=64', +- msg='Checking for -D_FILE_OFFSET_BITS=64'): ++ conf.CHECK_SIZEOF('off_t', ++ define='SIZEOF_FOB_OFF_T', ++ cflags='-D_FILE_OFFSET_BITS=64') ++ if int(conf.env.SIZEOF_FOB_OFF_T) >= 8: ++ conf.DEFINE(define, 1) + conf.DEFINE('_FILE_OFFSET_BITS', 64) + return True + +- if conf.CHECK_CODE('if (sizeof(off_t) < 8) return 1', +- define, +- execute=True, +- cflags='-D_LARGE_FILES', +- msg='Checking for -D_LARGE_FILES'): ++ conf.CHECK_SIZEOF('off_t', ++ define='SIZEOF_LF_OFF_T', ++ cflags='-D_LARGE_FILES') ++ if int(conf.env.SIZEOF_LF_OFF_T) >= 8: ++ conf.DEFINE(define, 1) + conf.DEFINE('_LARGE_FILES', 1) + return True + return False +--- samba-4.21.3+dfsg.orig/buildtools/wafsamba/samba_autoconf.py ++++ samba-4.21.3+dfsg/buildtools/wafsamba/samba_autoconf.py +@@ -323,7 +323,7 @@ + + + @conf +-def CHECK_SIZEOF(conf, vars, headers=None, define=None, critical=True): ++def CHECK_SIZEOF(conf, vars, headers=None, define=None, critical=True, cflags=''): + '''check the size of a type''' + for v in TO_LIST(vars): + v_define = define +@@ -335,6 +335,7 @@ + 'static int test_array[1 - 2 * !(((long int)(sizeof(%s))) <= %d)];' % (v, size), + define=v_define, + quote=False, ++ cflags=cflags, + headers=headers, + local_include=False, + msg="Checking if size of %s == %d" % (v, size)): diff --minimal -Nru samba-4.21.3+dfsg/debian/patches/series samba-4.21.3+dfsg/debian/patches/series --- samba-4.21.3+dfsg/debian/patches/series 2025-01-11 14:43:20.000000000 +0100 +++ samba-4.21.3+dfsg/debian/patches/series 2025-01-14 07:36:18.000000000 +0100 @@ -30,3 +30,4 @@ lower-dns-lookup-mismatch-messages.patch include-grp.h-for-setgroups-in-a-few-places.patch ctdb-failover-statd_callout-PATH_MAX-workaround.patch +cross.patch diff --minimal -Nru samba-4.21.3+dfsg/debian/rules samba-4.21.3+dfsg/debian/rules --- samba-4.21.3+dfsg/debian/rules 2025-01-11 22:12:04.000000000 +0100 +++ samba-4.21.3+dfsg/debian/rules 2025-01-14 07:36:18.000000000 +0100 @@ -133,6 +133,13 @@ config-args += \ --with-shared-modules=vfs_dfs_samba4,vfs_nfs4acl_xattr,auth_samba4 +ifneq (,$(filter cross,$(DEB_BUILD_PROFILES))) +config-args += \ + --cross-compile \ + --hostcc=$(CC_FOR_BUILD) \ + --cross-answers=debian/waf.answers +endif + ifeq (${DEB_HOST_ARCH_OS}, linux) # extra linux-specific features config-args += \ @@ -186,6 +193,9 @@ configure: bin/configured.stamp .PHONY: configure bin/configured.stamp: +ifneq (,$(filter cross,$(DEB_BUILD_PROFILES))) + ./debian/waf.answers.sh > debian/waf.answers +endif CC="${CC}" CPP="${CPP}" LD="${LD}" PKGCONFIG="${PKG_CONFIG}" \ CPPFLAGS="${CPPFLAGS}" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" \ PYTHON=python3 PYTHON_CONFIG=${DEB_HOST_MULTIARCH}-python3-config \ diff --minimal -Nru samba-4.21.3+dfsg/debian/waf.answers.sh samba-4.21.3+dfsg/debian/waf.answers.sh --- samba-4.21.3+dfsg/debian/waf.answers.sh 1970-01-01 01:00:00.000000000 +0100 +++ samba-4.21.3+dfsg/debian/waf.answers.sh 2025-01-14 07:36:18.000000000 +0100 @@ -0,0 +1,13 @@ +#!/bin/sh + +if dpkg-architecture -iany-gnu-any-any; then + echo "Checking for HAVE_SECURE_MKSTEMP: OK" + echo "Checking for working strptime: OK" + echo "Checking for C99 vsnprintf: OK" + echo "Checking errno of iconv for illegal multibyte sequence: OK" + echo "Checking for HAVE_SHARED_MMAP: OK" + if dpkg-architecture -ilinux-any; then + echo "Checking for HAVE_MREMAP: OK" + echo "Checking whether we can use Linux thread-specific credentials: OK" + fi +fi