Skip Menu |

This queue is for tickets about the Fuse CPAN distribution.

Report information
The Basics
Id: 69349
Status: resolved
Priority: 0/
Queue: Fuse

People
Owner: Nobody in particular
Requestors: gavin [...] openfusion.com.au
Cc:
AdminCc:

Bug Information
Severity: Important
Broken in:
  • 0.11
  • 0.12
  • 0.13
Fixed in: 0.09



Subject: Latest Fuse versions fail to build on RHEL5, fuse 2.7.4
Fuse 0.09 builds fine on RHEL 5, but later versions - 0.11-0.13 - fail to build. Fuse 0.13 works fine on RHEL6 though, so I suspect it may be a fuse version issue? RHEL5 has fuse 2.7.4, while RHEL6 has fuse 2.8.3. It's fine if the newer ones won't work with fuse 2.7, of course, but this should at least be documented somewhere. Here's the build failure output: sulphur:~/tmp/Fuse-0.13$ perl Makefile.PL fuse version found: sh: mount_fusefs: command not found Writing Makefile for Fuse sulphur:~/tmp/Fuse-0.13$ make gcc -c -DFUSE_USE_VERSION=26 -D_FILE_OFFSET_BITS=64 -I/usr/include/fuse -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -DVERSION=\"0.13\" -DXS_VERSION=\"0.13\" -fPIC "-I/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE" -Wall -g -ggdb -DPERL_HAS_64BITINT Fuse.c Fuse.xs:43: error: expected specifier-qualifier-list before 'tTHX' Fuse.xs:53: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'master_interp' Fuse.xs:56: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'S_clone_interp' Fuse.xs: In function 'S_fh_store_handle': Fuse.xs:117: error: 'my_cxt_t' has no member named 'threaded' Fuse.xs:121: warning: ISO C90 forbids mixed declarations and code Fuse.xs: In function '_PLfuse_getattr': Fuse.xs:132: warning: implicit declaration of function 'S_clone_interp' Fuse.xs:132: error: 'master_interp' undeclared (first use in this function) Fuse.xs:132: error: (Each undeclared identifier is reported only once Fuse.xs:132: error: for each function it appears in.) Fuse.xs:132: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_readlink': Fuse.xs:177: warning: ISO C90 forbids mixed declarations and code Fuse.xs:177: error: 'master_interp' undeclared (first use in this function) Fuse.xs:177: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_getdir': Fuse.xs:209: error: 'master_interp' undeclared (first use in this function) Fuse.xs:209: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_mknod': Fuse.xs:241: error: 'master_interp' undeclared (first use in this function) Fuse.xs:241: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_mkdir': Fuse.xs:263: error: 'master_interp' undeclared (first use in this function) Fuse.xs:263: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_unlink': Fuse.xs:285: error: 'master_interp' undeclared (first use in this function) Fuse.xs:285: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_rmdir': Fuse.xs:305: error: 'master_interp' undeclared (first use in this function) Fuse.xs:305: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_symlink': Fuse.xs:325: error: 'master_interp' undeclared (first use in this function) Fuse.xs:325: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_rename': Fuse.xs:346: error: 'master_interp' undeclared (first use in this function) Fuse.xs:346: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_link': Fuse.xs:367: error: 'master_interp' undeclared (first use in this function) Fuse.xs:367: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_chmod': Fuse.xs:388: error: 'master_interp' undeclared (first use in this function) Fuse.xs:388: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_chown': Fuse.xs:409: error: 'master_interp' undeclared (first use in this function) Fuse.xs:409: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_truncate': Fuse.xs:434: error: 'master_interp' undeclared (first use in this function) Fuse.xs:434: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_utime': Fuse.xs:462: error: 'master_interp' undeclared (first use in this function) Fuse.xs:462: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_open': Fuse.xs:486: error: 'master_interp' undeclared (first use in this function) Fuse.xs:486: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_read': Fuse.xs:549: error: 'master_interp' undeclared (first use in this function) Fuse.xs:549: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_write': Fuse.xs:599: error: 'master_interp' undeclared (first use in this function) Fuse.xs:599: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_statfs': Fuse.xs:629: error: 'master_interp' undeclared (first use in this function) Fuse.xs:629: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_flush': Fuse.xs:674: error: 'master_interp' undeclared (first use in this function) Fuse.xs:674: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_release': Fuse.xs:696: error: 'master_interp' undeclared (first use in this function) Fuse.xs:696: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_fsync': Fuse.xs:720: error: 'master_interp' undeclared (first use in this function) Fuse.xs:720: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_setxattr': Fuse.xs:746: error: 'master_interp' undeclared (first use in this function) Fuse.xs:746: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_getxattr': Fuse.xs:773: error: 'master_interp' undeclared (first use in this function) Fuse.xs:773: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_listxattr': Fuse.xs:816: error: 'master_interp' undeclared (first use in this function) Fuse.xs:816: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_removexattr': Fuse.xs:880: error: 'master_interp' undeclared (first use in this function) Fuse.xs:880: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_opendir': Fuse.xs:902: error: 'master_interp' undeclared (first use in this function) Fuse.xs:902: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_readdir': Fuse.xs:938: error: 'master_interp' undeclared (first use in this function) Fuse.xs:938: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_releasedir': Fuse.xs:1026: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1026: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_fsyncdir': Fuse.xs:1049: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1049: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_init': Fuse.xs:1077: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1077: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_destroy': Fuse.xs:1101: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1101: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_access': Fuse.xs:1123: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1123: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_create': Fuse.xs:1145: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1145: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_ftruncate': Fuse.xs:1204: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1204: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_fgetattr': Fuse.xs:1234: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1234: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_lock': Fuse.xs:1286: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1286: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_utimens': Fuse.xs:1349: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1349: warning: assignment makes pointer from integer without a cast Fuse.xs: In function '_PLfuse_bmap': Fuse.xs:1374: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1374: warning: assignment makes pointer from integer without a cast Fuse.xs: In function 'XS_Fuse_CLONE': Fuse.xs:1541: error: 'tTHX' undeclared (first use in this function) Fuse.xs:1541: error: expected ';' before 'parent' Fuse.xs:1542: error: 'my_cxt_t' has no member named 'self' Fuse.xs:1559: error: 'parent' undeclared (first use in this function) Fuse.c:1591: warning: unused variable 'items' Fuse.xs: In function 'XS_Fuse_perl_fuse_main': Fuse.xs:1638: error: 'my_cxt_t' has no member named 'threaded' Fuse.xs:1640: error: 'my_cxt_t' has no member named 'threaded' Fuse.xs:1642: error: 'master_interp' undeclared (first use in this function) Fuse.xs:1643: error: 'my_cxt_t' has no member named 'mutex' Fuse.xs:1701: error: 'my_cxt_t' has no member named 'threaded' Fuse.xs: In function 'boot_Fuse': Fuse.xs:1526: warning: ISO C90 forbids mixed declarations and code Fuse.xs:1528: error: 'my_cxt_t' has no member named 'self' make: *** [Fuse.o] Error 1 Cheers, Gavin
Derrik Pates sent me a patch against 0.13 which fixed the build problems, so I'm closing this ticket. It's been added to the git repo and so should be available in the next version. Thanks Derrik! Patch below for anyone else in the meantime: --- orig/Fuse-0.13/Fuse.xs 2011-07-02 12:27:52.000000000 -0600 +++ Fuse-0.13/Fuse.xs 2011-07-22 14:27:03.000000000 -0600 @@ -16,6 +16,14 @@ #ifdef USE_ITHREADS # ifdef I_PTHREAD # define FUSE_USE_ITHREADS +# if (PERL_VERSION < 10) +# define tTHX PerlInterpreter* +# define STR_WITH_LEN(s) ("" s ""), (sizeof(s)-1) +# define hv_fetchs(hv,key,lval) Perl_hv_fetch(aTHX_ hv, STR_WITH_LEN(key), lval) +# define dMY_CXT_INTERP(interp) \ + SV *my_cxt_sv = *hv_fetchs(interp->Imodglobal, MY_CXT_KEY, TRUE); \ + my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)) +# endif # else # warning "Sorry, I don't know how to handle ithreads on this architecture. Building non-threaded version" # endif @@ -54,6 +62,9 @@ #define CLONE_INTERP(parent) S_clone_interp(parent) tTHX S_clone_interp(tTHX parent) { +#if (PERL_VERSION < 10) + tTHX my_perl = parent; +#endif dMY_CXT_INTERP(parent); if(MY_CXT.threaded) { MUTEX_LOCK(&MY_CXT.mutex);