Bug 9307 - Fails to load shared libraries located not in public place
Summary: Fails to load shared libraries located not in public place
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build-perl (show other bugs)
Version: unstable
Hardware: all Linux
: P2 normal
Assignee: viy
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-03-24 12:13 MSK by Sviatoslav Sviridov
Modified: 2022-01-19 21:44 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sviatoslav Sviridov 2006-03-24 12:13:57 MSK
http://lists.altlinux.org/pipermail/devel/2006-March/030452.html

При поиске зависимостей в %buildroot не учитывается, что бинарные модули могут
иметь установленный RPATH. Без этого не удается загрузить требуемые библиотеки.
Comment 1 at@altlinux.org 2006-08-15 19:37:36 MSD
Попробуйте
%define __spec_autodep_custom_pre export 
LD_LIBRARY_PATH=%buildroot%_libdir/libsvn_swig
Comment 2 Dmitry V. Levin 2007-04-07 20:38:53 MSD
ping
Comment 3 Afanasov Dmitry 2008-11-05 10:18:33 MSK
на subversion 1.5.4 ошибка с этими исправлениями сохраняется
Comment 4 Vladimir Lettiev 2012-10-07 23:13:09 MSK
Я проверил сборку subversion-1.6.17-alt2 с указанным в 1-ом комментарии define'ом и сборка прошла успешной. Поэтому мне кажется, что blocker тут не очень уместен.

В принципе, можно улучшить perl.req, заставив его искать lib*.so.* файлы рекурсивно по всем каталогам в %buildroot%_libdir и добавлять все такие найденные каталоги в LD_LIBRARY_PATH. Как-то так:

diff --git a/perl.req b/perl.req
index c6e2967..df23bbd 100755
--- a/perl.req
+++ b/perl.req
@@ -4,6 +4,7 @@ use strict;
 
 use Config qw(%Config);
 use PerlReq::Utils qw(argv inc explode mod2dep path2dep);
+use File::Find;
 
 sub pod2usage {
 	eval { require Pod::Usage } or die $@;
@@ -188,10 +189,16 @@ sub do_deparse {
 		}
 # adjust LD_LIBRARY_PATH if there are libraries inside buildroot
 # spotted by Yury Konovalov
-		for my $libdir ("/usr/lib64", "/usr/lib") {
-			next unless glob "$ENV{RPM_BUILD_ROOT}$libdir/lib*.so*";
+		my %lib_paths = ();
+		find ( sub {
+			next unless (/^lib.*\.so\..*$/ );
+			next if (exists $lib_paths{$File::Find::dir}
+				|| $File::Find::dir =~ m{^$ENV{RPM_BUILD_ROOT}/usr/lib/debug} );
+			$lib_paths{$File::Find::dir}++;
+		}, "$ENV{RPM_BUILD_ROOT}/usr/lib64", "$ENV{RPM_BUILD_ROOT}/usr/lib");
+		if (keys %lib_paths) {
 			$ENV{LD_LIBRARY_PATH} .= ":" if $ENV{LD_LIBRARY_PATH};
-			$ENV{LD_LIBRARY_PATH} .= "$ENV{RPM_BUILD_ROOT}$libdir";
+			$ENV{LD_LIBRARY_PATH} .= join ":", keys %lib_paths;
 		}
 	}
 	my @pipe = ($X, shebang_options($fname));
Comment 5 Michael Shigorin 2014-11-16 21:46:37 MSK
Ещё актуально?
Comment 6 Dmitry V. Levin 2014-11-17 01:39:08 MSK
(In reply to comment #5)
> Ещё актуально?

Актуально, но, видимо, уже не очень срочно.
Comment 7 viy 2021-12-01 22:17:44 MSK
На досуге приложу и поверю.
Comment 8 Repository Robot 2022-01-19 21:44:41 MSK
rpm-build-perl-0.85-alt3 -> sisyphus:

 Wed Jan 19 2022 Igor Vlasenko <viy@altlinux> 0.85-alt3
 - applied crux's patch (closes: #9307)