summaryrefslogtreecommitdiff
path: root/usr.bin/libtool/LT
diff options
context:
space:
mode:
authorMarc Espie <espie@cvs.openbsd.org>2012-07-11 08:39:24 +0000
committerMarc Espie <espie@cvs.openbsd.org>2012-07-11 08:39:24 +0000
commit3edf4186c45dbf9709b41c6f82b49c0472c432b0 (patch)
tree0beeadbddcef31da83bbcab301aae3a34620f3ce /usr.bin/libtool/LT
parenta07cf72956376573e9caffce99da11a3c78c74c2 (diff)
fix bug for real. Turns out some libraries (xcb...) have NEEDED that go
to standard ldconfig search dirs... Of course, ld complains because it doesn't have them in its standard search dir. BUT there's an option -rpath-link designed just for that (look up needed objects during compile and trust the end result to find them). So use that for ldconfig directories... so that xcb can link without needing to go have a look at the NEEDED list, but without encoding standard rpaths in the resulting binary... Also, put all the junk that needs -Wl together so we can add one single -Wl,-rpath,foo,-rpath-link,foo2 thingy...
Diffstat (limited to 'usr.bin/libtool/LT')
-rw-r--r--usr.bin/libtool/LT/Program.pm24
1 files changed, 19 insertions, 5 deletions
diff --git a/usr.bin/libtool/LT/Program.pm b/usr.bin/libtool/LT/Program.pm
index 8764532e264..9d1eca14cf0 100644
--- a/usr.bin/libtool/LT/Program.pm
+++ b/usr.bin/libtool/LT/Program.pm
@@ -1,4 +1,4 @@
-# $OpenBSD: Program.pm,v 1.12 2012/07/10 18:11:36 espie Exp $
+# $OpenBSD: Program.pm,v 1.13 2012/07/11 08:39:23 espie Exp $
# Copyright (c) 2007-2010 Steven Mestdagh <steven@openbsd.org>
# Copyright (c) 2012 Marc Espie <espie@openbsd.org>
@@ -143,12 +143,16 @@ sub link
LT::Archive->get_symbollist($symbolsfile, $gp->export_symbols_regex, $self->{objlist});
}
$libdirs = reverse_zap_duplicates_ref($libdirs);
+ my $rpath_link = {};
# add libdirs to rpath if they are not in standard lib path
for my $l (@$libdirs) {
- push @$RPdirs, $l;
+ if (LT::OSConfig->is_search_dir($l)) {
+ $rpath_link->{$l} = 1;
+ } else {
+ push @$RPdirs, $l;
+ }
}
$RPdirs = reverse_zap_duplicates_ref($RPdirs);
- map { $_ = "-Wl,-rpath,$_" } @$RPdirs;
foreach my $k (keys %$libs) {
tprint {"key = $k - "};
my $r = ref($libs->{$k});
@@ -183,14 +187,24 @@ sub link
}
}
+ my @linkeropts = ();
+ for my $d (@$RPdirs) {
+ push(@linkeropts, '-rpath', $d);
+ }
+ for my $d (keys %$rpath_link) {
+ push(@linkeropts, '-rpath-link', $d);
+ }
+ if ($symbolsfile) {
+ push(@linkeropts, '-retain-symbols-file', $symbolsfile);
+ }
+ push(@linkeropts, @$RPdirs);
@cmd = @$ltprog;
push @cmd, '-o', $dst;
push @cmd, @$args if ($args);
push @cmd, @{$self->{objlist}} if @{$self->{objlist}};
push @cmd, @$staticlibs if @$staticlibs;
push @cmd, "-L$symlinkdir", @libflags if @libflags;
- push @cmd, @$RPdirs if @$RPdirs;
- push @cmd, "-Wl,-retain-symbols-file,$symbolsfile" if ($symbolsfile);
+ push @cmd, '-Wl,'. join(',', @linkeropts) if @linkeropts;
LT::Exec->link(@cmd);
}
1;