2012-08-31 39 views
4

的rpmbuild可以通過查找由二進制文件所需的共享庫自動檢測依賴性包含在包被忽略,並且,雖然這是一個很好的思考,幾乎每一次,有時間當它是不可取的,但僅適用於一些特定的庫。我指的是一些二進制文件需要通過rpm包管理不提供給系統,但由第三方安裝程序直接安裝的庫的情況。現在可以將某些特定的自動檢測依賴於的rpmbuild

,問題是:有沒有辦法讓自動檢測功能有效(就派上用場了其他的二進制文件包),但忽略/刪除只有這些特定庫?

喜歡的東西

AutoReqIgnore : library1 
AutoReqIgnore : library2 

回答

3

我還沒有找到一個內置的方式,但我wrote a small script that I used as a filter

#!/usr/bin/perl -w 
use strict; 
use IPC::Open2; 

# This quick script will run the native find-requires (first parameter) 
# and then strip out packages we don't want listed. 
open2(\*IN, \*OUT, @ARGV); 
print OUT while (<STDIN>); 
close(OUT); 
my $list = join('', <IN>); 

# Apply my filter(s): 
$list =~ s/^libqt-mt.so.*?$//mg; 

print $list; 

你可以把自己的正則表達式行,在這個例子中,我去掉libqt-mt.so.*

然後,在.spec文件中:

# Note: 'global' evaluates NOW, 'define' allows recursion later... 
%global _use_internal_dependency_generator 0 
%global __find_requires_orig %{__find_requires} 
%define __find_requires %{_builddir}/%{?buildsubdir}/build/find-requires %{__find_requires_orig} 

正如你所看到的,這個腳本是/build/下的源碼包。

+1

接受的答案無需驗資:我可能無法驗證它在短期內 – a1an

3

自動生成的依賴As of rpm-4.9 (Fedora 15), rpm has a standard method to enable filtering

例如,你可以寫

%global __requires_exclude ^libthirdpartyplugin.so$ 
+2

*最後* ......它看起來像[RHEL/CentOS的6](HTTP:/ /mirror.centos.org/centos/6/os/x86_64/Packages/)仍是4.8,但[RHEL/CentOS的7](http://mirror.centos.org/centos/7/os/x86_64/Packages/ )碰到4.11。 –

相關問題