develooper Front page | perl.perl5.porters | Postings from December 2011

[rt.cpan.org #69318] EU:MM rejects necessary link library

From:
Rene Schickbauer via RT
Date:
December 20, 2011 06:03
Subject:
[rt.cpan.org #69318] EU:MM rejects necessary link library
Message ID:
rt-3.8.HEAD-6892-1324389784-296.69318-6-0@rt.cpan.org
<URL: https://rt.cpan.org/Ticket/Display.html?id=69318 >

On Fri Jul 29 11:40:29 2011, perlbug-followup@perl.org wrote:

> > This seems to happen due to multiarch support, i.e. gcc(ld) looks
> into
> > /usr/lib/x86_64-linux-gnu, but perl does not because it doesn't know
> >    about
> > the real library path.

Here's a temporary workaround (globally disabling the checks in 
MakeMaker).

So, find the file Kid.pm in */lib/ExtUtils/Liblist and find the 
following lines (somewhere around line 170 in my MakeMaker version):

 1             }
 2             else {
 3                 warn "$thislib not found in $thispth\n" if $verbose;
 4                 next;
 5             }
 6             warn "'-l$thislib' found at $fullname\n" if $verbose;
 7             push @libs, $fullname unless $libs_seen{$fullname}++;
 8             $found++;
 9             $found_lib++;
10 

We'll disabling using the "results" of this checks, just comment out 
four lines:

 1             }
 2             else {
 3                 #warn "$thislib not found in $thispth\n" if $verbose;
 4                 #next;
 5             }
 6             #warn "'-l$thislib' found at $fullname\n" if $verbose;
 7             #push @libs, $fullname unless $libs_seen{$fullname}++;
 8             $found++;
 9             $found_lib++;
10 
11             # Now update library lists

Of course, a nicer workaround is checking for an environment variable:

 1             }
 2             else {
 3                 if(!defined($ENV{MM_DISABLE_LIBCHECKS}) || 
$ENV{MM_DISABLE_LIBCHECKS} == 0) {
 4                     warn "$thislib not found in $thispth\n" if 
$verbose;
 5                     next;
 6                 }
 7             }
 8             if(!defined($ENV{MM_DISABLE_LIBCHECKS}) || 
$ENV{MM_DISABLE_LIBCHECKS} == 0) {
 9                 warn "'-l$thislib' found at $fullname\n" if $verbose;
10                 push @libs, $fullname unless $libs_seen{$fullname}++;
11             }
12             $found++;
13             $found_lib++;
14 
15             # Now update library lists

Now, you can overide failing library checks by setting the environment 
variable MM_DISABLE_LIBCHECKS to a non-zero value, for example:

MM_DISABLE_LIBCHECKS=1 perl Makefile.PL

This should do it. Since (most) Makefile.PL's use checks with "pkg-
config" in addition to internal MakeMaker checks anyway, you should 
still see all missing dependencies from your operating system.

Tested this with Gtk3, Gtk3::WebKit and their dependencies. It's not 
quite nice and sometimes needs reading gcc errors to find missing 
dependencies - but it basically works.



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About