Bug 9307

Summary: Fails to load shared libraries located not in public place
Product: Sisyphus Reporter: Sviatoslav Sviridov <svd>
Component: rpm-build-perlAssignee: viy <viy>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: at, crux, ender, ldv, mike, rider, viy
Version: unstable   
Hardware: all   
OS: Linux   

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)