3 jours plus tard...
Légende de l'image :
- en bleu les dossiers,
- en vert les fichiers exécutables (binaire, script)
- en blanc les fichiers texte.
J'ai donc créé dans /opt un dossier "devel" dans lequel j'ai créé un sous-dossier "pascal", dans lequel j'ai créé trois sous-dossiers : "composants", "fpcup", et "patches". Les autres seront créés automatiquement.
"composants" et "patches" comme les noms l'indiquent, ne nécessitent pas d'explications, sauf une, pour les patches, qu'il faut passer à la main : je préfère cette méthode qui permet de vérifier que le patch qu'on va appliquer correspond bien à un fichier qui en a besoin (des fois qu'il ait été mis à jour).
Pour l'heure ça ne concerne (pour moi) que fpreadtiff.pas dans fpc (dont on a parlé ici il y a un an ou deux), et easylazfreetype.pas pour laz, qui sera probablement mis à jour un jour, d'où le contrôle à la mano !
La grosse partie du boulot se trouve dans le dossier "fpcup" dans lequel on trouve :
- un binaire recompilé par mes soins suite à microscopiques modifications dans les sources, mais ça m'a bien aidé ;
- un fichier fpcup.ini n'est n'est pas celui d'origine (que vous sauvegarderez dans un coin, on ne sait jamais) et qui m'a fait souffrir le martyre parce que c'est très mal expliqué et même parfois carrément périmé...
- un autre fichier d'intialisation "settings.ini" que je n'ai pas eu le courage d'enlever (on ne sait jamais...) mais que je n'ai pas modifié ;
- et enfin le script "start_fpcup.sh" qui fait le boulot, créé par mes soins et commenté, parce que l'articulation de tout ça est un peu casse-gueule.
Mais ça m'aura quand même permis de, dans l'ordre :
- installer fpc 2.6.0 et laz 1.4.0
- upgrader fpc vers 2.6.2
- upgrader fpc vers 2.6.4
- installer les composants dans laz
- upgrader laz vers 1.4.2
- upgrader laz vers 1.4.4
et tout ça en ne faisant qu'une modif (ou deux) à la fois dans le .ini, et une ou même pas dans le script, en fonction de la cible.
Deux exemples pour illustrer l'idée : upgrader une version se définit dans l'ini, installer les composants de laz plutôt que l'ide se définit dans le script.
Le seul souci qui reste c'est cette perte du paramètre de langage dans l'IDE de laz après un upgrade... Je ne renonce pas à l'idée de rajouter une ligne ou deux dans le script pour remettre ça d'équerre :-)
La modif dans les sources de fpcup (c'est bien, c'est écrit en Lazarus) :
on trouve, dans le fichier fpcup.lpr, à quatre endroits différents, la ligne writeln('Error : wrong command line options given:'); , ce qui, vous en conviendrez, n'est pas pratique pour savoir ce qui a fait planter et où.
J'ai donc modifié ces lignes en rajoutant simplement (1) à (4) après le mot "error" et je vous engage à faire de même, ce me fut trop utile ! (lignes 526, 545, 614 et 656).
Voilà.
Il ne me reste plus qu'à mettre tout ça en prod dans la vraie vie, ce qui va consister d'abord à supprimer les installations de fpc, fpcsrc et lazarus sur la machine physique, sacrilège !, pour ensuite court-circuiter l'outil d'installation des paquets (autre sacrilège,) et ça devrait le faire.
Le seul problème que j'ai rencontré, c'est lors du patch du fichier fpreadtiff.pas : je m'étais noté dans un coin qu'après avoir modifié le fichier il suffisait de taper "make" et ça compilait de nouveaux .o et .ppu mais avec cette nouvelle installation, terminée la simplicité !
J'ai passé environ deux heures pour trouver toutes les options à rajouter à fpc (oui, au passage j'ai changé de compilo, la structure et les paramètres d'un Makefile me faisant trop pleurer), je m'en suis sorti mais je crains le pire s'il faut un jour patcher plusieurs fichiers qui se mordent la queue.
On verra bien.
En pj un zip contenant le fichier ini (plein de commentaires, c'est un peu brut de décoffrage, enfin, ça vous donnera une idée de ce que j'ai vécu) et le script, commenté également : tools.zip
EDIT : y aura qu'à rajouter ça à la fin du script (non testé en vrai, mais en simulation c'est bon), et ça devrait régler ce problème de langue :
librement inspiré de # http://www.developpez.net/forums/d15...tring-fichier/
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 checklaz=${inisection/laz} # enlève 'laz' dans inisection et met le résultat dans checklaz # les chaines seront différentes s'il y avait 'laz' dans 'inisection' if [ "$checklaz" != "$inisection" ]; then configfile=$installdir/config_laz/environmentoptions.xml # bien penser à "échapper" les caractères interprétables : 2e et 3e doubles quotes qui font croire # qu'on termine une chaîne avant d'en ouvrir une autre, et le caractère anti-slash qui indique # un retour à la ligne... str1="<Language ID=\"en\"\/>" str2="<Language ID=\"fr\"\/>" sed -i "s|${str1}|${str2}|" $configfile fi
Partager