grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2] grub-mount: Support libfuse 3


From: Daniel Kiper
Subject: Re: [PATCH v2] grub-mount: Support libfuse 3
Date: Fri, 11 Mar 2022 00:18:15 +0100
User-agent: NeoMutt/20170113 (1.7.2)

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 <fvogt@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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]