un fichier de spécification RPM “comprendre” les autres fichiers?
Est-il une sorte de "comprendre" la directive en TR /min spec? Je ne pouvais pas trouver une réponse sur google.
Motivation: j'ai un RPM modèle de spec à laquelle le processus de construction modifie avec la version, de révision et d'autres données spécifiques. Ceci est fait par sed
actuellement. Je pense qu'il serait plus propre si la spec serait #include
une accumulation de définitions propres à chaque fichier, qui serait générée par le processus de génération, donc je n'ai pas besoin de rechercher et de remplacer dans la spec.
Si il n'y a pas de include
, est-il un idiomatiques façon de le faire (assez commun, je crois) de la tâche?
OriginalL'auteur davka | 2011-05-26
Vous devez vous connecter pour publier un commentaire.
RPM ne prend pas en charge comprend.
J'ai résolu des problèmes similaires avec soit m4 processeur de macros ou par simple concaténation de pièces de spec (lors de la "inclure" était au début).
Si vous avez seulement besoin de passer un peu de variables au moment de la construction, et de ne pas inclure plusieurs lignes à partir d'un autre fichier, vous pouvez exécuter
et vous pouvez utiliser %myvar dans la spec.
--define
est la deuxième solution intuitive je me sentais devrait être làMerci!
--define
n'est pas documentée dans ma version de rpmbuild (4.9.1.1), mais il fonctionne. Je cherchais quelque chose comme ça pendant des heures!!!récente tr / min 4.12+ support de charge qui permet de charger macrofile, par exemple, vous pouvez faire quelque chose comme ceci
%{?load:%{SOURCE1}}
voir pkgs.fedoraproject.org/cgit/ruby.git/tree/...OriginalL'auteur m1tk4
Les versions récentes de rpmbuild certainement appuyer %inclure:
Malheureusement, ils ne sont pas très intelligent, il n'existe aucun ensemble de répertoires, dans lequel il va chercher les fichiers demandés, par exemple. Mais il est là et les variables sont développés, par exemple:
Il serait très apprécié si quelqu'un aurait des commentaires à propos de la version
%include
est entièrement pris en charge.La mention la plus tôt je peux trouver de
%include
est dans le notes de version pour de 4,8, et qui implique un correctif à une fonctionnalité qui existait déjà. Les notes de version pour 4.4.x, 4.6 et 4.7 ne pas mentionner%include
à tous, ce qui implique la fonctionnalité a été introduite en 4.4.2 (juillet 2005) au plus tard. À compter de 2018, je pense qu'il est sûr de supposer que votre version de RPM est sérieux dans le besoin de mise à niveau si elle ne prend pas en charge%include
.OriginalL'auteur Міша
J'ai été confronté à ce même problème récemment. Je voulais définir plusieurs sous-paquets qui ont été similaires, mais chacun a varié légèrement (ils étaient spécifiques à la langue Rpm). Je n'ai pas envie de répéter la même chaudière-plaque de choses pour chaque sous-paquet.
Voici une version générique de ce que j'ai fait:
L'utilisation de
%{expand}
assure que%(cat)
n'est exécutée qu'une seule fois, lorsque la macro est définie. Le contenu de la main-foo.le fichier de spécification est alors trois fois, et à chaque fois%1
dans la main-foo.le fichier de spécification se développe pour chacun debar
,baz
etqux
, à son tour, me permettant de me traiter comme un modèle. Vous pouvez facilement étendre ce à plus d'un paramètre, si vous en avez besoin (je n'ai pas).OriginalL'auteur Bob Bell
Pour la question sous-jacente, il y a peut-être deux autres solutions qui sont présents dans tous les tr /min versions que je suis au courant.
macro
etrpmrc
fichiers.Sous -
Une autre solution (et peut-être le "RPM façon") est d'utiliser sous-packages. Maximum RPM a également des informations et des exemples de sous -.
Je pense que la question est d'essayer de structurer quelque chose comme,
%include common.spec
debug et production pourrait également être client et serveur, etc. Pour les exemples de redéfinir une variable, chaque sous-paquetage peut avoir sa propre liste de variables.
Limitations
Le principal avantage de sous - est que seuls les d'une construction a lieu; Cela peut aussi être un inconvénient. Le debug et production exemple peut illustrer ce point. Qui peut être contourné en utilisant
strip
pour créer des variantes ou de compiler deux fois avec différent; peut-être en utilisantVPATH
avec Gnu Make). Avoir à compiler des colis volumineux et ensuite seulement de simples variations, comme avec/sans développeur info, commeheaders
, bibliothèques statiques, etc. pouvez vous faire apprécier cette approche.Macros et Rpmrc
Sous - ne permettent pas de résoudre le problème de structurels définit que vous voulez pour un ensemble de rootfs hiérarchie, ou de la plus grande collection de Rpm. Nous avons
rpmbuild --showrc
pour cela. Vous pouvez avoir une grande quantité de variables et macros défini par la modification derpmrc
etmacros
lorsque vous exécutezrpm
etrpmbuild
. À partir de laman
page,Je pense que ces deux caractéristiques peuvent résoudre tous les problèmes que
%include
peut. Cependant,%include
est un concept familier, et a probablement été ajouté pour faire de la tr /min plus complet et développeur sympathique.OriginalL'auteur artless noise
Vous pouvez inclure le
*.inc
des fichiers à partir du répertoire des SOURCES (%_sourcedir
):De cette façon, ils iront automatiquement dans SRPMS.
rpm
versions; donc si vous avez une version plus récente derpm
, le problème est résolu.OriginalL'auteur marcindulak
Quelle version tu parles? J'ai actuellement %filename.txt dans mon fichier spec et il semble fonctionner comme le C #include.
OriginalL'auteur digitalsky
J'ai utilisé les scripts (nom de votre favori) pour prendre un modèle et créer le fichier spec. Aussi, le
%files
balise permet d'importer un fichier qui est créé par un autre processus, par exemple, Pythonbdist-rpm
.OriginalL'auteur Aaron D. Marasco