Page 1 sur 1
[PKGBUILD] variable globale (résolu)
Publié : dim. 14 avr. 2013, 22:34
par Tristelune
Salut à tous,
j'ai longuement hésité avant de créer ce sujet, mais comme trop de choses ne sont pas clairs, j'ai décidé de le créer.
Comme vous l'avez peut-être vu, j'ai créé récemment le PKGBUILD:
https://aur.archlinux.org/packages/cn/c ... 0/PKGBUILD
Une chose est sûr: j'ai réussi à installer une version antérieure jusqu'à vendredi et à partir de vendredi cette version ne fonctionnait plus. Il y avait une erreur. Pour la reproduire, il suffit de placer
Code : Tout sélectionner
_cmd=$(find ${srcdir}/cnijfilter-source-${_pkgver} -type f -name cif${_model}.conf -path '*[\d]*' -printf '%P' \
| gawk -F/ '{print $1}')
juste après le md5sums. Ca fonctionnait avant vendredi et depuis non. A mon avis: entre-temps j'ai mis pacman à jour et je vois maintenant que makepkg appartient à pacman. Je suppose fortement que c'est la source du problème. Ce que je comprends: la variable
srcdir
est vide si elle est placé après le md5sums. Alors que dans les fonctions
build()
et
package()
elle est remplie comme on s'y attend. D'après ce que je peux voir de la page de "
man PKGBUILD
", ça a l'air d'être le fonctionnement correct. Mais ça m'étonne que ça ait changé par rapport à avant. Avant d'aller plus loin: est-ce une erreur normale ou il y a quelque chose qui ne joue pas ?
Re: [PKGBUILD] variable globale
Publié : lun. 15 avr. 2013, 13:15
par FoolEcho
Tristelune a écrit :Ce que je comprends: la variable srcdir est vide si elle est placé après le md5sums. Alors que dans les fonctions build() et package() elle est remplie comme on s'y attend.
Sans doute, ça se confirme en mettant tout sur une ligne en enlevant le \ à la fin du find,
_cmd=$(find ${srcdir}/cnijfilter-source-${_pkgver} -type f -name cif${_model}.conf -path '*[\d]*' -printf '%P' | gawk -F/ '{print $1}')
:
Code : Tout sélectionner
find: "/cnijfilter-source-3.80-1": Aucun fichier ou dossier de ce type
Re: [PKGBUILD] variable globale
Publié : lun. 15 avr. 2013, 23:37
par Tristelune
Effectivement, j'obtiens la même erreur au début de la création du paquet, c'est-à-dire:
Code : Tout sélectionner
find: "/cnijfilter-source-3.80-1": Aucun fichier ou dossier de ce type
La cause me paraît claire. A ton avis: comportement normal ou erreur ? C'est là que j'hésite.
Re: [PKGBUILD] variable globale
Publié : mar. 16 avr. 2013, 09:20
par FoolEcho
J'imagine que c'est normal (je n'y ai jamais fait gaffe non plus, mais si tu dis que ça fonctionnait avant pacman 4.1 ce n'est pas totalement surprenant: la 4.1 a apporté des changements appréciables côté gestion des sources pour les paquets des système de gestions de version, git, bzr et cie donc le code a probablement été remanié).
Re: [PKGBUILD] variable globale
Publié : mar. 16 avr. 2013, 21:34
par Tristelune
Ok, alors on va dire que ce qui suit est la confirmation:
All of the above variables such as $pkgname and $pkgver are available for use in the build function. In addition, makepkg defines the following variables for use during the build and install process:
srcdir
This contains the directory where makepkg extracts, or copies, all source files.
A la suite de ça, question de curiosité. Si une variable devait dépendre mettons de
srcdir
et qu'on doive l'utiliser dans plusieurs fonctions, y'a-t-il un moyen d'éviter d'en répéter le contenu ? Dans mon exemple: devrais-je définir deux fois
_cmd
? Du coup il me revient à l'esprit l'idée d'une fonction qu'on définirait avant les fonctions build(), package() ou autres, qui ressemblerait à
Code : Tout sélectionner
_getmodelid(){
find ${srcdir}/cnijfilter-source-${_pkgver} -type f -name cif${_model}.conf -path '*[\d]*' -printf '%P' \
| gawk -F/ '{print $1}'
}
Elle serait appelée dans les fonctions désirées et la variable
srcdir
contiendrait bien le chemin voulu. Tu vois une alternative ?
Re: [PKGBUILD] variable globale
Publié : mar. 16 avr. 2013, 22:04
par FoolEcho
Tristelune a écrit :Tu vois une alternative ?
Oui. Lire le README des sources et définir directement l'ID comme indiqué pour ton modèle en rajoutant un petit commentaire pour soi et/ou les suivants:
Code : Tout sélectionner
_model=mg6300
_id=408 #n° modèle indiqué dans le README pour mg6300

(c'est ce que j'ai fait la première fois que tu as présenté ton PKGBUILD

/ d'une part question d'habitude: lire INSTALL, README, etc. / d'autre part, car je trouvais déjà ce find horrible et pas clair )
Je me doute que tu ne vas pas prendre ma remarque de travers, hein, d'autant que ce n'est pas contre toi (vu qu'en plus tu es parti d'un autre PKGBUILD loin d'être simple car ça compile dans tous les sens), car en temps normal j'aime les trucs génériques puisque ça peut servir ailleurs, mais le coup du mega find pour aller trouver l'ID selon le modèle donné car il existe un .conf quelque part du même nom (sachant que le nom du modèle est passé avant et qu'il est vraisemblablement issu du README

), ID qu'il faut encore parser via gawk parce que ce n'est même pas direct... Non, là, franchement c'est abusé.

J'veux même pas savoir le coût.

Re: [PKGBUILD] variable globale
Publié : mer. 17 avr. 2013, 22:43
par Tristelune
Comme quoi la simplicité...... Non, non je ne le prends pas mal ne t'en fais pas. Durant la création je me suis même rendu compte qu'il y avait certaines bases que je n'ai pas encore intégrées. Mais je le garde pour moi, car c'est un peu

. Mon investissement en a valu le coup, alors c'est bon!
Pour être franc, quand j'ai vu ce find, il a fallu faire quelques essais pour voir ce qui se passait. Et j'essaie même pas de le comprendre en détails, quelques jours plus tard j'aurai oublié!
Je vais donc faire confiance à ton expérience: quand ça devient incompréhensible pour que le PKGBUILD reste générique, vaut mieux oublier et documenter le tout. J'ai encore des modifications à faire, je pense que ça va donc finalement tendre vers quelque chose du genre:
https://aur.archlinux.org/packages/cn/c ... 0/PKGBUILD.
Le jour où j'aurai une variable dépendante d'un
srcdir
je reviendrai à charge

.
Pour le moment, affaire classée..... on passe à la suivante!
