Ban*_*jer 6 specifications centos rpm rpm-spec
我试图了解Postgres 9.1 rpms是如何在CentOS/RHEL 6上构建的,所以我要看一下源rpms中的spec文件.
以下语法是什么意思?具体来说,问号和感叹号?
%{!?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
Run Code Online (Sandbox Code Playgroud)
我知道你可以定义一个宏变量%define <name>[(opts)] <value>,我相信感叹号是一个逻辑否定运算符.我找不到关于问号或上述例子的任何信息.在定义宏变量之前,似乎是某种测试.
这是spec文件的粘贴.
For*_*est 11
让我们在这里查看一个项目:
%{!?plpython:%define plpython 1}
Run Code Online (Sandbox Code Playgroud)
在第102行我们也看到了这个:
%if %plpython
BuildRequires: python-devel
%endif
Run Code Online (Sandbox Code Playgroud)
正如你所说,我们知道这是一个宏,也可以通过Fedora文档确认.现在,如果我们扩展对Fedora文档的搜索,我们会发现条件宏.这表明以下内容:
您可以使用特殊语法来测试宏的存在.例如:%{?macro_to_test:expression}如果存在macro_to_test,则此语法告诉RPM扩展表达式,否则忽略.一个主要的感叹号,!,测试不存在宏:%{!?macro_to_test:expression}在这个例子中,如果macro_to_test宏不存在,则展开表达式.
如果plpython宏不存在,Fedora文档提供了答案
%define plython 1
Run Code Online (Sandbox Code Playgroud)
如果你看第38行你也可以看到:
# 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.
Run Code Online (Sandbox Code Playgroud)
因此,如果在构建程序包时没有定义宏(我想这是大多数用户会这样做的话),那么它将确保为看起来像标准的PostgreSQL安装正确配置构建需求.
| 归档时间: |
|
| 查看次数: |
1655 次 |
| 最近记录: |