11
votes

Y a-t-il une syntaxe ou une astuce pour pouvoir créer une macro de fichier de spécifications multilignes de RPM

fond.

%define LIST a
%define LIST %LIST b


0 commentaires

6 Réponses :


1
votes

Vous devez avoir au moins une partie de la valeur de la première ligne, i.e.:

%define DOSOMETHING rm file1; rm file2; rm file3


1 commentaires

La solution ci-dessus ne fonctionne pas pour moi, possible pourrait fonctionner pour d'autres versions de RPMBuild. Je reçois une erreur: Erreur: Line 31: Balise inconnue: B \ édité la question à la réfléchir.



2
votes

Puisque vous avez expliqué votre objectif un peu plus, essayons une approche différente. Essayez ceci dans votre fichier de spécifications: xxx

et ceci dans le fichier source1 (dans ce cas, flist): xxx

J'ai testé cela avec RPM 4.4.6 Comme c'est la version la plus ancienne disponible pour moi pour le moment.


1 commentaires

Cela ne fonctionne pas sur Centos4, qui est la fin de la vie et a une ancienne version RPM. Malheureusement, c'est ce que l'OP et le vôtre essaient vraiment de travailler avec. Bien que de loin, c'est le plus proche d'une solution.



2
votes

Dans les définitions de macro, une barre oblique inverse de la ligne est supprimée et utilisée pour indiquer à RPM que la définition de la macro continue. Le caractère Newline est pas dépouillé (contrairement à un fichier de fabrication). Par conséquent, si vous construisez un script multiligne, les semi-couches ne sont pas nécessaires. Cela signifie également que si vous divisez une seule commande, vous devez utiliser 3 backslashes. Deux pour donner une barre oblique inverse que la coquille verra et une pour dire à RPMBuild de continuer à analyser la macro. La coquille retirera la barre oblique inverse qu'il voit, plus la nouvelle ligne et qui donnera une commande sur deux lignes. whew !!


1 commentaires

% Définir FAITE FAITE \\\ NAME = TODO \\\ AIDE \\\



0
votes

Si j'étais vous, je maintiens la liste dans un fichier source.

contenu de % {_ sourcedir} / liste : xxx

dans le fichier de spécifications: xxx


0 commentaires

5
votes

Vous ne pouvez pas vraiment faire de macros multilignes dans un fichier de spécifications comme vous pouvez dans votre fichier ~ / .rpmmacros. Type de stupide.

i Créez une sous-répertoire Specs / Inc / avec des fichiers spécifiques qui agissent en tant que macros multilignes utilisées par tous les packages créés pour mon site. Au lieu d'utiliser des macros comme % foo , vous pouvez simplement faire % inclure inc / foo.spec . Vous pouvez également créer des raccourcis pour éviter l'inclure Syntaxe % Global Foo% Inclure Inc / FOO.SPEC . Ensuite, cela fonctionne comme une macro multiligne.

Voici un exemple complet.

inc / env. / P> xxx

inc / foo.spec xxx

puis dans mon fichier de spécification de package, myLib.Spec: xxx


1 commentaires

C'est une solution vraiment intelligente! Merci!!



0
votes

Cet exemple doit fonctionner:

cat file.spec

%define MAKE make \\\
 status=success \\\
 #EOL

%build
${MAKE}


cat Makefile

status?=fail
default: 
    echo "status=${status}"


0 commentaires