Pourquoi topdir est-il défini sur sa valeur par défaut lorsque rpmbuild est appelé à partir de tcl?

J'ai un script tcl qui 'exec' rpmbuild. Ce faisant, le 'topdir' utilisé par rpmbuild est incorrect. J'ai un .fichier rpmmacros dans mon répertoire personnel et si j'appelle manuellement rpmbuild, cela fonctionne bien, c'est-à-dire. le "topdir" n'est pas celui par défaut.

J'ai ajouté un [exec rpmbuild "--showrc" ] dans le script tcl pour vérifier la valeur de topdir et il dit: "-14: _topdir %{_usrsrc}/redhat" qui est la valeur par défaut.

Quelqu'un Peut-il m'expliquer pourquoi cette situation et comment le résoudre ?

Je préférerais ne pas avoir à le spécifier avec --define car il est réellement fait dans un makefile et je ne veux pas le toucher (si aucun autre choix, je le ferai).

23
demandé sur serenesat 2009-01-06 18:35:53

5 réponses

Il y a deux façons de changer le topdir rpmbuild par défaut:

  1. Par utilisateur: en configurant le RPM topdir dans $HOME/.rpmmacros

    %_topdir    %{getenv:HOME}/rpmbuild
    
  2. Par projet: en configurant le RPM topdir dans le Makefile ou sur la ligne de commande

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

Remarque: dans les deux cas, vous devez vous assurer que votre répertoire topdir possède les répertoires appropriés (BUILD, SRPM, RPM, SPECS et SOURCES)

82
répondu Zach Garner 2016-02-14 10:08:20

Dans RHEL6 faire:

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

Pour voir quels sont les chemins utilisés !

Effectuez ce changement (mon topdir n'était pas défini sur /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
10
répondu ahmad 2012-11-03 04:41:31

TCL exécutera dans le répertoire courant par défaut. Vous pouvez modifier le répertoire courant à l'aide de la commande TCL http://www.tcl.tk/man/tcl8.4/TclCmd/cd.htm cd, par exemple:

cd ~username

Si topdir est une variable d'environnement, vous pouvez la définir http://www.tcl.tk/man/tcl8.4/TclCmd/tclvars.htm#M4 comme ceci:

set env(topdir) whatever/you/want
1
répondu Joseph Bui 2009-01-06 18:09:44

Ma première vérification serait de m'assurer que vous exécutez la même chose. Ces deux sur la ligne de commande pour s'assurer des alias ou des chemins ne pas déranger quoi que ce soit.

which rpmbuild

echo 'puts [auto_execok rpmbuild]' | tclsh
1
répondu Hugge 2010-09-16 21:02:15

Dans mon cas, cela est dû à la variable $HOME qui n'est pas définie lorsque rpmbuild est appelé.
La variable est utilisée pour rechercher le/rpmmacros fichier. Je suggère d'utiliser la commande 'printenv' pour vérifier.

0
répondu l-sebastien 2017-04-13 07:01:44