pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/52561

* On 2018-05-11 at 10:00 BST, Jonathan Perkin wrote:

> * On 2018-05-11 at 09:57 BST, Joern Clausen wrote:
> > On 05/11/18 10:48, Jonathan Perkin wrote:
> > > The only way a package does not build with cwrappers but does with
> > > legacy wrappers is if something is incorrect with the package, and we
> > > shouldn't hide bugs.
> > 
> > I totally agree. But more often than not when I report such a bug, nothing
> > happens. I don't have enough expertise to dig into the make process or
> > cwrapper to fix it myself, and those who do seem to look away as soon one of
> > my tickets is labeled "Solaris issue".
> Ok, let me see if I can make some time to look through these, and
> document how I did them to aid others who want to help out.  It's
> usually not too difficult, just takes time trawling through the build
> process to see what's going on.

I've committed a fix for the p5-Text-Iconv issue.  Here's how I went
about it:

 * Reproduced the initial problem on SmartOS 64-bit.

 * Went into the work directory "cd $(bmake show-var VARNAME=WRKSRC)"
   and looked at ../.work.log to see what the last compile line was
   (the actual command is the one that starts "<.>", the one before it
   that starts "[*]" is the input to the wrappers).  Copy and pasted
   it to try and reproduce and get the exact error message, but
   linktest.c had been removed.

 * Grepped for linktest in the work area, found it in Makefile.PL

 * Edited Makefile.PL using pkgvi and commented out this line:

    unlink $file, "$file.c", "$file$obj_ext";

 * Went back to the pkgsrc directory with "cd -", re-ran bmake, went
   back again into the work area with another "cd -", got the compile
   line again from the end of .work.log and re-ran it, this time
   getting the actual error:

     ld: fatal: library -liconv: not found

   This is what I was expecting all along, but it's always good to
   double check.

 * Ok, so the link line is not getting the correct arguments to find
   pkgsrc libiconv, i.e. we're missing -L${PREFIX}/lib, we now need to
   find out why.

 * Looking through Makefile.PL we see the test is performed using the
   linktest() function, which takes the following arguments:

     sub linktest
       my $libs = shift;
       my $incs = shift;

   and is called as

     linktest($config{LIBS}, $config{INC})

   These config{} vars are set in this loop around argv, the command
   line arguments to the Makefile.PL script:

     while ($i <= $#ARGV)
        my ($key, $val) = split(/=/, $ARGV[$i], 2);
        $config{$key} = $val;     

   How do we call Makefile.PL?  Looking back at the pkgsrc Makefile we
   have this line:

     .include "../../lang/perl5/"

   and searching in that file for "Makefile.PL" we see:

     ${BUILDLINK_PREFIX.perl}/bin/perl Makefile.PL ${MAKE_PARAMS}

   Ok, so we need to pass LIBS and INC in using MAKE_PARAMS

 * The actual fix I used is:

   MAKE_PARAMS+=	INC="-I${BUILDLINK_PREFIX.iconv}/include"

   The BUILDLINK_PREFIX.iconv variable points to the location where
   libiconv is installed, so for pkgsrc will be $PREFIX, and for OS
   where it is builtin it'll be /usr or similar.  This ensures that
   the correct paths are used across all OS.

 * Test everything with a 'bmake clean; bmake', it all now works and
   passes PKG_DEVELOPER=yes checks, so I'm happy to commit it.

Hope that helps.  This one is probably a bit more difficult than most
as it uses a custom build script, so requires the ability to read perl
and be able to modify things to figure out what exactly is happening.

Happy to explain further if any parts don't make sense.

Jonathan Perkin  -  Joyent, Inc.  -

Home | Main Index | Thread Index | Old Index