On Tue, Feb 08, 2022 at 05:22:45PM +0100, Daniel Kiper wrote: > On Mon, Jan 17, 2022 at 03:34:37PM +0100, Fabian Vogt wrote: > > libfuse 3.0.0 got released in 2016, with some API changes compared to 2.x. > > This commit introduces support for 3.x while keeping it compatible with 2.6 > > as a fallback still. > > > > To detect fuse3, switch configure over to use pkg-config, which is simpler > > yet > > more reliable than looking for library and header manually. Also set > > FUSE_USE_VERSION that way, as it depends on the used libfuse version. > > > > Now that the CFLAGS are read from pkg-config, use just <fuse.h>, which works > > with 2.x as well as 3.x and is recommended by libfuse upstream. > > > > One behaviour change of libfuse3 is that FUSE_ATOMIC_O_TRUNC is set by > > default, > > which means that open with O_TRUNC is passed as-is instead of calling the > > truncate operation. With libfuse2, truncate failed with -ENOSYS and that was > > returned to the application. To make O_TRUNC fail with libfuse3, return > > -EROFS > > explicitly if writing was requested. > > > > Signed-off-by: Fabian Vogt <fv...@suse.de> > > Sadly this patch breaks Windows builds: > In file included from util/grub-mount.c:36:0: > /usr/include/fuse/fuse.h:33:25: fatal error: sys/statvfs.h: No such file or > directory > #include <sys/statvfs.h> > ^ > compilation terminated. > > I think it happens because pkg-config is not aware we want make Windows > version of the GRUB. So, I would suggest to disable FUSE detection when > the host for tools is Windows.
Ugh... Operator error... I realized Windows build was using incorrect pkg-config. When I installed correct one everything went smoothly. Sorry for the noise. I will commit this patch together with other patches next week. > And two nits below... I will fix them myself. Daniel > > --- > > v2: add __attribute__ ((unused)) > > > > Makefile.util.def | 4 +++- > > configure.ac | 16 +++++----------- > > util/grub-mount.c | 25 ++++++++++++++++++++++--- > > 3 files changed, 30 insertions(+), 15 deletions(-) > > > > diff --git a/Makefile.util.def b/Makefile.util.def > > index f8b356cc1..e92c1f346 100644 > > --- a/Makefile.util.def > > +++ b/Makefile.util.def > > @@ -309,11 +309,13 @@ program = { > > common = grub-core/disk/host.c; > > common = grub-core/osdep/init.c; > > > > + cflags = '$(FUSE_CFLAGS)'; > > + > > ldadd = libgrubmods.a; > > ldadd = libgrubgcry.a; > > ldadd = libgrubkern.a; > > ldadd = grub-core/lib/gnulib/libgnu.a; > > - ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) > > -lfuse'; > > + ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) > > $(FUSE_LIBS)'; > > condition = COND_GRUB_MOUNT; > > }; > > > > diff --git a/configure.ac b/configure.ac > > index 4f649edaf..1d40f9560 100644 > > --- a/configure.ac > > +++ b/configure.ac > > @@ -1787,17 +1787,11 @@ if test x"$enable_grub_mount" = xno ; then > > fi > > > > if test x"$grub_mount_excuse" = x ; then > > - AC_CHECK_LIB([fuse], [fuse_main_real], [], > > - [grub_mount_excuse="need FUSE library"]) > > -fi > > - > > -if test x"$grub_mount_excuse" = x ; then > > - # Check for fuse headers. > > - SAVED_CPPFLAGS="$CPPFLAGS" > > - CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26" > > - AC_CHECK_HEADERS([fuse/fuse.h], [], > > - [grub_mount_excuse=["need FUSE headers"]]) > > - CPPFLAGS="$SAVED_CPPFLAGS" > > + PKG_CHECK_MODULES([FUSE], [fuse3], [FUSE_CFLAGS="$FUSE_CFLAGS > > -DFUSE_USE_VERSION=32"], [ > > s/[FUSE]/[fuse3]/ > > > + PKG_CHECK_MODULES([FUSE], [fuse], [FUSE_CFLAGS="$FUSE_CFLAGS > > -DFUSE_USE_VERSION=26"], [ > > s/[FUSE]/[fuse]/ > > Otherwise you cannot differentiate FUSE3 and FUSE detection just reading the > configure messages. > > Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel