Question

XML::Parser fails to build on a quite fresh 64-bit Debian box. After issuing cpan XML::Parser, cpan fails with lots of errors about Expat.c and Expat.xs:

[...]
Expat.xs:2182: error: ‘CallbackVector’ has no member named ‘skip_until’
Expat.c: In function ‘XS_XML__Parser__Expat_Do_External_Parse’:
Expat.c:2904: error: ‘XML_Parser’ undeclared (first use in this function)
Expat.c:2904: error: expected ‘;’ before ‘parser’
Expat.xs:2194: error: ‘parser’ undeclared (first use in this function)
make[1]: *** [Expat.o] Error 1
make[1]: Leaving directory `/root/.cpan/build/XML-Parser-2.41-rpV6ok/Expat'
make: *** [subdirs] Error 2
  TODDR/XML-Parser-2.41.tar.gz
  /usr/bin/make -- NOT OK
Running make test
  Can't test without successful make
Running make install
  Make had returned bad status, install seems impossible

Message at the start of the output explains that expat-devel is needed for building.

Expat must be installed prior to building XML::Parser and I can't find it in the standard library directories. Install 'expat-devel' package with your OS package manager. See 'README'.

But expat-devel is not in Debian repository.

Is it possible to get over this without need to build/install expat from source?

Was it helpful?

Solution

The package you want to install is named libexpat1-dev. You could also just install libxml-parser-perl via apt-get. Or if you really want to install via CPAN try installing the Debian packages dependencies first via apt-get build-dep libxml-parser-perl.

OTHER TIPS

libexpat1-dev contains both libexpat and expat.h, which are both mentioned in the message as well:

If expat is installed, but in a non-standard directory, then use the following options to Makefile.PL:

EXPATLIBPATH=... To set the directory in which to find libexpat

EXPATINCPATH=... To set the directory in which to find expat.h

Installing libexpat1-dev seems to solve the problem:

$ aptitude install libexpat1-dev

There is always the manual method - to build/install expat from source. (This example shows installing to an alternative location for XAMPP | LAMPP)

Download from: http://sourceforge.net/projects/expat/files/expat/

tar zxf /[where-ever]/expat-2.1.0.tar.gz -C /tmp
cd /tmp/expat-2.1.0
/opt/lampp/bin/perl ./configure --prefix=/opt/lampp LDFLAGS=-L/opt/lampp/lib 
make
make install

http://search.cpan.org - search for and download - XML::Parser

tar zxf /[where-ever]/XML-Parser-2.41.tar.gz -C /tmp
cd /tmp/XML-Parser-2.41
/opt/lampp/bin/perl ./Makefile.PL EXPATLIBPATH=/opt/lampp/lib EXPATINCPATH=/opt/lampp/include
make
make test
make install

Work like a charm in Ubuntu 15.04. The only thing that I need is install Perl XML Parser with:

sudo apt-get install libxml-parser-perl

And following the instructions here, I was able to import successfully all my ratings into Rhythmbox. Now, the only work that I need to do is create again the smart play lists, that is nothing compared with my entire libray ratings.

Today I had the same issue wanting to complile the new GIMP 2.9.4 beta on OSX 10.8 and the aid of homebrew.

First install perl

brew install perl

Then the XML::Parser module by going into the perl shell with

perl -MCPAN -e shell

And inside the shell install XML::Parser by typing

install XML::Parser

Exit shell

exit

Now, verify it has been installed successfully. If everything is ok, you will not see an error.

perl -e "require XML::Parser"

If the ./configure still fails missing XML::Parser, then intltools is not using the perl you have installed. Looking at the script tells me it does the test with $INTLTOOL_PERL -e "require XML::Parser". Trying a echo $INTLTOOL_PERL gave out nothing, so the magic is to set it with

export $INTLTOOL_PERL=perl

Now run ./configure again.

None of the above methods worked for me. I had the right environment variables setup but they were somehow not picked up by cpanm that I use to install perl modules. Expat was also installed.

Here is what I did to overcome the same problem that OP is reporting. This is very close to what @LadyBuzz suggested.

  1. Download the XML::Parser from cpan.org
  2. Extract the tarball into directory and descend to it.
  3. Open the Makefile.pl and edit the first lines to actually have the absolute paths to both: EXPATLIBPATH and EXPATINCPATH
  4. Save the Makefile.pl, go up one level and create a new tarball with the Makefile.pl that you just edited.
  5. Execute cpanm on the newly created tarball.

This resulted in successful installation of the module.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top