Journal Compiler ses logiciels, exemple avec Geany 1.37.1

Posté par  (site web personnel) . Licence CC By‑SA.
22
19
août
2021

Grâce à l’effort des développeurs et mainteneurs de nos distributions, il est très rare que le besoin de compiler un logiciel se fasse sentir. C’est une tâche qui parait très compliquée, et pourtant cela se résume souvent à lancer quelques commandes en suivant une notice. Je vous propose donc un exemple avec le logiciel Geany qui se prête bien à l’exercice: ses dépendances peu nombreuses sont toutes présentes dans les dépôts de ma distribution (c’est la condition pour que la compilation ne se transforme effectivement pas en chasse au trésor).

Geany est un environnement de développement intégré. Je l’aime beaucoup, car il est très léger, loin des usines à gaz telles que [mettez ici le nom d’un logiciel écrit en Java ou Electron], au point qu’il peut remplacer un éditeur de texte en usage courant.

Il est disponible dans les dépôts de toutes les bonnes distributions, mais souvent en version un peu âgée. C’est le cas sous Linux Mint que j’utilise, certes il y a une version récente en Flatpak du logiciel, c’est installable en 2 clics et 3Gio depuis la logithèque mais ça ne me convient pas pour diverses raisons.

Pourquoi compiler son logiciel alors? L’avantage premier est d’avoir la toute dernière version du logiciel, voire d’utiliser une version de développement. On a ainsi accès aux dernières fonctionnalités, et on peut aider à rendre le logiciel meilleur en rédigeant des rapports de bugs, voire en corrigeant les bugs soi-même. Je rencontre justement quelques bugs gênants concernant la coloration syntaxique, alors c’est l’occasion de régler ça.

Sur le site officiel du projet ils proposent de télécharger les sources pour compiler soi-même le logiciel, et sur le dépôt Github il est expliqué comment procéder. C’est facile, allons-y!

On télécharge puis on extrait le fichier geany-1.37.1.tar.gz qui correspond à la dernière version stable. On ouvre un terminal dans le dossier contenant les sources, et on tape:

./configure

Le script vérifie que nous avons tout le nécessaire pour compiler le logiciel. Il me dit:

No package 'gtk+-3.0' found
No package 'glib-2.0' found
No package 'gio-2.0' found
No package 'gmodule-no-export-2.0' found

Dans votre cas il risque également de réclamer un compilateur et d’autres outils de développement (gcc, make), qui devraient pouvoir s’installer avec le paquet build-essentials.
Pour ma part, j’installe donc le paquet libgtk-3-dev qui correspond à la première ligne du précédent rapport. dev signifie que ce sont les fichiers nécessaires pour du développement, c’est ce qu’il nous faut.
Puis je relance le script:

sudo apt install libgtk-3-dev
./configure

Ce qui donne:

configure: error: The intltool scripts were not found. Please install intltool.

Le script ne réclame plus les trois autres packages, car ils ont été installés en même temps que libgtk3, mais faut maintenant installer intltool. J’en profite pour installer également checkinstall.

sudo apt install intltool checkinstall

On relance le script, qui nous dit:

Configuration is done OK.

On peut passer à la suite, la compilation! Il suffit de taper « make » dans le terminal et de laisser faire pendant quelques minutes.

Une fois le logiciel compilé, il faut l’installer. La documentation nous dit de faire un sudo make install pour cela, ce qui va copier les fichiers compilés un peu partout dans le système. Ça marche mais ça complique la désinstallation du logiciel, c’est pourquoi nous allons créer un paquet deb à l’aide de checkinstall. On utilisera donc cette commande:

sudo checkinstall

Quand c’est fait, on désinstalle complètement l’ancienne version de Geany puis on installe la nouvelle:

sudo apt autoremove geany
sudo dpkg -i geany_1.37.1-1_amd64.deb

Le logiciel est installé, on peut le lancer depuis le menu, ou depuis le terminal en tapant son petit nom:

geany
geany: error while loading shared libraries: libgeany.so.0: cannot open shared object file: No such file or directory

Ouch! Il ne trouve pas le fichier libgeany.so.0 qui est pourtant bien installé dans /usr/local/lib. On va alors créer un lien symbolique dans le dossier /usr/lib pour qu’il le trouve.

sudo ln -s /usr/local/lib/libgeany.so.0 /usr/lib

