hasse69 / rar2fs

FUSE file system for reading RAR archives
https://hasse69.github.io/rar2fs/
GNU General Public License v3.0
279 stars 27 forks source link

Support fuse3? #102

Closed doronbehar closed 5 years ago

doronbehar commented 5 years ago

I get an error with fuse3 installed when I ./configure, here is the relevant part from config.log:

configure:4284: checking for gcc option to accept ISO C99
...skipping...
/usr/include/fuse3/fuse_common.h:760:4: error: #error only API version 30 or greater is supported
 #  error only API version 30 or greater is supported
    ^~~~~

Does it mean rar2fs works only with fuse2 now?

hasse69 commented 5 years ago

Correct, I am afraid rar2fs only supports fuse2. It is a rather huge undertaking to move from fuse2 to fuse3 and currently there is no plan for adding support for the latter either. But most systems should be providing fuse2 as a fall-back alternative? The two versions can co-exist without conflict. That was intentional and a prerequisite for fuse3 since otherwise a lot of file system would break and stop working since the two APIs are not compatible.

What options did you provide to configure? Did you intentionally point it to the fuse3 headers?

hasse69 commented 5 years ago

Can you also check in /usr/include if there is a fuse3 and a fuse folder there? There should be a fuse.h header directly under /usr/include that simply includes fuse/fuse.h (which is fuse2). A user should explicitly use the fuse3 path unless the fuse2 API is required. The library should not be an issue since they are named differently, libfuse.so vs. libfuse3.so. The configuration script provided by rar2fs only looks for libfuse.so. So please check that you have both fuse2 and fuse3 installed on your system, or else this is not going to work.

doronbehar commented 5 years ago

Here on Arch Linux, there are now 2 packages for the fuse library - fuse2 and fuse3. fuse2 owns the file /usr/include/fuse.h. There is an AUR package for your software, (not maintained by my) and it says that fuse3 is a dependency so I guess the maintainer should be notified. I was able to successfully compile this package with fuse2 as a dependency with no other ./configure flags.

hasse69 commented 5 years ago

So how does the recipe in Arch Linux look like? Does it explicitly add —with-fuse=/usr/include/fuse3? Otherwise it does not make sense since rar2fs configure uses /usr/include by default and looks for fuse.h which normally includes fuse/fuse.h.

In any way, the problem seems related to distro packaging and not the rar2fs package itself.

doronbehar commented 5 years ago

I've tried adding —with-fuse=/usr/include/fuse3 and then I got the error message I reported initially. And yes it's a distro issue. I see this issue as solved unless you'd like to keep it open for tracking the development of the migration to fuse3.

hasse69 commented 5 years ago

Of course, adding --with-fuse=/usr/include/fuse3 would/should not work since that results in wrong header being picked up. I assume this is the error Arch Linux introduced recently, otherwise it would have worked. I will most likely close this issue, migrating to fuse3 is not something that will happen very soon, if ever. Can you inform the maintainer on Arch Linux about the flaw in their setup?

doronbehar commented 5 years ago

Reported.

hasse69 commented 5 years ago

Great, thanks! Will keep the issue open for a while longer for follow up on the Arch Linux progress.

hasse69 commented 5 years ago

Looks like Arch Linux is using configure correctly.

build() {
  cd "$srcdir/$pkgname-$pkgver"
  ./configure --prefix=/usr --sbindir=/usr/bin --with-unrar=../unrar
  make
}

I.e. they get a statically linked libunrar.

They do not seem to point the build to some alternative fuse path which makes me believe the fuse installation on Arch Linux is done wrong somehow. The fuse3 package should never be possible to pick up by mistake if installed correctly since it should use dedicated paths and names for libraries and utilities.

hasse69 commented 5 years ago

Not sure how this could ever have failed to configure since by default the fuse3 package in Arch Linux does not install /usr/include/fuse.h (which then includes /usr/include/fuse/fuse.h).

There however seems to be an error in the fuse-common 3.3.0-1 package, since it claims to be common for both fuse2 and fuse3, which is not entirely correct since it installs mount.fuse only and seems to be linked to the fuse3 library!? The fuse3 package should install mount.fuse3, not mount.fuse which is supposed to be the fuse2 version of the tool. But the latter does not explains why rar2fs fails to build out of the box unless the system was modified in some way.

doronbehar commented 5 years ago

@hasse69 the original ./configure command of the Arch Linux package works fine. It failed because it had fuse3 as dependency. As for fuse-common I don't know what to tell you but it doesn't have to do anything with this non-issue.

hasse69 commented 5 years ago

Fine, but a package dependency would only make a build from Arch Linux sysroot to fail since it might not have the necessary fuse2 files. A build from an already installed system should not fail as long as fuse2 is installed properly. Also, the error you got indicates something more is broken here since if it were only related to a bad dependency, you should get another error, specifically that fuse.h could not be found.

Another problem I see here is that even if they change dependency to fuse2, if fuse2 and fuse3 is not installed properly rar2fs might fail in run-time, as one already reported on their website for mount.fuse. Only indirectly related to rar2fs since it would affect any fuse2 based file system that is started through e.g. /etc/fstab and the mount-helper.

hasse69 commented 5 years ago

Will close this issue since I do not think there is much more to add?