Почему topdir имеет значение по умолчанию при вызове rpmbuild из tcl? - PullRequest
25 голосов
/ 06 января 2009

У меня есть скрипт tcl, который 'exec' rpmbuild. При этом «topdir», используемый rpmbuild, неверен. У меня есть файл .rpmmacros в моем домашнем каталоге, и если я вызываю вручную rpmbuild, он работает нормально, т.е. topdir не является значением по умолчанию.

Я добавил [exec rpmbuild "--showrc"] в сценарий tcl, чтобы проверить значение topdir , и он говорит: -14: _topdir% {_ usrsrc} / redhat ', который является значением по умолчанию.

Может кто-нибудь объяснить мне, почему такая ситуация и как ее решить?

Я бы предпочел не указывать это с помощью --define, потому что на самом деле это делается в make-файле, и я не хочу к нему прикасаться (если нет другого выбора, я сделаю это).

Ответы [ 5 ]

87 голосов
/ 21 июня 2010

Существует два способа изменить rpmbuild topdir по умолчанию:

  1. Для пользователя: путем настройки topdir RPM в $ HOME / .rpmmacros

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. Для каждого проекта: путем настройки topdir RPM в Makefile или в командной строке

    rpmbuild --define '_topdir build' -ba package.spec
    

Примечание: в обоих случаях вам необходимо убедиться, что в вашем каталоге topdir есть соответствующие каталоги (BUILD, SRPM, RPM, SPECS и SOURCES)

10 голосов
/ 29 декабря 2011

In RHEL6 do:

  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
1 голос
/ 21 января 2009

Моей первой проверкой было бы убедиться, что вы выполняете то же самое. Сделайте эти два в командной строке, чтобы убедиться, что псевдонимы или пути ничего не беспокоить.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh
1 голос
/ 06 января 2009

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
0 голосов
/ 13 апреля 2017

В моем случае это связано с переменной $ HOME, которая не устанавливается при вызове rpmbuild.
Переменная используется для поиска файла '/ rpmmacros'. Я предлагаю использовать команду «printenv» для проверки.

...