由于包命名规则以及开发环境的不同,按照常规方法编写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
%endifBuildRoot: %{_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 条评论。