PhilipS has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to use cpan to install XML::LibXM, which in turn tries to install Alien::Libxml2. But the Alien::Libxml2 installation keeps failing with this message:

"The installed system version of libxml2 2.9.4 is not compatible with +XML::LibXML (and probably buggy)!" ... # Failed test 'xs' # at t/alien_libxml2.t line 10. # ExtUtils::CBuilder->compile failed # error building testalienjPkRO/test.o from 'testalienjPkRO/test.c +' at /Users/psharman/perl5/perlbrew/perls/perl-5.30.0/lib/5.30.0/ExtU +tils/CBuilder/Base.pm line 185. # cc -I/Users/psharman/perl5/perlbrew/perls/perl-5.30.0/lib/5.30.0 +/darwin-2level/CORE -I/usr/include/libxml2 -c -fno-common -DPERL_DARW +IN -mmacosx-version-min=10.14 -fno-strict-aliasing -pipe -fstack-prot +ector-strong -I/usr/local/include -DPERL_USE_SAFE_PUTENV -O3 -o testa +lienjPkRO/test.o testalienjPkRO/test.c # testalienjPkRO/test.xs:5:10: fatal error: 'libxml/parser.h' file + not found # #include <libxml/parser.h> # ^~~~~~~~~~~~~~~~~>

I used Homebrew to install a more up to date copy of libxml2 and I've put that copy early in the path. So if I do xml2-config --version I get 2.9.9. But Alien::Libxml2 keeps reporting that it finds the old version, 2.9.4. What am I doing wrong?

I tried to install Alien::Libxml2 manually and add some paths to the makefile. EG: perl Makefile.PL INC="-I/usr/local/Cellar/libxml2/2.9.9_2/include/libxml2/libxml"  LIBS="-L/usr/local/Cellar/libxml2/2.9.9_2/bin" but nothing seems to help. I'm not sure what paths to use there, so I've tried every permutation and combination I can think of.

I also tried to use the makepl_arg configuration option to add those paths to cpan, but that didn't help either.

This is using OS X. I've tried with both Perl 5.28.2 and 5.30.0.

Any advice would be most appreciated. Thanks!

Replies are listed 'Best First'.
Re: Alien::Libxml2 cannot find the latest libxml2
by shadowsong (Pilgrim) on Jul 03, 2019 at 22:55 UTC

    Hi PhilipS

    I used Homebrew to install a more up to date copy of libxml2 and I've put that copy early in the path. So if I do xml2-config --version I get 2.9.9. But Alien::Libxml2 keeps reporting that it finds the old version, 2.9.4. What am I doing wrong?

    Try building Alien::Libxml2 again from a clean source tree (substitute in the correct paths below)

    perl Makefile.PL LIBS="-LC:/path/to/libxml2/v2.9.9_2/lib -llibxml2" IN +C="-IC:/path/to/libxml2/v2.9.9_2/include"

    Good luck,
    Shadow

      Thanks, Shadow. I tried using perl Makefile.PL LIBS="-LC:/usr/local/Cellar/libxml2/2.9.9_2/lib -llibxml2" INC="-IC:/usr/local/Cellar/libxml2/2.9.9_2/include" but it still doesn't work for me. make test still fails at the #include <libxml/parser.h> line.

      I do have a parser.h file; it is located at /usr/local/Cellar/libxml2/2.9.9_2/include/libxml2/libxml/parser.h. I tried using INC="-IC:/usr/local/Cellar/libxml2/2.9.9_2/include/libxml2" and INC="-IC:/usr/local/Cellar/libxml2/2.9.9_2/include/libxml2/libxml" to see if that helped, but nothing I tried worked.

Re: Alien::Libxml2 cannot find the latest libxml2
by swl (Prior) on Jul 04, 2019 at 03:47 UTC

    You could try to build a shared version, as opposed to it picking up the system version. This has the advantage that it is isolated from the system version so will not be affected by system updates, but with the caveat that it will not benefit from updates.

    Shared builds can be forced using an environment variable, set before you build the makefile. This is documented at https://metacpan.org/pod/Alien::Build#ALIEN_INSTALL_TYPE.

    Note that there are failures listed for darwin (mac) in cpan testers: http://matrix.cpantesters.org/?dist=Alien-Libxml2+0.09. I have not looked closely at the reasons, but they might be relevant to your case.

      Thanks. I tried that, but I couldn't get that to work either.

      I'll try contacting the module's author.

        I contacted the module's author, https://github.com/Perl5-Alien/Alien-Libxml2/issues/11. He posted a version that works for me: https://cpan.metacpan.org/authors/id/P/PL/PLICEASE/Alien-Libxml2-0.10_01.tar.gz (That version does not seem to be available via CPAN yet.)
Re: Alien::Libxml2 cannot find the latest libxml2 (look XML::LibXML)
by Anonymous Monk on Jul 04, 2019 at 21:05 UTC

    Hi

    1) report bug to rt://Alien-LibXML author, share link to this thread maybe, and you're done

    Then forget that Alien-LibXML exists

    2) install XML::LibXML

    cpanm --look XML::LibXML

    edit Makefile.PL

    and replace this with your own paths

    CCFLAGS => Alien::Libxml2->cflags . " $Config{ccflags}", LIBS => [ Alien::Libxml2->libs ],

    Once upon a time I used something like

    perl Makefile.PL INC="-IC:\citrusperl\mingw\xminms\include -IC:\citru +sperl\mingw\xminms\include\libxml2 " LIBS="-LC:\citrusperl\mingw\ming +w32\lib -LC:\citrusperl\mingw\xminms\lib -lxslt -lxml2 -liconv -lws2_ +32 "

      I'm the Alien::LibXML author. Alien::LibXML and Alien::Libxml2 are different distributions.