hasse69 / rar2fs

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

Error with make on Ubuntu server 20.04.2 #157

Closed sebastianklug closed 3 years ago

sebastianklug commented 3 years ago

I'm having trouble with make. I have tried a couple of ways with different results.

First with default fuse.h Then with fuse.h from libfuse-dev pkg, this gives a somewhat different set of errors and warning. And finally libfuse3-dev. But fuse.h is not found (even with --with-fuse), so I assume fuse 2 should be used.

Is there something I am missing or have forgotten to configure?

emby@emby:~/opt/rar2fs-1.29.4$ autoreconf -f -i emby@emby:~/opt/rar2fs-1.29.4$ ./configure --with-fuse=/usr/include/ --with-unrar=/home/emby/opt/unrar/ && make checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking target system type... x86_64-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking whether make supports the include directive... yes (GNU style) checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking whether gcc understands -c and -o together... yes checking dependency style of gcc... gcc3 checking for gcc option to accept ISO C99... none needed checking for gcc option to accept ISO Standard C... (cached) none needed checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking dependency style of g++... gcc3 checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define EXTENSIONS... yes checking whether byte ordering is bigendian... no checking for size_t... yes checking for working alloca.h... yes checking for alloca... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking malloc.h usability... yes checking malloc.h presence... yes checking for malloc.h... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking sys/mount.h usability... yes checking sys/mount.h presence... yes checking for sys/mount.h... yes checking sys/param.h usability... yes checking sys/param.h presence... yes checking for sys/param.h... yes checking sys/statvfs.h usability... yes checking sys/statvfs.h presence... yes checking for sys/statvfs.h... yes checking syslog.h usability... yes checking syslog.h presence... yes checking for syslog.h... yes checking wchar.h usability... yes checking wchar.h presence... yes checking for wchar.h... yes checking execinfo.h usability... yes checking execinfo.h presence... yes checking for execinfo.h... yes checking ucontext.h usability... yes checking ucontext.h presence... yes checking for ucontext.h... yes checking sched.h usability... yes checking sched.h presence... yes checking for sched.h... yes checking sys/sysmacros.h usability... yes checking sys/sysmacros.h presence... yes checking for sys/sysmacros.h... yes checking sys/xattr.h usability... yes checking sys/xattr.h presence... yes checking for sys/xattr.h... yes checking for dirent.h that defines DIR... yes checking for library containing opendir... none required checking for stdbool.h that conforms to C99... no checking for _Bool... no checking whether to enable assertions... yes checking for uid_t in sys/types.h... yes checking for inline... inline checking for mode_t... yes checking for off_t... yes checking for pid_t... yes checking for size_t... (cached) yes checking for ssize_t... yes checking for struct stat.st_blksize... yes checking for struct stat.st_gen... no checking for struct stat.st_atim... yes checking for struct stat.st_ctim... yes checking for struct stat.st_mtim... yes checking for struct stat.st_blocks... yes checking for struct stat.st_rdev... yes checking for uint64_t... yes checking for a working PRIu64... yes checking return type of signal handlers... void checking for struct sigaction.sa_sigaction... yes checking for unistd.h... (cached) yes checking for working chown... yes checking vfork.h usability... no checking vfork.h presence... no checking for vfork.h... no checking for fork... yes checking for vfork... yes checking for working fork... yes checking for working vfork... (cached) yes checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking for _LARGEFILE_SOURCE value needed for large files... no checking whether lstat correctly handles trailing slash... yes checking for mktime... yes checking for atexit... yes checking for dup3... yes checking for fs_stat_dev... no checking for ftruncate... yes checking for getcwd... yes checking for getpass... yes checking for lchown... yes checking for memchr... yes checking for memmove... yes checking for memset... yes checking for mkdir... yes checking for realpath... yes checking for rmdir... yes checking for select... yes checking for setlocale... yes checking for strchr... yes checking for strdup... yes checking for strerror... yes checking for strpbrk... yes checking for strrchr... yes checking for strstr... yes checking for strtol... yes checking for strtoul... yes checking for utimensat... yes checking for fdatasync... yes checking for wcstombs... yes checking for umask... yes checking for memrchr... yes checking for library containing getxattr... none required checking for getxattr... yes checking for lgetxattr... yes checking for fgetxattr... yes checking for listxattr... yes checking for llistxattr... yes checking for flistxattr... yes checking for removexattr... yes checking for lremovexattr... yes checking for fremovexattr... yes checking for setxattr... yes checking for lsetxattr... yes checking for fsetxattr... yes checking whether xattr interface takes additional options... no checking for fmemopen... yes checking for lockf... yes checking for flock... yes checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for sys/param.h... (cached) yes checking for getpagesize... yes checking for working mmap... yes checking for munmap... yes checking for library containing backtrace... none required checking for the pthreads library -lpthreads... no checking whether pthreads work without any flags... no checking whether pthreads work with -Kthread... no checking whether pthreads work with -kthread... no checking for the pthreads library -llthread... no checking whether pthreads work with -pthread... yes checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE checking if more special flags are required for pthreads... no checking for PTHREAD_PRIO_INHERIT... yes checking for main in -lrt... yes checking for main in -ldl... yes checking fuse.h usability... yes checking fuse.h presence... yes checking for fuse.h... yes checking for fuse_new in -losxfuse_i64... no checking for fuse_new in -losxfuse... no checking for fuse_new in -lfuse_ino64... no checking for fuse_new in -lfuse4x... no checking for fuse_new in -lfuse... yes checking for fuse_version... yes checking for supported FUSE API version... yes checking if we need to set -DCYGFUSE... no checking how to run the C++ preprocessor... g++ -E checking rar.hpp usability... yes checking rar.hpp presence... yes checking for rar.hpp... yes checking for static linking of UnRAR library... fallback checking if unrar library needs -DRAR_SMP... yes checking for iconv... yes checking for working iconv... yes checking for iconv declaration... extern size_t iconv (iconv_t cd, char inbuf, size_t inbytesleft, char outbuf, size_t outbytesleft); checking for commit hash in git repo... no checking for sched_setaffinity... yes checking whether cpu_set_t available... yes checking whether the CPU_SET and CPU_ZERO macros are defined... yes checking scandir ARG3 => const struct dirent * ... ok checking if compiler supports -fno-omit-frame-pointer... yes checking if compiler supports -Wextra... yes checking if compiler supports -Wno-unused-result... yes checking if compiler supports visibility attribute... yes checking if linker supports -rdynamic... yes checking for __sync_synchronize... yes checking for GNU style dirname... yes checking for errno ENOATTR... no checking whether ln -s works... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating man/Makefile config.status: creating src/config.h config.status: executing depfiles commands Making all in src make[1]: Entering directory '/home/emby/opt/rar2fs-1.29.4/src' make all-am make[2]: Entering directory '/home/emby/opt/rar2fs-1.29.4/src' gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT optdb.o -MD -MP -MF .deps/optdb.Tpo -c -o optdb.o optdb.c mv -f .deps/optdb.Tpo .deps/optdb.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT filecache.o -MD -MP -MF .deps/filecache.Tpo -c -o filecache.o filecache.c mv -f .deps/filecache.Tpo .deps/filecache.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT iobuffer.o -MD -MP -MF .deps/iobuffer.Tpo -c -o iobuffer.o iobuffer.c mv -f .deps/iobuffer.Tpo .deps/iobuffer.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT sighandler.o -MD -MP -MF .deps/sighandler.Tpo -c -o sighandler.o sighandler.c mv -f .deps/sighandler.Tpo .deps/sighandler.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT hashtable.o -MD -MP -MF .deps/hashtable.Tpo -c -o hashtable.o hashtable.c mv -f .deps/hashtable.Tpo .deps/hashtable.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT dircache.o -MD -MP -MF .deps/dircache.Tpo -c -o dircache.o dircache.c mv -f .deps/dircache.Tpo .deps/dircache.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT dirlist.o -MD -MP -MF .deps/dirlist.Tpo -c -o dirlist.o dirlist.c mv -f .deps/dirlist.Tpo .deps/dirlist.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT rarconfig.o -MD -MP -MF .deps/rarconfig.Tpo -c -o rarconfig.o rarconfig.c mv -f .deps/rarconfig.Tpo .deps/rarconfig.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT dirname.o -MD -MP -MF .deps/dirname.Tpo -c -o dirname.o dirname.c mv -f .deps/dirname.Tpo .deps/dirname.Po gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT rar2fs.o -MD -MP -MF .deps/rar2fs.Tpo -c -o rar2fs.o rar2fs.c In file included from ./fuse.h:19, from rar2fs.c:39: /usr/include/fuse_common.h:838:4: error: #error only API version 30 or greater is supported 838 # error only API version 30 or greater is supported ^~~~~ rar2fs.c: In function ‘dump_dir_list’: rar2fs.c:3337:25: error: too few arguments to function ‘filler’ 3337 filler(buffer, next->entry.name, next->entry.st, 0); ^~ rar2fs.c: In function ‘rar2_readdir’: rar2fs.c:3501:17: error: too few arguments to function ‘filler’ 3501 filler(buffer, ".", NULL, 0); ^~ rar2fs.c:3502:17: error: too few arguments to function ‘filler’ 3502 filler(buffer, "..", NULL, 0); ^~ rar2fs.c: In function ‘rar2_readdir2’: rar2fs.c:3586:9: error: too few arguments to function ‘filler’ 3586 filler(buffer, ".", NULL, 0); ^~ rar2fs.c:3587:9: error: too few arguments to function ‘filler’ 3587 filler(buffer, "..", NULL, 0); ^~ rar2fs.c: At top level: rar2fs.c:5226:17: warning: initialization of ‘void ()(struct fuse_conn_info , struct fuse_config )’ from incompatible pointer type ‘void ()(struct fuse_conn_info *)’ [-Wincompatible-pointer-types] 5226 .init = rar2_init, ^~~~~ rar2fs.c:5226:17: note: (near initialization for ‘rar2_operations.init’) rar2fs.c:5229:20: warning: initialization of ‘int ()(const char , const struct timespec , struct fuse_file_info )’ from incompatible pointer type ‘int ()(const char , const struct timespec *)’ [-Wincompatible-pointer-types] 5229 .utimens = rar2_utimens, ^~~~ rar2fs.c:5229:20: note: (near initialization for ‘rar2_operations.utimens’) rar2fs.c:5247:10: error: ‘struct fuse_operations’ has no member named ‘flag_nopath’ 5247 .flag_nopath = 1, ^~~ rar2fs.c:5247:24: warning: initialization of ‘int ()(const char , struct fuse_file_info *)’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] 5247 .flag_nopath = 1, ^ rar2fs.c:5247:24: note: (near initialization for ‘rar2_operations.opendir’) rar2fs.c: In function ‘work_task’: rar2fs.c:5265:55: error: macro "fuse_loop_mt" requires 2 arguments, but only 1 given 5265 wdt->status = wdt->mt ? fuse_loop_mt(wdt->fuse) : fuse_loop(wdt->fuse); ^ In file included from rar2fs.c:39: ./fuse.h:1020: note: macro "fuse_loop_mt" defined here 1020 #define fuse_loop_mt(f, clone_fd) fuse_loop_mt_31(f, clone_fd)
rar2fs.c:5265:33: error: ‘fuse_loop_mt’ undeclared (first use in this function); did you mean ‘fuse_loop_mt_31’? 5265 wdt->status = wdt->mt ? fuse_loop_mt(wdt->fuse) : fuse_loop(wdt->fuse); ^~~~ fuse_loop_mt_31 rar2fs.c:5265:33: note: each undeclared identifier is reported only once for each function it appears in rar2fs.c: In function ‘work’: rar2fs.c:5370:49: warning: assignment to ‘int ()(const char , struct stat , struct fuse_file_info )’ from incompatible pointer type ‘int ()(const char , struct stat *)’ [-Wincompatible-pointer-types] 5370 rar2_operations.getattr = rar2_getattr; ^ rar2fs.c:5372:49: warning: assignment to ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info , enum fuse_readdir_flags)’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info , enum fuse_readdir_flags)’} from incompatible pointer type ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info )’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info )’} [-Wincompatible-pointer-types] 5372 rar2_operations.readdir = rar2_readdir; ^ rar2fs.c:5374:49: warning: assignment to ‘int ()(const char , const char , unsigned int)’ from incompatible pointer type ‘int ()(const char , const char )’ [-Wincompatible-pointer-types] 5374 rar2_operations.rename = rar2_rename; ^ rar2fs.c:5380:49: warning: assignment to ‘int ()(const char , off_t, struct fuse_file_info )’ {aka ‘int ()(const char , long int, struct fuse_file_info )’} from incompatible pointer type ‘int ()(const char , off_t)’ {aka ‘int ()(const char , long int)’} [-Wincompatible-pointer-types] 5380 rar2_operations.truncate = rar2_truncate; ^ rar2fs.c:5381:49: warning: assignment to ‘int ()(const char , mode_t, struct fuse_file_info )’ {aka ‘int ()(const char , unsigned int, struct fuse_file_info )’} from incompatible pointer type ‘int ()(const char , mode_t)’ {aka ‘int ()(const char , unsigned int)’} [-Wincompatible-pointer-types] 5381 rar2_operations.chmod = rar2_chmod; ^ rar2fs.c:5382:49: warning: assignment to ‘int ()(const char , uid_t, gid_t, struct fuse_file_info )’ {aka ‘int ()(const char , unsigned int, unsigned int, struct fuse_file_info )’} from incompatible pointer type ‘int ()(const char , uid_t, gid_t)’ {aka ‘int ()(const char , unsigned int, unsigned int)’} [-Wincompatible-pointer-types] 5382 rar2_operations.chown = rar2_chown; ^ rar2fs.c:5385:49: warning: assignment to ‘int ()(const char , struct stat , struct fuse_file_info )’ from incompatible pointer type ‘int ()(const char , struct stat *)’ [-Wincompatible-pointer-types] 5385 rar2_operations.getattr = rar2_getattr2; ^ rar2fs.c:5387:49: warning: assignment to ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info , enum fuse_readdir_flags)’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info , enum fuse_readdir_flags)’} from incompatible pointer type ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info )’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info )’} [-Wincompatible-pointer-types] 5387 rar2_operations.readdir = rar2_readdir2; ^ rar2fs.c:5410:14: warning: implicit declaration of function ‘fuse_parse_cmdline’ [-Wimplicit-function-declaration] 5410 if (!fuse_parse_cmdline(args, &mp, &mt, &fg)) { ^~~~~~ rar2fs.c:5411:31: warning: passing argument 1 of ‘fuse_mount’ from incompatible pointer type [-Wincompatible-pointer-types] 5411 ch = fuse_mount(mp, args); ^~
char *
In file included from rar2fs.c:39: ./fuse.h:939:29: note: expected ‘struct fuse ’ but argument is of type ‘char ’ 939 int fuse_mount(struct fuse f, const char mountpoint); ~~~~~^ rar2fs.c:5411:35: warning: passing argument 2 of ‘fuse_mount’ from incompatible pointer type [-Wincompatible-pointer-types] 5411 ch = fuse_mount(mp, args); ^~~~
struct fuse_args *
In file included from rar2fs.c:39: ./fuse.h:939:44: note: expected ‘const char ’ but argument is of type ‘struct fuse_args ’ 939 int fuse_mount(struct fuse f, const char mountpoint); ~~^~~~ rar2fs.c:5411:18: warning: assignment to ‘struct fuse_chan *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] 5411 ch = fuse_mount(mp, args); ^ rar2fs.c:5415:36: warning: passing argument 1 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5415 f = fuse_new(ch, args, &rar2_operations, ^~
struct fuse_chan *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘struct fuse_args ’ but argument is of type ‘struct fuse_chan ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5415:40: warning: passing argument 2 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5415 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_args *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘const struct fuse_operations ’ but argument is of type ‘struct fuse_args ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5415:46: warning: passing argument 3 of ‘fuse_new’ makes integer from pointer without a cast [-Wint-conversion] 5415 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_operations *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘size_t’ {aka ‘long unsigned int’} but argument is of type ‘struct fuse_operations *’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5416:41: warning: passing argument 4 of ‘fuse_new’ makes pointer from integer without a cast [-Wint-conversion] 5416 sizeof(rar2_operations), NULL); ^~~~~~~
long unsigned int
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘void *’ but argument is of type ‘long unsigned int’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5415:27: error: too many arguments to function ‘fuse_new’ 5415 f = fuse_new(ch, args, &rar2_operations, ^~~~ In file included from rar2fs.c:39: ./fuse.h:927:14: note: declared here 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:44: warning: passing argument 1 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5423 f = fuse_new(ch, args, &rar2_operations, ^~
struct fuse_chan *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘struct fuse_args ’ but argument is of type ‘struct fuse_chan ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:48: warning: passing argument 2 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5423 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_args *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘const struct fuse_operations ’ but argument is of type ‘struct fuse_args ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:54: warning: passing argument 3 of ‘fuse_new’ makes integer from pointer without a cast [-Wint-conversion] 5423 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_operations *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘size_t’ {aka ‘long unsigned int’} but argument is of type ‘struct fuse_operations *’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5424:41: warning: passing argument 4 of ‘fuse_new’ makes pointer from integer without a cast [-Wint-conversion] 5424 sizeof(rar2_operations), NULL); ^~~~~~~
long unsigned int
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘void *’ but argument is of type ‘long unsigned int’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:35: error: too many arguments to function ‘fuse_new’ 5423 f = fuse_new(ch, args, &rar2_operations, ^~~~ In file included from rar2fs.c:39: ./fuse.h:927:14: note: declared here 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5427:44: warning: passing argument 1 of ‘fuse_unmount’ from incompatible pointer type [-Wincompatible-pointer-types] 5427 fuse_unmount(mp, ch); ^~
char *
In file included from rar2fs.c:39: ./fuse.h:948:32: note: expected ‘struct fuse ’ but argument is of type ‘char ’ 948 void fuse_unmount(struct fuse *f); ~~~~~^ rar2fs.c:5427:31: error: too many arguments to function ‘fuse_unmount’ 5427 fuse_unmount(mp, ch); ^~~~ In file included from rar2fs.c:39: ./fuse.h:948:6: note: declared here 948 void fuse_unmount(struct fuse *f); ^~~~ rar2fs.c:5451:17: warning: implicit declaration of function ‘fuse_exited’; did you mean ‘fuse_exit’? [-Wimplicit-function-declaration] 5451 while (!fuse_exited(f) && !wdt.work_task_exited) { ^~~ fuse_exit rar2fs.c:5464:22: warning: passing argument 1 of ‘fuse_unmount’ from incompatible pointer type [-Wincompatible-pointer-types] 5464 fuse_unmount(mp, ch); ^~
char *

In file included from rar2fs.c:39: ./fuse.h:948:32: note: expected ‘struct fuse ’ but argument is of type ‘char ’ 948 | void fuse_unmount(struct fuse f); | ~~~~~^ rar2fs.c:5464:9: error: too many arguments to function ‘fuse_unmount’ 5464 | fuse_unmount(mp, ch); | ^~~~ In file included from rar2fs.c:39: ./fuse.h:948:6: note: declared here 948 | void fuse_unmount(struct fuse f); | ^~~~ make[2]: [Makefile:487: rar2fs.o] Error 1 make[2]: Leaving directory '/home/emby/opt/rar2fs-1.29.4/src' make[1]: [Makefile:362: all] Error 2 make[1]: Leaving directory '/home/emby/opt/rar2fs-1.29.4/src' make: *** [Makefile:383: all-recursive] Error 1 `

emby@emby:~/opt/rar2fs-1.29.4$ autoreconf -f -i emby@emby:~/opt/rar2fs-1.29.4$ ./configure --with-fuse=/usr/include/fuse/ --with-unrar=/home/emby/opt/unrar/ && make checking build system type... x86_64-pc-linux-gnu checking host system type... x86_64-pc-linux-gnu checking target system type... x86_64-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking whether make supports the include directive... yes (GNU style) checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking whether gcc understands -c and -o together... yes checking dependency style of gcc... gcc3 checking for gcc option to accept ISO C99... none needed checking for gcc option to accept ISO Standard C... (cached) none needed checking for g++... g++ checking whether we are using the GNU C++ compiler... yes checking whether g++ accepts -g... yes checking dependency style of g++... gcc3 checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define EXTENSIONS... yes checking whether byte ordering is bigendian... no checking for size_t... yes checking for working alloca.h... yes checking for alloca... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking arpa/inet.h usability... yes checking arpa/inet.h presence... yes checking for arpa/inet.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking malloc.h usability... yes checking malloc.h presence... yes checking for malloc.h... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking sys/mount.h usability... yes checking sys/mount.h presence... yes checking for sys/mount.h... yes checking sys/param.h usability... yes checking sys/param.h presence... yes checking for sys/param.h... yes checking sys/statvfs.h usability... yes checking sys/statvfs.h presence... yes checking for sys/statvfs.h... yes checking syslog.h usability... yes checking syslog.h presence... yes checking for syslog.h... yes checking wchar.h usability... yes checking wchar.h presence... yes checking for wchar.h... yes checking execinfo.h usability... yes checking execinfo.h presence... yes checking for execinfo.h... yes checking ucontext.h usability... yes checking ucontext.h presence... yes checking for ucontext.h... yes checking sched.h usability... yes checking sched.h presence... yes checking for sched.h... yes checking sys/sysmacros.h usability... yes checking sys/sysmacros.h presence... yes checking for sys/sysmacros.h... yes checking sys/xattr.h usability... yes checking sys/xattr.h presence... yes checking for sys/xattr.h... yes checking for dirent.h that defines DIR... yes checking for library containing opendir... none required checking for stdbool.h that conforms to C99... no checking for _Bool... no checking whether to enable assertions... yes checking for uid_t in sys/types.h... yes checking for inline... inline checking for mode_t... yes checking for off_t... yes checking for pid_t... yes checking for size_t... (cached) yes checking for ssize_t... yes checking for struct stat.st_blksize... yes checking for struct stat.st_gen... no checking for struct stat.st_atim... yes checking for struct stat.st_ctim... yes checking for struct stat.st_mtim... yes checking for struct stat.st_blocks... yes checking for struct stat.st_rdev... yes checking for uint64_t... yes checking for a working PRIu64... yes checking return type of signal handlers... void checking for struct sigaction.sa_sigaction... yes checking for unistd.h... (cached) yes checking for working chown... yes checking vfork.h usability... no checking vfork.h presence... no checking for vfork.h... no checking for fork... yes checking for vfork... yes checking for working fork... yes checking for working vfork... (cached) yes checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... no checking for _LARGEFILE_SOURCE value needed for large files... no checking whether lstat correctly handles trailing slash... yes checking for mktime... yes checking for atexit... yes checking for dup3... yes checking for fs_stat_dev... no checking for ftruncate... yes checking for getcwd... yes checking for getpass... yes checking for lchown... yes checking for memchr... yes checking for memmove... yes checking for memset... yes checking for mkdir... yes checking for realpath... yes checking for rmdir... yes checking for select... yes checking for setlocale... yes checking for strchr... yes checking for strdup... yes checking for strerror... yes checking for strpbrk... yes checking for strrchr... yes checking for strstr... yes checking for strtol... yes checking for strtoul... yes checking for utimensat... yes checking for fdatasync... yes checking for wcstombs... yes checking for umask... yes checking for memrchr... yes checking for library containing getxattr... none required checking for getxattr... yes checking for lgetxattr... yes checking for fgetxattr... yes checking for listxattr... yes checking for llistxattr... yes checking for flistxattr... yes checking for removexattr... yes checking for lremovexattr... yes checking for fremovexattr... yes checking for setxattr... yes checking for lsetxattr... yes checking for fsetxattr... yes checking whether xattr interface takes additional options... no checking for fmemopen... yes checking for lockf... yes checking for flock... yes checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for sys/param.h... (cached) yes checking for getpagesize... yes checking for working mmap... yes checking for munmap... yes checking for library containing backtrace... none required checking for the pthreads library -lpthreads... no checking whether pthreads work without any flags... no checking whether pthreads work with -Kthread... no checking whether pthreads work with -kthread... no checking for the pthreads library -llthread... no checking whether pthreads work with -pthread... yes checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE checking if more special flags are required for pthreads... no checking for PTHREAD_PRIO_INHERIT... yes checking for main in -lrt... yes checking for main in -ldl... yes checking fuse.h usability... yes checking fuse.h presence... yes checking for fuse.h... yes checking for fuse_new in -losxfuse_i64... no checking for fuse_new in -losxfuse... no checking for fuse_new in -lfuse_ino64... no checking for fuse_new in -lfuse4x... no checking for fuse_new in -lfuse... yes checking for fuse_version... yes checking for supported FUSE API version... yes checking if we need to set -DCYGFUSE... no checking how to run the C++ preprocessor... g++ -E checking rar.hpp usability... yes checking rar.hpp presence... yes checking for rar.hpp... yes checking for static linking of UnRAR library... fallback checking if unrar library needs -DRAR_SMP... yes checking for iconv... yes checking for working iconv... yes checking for iconv declaration... extern size_t iconv (iconv_t cd, char inbuf, size_t inbytesleft, char outbuf, size_t outbytesleft); checking for commit hash in git repo... no checking for sched_setaffinity... yes checking whether cpu_set_t available... yes checking whether the CPU_SET and CPU_ZERO macros are defined... yes checking scandir ARG3 => const struct dirent * ... ok checking if compiler supports -fno-omit-frame-pointer... yes checking if compiler supports -Wextra... yes checking if compiler supports -Wno-unused-result... yes checking if compiler supports visibility attribute... yes checking if linker supports -rdynamic... yes checking for __sync_synchronize... yes checking for GNU style dirname... yes checking for errno ENOATTR... no checking whether ln -s works... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Makefile config.status: creating src/Makefile config.status: creating man/Makefile config.status: creating src/config.h config.status: src/config.h is unchanged config.status: executing depfiles commands Making all in src make[1]: Entering directory '/home/emby/opt/rar2fs-1.29.4/src' make all-am make[2]: Entering directory '/home/emby/opt/rar2fs-1.29.4/src' gcc -DHAVE_CONFIG_H -I. -I/home/emby/opt/unrar -I/usr/include/fuse/ -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26 -DNDEBUG -Wall -fno-stack-protector -g -O2 -fno-omit-frame-pointer -Wextra -Wno-unused-result -pthread -MT rar2fs.o -MD -MP -MF .deps/rar2fs.Tpo -c -o rar2fs.o rar2fs.c In file included from ./fuse.h:19, from rar2fs.c:39: /usr/include/fuse/fuse_common.h:12:2: error: #error "Never include directly; use or instead." 12 #error "Never include directly; use or instead." ^~~~~ In file included from rar2fs.c:39: ./fuse.h:939:5: error: conflicting types for ‘fuse_mount’ 939 int fuse_mount(struct fuse f, const char mountpoint); ^~~~~~ In file included from ./fuse.h:19, from rar2fs.c:39: /usr/include/fuse/fuse_common.h:206:19: note: previous declaration of ‘fuse_mount’ was here 206 struct fuse_chan fuse_mount(const char mountpoint, struct fuse_args *args); ^~~~~~ In file included from rar2fs.c:39: ./fuse.h:948:6: error: conflicting types for ‘fuse_unmount’ 948 void fuse_unmount(struct fuse *f); ^~~~ In file included from ./fuse.h:19, from rar2fs.c:39: /usr/include/fuse/fuse_common.h:214:6: note: previous declaration of ‘fuse_unmount’ was here 214 void fuse_unmount(const char mountpoint, struct fuse_chan ch); ^~~~ rar2fs.c: In function ‘dump_dir_list’: rar2fs.c:3337:25: error: too few arguments to function ‘filler’ 3337 filler(buffer, next->entry.name, next->entry.st, 0); ^~ rar2fs.c: In function ‘rar2_readdir’: rar2fs.c:3501:17: error: too few arguments to function ‘filler’ 3501 filler(buffer, ".", NULL, 0); ^~ rar2fs.c:3502:17: error: too few arguments to function ‘filler’ 3502 filler(buffer, "..", NULL, 0); ^~ rar2fs.c: In function ‘rar2_readdir2’: rar2fs.c:3586:9: error: too few arguments to function ‘filler’ 3586 filler(buffer, ".", NULL, 0); ^~ rar2fs.c:3587:9: error: too few arguments to function ‘filler’ 3587 filler(buffer, "..", NULL, 0); ^~ rar2fs.c: At top level: rar2fs.c:5226:17: warning: initialization of ‘void ()(struct fuse_conn_info , struct fuse_config )’ from incompatible pointer type ‘void ()(struct fuse_conn_info *)’ [-Wincompatible-pointer-types] 5226 .init = rar2_init, ^~~~~ rar2fs.c:5226:17: note: (near initialization for ‘rar2_operations.init’) rar2fs.c:5229:20: warning: initialization of ‘int ()(const char , const struct timespec , struct fuse_file_info )’ from incompatible pointer type ‘int ()(const char , const struct timespec *)’ [-Wincompatible-pointer-types] 5229 .utimens = rar2_utimens, ^~~~ rar2fs.c:5229:20: note: (near initialization for ‘rar2_operations.utimens’) rar2fs.c:5244:10: error: ‘struct fuse_operations’ has no member named ‘flag_nullpath_ok’ 5244 .flag_nullpath_ok = 1, ^~~~ rar2fs.c:5244:29: warning: initialization of ‘int ()(const char , struct fuse_file_info *)’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] 5244 .flag_nullpath_ok = 1, ^ rar2fs.c:5244:29: note: (near initialization for ‘rar2_operations.opendir’) rar2fs.c:5247:10: error: ‘struct fuse_operations’ has no member named ‘flag_nopath’ 5247 .flag_nopath = 1, ^~~ rar2fs.c:5247:24: warning: initialization of ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info , enum fuse_readdir_flags)’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info , enum fuse_readdir_flags)’} from ‘int’ makes pointer from integer without a cast [-Wint-conversion] 5247 .flag_nopath = 1, ^ rar2fs.c:5247:24: note: (near initialization for ‘rar2_operations.readdir’) rar2fs.c: In function ‘work_task’: rar2fs.c:5265:55: error: macro "fuse_loop_mt" requires 2 arguments, but only 1 given 5265 wdt->status = wdt->mt ? fuse_loop_mt(wdt->fuse) : fuse_loop(wdt->fuse); ^ In file included from rar2fs.c:39: ./fuse.h:1020: note: macro "fuse_loop_mt" defined here 1020 #define fuse_loop_mt(f, clone_fd) fuse_loop_mt_31(f, clone_fd)
rar2fs.c:5265:33: error: ‘fuse_loop_mt’ undeclared (first use in this function); did you mean ‘fuse_loop_mt_31’? 5265 wdt->status = wdt->mt ? fuse_loop_mt(wdt->fuse) : fuse_loop(wdt->fuse); ^~~~ fuse_loop_mt_31 rar2fs.c:5265:33: note: each undeclared identifier is reported only once for each function it appears in rar2fs.c: In function ‘work’: rar2fs.c:5370:49: warning: assignment to ‘int ()(const char , struct stat , struct fuse_file_info )’ from incompatible pointer type ‘int ()(const char , struct stat *)’ [-Wincompatible-pointer-types] 5370 rar2_operations.getattr = rar2_getattr; ^ rar2fs.c:5372:49: warning: assignment to ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info , enum fuse_readdir_flags)’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info , enum fuse_readdir_flags)’} from incompatible pointer type ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info )’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info )’} [-Wincompatible-pointer-types] 5372 rar2_operations.readdir = rar2_readdir; ^ rar2fs.c:5374:49: warning: assignment to ‘int ()(const char , const char , unsigned int)’ from incompatible pointer type ‘int ()(const char , const char )’ [-Wincompatible-pointer-types] 5374 rar2_operations.rename = rar2_rename; ^ rar2fs.c:5380:49: warning: assignment to ‘int ()(const char , off_t, struct fuse_file_info )’ {aka ‘int ()(const char , long int, struct fuse_file_info )’} from incompatible pointer type ‘int ()(const char , off_t)’ {aka ‘int ()(const char , long int)’} [-Wincompatible-pointer-types] 5380 rar2_operations.truncate = rar2_truncate; ^ rar2fs.c:5381:49: warning: assignment to ‘int ()(const char , mode_t, struct fuse_file_info )’ {aka ‘int ()(const char , unsigned int, struct fuse_file_info )’} from incompatible pointer type ‘int ()(const char , mode_t)’ {aka ‘int ()(const char , unsigned int)’} [-Wincompatible-pointer-types] 5381 rar2_operations.chmod = rar2_chmod; ^ rar2fs.c:5382:49: warning: assignment to ‘int ()(const char , uid_t, gid_t, struct fuse_file_info )’ {aka ‘int ()(const char , unsigned int, unsigned int, struct fuse_file_info )’} from incompatible pointer type ‘int ()(const char , uid_t, gid_t)’ {aka ‘int ()(const char , unsigned int, unsigned int)’} [-Wincompatible-pointer-types] 5382 rar2_operations.chown = rar2_chown; ^ rar2fs.c:5385:49: warning: assignment to ‘int ()(const char , struct stat , struct fuse_file_info )’ from incompatible pointer type ‘int ()(const char , struct stat *)’ [-Wincompatible-pointer-types] 5385 rar2_operations.getattr = rar2_getattr2; ^ rar2fs.c:5387:49: warning: assignment to ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info , enum fuse_readdir_flags)’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info , enum fuse_readdir_flags)’} from incompatible pointer type ‘int ()(const char , void , int ()(void , const char , const struct stat , off_t, enum fuse_fill_dir_flags), off_t, struct fuse_file_info )’ {aka ‘int ()(const char , void , int ()(void , const char , const struct stat , long int, enum fuse_fill_dir_flags), long int, struct fuse_file_info )’} [-Wincompatible-pointer-types] 5387 rar2_operations.readdir = rar2_readdir2; ^ rar2fs.c:5411:31: warning: passing argument 1 of ‘fuse_mount’ from incompatible pointer type [-Wincompatible-pointer-types] 5411 ch = fuse_mount(mp, args); ^~
char *
In file included from rar2fs.c:39: ./fuse.h:939:29: note: expected ‘struct fuse ’ but argument is of type ‘char ’ 939 int fuse_mount(struct fuse f, const char mountpoint); ~~~~~^ rar2fs.c:5411:35: warning: passing argument 2 of ‘fuse_mount’ from incompatible pointer type [-Wincompatible-pointer-types] 5411 ch = fuse_mount(mp, args); ^~~~
struct fuse_args *
In file included from rar2fs.c:39: ./fuse.h:939:44: note: expected ‘const char ’ but argument is of type ‘struct fuse_args ’ 939 int fuse_mount(struct fuse f, const char mountpoint); ~~^~~~ rar2fs.c:5411:18: warning: assignment to ‘struct fuse_chan *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] 5411 ch = fuse_mount(mp, args); ^ rar2fs.c:5415:36: warning: passing argument 1 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5415 f = fuse_new(ch, args, &rar2_operations, ^~
struct fuse_chan *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘struct fuse_args ’ but argument is of type ‘struct fuse_chan ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5415:40: warning: passing argument 2 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5415 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_args *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘const struct fuse_operations ’ but argument is of type ‘struct fuse_args ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5415:46: warning: passing argument 3 of ‘fuse_new’ makes integer from pointer without a cast [-Wint-conversion] 5415 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_operations *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘size_t’ {aka ‘long unsigned int’} but argument is of type ‘struct fuse_operations *’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5416:41: warning: passing argument 4 of ‘fuse_new’ makes pointer from integer without a cast [-Wint-conversion] 5416 sizeof(rar2_operations), NULL); ^~~~~~~
long unsigned int
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘void *’ but argument is of type ‘long unsigned int’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5415:27: error: too many arguments to function ‘fuse_new’ 5415 f = fuse_new(ch, args, &rar2_operations, ^~~~ In file included from rar2fs.c:39: ./fuse.h:927:14: note: declared here 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:44: warning: passing argument 1 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5423 f = fuse_new(ch, args, &rar2_operations, ^~
struct fuse_chan *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘struct fuse_args ’ but argument is of type ‘struct fuse_chan ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:48: warning: passing argument 2 of ‘fuse_new’ from incompatible pointer type [-Wincompatible-pointer-types] 5423 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_args *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘const struct fuse_operations ’ but argument is of type ‘struct fuse_args ’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:54: warning: passing argument 3 of ‘fuse_new’ makes integer from pointer without a cast [-Wint-conversion] 5423 f = fuse_new(ch, args, &rar2_operations, ^~~~
struct fuse_operations *
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘size_t’ {aka ‘long unsigned int’} but argument is of type ‘struct fuse_operations *’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5424:41: warning: passing argument 4 of ‘fuse_new’ makes pointer from integer without a cast [-Wint-conversion] 5424 sizeof(rar2_operations), NULL); ^~~~~~~
long unsigned int
In file included from rar2fs.c:39: ./fuse.h:927:14: note: expected ‘void *’ but argument is of type ‘long unsigned int’ 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5423:35: error: too many arguments to function ‘fuse_new’ 5423 f = fuse_new(ch, args, &rar2_operations, ^~~~ In file included from rar2fs.c:39: ./fuse.h:927:14: note: declared here 927 struct fuse fuse_new(struct fuse_args args, const struct fuse_operations *op, ^~~~ rar2fs.c:5427:44: warning: passing argument 1 of ‘fuse_unmount’ from incompatible pointer type [-Wincompatible-pointer-types] 5427 fuse_unmount(mp, ch); ^~
char *
In file included from rar2fs.c:39: ./fuse.h:948:32: note: expected ‘struct fuse ’ but argument is of type ‘char ’ 948 void fuse_unmount(struct fuse *f); ~~~~~^ rar2fs.c:5427:31: error: too many arguments to function ‘fuse_unmount’ 5427 fuse_unmount(mp, ch); ^~~~ In file included from rar2fs.c:39: ./fuse.h:948:6: note: declared here 948 void fuse_unmount(struct fuse *f); ^~~~ rar2fs.c:5451:17: warning: implicit declaration of function ‘fuse_exited’; did you mean ‘fuse_exit’? [-Wimplicit-function-declaration] 5451 while (!fuse_exited(f) && !wdt.work_task_exited) { ^~~ fuse_exit rar2fs.c:5464:22: warning: passing argument 1 of ‘fuse_unmount’ from incompatible pointer type [-Wincompatible-pointer-types] 5464 fuse_unmount(mp, ch); ^~
char *

In file included from rar2fs.c:39: ./fuse.h:948:32: note: expected ‘struct fuse ’ but argument is of type ‘char ’ 948 | void fuse_unmount(struct fuse f); | ~~~~~^ rar2fs.c:5464:9: error: too many arguments to function ‘fuse_unmount’ 5464 | fuse_unmount(mp, ch); | ^~~~ In file included from rar2fs.c:39: ./fuse.h:948:6: note: declared here 948 | void fuse_unmount(struct fuse f); | ^~~~ make[2]: [Makefile:487: rar2fs.o] Error 1 make[2]: Leaving directory '/home/emby/opt/rar2fs-1.29.4/src' make[1]: [Makefile:362: all] Error 2 make[1]: Leaving directory '/home/emby/opt/rar2fs-1.29.4/src' make: *** [Makefile:383: all-recursive] Error 1 emby@emby:~/opt/rar2fs-1.29.4$ '

hasse69 commented 3 years ago

This is not really an issue with rar2fs which means this is not exactly the correct forum for problems as this one. But lets see if we can possibly ignore that fact...

By using the default location of fuse main header file, which should be /usr/include/fuse.h, using --with-fuse is really not necessary. Any system header files should automatically be picked from /usr/include. But since using this one give you the error about fuse version it seems the one in /usr/include is in fact the fuse3 header file. A rather standard fuse2 (fuse legacy) installation has a /usr/include/fuse.h that simply redirect next include to /usr/include/fuse/fuse.h. Since you get an error here regarding fuse version you need to show me what the file in /usr/include looks like. On my system it looks like this

/*
   This header is for compatibility with older software using FUSE.

   Please use 'pkg-config --cflags fuse' to set include path.  The
   correct usage is still '#include <fuse.h>', not '#include
   <fuse/fuse.h>'.
*/

#include "fuse/fuse.h"

Then at the top of the file in /usr/include/fuse/fuse.h there should be a version of the API defined (rar2fs however sets this to 26), as in my case

/*
  FUSE: Filesystem in Userspace
  Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>

  This program can be distributed under the terms of the GNU LGPLv2.
  See the file COPYING.LIB.
*/

#ifndef _FUSE_H_
#define _FUSE_H_

/** @file
 *
 * This file defines the library interface of FUSE
 *
 * IMPORTANT: you should define FUSE_USE_VERSION before including this
 * header.  To use the newest API define it to 26 (recommended for any
 * new application), to use the old API define it to 21 (default) 22
 * or 25, to use the even older 1.X API define it to 11.
 */

#ifndef FUSE_USE_VERSION
#define FUSE_USE_VERSION 21
#endif

#include "fuse_common.h"
...

So in the first case something seems broken with respect to what version is expected and is most likely due to conflict with fuse2 and fuse3 or fuse3 simply is the default version on later Ubuntu distributions.

In the second case it also seems to be some conflict. Since you now point directly to /usr/include/fuse using --with-fuse it means any include of fuse.h from e.g. rar2fs will bypass the file in /usr/include. That you now see an error from _fusecommon.h is that it does not like being included that way. That works fine for a pure legacy install of fuse2 but something might have changed here. If this is a bug in the fuse-dev packages for Ubuntu is hard to tell though, But why you get the error should be because of the same reason e.g. I would get it if trying to install _fusecommon.h directly without going through fuse.h. Here is my _fusecommon.h in /usr/include/fuse

/*
  FUSE: Filesystem in Userspace
  Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>

  This program can be distributed under the terms of the GNU LGPLv2.
  See the file COPYING.LIB.
*/

/** @file */

#if !defined(_FUSE_H_) && !defined(_FUSE_LOWLEVEL_H_)
#error "Never include <fuse_common.h> directly; use <fuse.h> or <fuse_lowlevel.h> instead."
#endif
...

Hence it expects _FUSE_H_ or _FUSE_LOWLEVEL_H_ to be set, which for rar2fs should be the former since it uses the high level API. But since _FUSE_H_ is not set fuse.h does not seem to do the right thing and rar2fs does not include anything but fuse.h.

So to summarize, I think something is off in the default installation of fuse or it is simply that fuse3 is the new default and that is not supported by rar2fs. Also, trying to install fuse2 on top of it seems to cause a conflict due to some package management issue not handling parallel installations of both API versions properly.

hasse69 commented 3 years ago

Also fuse3 main header probably explains the error thrown by _fusecommon.h

#if !defined(FUSE_H_) && !defined(FUSE_LOWLEVEL_H_)
#error "Never include <fuse_common.h> directly; use <fuse.h> or <fuse_lowlevel.h> instead."
#endif

The definition checked is different from fuse2.

sebastianklug commented 3 years ago

Thank you so much for the thorough explenation. The fault was neither rar2fs or fuse. I had somehow gotten to a very strange state when installing both libfuse-dev and libfuse3-dev (along with downloading libfuse from git..).

I created a new VM, and here are the steps i took for a successful install:

sudo apt install libfuse-dev
sudo apt install make
sudo apt install g++
wget https://www.rarlab.com/rar/unrarsrc-6.0.3.tar.gz
wget https://github.com/hasse69/rar2fs/releases/download/v1.29.4/rar2fs-1.29.4.tar.gz
tar zxvf rar2fs-1.29.4.tar.gz 
tar zxvf unrarsrc-6.0.3.tar.gz 
cd unrar/
make lib
cd ../rar2fs-1.29.4/
./configure --with-unrar=/path/to/unrar/
make
sudo make install