]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
e2fsprogs: add pending patch that improve reproducibility 20499/head
authorChristian Marangi <ansuelsmth@gmail.com>
Wed, 22 Oct 2025 12:18:07 +0000 (14:18 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Thu, 23 Oct 2025 15:02:46 +0000 (17:02 +0200)
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>
package/utils/e2fsprogs/Makefile
package/utils/e2fsprogs/patches/010-configure-make-libmagic-optional-and-configurable.patch [new file with mode: 0644]

index bebfc8dab22864c7b4ab9fd3b71368aeab71e462..5bac11e7cacf64f707de28e7df4376e8424ab6eb 100644 (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
diff --git a/package/utils/e2fsprogs/patches/010-configure-make-libmagic-optional-and-configurable.patch b/package/utils/e2fsprogs/patches/010-configure-make-libmagic-optional-and-configurable.patch
new file mode 100644 (file)
index 0000000..9b3c25f
--- /dev/null
@@ -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;