Centos srpm规范文件中的问号和感叹号语法
我试图了解Postgres 9.1 RPM是如何在CentOS/RHEL 6上构建的,因此我将从中查看规范文件 下面的语法是什么意思?特别是问号和感叹号Centos srpm规范文件中的问号和感叹号语法,centos,rpm,specifications,rpm-spec,Centos,Rpm,Specifications,Rpm Spec,我试图了解Postgres 9.1 RPM是如何在CentOS/RHEL 6上构建的,因此我将从中查看规范文件 下面的语法是什么意思?特别是问号和感叹号 %{!?test:%define test 1} %{!?plpython:%define plpython 1} %{!?pltcl:%define pltcl 1} %{!?plperl:%define plperl 1} %{!?ssl:%define ssl 1} %{!?intdatetimes:%define intdatetime
%{!?test:%define test 1}
%{!?plpython:%define plpython 1}
%{!?pltcl:%define pltcl 1}
%{!?plperl:%define plperl 1}
%{!?ssl:%define ssl 1}
%{!?intdatetimes:%define intdatetimes 1}
%{!?kerberos:%define kerberos 1}
%{!?nls:%define nls 1}
%{!?xml:%define xml 1}
%{!?pam:%define pam 1}
%{!?disablepgfts:%define disablepgfts 0}
%{!?runselftest:%define runselftest 0}
%{!?uuid:%define uuid 1}
%{!?ldap:%define ldap 1
我知道您可以使用%define[(opts)]
定义宏变量,我相信感叹号是一个逻辑求反运算符。我找不到任何关于问号的信息,也找不到像上面这样的例子。似乎是在定义宏变量之前的某种测试
是规范文件的粘贴。让我们在此处查看单个项目:
%{!?plpython:%define plpython 1}
在第102行,我们还看到:
%if %plpython
BuildRequires: python-devel
%endif
# In this file you can find the default build package list macros. These can be overridden by defining
# on the rpm command line:
# rpm --define 'packagename 1' .... to force the package to build.
# rpm --define 'packagename 0' .... to force the package NOT to build.
# The base package, the lib package, the devel package, and the server package always get built.
正如您所说,我们知道这是一个宏,也可以通过。现在,如果我们把搜索范围扩大到找到的Fedora文档。该条规定如下:
您可以使用特殊语法来测试宏的存在。例如:
%{?宏\u到\u测试:表达式}
此语法告诉RPM,如果存在宏到测试,则展开表达式,否则忽略。前导感叹号!,宏不存在的测试:
%{!?宏\u到\u测试:表达式}
在本例中,如果宏_to _test宏不存在,则展开表达式
Fedora文档提供了答案,如果plpython宏不存在,那么
%define plython 1
如果你看第38行,你也可以看到:
%if %plpython
BuildRequires: python-devel
%endif
# In this file you can find the default build package list macros. These can be overridden by defining
# on the rpm command line:
# rpm --define 'packagename 1' .... to force the package to build.
# rpm --define 'packagename 0' .... to force the package NOT to build.
# The base package, the lib package, the devel package, and the server package always get built.
因此,如果在构建包时不定义宏(我想这是大多数用户都会做的),它将确保buildrequires被正确配置为标准的PostgreSQL安装