Looking at their respective Makefile.PL, X::P calls check_lib of Devel::CheckLib to find/verify the expat lib. But X::P::E just assumes that the library is there and links with -lexpat. And if it is there, as you said, then no problem. So the failure is most likely with check_lib of Devel::CheckLib. You could write a minimal script using said sub to see if it fails and how:
use Devel::CheckLib;
$expat_libpath = $ENV{EXPATLIBPATH} || '';
$expat_incpath = $ENV{EXPATINCPATH} || '';
my @replacement_args;
foreach (@ARGV) {
if (/^EXPAT(LIB|INC)PATH=(.+)/) {
if ( $1 eq 'LIB' ) {
$expat_libpath = $2;
}
else {
$expat_incpath = $2;
}
#push(@replacement_args, "$1=$2");
}
else {
push( @replacement_args, $_ );
}
}
@ARGV = @replacement_args;
# ** I am using check_lib_or_exit() for verbosity
check_lib_or_exit( # fill in what you prompted the user for here
lib => [qw(expat)],
header => ['expat.h'],
incpath => $expat_incpath,
( $expat_libpath ? ( libpath => $expat_libpath ) : () ),
);
You could also hack Devel::CheckLib (since you own it) to make it more verbose and pinpoint exactly where the problem is.
The absolute shortcut is to hack X::P's Makefile.PL to not exit 0 when it thinks that expat libraries/headers can not be found (according to CheckLib), and see if it will be linked eventually (since it is located in /usr/lib it will need no extra CFLAGS/LDFLAGS).
But you must make sure that the library is there and its header files too.
bw, bliako |