Open Build Service 软件建包简要教程四——编写跨平台spec文件

由于包命名规则以及开发环境的不同,按照常规方法编写spec文件,只能为某一种发行版建包,如果想为多个发行版建包,那么就不得不为每个发行版单独建立OBS项目并分别编写spec文件,这样显然非常麻烦,费时由费力。不过OBS提供了一个发行版RPM宏解决了这个问题,利用这个宏可以编写出一个跨平台的spec文件,可以同时兼容多个linux发行版。

完整的宏定义如下:

发行版

表达式

备注

openSUSE Factory  %if 0%{?suse_version} > 1140 即将发布(正在不断的变化)
openSUSE 11.4  %if 0%{?suse_version} == 1140
openSUSE 11.3  %if 0%{?suse_version} == 1130
openSUSE 11.2  %if 0%{?suse_version} == 1120
openSUSE 11.1  %if 0%{?suse_version} == 1110 亦可表示 SLE11
openSUSE 11.0  %if 0%{?suse_version} == 1100
openSUSE 10.3  %if 0%{?suse_version} == 1030
openSUSE 10.2  %if 0%{?suse_version} == 1020
SUSE Linux 10.1  %if 0%{?suse_version} == 1010 亦可表示 SLE10
SUSE Linux 10.0  %if 0%{?suse_version} == 1000
SUSE Linux 9.3  %if 0%{?suse_version} == 930
SLES 9  %if 0%{?sles_version} == 9 亦可表达为: %if 0%{?suse_version} == 910
SLE 10  %if 0%{?sles_version} == 10 亦可表达为: %if 0%{?suse_version} == 1010
SLE 11  %if 0%{?sles_version} == 11 亦可表达为: %if 0%{?suse_version} == 1110
CentOS 5  %if 0%{?centos_version} == 504
RHEL 4  %if 0%{?rhel_version} == 406
RHEL 5  %if 0%{?rhel_version} == 501
RHEL 6  %if 0%{?rhel_version} == 600
Fedora 6 with Extras  %if 0%{?fedora} == 6
Fedora 7 with Extras  %if 0%{?fedora} == 7
Fedora 8 with Extras  %if 0%{?fedora} == 8
Fedora 9 with Extras  %if 0%{?fedora} == 9
Fedora 10 with Extras  %if 0%{?fedora} == 10
Fedora 11 with Extras  %if 0%{?fedora} == 11
Mandriva 2006  %if 0%{?mdkversion} == 2006
Mandriva 2007  %if 0%{?mdkversion} == 2007
Mandriva 2008  %if 0%{?mdkversion} == 2008
Mandriva 2009.0  %if 0%{?mdkversion} == 2009
Mandriva 2009.1  %if 0%{?mdkversion} == 200910
Mandriva 2010.0  %if 0%{?mdkversion} == 201000

这些宏定义可以放在spec文件的任何位置,写法有两种:

%if 0%{?suse_version}
<suse stuff here>
%else
<other distros>
%endif

%if 0%{?suse_version}
<suse stuff here>
%else

例一:

%if 0%{?suse_version}
Requires:  libstdc++33          #如果是suse满足的条件
%else
Requires:  compat-libstdc++     #除suse以外的发行版满足的条件
%endif

例二:

%if 0%{?suse_version} >= 1140
–enable-optimize \             #openSUSE版本大于11.4时运行的参数
–disable-debug \
%endif

例三:

%if 0%{?suse_version}
BuildRequires: update-desktop-files,gconf2
Requires:  gconf2
%ifarch x86_64
Requires:  libexpat1-32bit,libexpat0-32bit  #64位系统满足的条件
%else
Requires:  libexpat1,libexpat0              #32位系统满足的条件
%endif
%else

一个完整范例:

Summary:    SopCast is a broadcast video and audio.
Name:         sopcast
Version:      3.2.6
Release:      12.1
License:      Any commercial
Group:         Productivity/Multimedia
URL:           http://www.sopcastcn.com
Source:        sp-auth-%{version}.tar.gz
Autoreq:       0

%if 0%{?suse_version}
%ifarch x86_64
Requires:  libstdc++33-32bit
%else
Requires:  libstdc++33
%endif
%endif

%if 0%{?fedora}
Requires:  compat-libstdc++-33(%{__isa_name}-32)
%endif

%if 0%{?centos_version}
Requires:  compat-libstdc++-33(%{__isa_name}-32)
%endif

%if 0%{?rhel_version}
Requires:  compat-libstdc++-33(%{__isa_name}-32)
%endif

%if 0%{?mdkversion}
Requires:  compat-libstdc++-33
%endif

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot

%description
SopCast is a simple, free way to broadcast video and audio or watch the video and listen to radio on the Internet.

%prep
%setup -q -n sp-auth
%install
mkdir -p $RPM_BUILD_ROOT/usr/bin
install -m 755 sp-sc-auth $RPM_BUILD_ROOT/usr/bin

%clean
rm -rf $RPM_BUILD_ROOT
rm -rf $RPM_BUILD_DIR/%{name}-%{version}

%files
%defattr(-,root,root)
/usr/bin/sp-sc-auth
#%exclude %{_prefix}/*/debug*

%post
/sbin/ldconfig

%postun
if [ “$1” = “0” ]; then
/sbin/ldconfig
fi

%changelog

 

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>