首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RPM中有条件地包含文件

在RPM中有条件地包含文件
EN

Stack Overflow用户
提问于 2013-09-12 23:03:18
回答 2查看 2.8K关注 0票数 4

如何根据正在设置或未设置的定义.rpm有条件地将文件包含在_foobar中?定义_foobar将包含构建根中的绝对路径。文件就在那儿。

根据文档,我期望以下内容能够正常工作(注意:这个%files部分中还有更多的文件,但这是要点):

代码语言:javascript
复制
%files
%if %{_foobar}
%{_foobar}
%endif

然而,这给了我一个错误:

代码语言:javascript
复制
error: parse error in expression
error: /path/to/specfile:LINENO: parseExpressionBoolean returns -1

其中/path/to/specfile:LINENO是指向.spec文件的路径和%if行的行号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-05 12:40:46

我就是这样解决问题的

步骤1:

代码语言:javascript
复制
   In Build section .. somewhere I wrote :
 %build
  .....
  #check my condition here & if true define some macro
  %define is_valid %( if [ -f /usr/bin/myfile ]; then echo "1" ; else echo "0"; fi )
 #after his normal continuation
 .....
 ...

步骤2:安装部分

代码语言:javascript
复制
  %install
  ......
  #do something in that condition
  if %is_valid
  install -m 0644 <file>
  %endif
  #rest all your stuff
  ................

步骤3:在“文件”部分

代码语言:javascript
复制
   %files
   if %is_valid 
   %{_dir}/<file>
   %endif

就这样

它起作用了。

PS :我无法给出完整的代码,因此给出了所有有用的代码片段。

票数 4
EN

Stack Overflow用户

发布于 2013-09-12 23:14:13

多亏了this blog post,我找到了一个适合我的版本:

代码语言:javascript
复制
%files
%if %{?_foobar:1}%{!?_foobar:0}
%{_foobar}
%endif

如果已设置定义,则将其扩展到%if 1,否则将扩展到%if 0

如果其他人有更好的解决方案,请回答。比起我自己,我当然更愿意接受别人的回答。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18775680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档