Macports et passage à Perl 5.22 (Bug #376)


Added by Joël Brogniart almost 9 years ago. Updated over 8 years ago.


Status:Closed Start date:07/20/2015
Priority:Normal Due date:
Assignee:- % Done:

100%

Category:-
Target version:1.3.0

Description

Des travaux sont en cours sur Macports pour passer de Perl 5.16 à 5.22. Du coup, j'ai relevé un petit souci.

Le fichier "Makefile-macports.conf" indique "PERLDIR=$(BASEPATH)/lib/perl5/vendor_perl/" comme destination des bibliothèques. Il semble que depuis la version 5.18, ce dossier n'est plus dans le path @INC et du coup les bibliothèques ne sont pas trouvées. Depuis la version 5.18, le dossier correspondant est associé à la version de Perl soit "PERLDIR=$(BASEPATH)/lib/perl5/vendor_perl/5.xx". Je résous le problème avec un patch qui change le fichier "Makefile-macports.conf" et remplace "PERLDIR=$(BASEPATH)/lib/perl5/vendor_perl/" par "PERLDIR=$(BASEPATH)/lib/perl5/vendor_perl/5.22/" avant la construction d'AMC. Avec le patch l'installation AMC fonctionne avec Perl 5.22 sous MacPorts.

Avec Perl 5.22, AMC donne quelques avertissements qui ne semblent pas empêcher le bon fonctionnement mais qui pourraient devenir gênants à l'avenir.

GLib-GObject-WARNING **: The property GtkIconView:orientation is deprecated and shouldn't be used anymore. It will be removed in a future version. at /opt/local/lib/AMC/perl/AMC-gui.pl line 935.
Use of the encoding pragma is deprecated at /opt/local/lib/AMC/perl/AMC-prepare.pl line 21.
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\\page{ <-- HERE ([^\}]+)}{([^\}]+)}{([^\}]+)}/ at /opt/local/lib/AMC/perl/AMC-meptex.pl line 128.
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\\page{([^\}]+)}{ <-- HERE ([^\}]+)}{([^\}]+)}/ at /opt/local/lib/AMC/perl/AMC-meptex.pl line 128.
Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/\\page{([^\}]+)}{([^\}]+)}{ <-- HERE ([^\}]+)}/ at /opt/local/lib/AMC/perl/AMC-meptex.pl line 128.

History

Updated by Alexis Bienvenüe almost 9 years ago

A-t-on la possibilité de récupérer la version de perl grâce à une variable environnement ou autre, pour ne pas mettre 5.22 en dur et permettre l'installation avec plusieurs versions de perl différentes sans rien modifier ?

  • Target version set to 1.3.0

Updated by Joël Brogniart almost 9 years ago

Dans le fichier de port je peux faire passer une variable dans les options du build, par exemple AMCPERLVERSION=5.22

Du coup, dans le fichier "Makefile-macports.conf", il faudrait transformer la ligne

PERLDIR=$(BASEPATH)/lib/perl5/vendor_perl/

en

PERLDIR=$(BASEPATH)/lib/perl5/vendor_perl/$(AMCPERLVERSION)/

Je teste ça sur la version 1.2.1 et la version de développement…

Updated by Joël Brogniart almost 9 years ago

Bon c'est un petit peu plus compliqué que ce que je pensais parce que le bon moyen d'avoir le bon dossier est d'utiliser la commande perl -V:vendorlib (avec la bonne version de Perl). Je continue les investigations…

