Perl 5.8.0 built with threading (I haven't tested the non-threaded build) adds a pTHX argument to the declaration for the XSINIT_t fuction (callback); this wasn't the case for perls 5.6 and earlier. Inn 2.3.3 uses the void-argument-list version of XSINIT_t, and so fails to compile against perl 5.8.0: server root # cd /var/tmp/portage/inn-2.3.3/work/inn-2.3.3/ server inn-2.3.3 # make cd lib && make all make[1]: Entering directory `/var/tmp/portage/inn-2.3.3/work/inn-2.3.3/lib' gcc -march=pentium3 -O3 -pipe -I../include -DPERL5 -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/perl5/5.8.0/i686-linux-thread-multi/CORE -c perl.c In file included from perl.c:25: ../include/libinn.h:78: parse error before numeric constant perl.c: In function `PerlParse': perl.c:100: warning: passing arg 2 of `perl_parse' from incompatible pointer type perl.c: In function `xs_init': perl.c:338: warning: passing arg 3 of `Perl_newXS' from incompatible pointer type make[1]: *** [perl.o] Error 1 make[1]: Leaving directory `/var/tmp/portage/inn-2.3.3/work/inn-2.3.3/lib' make: *** [all-lib] Error 2
Building perl 5.8.0 *without* USE=threads fixes this. When you build a non-threaded perl, it #defines pTHX to be void, which makes the function declarations that take a pTHX argument the same as what they had been in 5.6.1. Hence, inn now builds.
This is precisely why USE="threads" is not only optional, but at your own risk. Please read the note at the beginning of the emerge process for perl 5.8. Many packages can't handle the threaded perl - so it is only optional for those that know what threading is and are willing to accept the potential conflict.
Another case of threaded perl not working with an application. Outside of our control.