当rpmbuild从tcl调用时,为什么topdir设置为默认值?

时间:2009-01-06 15:35:54

标签: tcl rpm

我有一个'exec'rpmbuild的tcl脚本。这样做时,rpmbuild使用的'topdir'是错误的。我的主目录中有一个.rpmmacros文件,如果我手动调用rpmbuild,它工作正常,即。 'topdir'不是默认值。

我在tcl脚本中添加了 [exec rpmbuild“--showrc”] 以检查 topdir 的值,并显示'-14:_topdir%{_ usrsrc } / redhat'这是默认值。

有人能解释我为什么会出现这种情况以及如何解决这个问题?

我不想用--define指定它,因为它实际上是在makefile中完成的,我不想触摸它(如果没有其他选择,我会这样做)。

5 个答案:

答案 0 :(得分:87)

有两种方法可以更改默认的rpmbuild topdir:

  1. 每位用户:通过在$ HOME / .rpmmacros中配置RPM topdir

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. Per-Project:通过在Makefile或命令行中配置RPM topdir

    rpmbuild --define '_topdir build' -ba package.spec
    
  3. 注意:在这两种情况下,您都需要确保topdir目录具有相应的目录(BUILD,SRPM,RPM,SPECS和SOURCES)

答案 1 :(得分:10)

RHEL6 中执行:

  rpm --showrc|grep topdir
  rpm --showrc|grep srcrpmdir

查看正在使用的路径!

进行此更改(我的topdir未设置为/usr/src/):

vi  /usr/lib/rpm/macros
#       Path to top of build area.
#%_topdir               %{getenv:HOME}/rpmbuild
%_topdir                %{_usrsrc}/redhat

rpm --showrc|grep topdir    now shows   /usr/src/redhat/ as its BUILD dir

答案 2 :(得分:1)

默认情况下,TCL将在当前目录中执行。您可以使用TCL命令http://www.tcl.tk/man/tcl8.4/TclCmd/cd.htm cd更改当前目录,例如:

cd ~username

如果topdir是环境变量,您可以像这样设置http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4

set env(topdir) whatever/you/want

答案 3 :(得分:1)

我的第一个检查是确保你执行同样的事情。 在命令行上执行这两项操作以确保别名或路径 不要打扰任何事情。

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh

答案 4 :(得分:0)

在我的情况下,这是由于变量$ HOME在调用rpmbuild时未设置。
该变量用于搜索' / rpmmacros'文件。我建议使用命令' printenv'核实。