Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I set library and include paths for Makefile.PL for a single installation?

Tags:

perl

cpan

How can I tell CPAN to give Makefile.PL one specific argument in one specific installation?

Specifically. I want to install XML::LibXML, and apt-get installed the library to /usr/lib/libxml2.so.2.6.32. Makefile.PL has problems with that and tells me:

using fallback values for LIBS and INC
options:
  LIBS='-L/usr/local/lib -L/usr/lib -lxml2 -lm'
  INC='-I/usr/local/include -I/usr/include'
If this is wrong, Re-run as:
  $ /usr/bin/perl Makefile.PL LIBS='-L/path/to/lib' INC='-I/path/to/include'

looking for -lxml2... no
looking for -llibxml2... no
libxml2 not found
Try setting LIBS and INC values on the command line
Or get libxml2 from 
  http://xmlsoft.org/

I know where the libxml2 is, but I don't know how to tell it to the Makefile.PL.

edit: When I do dpkg -L libxml2 (it's a debian), I see

/.
/usr
/usr/lib
/usr/lib/libxml2.so.2.6.32
/usr/share
/usr/share/doc
/usr/share/doc/libxml2
/usr/share/doc/libxml2/AUTHORS
/usr/share/doc/libxml2/changelog.Debian.gz
/usr/share/doc/libxml2/copyright
/usr/share/doc/libxml2/README
/usr/share/doc/libxml2/README.Debian
/usr/share/doc/libxml2/NEWS.gz
/usr/share/doc/libxml2/changelog.gz
/usr/share/doc/libxml2/TODO.gz
/usr/lib/libxml2.so.2

I am not a root on that machine and I can't make symlink in /usr/lib or repair it.

like image 762
Karel Bílek Avatar asked Sep 29 '10 22:09

Karel Bílek


2 Answers

In the CPAN shell, you can set the values that you need:

$ cpan
cpan shell -- CPAN exploration and modules installation (v1.9205)
ReadLine support available (maybe install Bundle::CPAN or Bundle::CPANxxl?)

cpan[1]> o conf makepl_arg
    makepl_arg         []
Type 'o conf' to view all configuration items


cpan[2]> o conf makepl_arg "LIBS=-L/foo/bar INC=-I/foo/bar/include"
    makepl_arg         [LIBS=-L/foo/bar INC=-I/foo/bar/include]
Please use 'o conf commit' to make the config permanent!

cpan[3]> install Some::Module

With the cpan command, you can use the -j switch to load a custom configuration file. You can start with the -J switch to dump the configuration, then change the values you want and reload it:

 $ cpan -J > my_config.pm
 .... edit file ....
 $ cpan -j my_config.pm -i Some::Module

However, I suspect that rafl's suspicions are right.

like image 175
brian d foy Avatar answered Oct 23 '22 07:10

brian d foy


The Makefile.PL is looking for libxml2.so. That's usually a symlink to your actual libxml2 shared object, like libxml2.so.2.6.32. If for some reason this symlink isn't around because you deleted it, your vendor didn't ship it with its libxml2 header package (e.g. libxml2-dev on Debian/Ubuntu/etc), you will need to create it yourself.

You don't need to pass any specific argument to Makefile.PL here. It's already looking in the right places. The things it's looking for simply aren't there.

like image 32
rafl Avatar answered Oct 23 '22 05:10

rafl