Sortie d'accendino 0.6.2

Une nouvelle version d'accendino est sortie, la 0.6.2. Elle regroupe le travail cumulé depuis la 0.6.0
(qui avait introduit le support des toolchains et la compilation sous msys2), en passant par une 0.6.1
intermédiaire. Pour rappel accendino est un projet permettant de spécifier comment construire un logiciel
et ses dépendances en multi-plateforme (au moins Windows, Linux, partiellement Mac, un peu FreeBSD), et de le builder en tirant parti au mieux
des briques installables sur le système (si un package est dispo, on l'utilise, sinon on le build). Il essaye aussi de
supporter au maximum MinGW pour pouvoir faire des cross-build pour windows sous Linux ou autre.
Au menu des changements: la possibilité de construire avec toutes ses dépendances le
projet wayvnc, le build de FreeRDP qui gagne en
fonctionnalités pour suivre la branche master, et évidement plusieurs correctifs et améliorations.
Les nouveautés depuis la 0.6.0
Le build de FreeRDP s'enrichit

Plusieurs artefacts sont venus étoffer la construction de FreeRDP :
- ajout du support de SDL3 et donc désormais par défaut est construit
sdl-freerdpavec SDL3 comme backend graphique client ; - ajout de fido2, pour avoir la redirection de webauthn ;
- ajout de libyuv qui est désormais utilisée par FreeRDP ;
- tout un tas de libraries que j'utilise sur d'autres projets et que je voulais pouvoir construire facilement (
spdlog,cpr,redis, ...)
Un nouveau venu : wayvnc

Un gros travail a été fait sur les fichiers accendino pour permettre de construire wayvnc, ainsi beaucoup de nouveaux
fichiers .accendino ont aussi été ajoutés pour couvrir les dépendances nécessaires. Et aussi les fichiers
existants ont été retravaillés car parmi les dépendances de wayvnc on doit avoir parmi les dernières versions
de tout un tas de projets, et forcément même sur une Ubuntu 24.04 les versions livrées avec le système sont trop agées.
On avait donc besoin de pouvoir "forcer" le build d'une dépendance à partir des sources (et ce sans passer par un fichier
d'options) à partir d'un autre fichier accendino. La nouvelle fonction stdBuildFromSourceTest(key: str, locals, defaultVal: bool)
permet d'automatiser ce test: elle commence par regarder si la variable <key>_forceBuild existe (positionnée par un fichier accendino
inclu précédement), elle regarde aussi si parmi le fichier d'options dans la section key on a l'entrée
fromSources positionnée à vrai, et tout ceci permet ou non de forcer le build d'un artefact à partir des sources.
Par exemple le fichier wayland-protocols.accendino ressemble à ça:
wayland_protocols_fromSources = stdBuildFromSourceTest('wayland_protocols', locals(), False) if wayland_protocols_fromSources: wayland_protocols_pkgDeps = { #UBUNTU_LIKE: ['libxcb-xkb-dev'], } ARTIFACTS += [ MesonBuildArtifact('wayland-protocols', ['wayland-artifact'], stdGitSourceFromOptions('wayland-protocols', 'https://gitlab.freedesktop.org/wayland/wayland-protocols.git', 'main'), mesonOpts=[], pkgs=wayland_protocols_pkgDeps, provides=['wayland-protocols-artifact'], mesonVersion='latest' ), ] else: wayland_protocols_pkgDeps = { UBUNTU_LIKE: ['wayland-protocols'], # REDHAT_LIKE: ['xkbcommon-devel'], } ARTIFACTS += [ DepsBuildArtifact('wayland-protocols-artifact', [], pkgs=wayland_protocols_pkgDeps) ]
Et dans wlroots.accendino on a besoin d'une version moderne des wayland protocols sur Ubuntu quand c'est plus vieux que la 26.04 ce qui donnne:
... if checkDistrib('<= Ubuntu 24'): wayland_protocols_forceBuild=True include('wayland-protocols') ...
Petites fonctions bien utiles
-
stdGitSourceFromOptions: un raccourci pour créer une source git standard en tenant compte du fichier d'options, histoire de ne pas répéter le même code dans chaque fichier.accendino. Cela permet d'automatiser l'eventuel paramétrage de l'URL et du tag du repo git à partir du fichier d'options; -
RemoteArchiveSourcesait maintenant gérer les archives dont le contenu utile est stocké dans un sous-répertoire à extraire (utile pourlibresslpar exemple).
Robustesse et corrections
- correction de la précédence des fichiers
pkg-config: les paquets déployés par accendino dans son répertoiredeploysont désormais bien prioritaires sur ceux du système, ce qui évite de piocher la mauvaise version d'une lib ; - possibilité de spécifier la version de
mesonà utiliser, en effet pas mal de projets nécessitent des versions relativement récente de meson et il arrive que la version du système soit trop vieille ; - correction d'un bug dans la comparaison de versions ;
- une correction du build de FreeRDP sous Ubuntu 22.04 : on doit builder
libcboretfido2car les versions livrées par le système sont trop vieilles; - tout un tas de correction pour MacOsX. Comme par exemple, la détection de la toolchain: elle était identifiée comme
Gccpar défaut alors quecc/gcc
sont en réalité des alias versclang. On doit aussi forcer la construction de zlib à partir des sources sinon certain artefacts commefido2échouent car ils cherchent le fichier .pc qui n'est pas disponible sous Mac;
Nouvelles options en ligne de commande
Il m'arrive de me servir d'accendino en mode développement, je veux dire que je me sers d'accendino pour descendre un package et ses dépendances, et il m'arrive de modifier directement les sources, et donc il faut reconstruire.
Pour se simplifier la vie dans ce cas de figure j'ai rajouté 2 options en ligne de commande:
-
--refreshSources: qui force la mise à jour des sourcesgitvers le bout de branche, et reconstruit les artefacts (et leurs dépendances)
dont les sources ont effectivement changé. Pour les artefacts qui prennent leurs sources sur une branche de maintenance ou de développement cela permet de récupérer la dernière version et de reconstruire l'artefact et ses dépendants, alors qu'avant on devait faire ça à la main et aller effacer les fichiers de build stamps; - il y a aussi
--refreshqui force la reconstruction des cibles demandées, même si elles ont déjà été construites. On peut se servir de ça pour développer dans les répertoires sources descendues par accendino;
Conclusion
Rien de révolutionnaire côté API par rapport à la 0.5.x, mais un bon lot de nouvelles pockets disponibles (SDL3, fido2, libyuv, wayvnc) et surtout des corrections qui rendent les builds plus fiables d'une distribution à l'autre. Ça devient très intéressant à utiliser.