diff options
Diffstat (limited to 'extension/README.fts')
-rw-r--r-- | extension/README.fts | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/extension/README.fts b/extension/README.fts new file mode 100644 index 00000000..b8b948c4 --- /dev/null +++ b/extension/README.fts @@ -0,0 +1,68 @@ +Wed Aug 29 22:34:24 IDT 2012 +============================ + +Portability is a myth, a chimera. Like the pot of gold at the end of +the rainbow, it's always looks like it is just within your reach, but +in fact, it is seldom, if ever, truly acheivable. + +It all started when trying to get the extensions to work on my aged +PowerPC Macbook G4 running Mac OS X 10.5. That machine is wonderful, +since it is neither an Intel architecture machine nor is it GNU/Linux; +two criteria that are becoming increasingly harder to meet over 10% +into the 21st century. + +The readdir extension didn't work. Furthermore, GDB showed that in gawk +itself, struct stat had one size and layout, while inside the readdir +code, it had another. + +This turned out to be due to the large file nonsense foisted off upon +us by POSIX. The main gawk configure.ac had AC_SYS_LARGEFILE but the +extensions' configure.ac did not. OK - a one line fix, rebuild, and +everything is OK. Right? + +Of course not. + +Everything was OK on my 64-bit GNU/Linux Intel system, but lo and behold, +I compiled on a 32-bit GNU/Linux system and suddenly the fts tests +stopped working. A look at the config.log reveals: + + <fts.h> cannot be used with -D_FILE_OFFSET_BITS==64 + +Why? Who knows. The comment in the file itself is cryptic: + + /* The fts interface is incompatible with the LFS interface which + transparently uses the 64-bit file access functions. */ + #ifdef __USE_FILE_OFFSET64 + # error "<fts.h> cannot be used with -D_FILE_OFFSET_BITS==64" + #endif + +It purports to be English, but says nothing intelligible, and the man +page sheds no light, either. + +Fortunately, the source for fts from NetBSD is reasonably legible, +freely available, and has a usable license. + +So, I try to just plug it in directly. Everything compiles, nothing +works. There is shared library / weird linker dark voodoo crap going on. + +*I* am not a powerful enough Jedi to get around it, and I think it has +more to do with the Dark Side of the Force than with the Light Side. So +gawkfts.h now has: + + #define fts_children gawk_fts_children + #define fts_close gawk_fts_close + #define fts_open gawk_fts_open + #define fts_read gawk_fts_read + #define fts_set gawk_fts_set + +to rename things, and it all compiles and works. + +The Plan 9 guys got it right when they threw eveything out and started +over again. I sure wish I could. + +On the bright side, this is stuff that would have had to be done anyway +for at least MinGW, and maybe for some other systems. So it's not wasted +effort. But it sure is sad that it's necessary. + +Arnold Robbins +arnold@skeeve.com |