On 14/06/12 13:10, Alessio Treglia wrote: > I'd like to have some hints from you on how to fix the following issue: > > On Thu, Jun 14, 2012 at 1:47 PM, Steven Chamberlain <ste...@pyro.eu.org> > wrote: >> The issue with lilv looks fixable but could be a swig bug so it could >> take a while. A search for a file called 'lilv' in its include paths >> results in opening the '../lilv' directory on non-Linux, and junk is >> read from it.
Hi, I came up with the attached fix for swig2.0, to skip reading from "../lilv" if it is a directory (for which BSD allows fopen()). But then the error only becomes different; I assume my fix worked as intended but there was some other problem? Why was it looking for a file called "lilv" with no extension anyway? > [ 2/26] swig: bindings/lilv.i -> build/bindings/lilv.swigwrap_6.cxx > build/bindings/lilv.py > :6: Error: Unable to find 'lilv' Also attached a ktrace excerpt showing the search routine. Regards, -- Steven Chamberlain ste...@pyro.eu.org
Index: swig2.0-2.0.7/Source/Swig/include.c =================================================================== --- swig2.0-2.0.7.orig/Source/Swig/include.c 2012-03-18 04:58:08.000000000 +0000 +++ swig2.0-2.0.7/Source/Swig/include.c 2012-06-14 13:52:34.184623880 +0100 @@ -162,6 +162,7 @@ static FILE *Swig_open_file(const_String_or_char_ptr name, int sysfile, int use_include_path) { FILE *f; + struct stat fs; String *filename; List *spath = 0; char *cname; @@ -185,8 +186,16 @@ Clear(filename); Printf(filename, "%s%s", Getitem(spath, i), cname); f = fopen(Char(filename), "r"); - if (f) - break; + if (f) { + /* Ensure this is really a file (and not a directory, possible on + * some BSD-like systems) */ + fstat(fileno(f), &fs); + if (S_ISDIR(fs.st_mode)) { + fclose(f); + } else { + break; + } + } } Delete(spath); } Index: swig2.0-2.0.7/Source/Swig/swig.h =================================================================== --- swig2.0-2.0.7.orig/Source/Swig/swig.h 2012-03-17 18:40:38.000000000 +0000 +++ swig2.0-2.0.7/Source/Swig/swig.h 2012-06-14 13:24:55.911689099 +0100 @@ -22,6 +22,8 @@ #include <string.h> #include <stdlib.h> #include <assert.h> +#include <sys/types.h> +#include <sys/stat.h> #ifdef __cplusplus extern "C" {
41729 swig2.0 CALL open(0x8218840,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8218840,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "./lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8218840,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "../lilv" 41729 swig2.0 RET open 3 41729 swig2.0 CALL fstat(0x3,0xbfbfdc60) 41729 swig2.0 STRU struct stat {dev=2340379690, ino=69181, mode=drwxr-xr-x , nlink=2, uid=1000, gid=1000, rdev=4294967295, atime=1339673569.987719000, stime=1339678509.735623517, ctime=1339678509.735623517, birthtime=1339678509.735623517, size=5, blksize=131072, blocks=3, flags=0x0 } 41729 swig2.0 RET fstat 0 41729 swig2.0 CALL close(0x3) 41729 swig2.0 RET close 0 41729 swig2.0 CALL open(0x81e65a8,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/lilv" 41729 swig2.0 RET open 3 41729 swig2.0 CALL fstat(0x3,0xbfbfdc60) 41729 swig2.0 STRU struct stat {dev=2340379690, ino=69181, mode=drwxr-xr-x , nlink=2, uid=1000, gid=1000, rdev=4294967295, atime=1339673569.987719000, stime=1339678509.735623517, ctime=1339678509.735623517, birthtime=1339678509.735623517, size=5, blksize=131072, blocks=3, flags=0x0 } 41729 swig2.0 RET fstat 0 41729 swig2.0 CALL close(0x3) 41729 swig2.0 RET close 0 41729 swig2.0 CALL open(0x81e65a8,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/home/steven/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/build/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/lilv" 41729 swig2.0 RET open 3 41729 swig2.0 CALL fstat(0x3,0xbfbfdc60) 41729 swig2.0 STRU struct stat {dev=2340379690, ino=69181, mode=drwxr-xr-x , nlink=2, uid=1000, gid=1000, rdev=4294967295, atime=1339673569.987719000, stime=1339678509.735623517, ctime=1339678509.735623517, birthtime=1339678509.735623517, size=5, blksize=131072, blocks=3, flags=0x0 } 41729 swig2.0 RET fstat 0 41729 swig2.0 CALL close(0x3) 41729 swig2.0 RET close 0 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/usr/include/python2.7/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/usr/include/sord-0/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/usr/include/serd-0/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/usr/include/sratom-0/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/home/steven/lilv-0.14.2~dfsg0/build/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "./swig_lib/python/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/usr/share/swig2.0/python/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "./swig_lib/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL open(0x8256a10,0<><invalid>0,<unused>0) 41729 swig2.0 NAMI "/usr/share/swig2.0/lilv" 41729 swig2.0 RET open -1 errno 2 No such file or directory 41729 swig2.0 CALL write(0x2,0x2849672b,0x1) 41729 swig2.0 GIO fd 2 wrote 1 byte ":" 41729 swig2.0 RET write 1 41729 swig2.0 CALL write(0x2,0xbfbfdb30,0x1) 41729 swig2.0 GIO fd 2 wrote 1 byte "6" 41729 swig2.0 RET write 1 41729 swig2.0 CALL write(0x2,0x2849672b,0x1) 41729 swig2.0 GIO fd 2 wrote 1 byte ":" 41729 swig2.0 RET write 1 41729 swig2.0 CALL write(0x2,0x2849672b,0x1) 41729 swig2.0 GIO fd 2 wrote 1 byte " " 41729 swig2.0 RET write 1 41729 swig2.0 CALL write(0x2,0x2849672b,0x1) 41729 swig2.0 GIO fd 2 wrote 1 byte "E" 41729 swig2.0 RET write 1 41729 swig2.0 CALL write(0x2,0x2849672b,0x1) 41729 swig2.0 GIO fd 2 wrote 1 byte "r" 41729 swig2.0 RET write 1 41729 swig2.0 CALL write(0x2,0x2849672b,0x1) 41729 swig2.0 GIO fd 2 wrote 1 byte "r"