On Fri, Oct 26, 2018 at 05:24:26PM +0200, Christian Weisgerber wrote: > > Remaining failures from the switch to lld: > > mail/evolution-rss edbus-private not found > net/telepathy/folks edbus-private not found > productivity/glabels edbus-private not found
I took a look at glabels, and I am assuming others ports have similar problem. The error log is: /usr/bin/libtool --tag=CC --mode=link cc ... warning: could not find a edbus-private library Link error: edbus-private not found! at /usr/libdata/perl5/LT/Library.pm line 137. LT::Library::resolve_library(LT::Library=HASH(0x126c6fa79898), ARRAY(0x126c06720070), 1, undef, "LT::Program") called at /usr/libdata/perl5/LT/Mode/Link/Program.pm line 84 LT::Linker::Program::link(LT::Linker::Program=HASH(0x126c6fa76868), LT::Program=HASH(0x126c329be310), ARRAY(0x126c0aee3cd0), LT::OSConfig=HASH(0x126c975caac0), ARRAY(0x126c06720070), LT::Library::Stash=HASH(0x126c06720028), ARRAY(0x126c0aee3f88), ARRAY(0x126c10a22058), ...) called at /usr/libdata/perl5/LT/Mode/Link/Program.pm line 28 LT::Program::link(LT::Program=HASH(0x126c329be310), ARRAY(0x126c0aee3cd0), LT::OSConfig=HASH(0x126c975caac0), ARRAY(0x126c06720070), LT::Library::Stash=HASH(0x126c06720028), ARRAY(0x126c0aee3f88), ARRAY(0x126c10a22058), LT::Parser=HASH(0x126c329be598), ...) called at /usr/libdata/perl5/LT/Mode/Link.pm line 235 LT::Mode::Link::run(LT::Mode::Link=HASH(0x126c329beb50), ARRAY(0x126c0aee3cd0), LT::Options=HASH(0x126c0aee3b20), LT::OSConfig=HASH(0x126c975caac0)) called at /usr/bin/libtool line 428 it is libtool that generate an error because it didn't found edbus-private library. This particular library comes from databases/evolution-data-server : $ pkg_locate edbus-private evolution-data-server-3.28.5:databases/evolution-data-server:/usr/local/lib/evolution-data-server/libedbus-private.so So with ld.lld, libtool is unable to found the library. I am able to reproduce the problem with just the following command line: $ libtool --tag=CC --mode=link cc -v -o test -lebook-1.2 warning: could not find a edbus-private library Link error: edbus-private not found! ... For what I understood, libtool uses objdump -p libebook-1.2.so to found the path dependencies (I have ktraced libtool). On pre-ld.lld system, I have the following output: $ objdump -p /usr/local/lib/libebook-1.2.so.21.0 ... Dynamic Section: NEEDED libedata-book-1.2.so.18.0 ... NEEDED libedbus-private.so ... RPATH /usr/local/lib/evolution-data-server ... But on post-ld.lld, the output is slightly different: $ objdump -p /usr/local/lib/libebook-1.2.so.21.0 ... Dynamic Section: RUNPATH /usr/local/lib/evolution-data-server NEEDED libedata-book-1.2.so ... NEEDED libedbus-private.so ... So ld.lld uses RUNPATH instead of RPATH, and as libtool only uses RPATH to infer no standard directories... it fail to found the library. The following diff on libtool permits to productivity/glabels to build. Index: LT/Library.pm =================================================================== RCS file: /cvs/src/usr.bin/libtool/LT/Library.pm,v retrieving revision 1.12 diff -u -p -r1.12 Library.pm --- LT/Library.pm 21 Sep 2015 08:49:06 -0000 1.12 +++ LT/Library.pm 27 Oct 2018 07:26:13 -0000 @@ -191,7 +191,7 @@ sub inspect return @deps; } -# give the list of RPATH directories +# give the list of RPATH/RUNPATH directories sub findrpaths { my $self = shift; @@ -203,16 +203,20 @@ sub findrpaths say "warning: library was specified that could not be found: $self->{key}"; return; } - tsay {"inspecting $filename for non standard RPATH..."}; + tsay {"inspecting $filename for non standard RPATH/RUNPATH..."}; open(my $fh, '-|', "objdump", "-p", "--", $filename); while (<$fh>) { if (m/RPATH\s+(.*)$/) { @dirs = split(":", $1); last; } + if (m/RUNPATH\s+(.*)$/) { + @dirs = split(":", $1); + last; + } } tsay {"found ", (@dirs == 0) ? 'none ' : '', - "RPATH for $filename\n@dirs"}; + "RPATH/RUNPATH for $filename\n@dirs"}; return @dirs; } Thanks. -- Sebastien Marie