绑定spec文件异常语法

时间:2014-06-30 18:03:22

标签: bind rpmbuild

我现在已经构建了一段时间的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

但是在这种语法中我必须有其他的东西。

1 个答案:

答案 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
...

这可能不是我想要的。

因此,对于没有其他人(实际运行构建的人或提供构建环境的人)设置此变量的情况,这一行确实提供了一个有用的默认值。