Au fait, quel est l'intérêt de séparer les librairies du reste du programme ? Elles sont utilisées par d'autres programmes ? (Je n'y connais pas grand chose en Perl)

Updated by Joël Brogniart almost 9 years ago

Bon j'ai testé une version qui marche avec AMC 1.2.1 et la version de développement et qui marche avec Perl 5.16 et 5.22.

Dans le fichier "Makefile-macports.conf" j'ai remplacé

PERLDIR=$(BASEPATH)/lib/perl5/vendor_perl/

par

PERLDIR=$(PERLVENDORLIB)/

(est-ce que le / final est nécessaire ?)

Dans le fichier de port Macports je fais appel à perl -V:vendorlib pour obtenir le path du dossier vendorlib et je le transmets avec l'option PERLVENDORLIB aux instructions de préparation/construction/installation.

J'ai procédé de la sorte parce que lorsque j'ai configuré avec Perl 5.16, je pensais qu'il suffisait d'ajouter "5.16" à $(BASEPATH)/lib/perl5/vendor_perl/, mais en fait il fallait ajouter "5.16.3". Du coup je me suis dit qu'il valait mieux demander le bon chemin à Perl directement au cas où une future version change les règles.

Sinon je peux essayer de récupérer uniquement la partie finale du path à ajouter.

Qu'en pensez-vous ?

Updated by Alexis Bienvenüe almost 9 years ago

Cela me paraît parfait avec le chemin complet.
Je fais la modification dans la révision hg:62f80aba77ed (sans le / final, qui me semble inutile).

Updated by Joël Brogniart over 8 years ago

Je viens de m'apercevoir que j'ai fait une mauvaise analyse du problème et que mes modifications ne sont pas correctes. Au moment où le fichier de port est traité, il se peut qu'il n'y aucune version de PERL installée et donc mes modifications ne vont pas fonctionner correctement. Le calcul du dossier "vendorlib" doit se faire plus tard, au moment où commence la préparation à l'installation d'AMC (après l'installation des dépendances). Il faut que je fouille plus en détail dans le fonctionnement de Macports…

Updated by Joël Brogniart over 8 years ago

Bon, je confirme il y a plusieurs problèmes.

Premièrement la modification PERLDIR=$(PERLVENDORLIB)/ (revision 62f80aba77ed) n'était pas nécessaire et il faudrait la supprimer. Je peux directement transmettre le path vendorlib à Make avec PERLDIR sans avoir besoin d'une variable intermédiaire. La lecture du manuel pour make m'a aidé !

Deuxièmement la récupération du path vendorlib avant le build (après que les dépendances soient installées). J'ai trouvé un moyen et cela fonctionne pour le port d'AMC @1.2.1. Il faut que je teste ce mécanisme avec la version de développement.

Updated by Joël Brogniart over 8 years ago

Bon les modifications que j'ai utilisé marchent correctement aussi avec la version de développement. Donc je confirme que la modification que j'ai demandé n'est pas utile.

Par contre ça a soulevé un autre petit soucis.

Les makefile d'AMC utilisent correctement la variable PERLPATH transmise et elle est correctement gérée. Les fichiers sont correctement construits et leur emplacement est correct dans la phase d'installation. Cela fonctionne parfaitement lorsque cette variable et la version perl par défaut correspondent. Par contre cela ne fonctionne plus dans le cas où la version perl par défaut est différente de celle de la variable PERLPATH. Dans ce cas, les fichiers qui sont générés avec perl ne trouvent pas les modules qui ont été installés pour le perl défini par PERLPATH.

Par exemple, dans AMC/makefile, il y a :

%.ext: %.xml
    perl extrait-fichiers.pl --liste $@ $<

Lors de l'exécution de cette commande, c'est le perl par défaut qui est utilisé pour lancer extrait-fichiers.pl et non pas le perl défini dans PERLPATH.

Mais ce petit problème peut facilement être résolu en mettant le perl de PERLPATH comme perl par défaut.

Updated by Alexis Bienvenüe over 8 years ago

Je crois que je vais laisser en l'état, car vous avez trouvé une solution et que cela demanderait beaucoup de modifications attentives pour que ce soit toujours un perl particulier qui soit utilisé, et que cela fonctionne bien dans tous les environnements.
Mais j'accepterai avec intérêt une proposition de patch !

  • % Done changed from 0 to 100
  • Status changed from New to Resolved

Updated by Alexis Bienvenüe over 8 years ago

  • Status changed from Resolved to Closed

Also available in: Atom PDF