1
0
mirror of https://github.com/openwrt/openwrt.git synced 2025-10-30 07:49:23 +08:00

e2fsprogs: add pending patch that improve reproducibility

Add pending patch that disable libmagic support as this cause
reproducibility issue due to timing of presence of libmagic library at
times e2fsprogs gets compiled.

The new patch adds control on libmagic inclusion and we add the
--without-libmagic to the configure args by default.

Reported-by: Paul Spooren <mail@aparcar.org>
Link: https://github.com/openwrt/openwrt/pull/20499
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This commit is contained in:
Christian Marangi
2025-10-22 14:18:07 +02:00
parent c700f8fd8a
commit cdf891052d
2 changed files with 317 additions and 1 deletions

View File

@ -168,7 +168,8 @@ CONFIGURE_ARGS += \
--disable-tls \
--disable-nls \
--disable-rpath \
--disable-fuse2fs
--disable-fuse2fs \
--without-libmagic
ifneq ($(CONFIG_USE_MUSL),)
CONFIGURE_VARS += ac_cv_func_lseek64=yes

View File

@ -0,0 +1,315 @@
From 29e42cd2429208d02288bd9e12a6e65b940ea7e5 Mon Sep 17 00:00:00 2001
From: Christian Marangi <ansuelsmth@gmail.com>
Date: Wed, 22 Oct 2025 14:02:33 +0200
Subject: [PATCH] configure: make libmagic optional and configurable
Make libmagic optional and configurable. This is to address case where
the libmagic library is detected but suppots wants to be disabled.
While at it also add support for pkg-config and also apply the same
workaround of libarchive for macos.
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
configure | 182 ++++++++++++++++++++++++++++++++++++++--
configure.ac | 57 +++++++++++--
lib/support/plausible.c | 2 +-
3 files changed, 230 insertions(+), 11 deletions(-)
--- a/configure
+++ b/configure
@@ -930,6 +930,7 @@ enable_rpath
with_libiconv_prefix
with_libintl_prefix
enable_largefile
+with_libmagic
with_libarchive
enable_fuse2fs
enable_lto
@@ -1647,6 +1648,7 @@ Optional Packages:
--without-libiconv-prefix don't search for libiconv in includedir and libdir
--with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib
--without-libintl-prefix don't search for libintl in includedir and libdir
+ --without-libmagic disable use of libmagic
--without-libarchive disable use of libarchive
--with-multiarch=ARCH specify the multiarch triplet
--with-udev-rules-dir[=DIR]
@@ -13690,7 +13692,155 @@ then :
fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for magic_file in -lmagic" >&5
+
+# Check whether --with-libmagic was given.
+if test ${with_libmagic+y}
+then :
+ withval=$with_libmagic; if test "$withval" = "no"
+then
+ try_libmagic=""
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Disabling libmagic support" >&5
+printf "%s\n" "Disabling libmagic support" >&6; }
+
+printf "%s\n" "#define CONFIG_DISABLE_LIBMAGIC 1" >>confdefs.h
+
+elif test "$withval" = "direct"
+then
+ try_libmagic="direct"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Testing for libmagic support (forced direct link)" >&5
+printf "%s\n" "Testing for libmagic support (forced direct link)" >&6; }
+else
+ try_libmagic="yes"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Testing for libmagic support (with dlopen)" >&5
+printf "%s\n" "Testing for libmagic support (with dlopen)" >&6; }
+fi
+
+else $as_nop
+
+case "$host_os" in
+ darwin*)
+ try_libmagic="direct"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Try testing for libmagic support (with static linking) by default" >&5
+printf "%s\n" "Try testing for libmagic support (with static linking) by default" >&6; }
+ ;;
+ *)
+ try_libmagic="yes"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Try testing for libmagic support (with dlopen) by default" >&5
+printf "%s\n" "Try testing for libmagic support (with dlopen) by default" >&6; }
+ ;;
+esac
+
+fi
+
+MAGIC_LIB=
+if test -n "$try_libmagic"
+then
+
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libmagic" >&5
+printf %s "checking for libmagic... " >&6; }
+
+if test -n "$ARCHIVE_CFLAGS"; then
+ pkg_cv_ARCHIVE_CFLAGS="$ARCHIVE_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmagic\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmagic") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ARCHIVE_CFLAGS=`$PKG_CONFIG --cflags "libmagic" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+if test -n "$ARCHIVE_LIBS"; then
+ pkg_cv_ARCHIVE_LIBS="$ARCHIVE_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+ if test -n "$PKG_CONFIG" && \
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libmagic\""; } >&5
+ ($PKG_CONFIG --exists --print-errors "libmagic") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }; then
+ pkg_cv_ARCHIVE_LIBS=`$PKG_CONFIG --libs "libmagic" 2>/dev/null`
+ test "x$?" != "x0" && pkg_failed=yes
+else
+ pkg_failed=yes
+fi
+ else
+ pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+ _pkg_short_errors_supported=yes
+else
+ _pkg_short_errors_supported=no
+fi
+ if test $_pkg_short_errors_supported = yes; then
+ ARCHIVE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libmagic" 2>&1`
+ else
+ ARCHIVE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libmagic" 2>&1`
+ fi
+ # Put the nasty error message in config.log where it belongs
+ echo "$ARCHIVE_PKG_ERRORS" >&5
+
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for magic_file in -lmagic" >&5
+printf %s "checking for magic_file in -lmagic... " >&6; }
+if test ${ac_cv_lib_magic_magic_file+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmagic $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+char magic_file ();
+int
+main (void)
+{
+return magic_file ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_cv_lib_magic_magic_file=yes
+else $as_nop
+ ac_cv_lib_magic_magic_file=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_magic_magic_file" >&5
+printf "%s\n" "$ac_cv_lib_magic_magic_file" >&6; }
+if test "x$ac_cv_lib_magic_magic_file" = xyes
+then :
+ MAGIC_LIB=-lmagic
+fi
+
+
+elif test $pkg_failed = untried; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for magic_file in -lmagic" >&5
printf %s "checking for magic_file in -lmagic... " >&6; }
if test ${ac_cv_lib_magic_magic_file+y}
then :
@@ -13728,17 +13878,39 @@ printf "%s\n" "$ac_cv_lib_magic_magic_fi
if test "x$ac_cv_lib_magic_magic_file" = xyes
then :
MAGIC_LIB=-lmagic
-ac_fn_c_check_header_compile "$LINENO" "magic.h" "ac_cv_header_magic_h" "$ac_includes_default"
+fi
+
+
+else
+ ARCHIVE_CFLAGS=$pkg_cv_ARCHIVE_CFLAGS
+ ARCHIVE_LIBS=$pkg_cv_ARCHIVE_LIBS
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: pkg-config found libmagic" >&5
+printf "%s\n" "pkg-config found libmagic" >&6; }
+ CFLAGS="$ARCHIVE_CFLAGS $CFLAGS"
+
+fi
+ if test -n "$MAGIC_LIB" ; then
+ ac_fn_c_check_header_compile "$LINENO" "magic.h" "ac_cv_header_magic_h" "$ac_includes_default"
if test "x$ac_cv_header_magic_h" = xyes
then :
printf "%s\n" "#define HAVE_MAGIC_H 1" >>confdefs.h
fi
-fi
+ if test "$ac_cv_func_dlopen" = yes -a "$try_libmagic" != "direct"; then
+ MAGIC_LIB=$DLOPEN_LIB
-if test "$ac_cv_func_dlopen" = yes ; then
- MAGIC_LIB=$DLOPEN_LIB
+printf "%s\n" "#define CONFIG_DLOPEN_LIBMAGIC 1" >>confdefs.h
+
+ fi
+ fi
+ if test "$ac_cv_header_magic_h" != "yes"
+ then
+ MAGIC_LIB=
+ fi
fi
--- a/configure.ac
+++ b/configure.ac
@@ -1295,12 +1295,59 @@ SOCKET_LIB=''
AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket])
AC_SUBST(SOCKET_LIB)
dnl
-dnl See if libmagic exists
+dnl libmagic
dnl
-AC_CHECK_LIB(magic, magic_file, [MAGIC_LIB=-lmagic
-AC_CHECK_HEADERS([magic.h])])
-if test "$ac_cv_func_dlopen" = yes ; then
- MAGIC_LIB=$DLOPEN_LIB
+AC_ARG_WITH([libmagic],
+AS_HELP_STRING([--without-libmagic],[disable use of libmagic]),
+[if test "$withval" = "no"
+then
+ try_libmagic=""
+ AC_MSG_RESULT([Disabling libmagic support])
+ AC_DEFINE(CONFIG_DISABLE_LIBMAGIC, 1,
+ [Define to 1 to completely disable libmagic])
+elif test "$withval" = "direct"
+then
+ try_libmagic="direct"
+ AC_MSG_RESULT([Testing for libmagic support (forced direct link)])
+else
+ try_libmagic="yes"
+ AC_MSG_RESULT([Testing for libmagic support (with dlopen)])
+fi]
+,
+[
+case "$host_os" in
+ darwin*)
+ try_libmagic="direct"
+ AC_MSG_RESULT([Try testing for libmagic support (with static linking) by default])
+ ;;
+ *)
+ try_libmagic="yes"
+ AC_MSG_RESULT([Try testing for libmagic support (with dlopen) by default])
+ ;;
+esac
+])
+MAGIC_LIB=
+if test -n "$try_libmagic"
+then
+ PKG_CHECK_MODULES([ARCHIVE],[libmagic],
+ [
+ AC_MSG_RESULT([pkg-config found libmagic])
+ CFLAGS="$ARCHIVE_CFLAGS $CFLAGS"
+ ],[
+ AC_CHECK_LIB(magic, magic_file, [MAGIC_LIB=-lmagic])
+ ])
+ if test -n "$MAGIC_LIB" ; then
+ AC_CHECK_HEADERS([magic.h])
+ if test "$ac_cv_func_dlopen" = yes -a "$try_libmagic" != "direct"; then
+ MAGIC_LIB=$DLOPEN_LIB
+ AC_DEFINE(CONFIG_DLOPEN_LIBMAGIC, 1,
+ [Define to 1 if using dlopen to access libmagic])
+ fi
+ fi
+ if test "$ac_cv_header_magic_h" != "yes"
+ then
+ MAGIC_LIB=
+ fi
fi
AC_SUBST(MAGIC_LIB)
dnl
--- a/lib/support/plausible.c
+++ b/lib/support/plausible.c
@@ -54,7 +54,7 @@ static void (*dl_magic_close)(magic_t);
#define MAGIC_NO_CHECK_ELF 0x0010000
#endif
-#ifdef HAVE_DLOPEN
+#ifdef CONFIG_DLOPEN_LIBMAGIC
#include <dlfcn.h>
static void *magic_handle;