mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-10-24 01:42:07 -09:00
package/ncftp: fix cross compilation detection
ncftp still ships a configure script generated with autoconf 2.13, which determines whether it is cross compiling by simply trying to run a trivial program built with $CC, instead of looking at --host/--build. That heuristic breaks when the build machine is able to execute the binaries produced by the cross compiler, which is typically the case when building for x86/x86-64 on an x86-64 machine: checking whether the C compiler (...) is a cross-compiler... no configure then takes the AC_TRY_RUN path for the remaining tests. Those tests link against the target libraries but are executed on the build machine, so they fail as soon as more than the bare C library is involved. The most visible victim is the curses detection, which links the test program against the target libncurses and then runs it: checking for curses library headers... checking for ncurses.h... yes checking for curses.h... yes checking for curses library... no With no curses library, ncftpbookmarks is silently dropped from the build and installation later fails with: install: cannot stat '.../build/ncftp-3.3.0/bin/ncftpbookmarks': No such file or directory Other checks are mis-detected the same way, e.g. the 64-bit integral type checks, which end up breaking the build itself: checking how to scan a 64-bit integral type... cannot scan io_get.c:763:96: error: expected ')' before 'PRINTF_LONG_LONG' So add a patch making the generated configure script follow what autoconf has been doing since 2.50, and consider the build cross compilation as soon as --host is given and differs from --build, regardless of whether the produced binaries happen to be runnable. Regenerating configure instead is not an option: the macros in autoconf_local/aclocal.m4 rely on autoconf 2.13 internals (AC_LANG used as a value, AC_FD_CC, __oline__, ...) and upstream generates configure with a patched autoconf 2.13 (see autoconf_local/acgeneral-2.13.m4.patch and acspecific-2.13.m4.patch). A modern autoconf fails with: configure.in:53: error: AC_LANG: unknown language: This regression was introduced by commitf8bc271115("package/ncftp: bump to version 3.2.9"). Before it, a pre-configure hook regenerated configure with autoconf precisely because the bundled script "doesn't detect cross-compilation correctly". With 3.2.9 that regeneration started to fail, so the hook was dropped, which brought the broken detection back. That commit left the host-autoconf dependency behind though, so drop it now. The issue is present since 2025.05, and in 2025.02.x since 2025.02.1, where the 3.2.9 bump was backported as commit6b0e4d82c3. Fixes: https://autobuild.buildroot.org/results/ab25f98d7ab8b397e2aa4f87af9cf1d814f3d6cc/ Fixes:f8bc271115("package/ncftp: bump to version 3.2.9") Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
committed by
Thomas Petazzoni
parent
145bbce3ea
commit
c65582cfd2
@@ -0,0 +1,60 @@
|
||||
From: Yegor Yefremov <yegorslists@googlemail.com>
|
||||
Date: Thu, 3 Sep 2026 10:00:00 +0200
|
||||
Subject: [PATCH] configure: detect cross compilation from --host and --build
|
||||
|
||||
ncftp still ships a configure script generated with autoconf 2.13, which
|
||||
determines whether it is cross compiling by simply trying to run a
|
||||
trivial program built with $CC. That heuristic breaks when the build
|
||||
machine is able to execute the binaries produced by the cross compiler,
|
||||
which is typically the case when building for x86/x86-64 on an x86-64
|
||||
machine: configure then concludes it is not cross compiling and starts
|
||||
using AC_TRY_RUN based tests.
|
||||
|
||||
Those tests link against the target libraries but are executed on the
|
||||
build machine, so they fail as soon as more than the bare C library is
|
||||
involved. The most visible victim is the curses detection, which links
|
||||
the test program against the target libncurses and then runs it:
|
||||
|
||||
checking for curses library headers... checking for ncurses.h... yes
|
||||
checking for curses.h... yes
|
||||
checking for curses library... no
|
||||
|
||||
With no curses library, ncftpbookmarks is silently dropped from the
|
||||
build and installation later fails with:
|
||||
|
||||
install: cannot stat '.../build/ncftp-3.3.0/bin/ncftpbookmarks': No such file or directory
|
||||
|
||||
Follow what autoconf has been doing since 2.50 and consider the build
|
||||
cross compilation as soon as --host is given and differs from --build,
|
||||
regardless of whether the produced binaries happen to be runnable.
|
||||
|
||||
Note: configure is not regenerated during the build, hence the generated
|
||||
script is patched directly.
|
||||
|
||||
Upstream: N/A, patching a generated file (upstream has neither a public
|
||||
VCS nor a bug tracker)
|
||||
|
||||
Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
|
||||
---
|
||||
configure | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index d955e20..2311c73 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -845,8 +845,13 @@ int main(void){return(0);}
|
||||
EOF
|
||||
if { (eval echo configure:847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
|
||||
ac_cv_prog_cc_works=yes
|
||||
+ # If --host was given and differs from --build, we are cross compiling,
|
||||
+ # even when the build machine happens to be able to run the binaries
|
||||
+ # produced by the cross compiler.
|
||||
+ if test "$host" != NONE && test "$host" != "$build"; then
|
||||
+ ac_cv_prog_cc_cross=yes
|
||||
# If we can't run a trivial program, we are probably using a cross compiler.
|
||||
- if (./conftest; exit) 2>/dev/null; then
|
||||
+ elif (./conftest; exit) 2>/dev/null; then
|
||||
ac_cv_prog_cc_cross=no
|
||||
else
|
||||
ac_cv_prog_cc_cross=yes
|
||||
@@ -11,7 +11,6 @@ NCFTP_TARGET_BINS = ncftp
|
||||
NCFTP_LICENSE = ClArtistic
|
||||
NCFTP_LICENSE_FILES = doc/LICENSE.txt
|
||||
|
||||
NCFTP_DEPENDENCIES = host-autoconf
|
||||
NCFTP_CONF_OPTS = --disable-ccdv
|
||||
|
||||
ifeq ($(BR2_PACKAGE_NCFTP_GET),y)
|
||||
|
||||
Reference in New Issue
Block a user