diff options
author | Dave Dykstra <2129743+DrDaveD@users.noreply.github.com> | 2023-12-20 15:19:20 -0600 |
---|---|---|
committer | Dave Dykstra <2129743+DrDaveD@users.noreply.github.com> | 2023-12-20 15:19:20 -0600 |
commit | 448a3f8b487be74058cd33a1890fa56156a647e3 (patch) | |
tree | 03c6990963fa4badc94df4e386a0a5dbfaa95804 | |
parent | 260dfea450e387cbd2c8de79a7c2eeacc26f74e9 (diff) | |
download | e2fsprogs-448a3f8b487be74058cd33a1890fa56156a647e3.tar.gz |
add libfuse3 support to fuse2fs
-rwxr-xr-x | configure | 528 | ||||
-rw-r--r-- | configure.ac | 67 | ||||
-rw-r--r-- | lib/config.h.in | 3 | ||||
-rw-r--r-- | misc/fuse2fs.c | 86 |
4 files changed, 584 insertions, 100 deletions
@@ -703,6 +703,8 @@ UNI_DIFF_OPTS SEM_INIT_LIB FUSE_CMT FUSE_LIB +fuse3_LIBS +fuse3_CFLAGS CLOCK_GETTIME_LIB MAGIC_LIB SOCKET_LIB @@ -950,6 +952,8 @@ CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR +fuse3_CFLAGS +fuse3_LIBS CXX CXXFLAGS CCC @@ -4634,6 +4638,8 @@ esac unset DATE MONTH YEAR base_ver pre_vers date_spec { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION" >&5 printf "%s\n" "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Package version ${E2FSPROGS_PKGVER} release ${E2FSPROGS_PKGREL}" >&5 +printf "%s\n" "Package version ${E2FSPROGS_PKGVER} release ${E2FSPROGS_PKGREL}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&5 printf "%s\n" "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&6; } @@ -4642,6 +4648,7 @@ printf "%s\n" "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&6; } + WITH_DIET_LIBC= # Check whether --with-diet-libc was given. @@ -8679,7 +8686,7 @@ else $as_nop *-*-aix*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __powerpc64__ || defined __LP64__ +#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail @@ -8970,7 +8977,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __powerpc64__ || defined __LP64__ +#if defined __powerpc64__ || defined _ARCH_PPC64 int ok; #else error fail @@ -9077,7 +9084,7 @@ then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#if defined __ELF__ || (defined __linux__ && defined __EDG__) +#ifdef __ELF__ Extensible Linking Format #endif @@ -9095,7 +9102,7 @@ rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 printf "%s\n" "$gl_cv_elf" >&6; } - if test $gl_cv_elf = yes; then + if test $gl_cv_elf; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then @@ -9112,22 +9119,19 @@ printf "%s\n" "$gl_cv_elf" >&6; } echo } fi - # Use 'expr', not 'test', to compare the values of func_elfclass, because on - # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, - # not 1 or 2. case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { - expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null + test "`func_elfclass | sed -e 's/[ ]//g'`" = 1 } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { - expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null + test "`func_elfclass | sed -e 's/[ ]//g'`" = 2 } ;; *) @@ -9657,14 +9661,7 @@ fi fi ;; -l*) - dep=`echo "X$dep" | sed -e 's/^X-l//'` - if test "X$dep" != Xc \ - || case $host_os in - linux* | gnu* | k*bsd*-gnu) false ;; - *) true ;; - esac; then - names_next_round="$names_next_round $dep" - fi + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` @@ -10026,9 +10023,8 @@ int main (void) { int result = 0; - /* Test against AIX 5.1...7.2 bug: Failures are not distinguishable from - successful returns. This is even documented in - <https://www.ibm.com/support/knowledgecenter/ssw_aix_72/i_bostechref/iconv.html> */ + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) @@ -10610,14 +10606,7 @@ fi fi ;; -l*) - dep=`echo "X$dep" | sed -e 's/^X-l//'` - if test "X$dep" != Xc \ - || case $host_os in - linux* | gnu* | k*bsd*-gnu) false ;; - *) true ;; - esac; then - names_next_round="$names_next_round $dep" - fi + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` @@ -13592,7 +13581,97 @@ then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Disabling fuse2fs" >&5 printf "%s\n" "Disabling fuse2fs" >&6; } else - for ac_header in pthread.h fuse.h + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __linux__ +#include <linux/fs.h> +#include <linux/falloc.h> +#include <linux/xattr.h> +#endif + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Cannot find fuse2fs Linux headers. +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + fuse3_CFLAGS + C compiler flags for fuse3, overriding pkg-config + fuse3_LIBS linker flags for fuse3, overriding pkg-config + +pkg_failed=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse3" >&5 +printf %s "checking for fuse3... " >&6; } + +if test -n "$fuse3_CFLAGS"; then + pkg_cv_fuse3_CFLAGS="$fuse3_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 \"fuse3\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fuse3") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_fuse3_CFLAGS=`$PKG_CONFIG --cflags "fuse3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$fuse3_LIBS"; then + pkg_cv_fuse3_LIBS="$fuse3_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 \"fuse3\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fuse3") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_fuse3_LIBS=`$PKG_CONFIG --libs "fuse3" 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 + fuse3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fuse3" 2>&1` + else + fuse3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fuse3" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$fuse3_PKG_ERRORS" >&5 + + + for ac_header in pthread.h fuse.h do : as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#define _FILE_OFFSET_BITS 64 @@ -13613,35 +13692,119 @@ fi done - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 +printf %s "checking for fuse_main in -losxfuse... " >&6; } +if test ${ac_cv_lib_osxfuse_fuse_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-losxfuse $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#define FUSE_USE_VERSION 29 -#ifdef __linux__ -#include <linux/fs.h> -#include <linux/falloc.h> -#include <linux/xattr.h> -#endif +/* 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 fuse_main (); int main (void) { +return fuse_main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_osxfuse_fuse_main=yes +else $as_nop + ac_cv_lib_osxfuse_fuse_main=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_osxfuse_fuse_main" >&5 +printf "%s\n" "$ac_cv_lib_osxfuse_fuse_main" >&6; } +if test "x$ac_cv_lib_osxfuse_fuse_main" = xyes +then : + FUSE_LIB=-losxfuse +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -lfuse" >&5 +printf %s "checking for fuse_main in -lfuse... " >&6; } +if test ${ac_cv_lib_fuse_fuse_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfuse $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 fuse_main (); +int +main (void) +{ +return fuse_main (); ; return 0; } _ACEOF -if ac_fn_c_try_cpp "$LINENO" +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_fuse_fuse_main=yes +else $as_nop + ac_cv_lib_fuse_fuse_main=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_fuse_fuse_main" >&5 +printf "%s\n" "$ac_cv_lib_fuse_fuse_main" >&6; } +if test "x$ac_cv_lib_fuse_fuse_main" = xyes then : + FUSE_LIB=-lfuse +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Cannot find fuse library. +See \`config.log' for more details" "$LINENO" 5; } +fi + +fi + + +elif test $pkg_failed = untried; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + for ac_header in pthread.h fuse.h +do : + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29 +" +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : + cat >>confdefs.h <<_ACEOF +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "Cannot find fuse2fs Linux headers. +as_fn_error $? "Cannot find fuse2fs headers. See \`config.log' for more details" "$LINENO" 5; } fi -rm -f conftest.err conftest.i conftest.$ac_ext - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 +done + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 printf %s "checking for fuse_main in -losxfuse... " >&6; } if test ${ac_cv_lib_osxfuse_fuse_main+y} then : @@ -13727,12 +13890,82 @@ fi fi + +else + fuse3_CFLAGS=$pkg_cv_fuse3_CFLAGS + fuse3_LIBS=$pkg_cv_fuse3_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + + FUSE_LIB=-lfuse3 + +fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Enabling fuse2fs" >&5 printf "%s\n" "Enabling fuse2fs" >&6; } fi else $as_nop - for ac_header in pthread.h fuse.h + +pkg_failed=no +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse3" >&5 +printf %s "checking for fuse3... " >&6; } + +if test -n "$fuse3_CFLAGS"; then + pkg_cv_fuse3_CFLAGS="$fuse3_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 \"fuse3\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fuse3") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_fuse3_CFLAGS=`$PKG_CONFIG --cflags "fuse3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$fuse3_LIBS"; then + pkg_cv_fuse3_LIBS="$fuse3_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 \"fuse3\""; } >&5 + ($PKG_CONFIG --exists --print-errors "fuse3") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_fuse3_LIBS=`$PKG_CONFIG --libs "fuse3" 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 + fuse3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fuse3" 2>&1` + else + fuse3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fuse3" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$fuse3_PKG_ERRORS" >&5 + + + for ac_header in pthread.h fuse.h do : as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#define _FILE_OFFSET_BITS 64 @@ -13754,9 +13987,9 @@ else $as_nop fi done -if test -z "$FUSE_CMT" -then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 + if test -z "$FUSE_CMT" + then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 printf %s "checking for fuse_main in -losxfuse... " >&6; } if test ${ac_cv_lib_osxfuse_fuse_main+y} then : @@ -13839,6 +14072,129 @@ fi fi + fi + +elif test $pkg_failed = untried; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + + for ac_header in pthread.h fuse.h +do : + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29 +#ifdef __linux__ +# include <linux/fs.h> +# include <linux/falloc.h> +# include <linux/xattr.h> +#endif +" +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : + cat >>confdefs.h <<_ACEOF +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else $as_nop + FUSE_CMT="#" +fi + +done + if test -z "$FUSE_CMT" + then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 +printf %s "checking for fuse_main in -losxfuse... " >&6; } +if test ${ac_cv_lib_osxfuse_fuse_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-losxfuse $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 fuse_main (); +int +main (void) +{ +return fuse_main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_osxfuse_fuse_main=yes +else $as_nop + ac_cv_lib_osxfuse_fuse_main=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_osxfuse_fuse_main" >&5 +printf "%s\n" "$ac_cv_lib_osxfuse_fuse_main" >&6; } +if test "x$ac_cv_lib_osxfuse_fuse_main" = xyes +then : + FUSE_LIB=-losxfuse +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -lfuse" >&5 +printf %s "checking for fuse_main in -lfuse... " >&6; } +if test ${ac_cv_lib_fuse_fuse_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfuse $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 fuse_main (); +int +main (void) +{ +return fuse_main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_fuse_fuse_main=yes +else $as_nop + ac_cv_lib_fuse_fuse_main=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_fuse_fuse_main" >&5 +printf "%s\n" "$ac_cv_lib_fuse_fuse_main" >&6; } +if test "x$ac_cv_lib_fuse_fuse_main" = xyes +then : + FUSE_LIB=-lfuse +else $as_nop + FUSE_CMT="#" +fi + +fi + + fi + +else + fuse3_CFLAGS=$pkg_cv_fuse3_CFLAGS + fuse3_LIBS=$pkg_cv_fuse3_LIBS + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + + FUSE_LIB=-lfuse3 + fi if test -z "$FUSE_CMT" then @@ -13850,6 +14206,46 @@ fi +if test "$FUSE_LIB" = "-lfuse3" +then + FUSE_USE_VERSION=35 + CFLAGS="$CFLAGS $fuse3_CFLAGS" + LDFLAGS="$LDFLAGS $fuse3_LDFLAGS" + for ac_header in pthread.h fuse.h +do : + as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 35 +#ifdef __linux__ +#include <linux/fs.h> +#include <linux/falloc.h> +#include <linux/xattr.h> +#endif +" +if eval test \"x\$"$as_ac_Header"\" = x"yes" +then : + cat >>confdefs.h <<_ACEOF +#define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Cannot find fuse3 fuse2fs headers. +See \`config.log' for more details" "$LINENO" 5; } +fi + +done +elif test -n "$FUSE_LIB" +then + FUSE_USE_VERSION=29 +fi +if test -n "$FUSE_USE_VERSION" +then + +printf "%s\n" "#define FUSE_USE_VERSION $FUSE_USE_VERSION" >>confdefs.h + +fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for optreset" >&5 printf %s "checking for optreset... " >&6; } if test ${ac_cv_have_optreset+y} @@ -14804,11 +15200,11 @@ if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } -if test ${ac_cv_prog_cxx_11+y} +if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else $as_nop - ac_cv_prog_cxx_11=no + ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -14850,11 +15246,11 @@ if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } -if test ${ac_cv_prog_cxx_98+y} +if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else $as_nop - ac_cv_prog_cxx_98=no + ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -15194,7 +15590,7 @@ fi if test $pkg_failed = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { 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 @@ -15203,25 +15599,25 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - udev_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "udev" 2>&1` + udev_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "udev" 2>&1` else - udev_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "udev" 2>&1` + udev_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "udev" 2>&1` fi - # Put the nasty error message in config.log where it belongs - echo "$udev_PKG_ERRORS" >&5 + # Put the nasty error message in config.log where it belongs + echo "$udev_PKG_ERRORS" >&5 with_udev_rules_dir="" elif test $pkg_failed = untried; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } with_udev_rules_dir="" else - udev_CFLAGS=$pkg_cv_udev_CFLAGS - udev_LIBS=$pkg_cv_udev_LIBS + udev_CFLAGS=$pkg_cv_udev_CFLAGS + udev_LIBS=$pkg_cv_udev_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } @@ -15363,7 +15759,7 @@ fi if test $pkg_failed = yes; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { 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 @@ -15372,25 +15768,25 @@ else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - systemd_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "systemd" 2>&1` + systemd_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "systemd" 2>&1` else - systemd_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "systemd" 2>&1` + systemd_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "systemd" 2>&1` fi - # Put the nasty error message in config.log where it belongs - echo "$systemd_PKG_ERRORS" >&5 + # Put the nasty error message in config.log where it belongs + echo "$systemd_PKG_ERRORS" >&5 with_systemd_unit_dir="" elif test $pkg_failed = untried; then - { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } with_systemd_unit_dir="" else - systemd_CFLAGS=$pkg_cv_systemd_CFLAGS - systemd_LIBS=$pkg_cv_systemd_LIBS + systemd_CFLAGS=$pkg_cv_systemd_CFLAGS + systemd_LIBS=$pkg_cv_systemd_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } @@ -17057,9 +17453,7 @@ printf "%s\n" "$as_me: executing $ac_file commands" >&6;} # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in - "$presentlang" | "$presentlang"_* | "$presentlang".* | "$presentlang"@*) - useit=yes - ;; + "$presentlang"*) useit=yes;; esac done if test $useit = yes; then diff --git a/configure.ac b/configure.ac index 371e2bf1c..3cdf4c5eb 100644 --- a/configure.ac +++ b/configure.ac @@ -1303,7 +1303,7 @@ dnl AC_CHECK_LIB(rt, clock_gettime, [CLOCK_GETTIME_LIB=-lrt]) AC_SUBST(CLOCK_GETTIME_LIB) dnl -dnl Check to see if the FUSE library is -lfuse or -losxfuse +dnl Check to see if the FUSE library is -lfuse3, -losxfuse, or -lfuse dnl FUSE_CMT= FUSE_LIB= @@ -1315,27 +1315,35 @@ then FUSE_CMT="#" AC_MSG_RESULT([Disabling fuse2fs]) else - AC_CHECK_HEADERS([pthread.h fuse.h], [], -[AC_MSG_FAILURE([Cannot find fuse2fs headers.])], -[#define _FILE_OFFSET_BITS 64 -#define FUSE_USE_VERSION 29]) - AC_PREPROC_IFELSE( -[AC_LANG_PROGRAM([[#define FUSE_USE_VERSION 29 -#ifdef __linux__ +[AC_LANG_PROGRAM([[#ifdef __linux__ #include <linux/fs.h> #include <linux/falloc.h> #include <linux/xattr.h> #endif ]], [])], [], [AC_MSG_FAILURE([Cannot find fuse2fs Linux headers.])]) - AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], - [AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], - [AC_MSG_FAILURE([Cannot find fuse library.])])]) + PKG_CHECK_MODULES([fuse3], [fuse3], + [ + FUSE_LIB=-lfuse3 + ], [ + AC_CHECK_HEADERS([pthread.h fuse.h], [], + [AC_MSG_FAILURE([Cannot find fuse2fs headers.])], +[#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29]) + + AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], + [AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], + [AC_MSG_FAILURE([Cannot find fuse library.])])]) + ]) AC_MSG_RESULT([Enabling fuse2fs]) fi , -AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"], +PKG_CHECK_MODULES([fuse3], [fuse3], + [ + FUSE_LIB=-lfuse3 + ], [ + AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"], [#define _FILE_OFFSET_BITS 64 #define FUSE_USE_VERSION 29 #ifdef __linux__ @@ -1343,11 +1351,13 @@ AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"], # include <linux/falloc.h> # include <linux/xattr.h> #endif]) -if test -z "$FUSE_CMT" -then - AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], -[AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], [FUSE_CMT="#"])]) -fi + if test -z "$FUSE_CMT" + then + AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], + [AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], + [FUSE_CMT="#"])]) + fi + ]) if test -z "$FUSE_CMT" then AC_MSG_RESULT([Enabling fuse2fs by default.]) @@ -1355,6 +1365,29 @@ fi ) AC_SUBST(FUSE_LIB) AC_SUBST(FUSE_CMT) +if test "$FUSE_LIB" = "-lfuse3" +then + FUSE_USE_VERSION=35 + CFLAGS="$CFLAGS $fuse3_CFLAGS" + LDFLAGS="$LDFLAGS $fuse3_LDFLAGS" + AC_CHECK_HEADERS([pthread.h fuse.h], [], + [AC_MSG_FAILURE([Cannot find fuse3 fuse2fs headers.])], +[#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 35 +#ifdef __linux__ +#include <linux/fs.h> +#include <linux/falloc.h> +#include <linux/xattr.h> +#endif]) +elif test -n "$FUSE_LIB" +then + FUSE_USE_VERSION=29 +fi +if test -n "$FUSE_USE_VERSION" +then + AC_DEFINE_UNQUOTED(FUSE_USE_VERSION, $FUSE_USE_VERSION, + [Define to the version of FUSE to use]) +fi dnl dnl See if optreset exists dnl diff --git a/lib/config.h.in b/lib/config.h.in index 076c38235..f39eeac35 100644 --- a/lib/config.h.in +++ b/lib/config.h.in @@ -37,6 +37,9 @@ language is requested. */ #undef ENABLE_NLS +/* Define to the version of FUSE to use */ +#undef FUSE_USE_VERSION + /* Define to 1 if you have the `add_key' function. */ #undef HAVE_ADD_KEY diff --git a/misc/fuse2fs.c b/misc/fuse2fs.c index 0dc77eadc..b0b2f44f0 100644 --- a/misc/fuse2fs.c +++ b/misc/fuse2fs.c @@ -9,7 +9,6 @@ * %End-Header% */ #define _FILE_OFFSET_BITS 64 -#define FUSE_USE_VERSION 29 #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif @@ -19,12 +18,9 @@ # include <linux/fs.h> # include <linux/falloc.h> # include <linux/xattr.h> -# define FUSE_PLATFORM_OPTS ",big_writes" # ifdef HAVE_SYS_ACL_H # define TRANSLATE_LINUX_ACLS # endif -#else -# define FUSE_PLATFORM_OPTS "" #endif #ifdef TRANSLATE_LINUX_ACLS # include <sys/acl.h> @@ -35,6 +31,15 @@ #include <inttypes.h> #include "ext2fs/ext2fs.h" #include "ext2fs/ext2_fs.h" +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) +# define FUSE_PLATFORM_OPTS "" +#else +# ifdef __linux__ +# define FUSE_PLATFORM_OPTS ",use_ino,big_writes" +# else +# define FUSE_PLATFORM_OPTS ",use_ino" +# endif +#endif #include "../version.h" @@ -728,7 +733,11 @@ static void op_destroy(void *p EXT2FS_ATTR((unused))) } } -static void *op_init(struct fuse_conn_info *conn) +static void *op_init(struct fuse_conn_info *conn +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , struct fuse_config *cfg +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -798,7 +807,11 @@ static int stat_inode(ext2_filsys fs, ext2_ino_t ino, struct stat *statbuf) return ret; } -static int op_getattr(const char *path, struct stat *statbuf) +static int op_getattr(const char *path, struct stat *statbuf +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , struct fuse_file_info *fi +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -1542,7 +1555,11 @@ static int update_dotdot_helper(ext2_ino_t dir EXT2FS_ATTR((unused)), return 0; } -static int op_rename(const char *from, const char *to) +static int op_rename(const char *from, const char *to +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , unsigned int flags +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -1871,7 +1888,11 @@ out: return ret; } -static int op_chmod(const char *path, mode_t mode) +static int op_chmod(const char *path, mode_t mode +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , struct fuse_file_info *fi +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -1930,7 +1951,11 @@ out: return ret; } -static int op_chown(const char *path, uid_t owner, gid_t group) +static int op_chown(const char *path, uid_t owner, gid_t group +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , struct fuse_file_info *fi +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -2000,7 +2025,11 @@ out: return ret; } -static int op_truncate(const char *path, off_t len) +static int op_truncate(const char *path, off_t len +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , struct fuse_file_info *fi +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -2753,7 +2782,11 @@ static int op_readdir_iter(ext2_ino_t dir EXT2FS_ATTR((unused)), memcpy(namebuf, dirent->name, dirent->name_len & 0xFF); namebuf[dirent->name_len & 0xFF] = 0; - ret = i->func(i->buf, namebuf, NULL, 0); + ret = i->func(i->buf, namebuf, NULL, 0 +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , 0 +#endif + ); if (ret) return DIRENT_ABORT; @@ -2763,7 +2796,11 @@ static int op_readdir_iter(ext2_ino_t dir EXT2FS_ATTR((unused)), static int op_readdir(const char *path EXT2FS_ATTR((unused)), void *buf, fuse_fill_dir_t fill_func, off_t offset EXT2FS_ATTR((unused)), - struct fuse_file_info *fp) + struct fuse_file_info *fp +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , enum fuse_readdir_flags flags +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -2951,6 +2988,7 @@ out: return ret; } +#if FUSE_VERSION < FUSE_MAKE_VERSION(3, 0) static int op_ftruncate(const char *path EXT2FS_ATTR((unused)), off_t len, struct fuse_file_info *fp) { @@ -3024,8 +3062,13 @@ static int op_fgetattr(const char *path EXT2FS_ATTR((unused)), return ret; } +#endif /* FUSE_VERSION < FUSE_MAKE_VERSION(3, 0) */ -static int op_utimens(const char *path, const struct timespec ctv[2]) +static int op_utimens(const char *path, const struct timespec ctv[2] +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + , struct fuse_file_info *fi +#endif + ) { struct fuse_context *ctxt = fuse_get_context(); struct fuse2fs *ff = (struct fuse2fs *)ctxt->private_data; @@ -3259,7 +3302,12 @@ static int ioctl_fitrim(ext2_filsys fs, struct fuse2fs_file_handle *fh, #endif /* FITRIM */ #if FUSE_VERSION >= FUSE_MAKE_VERSION(2, 8) -static int op_ioctl(const char *path EXT2FS_ATTR((unused)), int cmd, +static int op_ioctl(const char *path EXT2FS_ATTR((unused)), +#if FUSE_VERSION >= FUSE_MAKE_VERSION(3, 0) + unsigned int cmd, +#else + int cmd, +#endif void *arg EXT2FS_ATTR((unused)), struct fuse_file_info *fp, unsigned int flags EXT2FS_ATTR((unused)), void *data) @@ -3603,10 +3651,12 @@ static struct fuse_operations fs_ops = { .fsyncdir = op_fsync, .access = op_access, .create = op_create, +#if FUSE_VERSION < FUSE_MAKE_VERSION(3, 0) .ftruncate = op_ftruncate, .fgetattr = op_fgetattr, +#endif .utimens = op_utimens, -#if FUSE_VERSION >= FUSE_MAKE_VERSION(2, 9) +#if (FUSE_VERSION >= FUSE_MAKE_VERSION(2, 9)) && (FUSE_VERSION < FUSE_MAKE_VERSION(3, 0)) # if defined(UTIME_NOW) || defined(UTIME_OMIT) .flag_utime_omit_ok = 1, # endif @@ -3618,10 +3668,14 @@ static struct fuse_operations fs_ops = { #endif #if FUSE_VERSION >= FUSE_MAKE_VERSION(2, 8) .ioctl = op_ioctl, +#if FUSE_VERSION < FUSE_MAKE_VERSION(3, 0) .flag_nullpath_ok = 1, #endif +#endif #if FUSE_VERSION >= FUSE_MAKE_VERSION(2, 9) +#if FUSE_VERSION < FUSE_MAKE_VERSION(3, 0) .flag_nopath = 1, +#endif # ifdef SUPPORT_FALLOCATE .fallocate = op_fallocate, # endif @@ -3860,7 +3914,7 @@ int main(int argc, char *argv[]) get_random_bytes(&fctx.next_generation, sizeof(unsigned int)); /* Set up default fuse parameters */ - snprintf(extra_args, BUFSIZ, "-okernel_cache,subtype=ext4,use_ino," + snprintf(extra_args, BUFSIZ, "-okernel_cache,subtype=ext4," "fsname=%s,attr_timeout=0" FUSE_PLATFORM_OPTS, fctx.device); if (fctx.no_default_opts == 0) |