[PKGBUILD] variable globale (résolu)

Mise à jour / Création /debug de paquetages
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

[PKGBUILD] variable globale (résolu)

Message 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 ?
Dernière modification par Tristelune le mer. 17 avr. 2013, 22:45, modifié 1 fois.
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [PKGBUILD] variable globale

Message 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
«The following statement is not true. The previous statement is true.» :nage:
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [PKGBUILD] variable globale

Message 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.
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [PKGBUILD] variable globale

Message 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é).
«The following statement is not true. The previous statement is true.» :nage:
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [PKGBUILD] variable globale

Message 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 ?
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [PKGBUILD] variable globale

Message 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: :mrgreen:

Code : Tout sélectionner

_model=mg6300
_id=408 #n° modèle indiqué dans le README pour mg6300
:copain: :humour: :pastaper: :merci:
(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 :mrgreen: ), ID qu'il faut encore parser via gawk parce que ce n'est même pas direct... Non, là, franchement c'est abusé. :sifflote2: J'veux même pas savoir le coût. :lol:
«The following statement is not true. The previous statement is true.» :nage:
Tristelune
Elfe
Messages : 516
Inscription : mer. 01 août 2007, 16:38

Re: [PKGBUILD] variable globale

Message 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 :oops: . 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 :wink: .

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

:merci:
Répondre