I am aware about the heavy CFLAGS, however, when I change them in make.conf, this merge is not affected. My guess is that CFLAGS are inherited from elsewhere. Normal Gentoo ~x86-system. serena root # emerge --oneshot XML-LibXML Calculating dependencies ...done! >>> emerge (1 of 1) dev-perl/XML-LibXML-1.56 to / >>> md5 src_uri ;-) XML-LibXML-1.56.tar.gz >>> Unpacking source... >>> Unpacking XML-LibXML-1.56.tar.gz to /var/tmp/portage/XML-LibXML-1.56/work >>> Source unpacked. enable native perl UTF8 running xml2-config...ok looking for -lxml2... yes Checking if your kit is complete... Looks good Writing Makefile for XML::LibXML cp lib/XML/LibXML/DOM.pod blib/lib/XML/LibXML/DOM.pod cp lib/XML/LibXML/Number.pm blib/lib/XML/LibXML/Number.pm cp lib/XML/LibXML/SAX.pm blib/lib/XML/LibXML/SAX.pm cp lib/XML/LibXML/Node.pod blib/lib/XML/LibXML/Node.pod cp lib/XML/LibXML/Literal.pm blib/lib/XML/LibXML/Literal.pm cp lib/XML/LibXML/SAX/Builder.pm blib/lib/XML/LibXML/SAX/Builder.pm cp LibXML.pm blib/lib/XML/LibXML.pm cp lib/XML/LibXML/Parser.pod blib/lib/XML/LibXML/Parser.pod cp lib/XML/LibXML/DocumentFragment.pod blib/lib/XML/LibXML/DocumentFragment.pod cp lib/XML/LibXML/Element.pod blib/lib/XML/LibXML/Element.pod cp lib/XML/LibXML/SAX/Parser.pm blib/lib/XML/LibXML/SAX/Parser.pm cp lib/XML/LibXML/Namespace.pod blib/lib/XML/LibXML/Namespace.pod cp lib/XML/LibXML/SAX/Builder.pod blib/lib/XML/LibXML/SAX/Builder.pod cp lib/XML/LibXML/Document.pod blib/lib/XML/LibXML/Document.pod cp lib/XML/LibXML/Attr.pod blib/lib/XML/LibXML/Attr.pod cp lib/XML/LibXML/SAX/Generator.pm blib/lib/XML/LibXML/SAX/Generator.pm cp lib/XML/LibXML/CDATASection.pod blib/lib/XML/LibXML/CDATASection.pod cp LibXML.pod blib/lib/XML/LibXML.pod cp lib/XML/LibXML/SAX.pod blib/lib/XML/LibXML/SAX.pod cp lib/XML/LibXML/Text.pod blib/lib/XML/LibXML/Text.pod cp lib/XML/LibXML/Boolean.pm blib/lib/XML/LibXML/Boolean.pm cp lib/XML/LibXML/PI.pod blib/lib/XML/LibXML/PI.pod cp lib/XML/LibXML/NodeList.pm blib/lib/XML/LibXML/NodeList.pm cp lib/XML/LibXML/Comment.pod blib/lib/XML/LibXML/Comment.pod cp lib/XML/LibXML/Dtd.pod blib/lib/XML/LibXML/Dtd.pod /usr/bin/perl /usr/lib/perl5/5.8.2/ExtUtils/xsubpp -typemap /usr/lib/perl5/5.8.2/ExtUtils/typemap -typemap typemap LibXML.xs > LibXML.xsc && mv LibXML.xsc LibXML.c gcc -c -I/usr/include/libxml2 -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O3 -fforce-addr -fmerge-all-constants -ffast-math -fnew-ra -ftracer -funroll-all-loops -fprefetch-loop-arrays -fstrict-aliasing -falign-labels=1 -falign-loops=16 -falign-jumps=16 -march=athlon-xp -mfpmath=sse -mno-push-args -maccumulate-outgoing-args -minline-all-stringops -pipe -fomit-frame-pointer -DVERSION=\"1.56\" -DXS_VERSION=\"1.56\" -fPIC "-I/usr/lib/perl5/5.8.2/i686-linux-thread-multi/CORE" -DHAVE_UTF8 -DHAVE_BLANK LibXML.c In file included from LibXML.xs:31: /usr/include/libxml2/libxml/DOCBparser.h:18:2: warning: #warning "The DOCBparser module has been deprecated in libxml2-2.6.0" LibXML.xs:73: error: duplicate `extern' LibXML.xs:74: error: duplicate `extern' LibXML.xs:76: error: duplicate `extern' LibXML.xs:77: error: duplicate `extern' LibXML.xs:78: error: duplicate `extern' LibXML.xs:79: error: duplicate `extern' make: *** [LibXML.o] Error 1 !!! ERROR: dev-perl/XML-LibXML-1.56 failed. !!! Function perl-module_src_compile, Line 50, Exitcode 2 !!! compilation failed serena root #
rebuild perl and libxml* with lower CFLAGS. just because something compiles doesn't mean it works.
I know. At the moment I am recompiling perl. I have enabled threading support. If XML-LibXML fails again, I'll retry using perl without threads.
Recompiling perl with or without threads both do not resolve this problem. I am not a programmer but it seems to me this is a problem outside of this package: LibXML.xs:73: error: duplicate `extern' The following packages are installed. I have tried to recompile them all but that helps not either. serena root # qpkg -I xml app-text/docbook-xml-dtd * dev-libs/libxml * dev-libs/libxml2 * dev-perl/XML-LibXML-Common * dev-perl/XML-NamespaceSupport * dev-perl/XML-Parser * dev-perl/XML-SAX * dev-perl/XML-Writer * dev-python/pyxml * serena root #
I looked into this and it seems that LIBXML_DLL_IMPORT is defined as XMLPUBVAR and XMLPUBVAR is defined as 'extern' in xmlexports.h from libxml2. It expands the tokens as 'extern extern ...' and the error is 100% true - it's a double extern. The #define LIBXML_DLL_IMPORT XMLPUBVAR is not in an #ifdef (in any meaningful way) nor is the #define XMLPUBVAR extern I can't imagine this working on any platform. Is it possible that the XMLPUBVAR define has changed with a new version of libxml2? It looks as if the upstream author should have left out the 'extern' as it is part of the #define. Report this upstream, per chance?
Thanks for the input here Eric, I hope you don't mind I have added you to the CC-list. As I'm not a developer myself (I just barely understand all this), I'd like to ask either you or a Gentoo-dev, to take it from here. Thanks in advance.
I'm having the same problems. FWIW - I noticed there was a lot of {what appears to be} cruft under /usr/lib for perl 5.8.0 & 5.8.1 even though I'm running 5.8.2. Might this be an issue?
The multiple perl lib directories won't cause this. This is specifically due to the #define expansion. In other words, the final expanded C comes out as 'extern extern function()' which is improper. I'm going to look upstream to see if there's anything else about this.
*** Bug 38616 has been marked as a duplicate of this bug. ***
*** This bug has been marked as a duplicate of 33651 ***