我现在已经构建了一段时间的rpms,但是当我从bind-9.8.2-0.23.rc1.el6_5.1.src.rpm中提取bind.spec时,我发现了一个我无法理解的不寻常的语法: / p>
%{?!SDB: %define SDB 1}
%{?!test: %define test 0}
%{?!bind_uid: %define bind_uid 25}
%{?!bind_gid: %define bind_gid 25}
%{?!GSSTSIG: %define GSSTSIG 1}
%{?!PKCS11: %define PKCS11 0}
我需要确保使用--with-gssapi=/usr/include/gssapi --with-dlopen=yes
编译rpm。
在%build部分中,configure命令具有上面声明的变量的条件,如下所示:
%if %{GSSTSIG}
--with-gssapi=yes \
--disable-isc-spnego \
%endif
我的猜测是这些部分做的非常相似:
%define PKCS11=0
但是在这种语法中我必须有其他的东西。
答案 0 :(得分:2)
我只能猜测,但我认为他们在这里提供条件%define
。
让我们试试:
Name: blabla
Version: 1.3.2
Release: 0.1
License: GPL
Summary: my awesome lib
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%{?!TESTDEF: %define TESTDEF undefined}
%description
%prep
echo %TESTDEF
如果我现在运行纯rpmbuild -ba empty.spec
,我会
...
+ echo undefined
undefined
...
OTOH,如果我运行rpmbuild -D 'TESTDEF 9' -ba empty.spec
,我会
...
+ echo 9
9
...
如果我省略两者,我会
...
+ echo %TESTDEF
%TESTDEF
...
这可能不是我想要的。
因此,对于没有其他人(实际运行构建的人或提供构建环境的人)设置此变量的情况,这一行确实提供了一个有用的默认值。