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:
		| @ -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 | ||||
|  | ||||
| @ -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; | ||||
		Reference in New Issue
	
	Block a user
	 Christian Marangi
					Christian Marangi