Voilà, ça marche, je peux retourner travailler!

  • # Plutôt construire un paquet

    Posté par  (site web personnel) . Évalué à 10.

    Si tu utilises Debian ou une de ses dérivées, je te conseille de plutôt faire un paquet avec à peu près les étapes suivantes (il doit probablement y avoir encore plus simple) :

    $ apt-get source geany
    $ cd geany-<version debian>
    $ uscan # récupérer les dernières sources
    $ cd ..
    $ tar xvzf geany<nouvelle version>.tar.gz
    $ cd geany-<nouvelle version>
    $ cp -ar ../geany-<version debian>/debian .
    $ dch -v "<nouvelle version>-1~pre+1" -b "Snapshot pre-release."
    $ debuild -us -uc # construction du paquet
    $ sudo debi ../geany-<nouvelle version>-1~pre+1_<arch>.changes
    

    Pour aller plus loin, tu peux regarder par exemple sbuild pour éviter d'avoir à installer les dépendances de construction et reprepro pour distribuer les paquets construits à plusieurs machines.

    • [^] # Re: Plutôt construire un paquet

      Posté par  . Évalué à 6. Dernière modification le 19 août 2021 à 15:55.

      Même remarque pour Arch.

      Il est préférable de faire un paquet, il suffit d'un fichier PKGBUILD dans lequel on écrit nos quelques instructions et ça roule tout seul.

      Avantage : le gestionnaire de paquets de la distro le gère et l'a dans sa base de données. Il peut se désinstaller comme n'importe quel autre paquet. Beaucoup plus agréable pour la maintenance.

      Ca fait des années que je n'ai plus fait une compilation à la mano, le PKGBUILD est aussi simple à écrire qu'il est puissant.

      La majeure partie des morts l'était déjà de son vivant et le jour venu, ils n'ont pas senti la différence.

  • # Dépendances…

    Posté par  . Évalué à 10.

    Plutôt que d'essayer jusqu'à ce que ça marche (et rater d'éventuelles dépendances optionnelles), mieux vaut commencer par un apt build-dep geany

  • # Sous Slackware on aime bien compiler.

    Posté par  (Mastodon) . Évalué à 6.

    La même chose sous Slackware est assez simple.
    Il faut aller chercher le geany.SlackBuild sur slackbuilds.org.
    On vérifie avec le geany.info : il n'y a aucune dépendance, le système de base suffit.

    Mettre les sources à côté.
    Et hop : ./geany.Slackbuild
    Bon, c'est en version 1.36.0…
    Alors tu prends bien les sources de la 1.37.1, et tu fais :
    VERSION=1.37.1 ./geany.Slackbuild
    Ah, voilà, le paquet pour la bonne version !
    Plus qu'à installer le paquet : upgradepkg --install-new /tmp/geany-1.37.1-x86_64-1yth.txz

    Et tout ça s'automatise avec des outils comme les sbotools.
    Mais derrière tu as juste un fichier .SlackBuild, à la structure très standard (par rapport à l'ensemble des SlackBuilds), maintenu à jour en général très efficacement (bon, en ce moment avec l'approche de la 15.0, c'est un poil plus compliqué que ça).
    Et tu adaptes exactement comme tu veux !

    Ça s'applique aussi aux paquets du système de base, tout y est fait avec des SlackBuilds et on peut très facilement en reprendre un et modifier pour ses propres besoins. Mais bon, ça m'est très peu souvent arrivé de chercher à modifier un paquet de base.

    Et en fait, ça pourrait probablement s'adapter à un peu n'importe quelle distribution, il suffirait de créer un script /sbin/makepkg qui appelle le générateur de paquet local avec les bons paramètres.

    • Yth.
  • # Précisions

    Posté par  (site web personnel, Mastodon) . Évalué à 8.

    Il est souvent intéressant de faire un configure --help pour prendre connaissance de toutes les options possibles, car par défaut certaines ne sont pas activées. Avec une compilation basée sur cmake l'équivalent est cmake -LH

    Pour le problème de biblio non trouvée, il faut vérifier que /usr/local/lib est bien dans le fichier /etc/ld.so.conf (puis taper ldconfig pour prendre en compte le nouveau chemin).

    https://www.funix.org mettez un manchot dans votre PC

    • [^] # Re: Précisions

      Posté par  . Évalué à 4.

      Avec une compilation basée sur cmake l'équivalent est cmake -LH

      Je préfère ccmake pour ça, l'interface curses est plus sympa.

  • # distro à jour

    Posté par  (site web personnel) . Évalué à 3.

    Dand Mageia 8, c'est bien la 1.37.1 de geany qui est disponible :
    https://madb.mageia.org/package/show/name/geany

    il est très rare que le besoin de compiler un logiciel se fasse sentir

    surtout quand tu utilises une distro à jour :-)
    Bon, côté Mageia on triche un peu : lorsqu'il y a peu de dépendances, c'est plutôt la dernière version qui est empaquetée et fournie, plutôt que de s'embêter à rétro-porter des correctifs.

    L’avantage premier est d’avoir la toute dernière version du logiciel, voire d’utiliser une version de développement

    ça c'est un peu un faux argument : de quelles fonctionnalités as-tu besoin dans la toute dernière version serait un peu plus justifié (réponse : bin si la version disponible fonctionne bien même si « ancienne », il vaut mieux trouver la fonction qui manque pour ne pas l'utiliser)

    on peut aider à rendre le logiciel meilleur en rédigeant des rapports de bugs, voire en corrigeant les bugs soi-même.

    Ce n'est pas donné à tout le monde (même si ce n'est souvent pas si difficile…)

    Je rencontre justement quelques bugs gênants concernant la coloration syntaxique, alors c’est l’occasion de régler ça.

    C'est une très bonne raison, tout à ton honneur, mais pas forcément à recommander à tout le monde :-)

    Bon, comme toi, je ne suis pas le meilleur exemple, vu que je suis souvent en Cauldron (la version de développement de Mageia) tout comme auparavant j'étais en Cooker. Bon, ce qui m'embête, c'est que j'ai peu de bugs à remonter, à croire que c'est comme en Debian Sid :p

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.