Une cible `release` pour les deux paquets, et l'empreinte sous le `~` has been fixed.
See more details at : https://github.com/pdulvp/pdcartes-rami/issues/3
- cmake --build build --target release fabrique les deux paquets d'une
version en un pas: le deb d'ici et le zip de là-bas, nommés par la version
seule. Les deux binaires sont bâtis avant le premier paquet, pour qu'un Qt
mal désigné ne laisse pas la moitié d'une version sur le disque
- l'empreinte de build passe du champ release de Debian à la version, derrière
un ~: 1.2.0~261021153337 se classe avant 1.2.0, là où l'ancien
1.2.0-261021153337 se classait après et empêchait la version de s'installer
par-dessus un build de travail. Le champ -N redevient la énième mise en
paquet d'une même version
- l'absence d'empreinte est à la cible et non à l'arbre: pas d'option de
configuration qu'on laisse allumée sans le voir et qui donnerait un jour deux
paquets d'une même version que dpkg ne sait pas départager
- QT_WIN_PREFIX est vide par défaut, le chemin d'un Qt étant celui d'une
machine; sans elle release s'arrête en disant quoi passer
Une cible release, et l'empreinte sous le ~
<sub>2026-10-21-1535-cible-release-empreinte-tilde.md — 2026-10-21-1535</sub>
Deux choses qui vont ensemble: une version se nomme par son numéro, et les
builds qui la précèdent se classent en dessous d'elle.
- cmake --build build --target release fait les deux paquets d'une version,
le deb d'ici et le zip de là-bas, sans empreinte: pdcartes-rami_1.1.0_amd64.deb
et pdcartes-rami-1.1.0-windows-x86_64.zip.
- un build ordinaire garde son empreinte, mais sous un ~:
1.1.0~261021143413, qui se classe avant 1.1.0 et non après. Vérifié:
dpkg --compare-versions 1.1.0~261021143413 lt 1.1.0 est vrai, là où
l'actuel 1.1.0-261021143413 est gt -- un build de travail installé
empêche la version de s'installer par-dessus.
- le champ -N de Debian redevient ce qu'il est: la énième mise en paquet
d'une même version.
Décisions
- L'absence d'empreinte est une propriété de la cible, pas de l'arbre: pas
d'option de configuration qu'on laisse allumée sans le voir.
avec un binaire sans empreinte après coup; le build ordinaire suivant la
réécrit.
- Le Qt de Windows arrive par QT_WIN_PREFIX, variable de cache vide par
défaut: pas de chemin de machine dans le dépôt. Sans elle, release
s'arrête en disant quoi passer.
- Ordre: les deux binaires d'abord, les deux paquets ensuite. Un échec côté
Windows ne doit pas laisser ici la moitié d'une version.
Étapes
- [x] cmake/GenerateVersion.cmake — option RELEASE: empreinte vide au
lieu de l'horodatage.
- [x] cmake/CPackOptions.cmake — l'empreinte passe du champ release à la
version, derrière un ~; le nom du zip la suit.
- [x] src/Version.h — fullVersion() rend la version seule quand
l'empreinte est vide, et le commentaire dit les deux cas.
- [x] CMakeLists.txt — QT_WIN_PREFIX / QT_HOST_PATH en cache, et la
cible release en quatre temps (configurer l'arbre Windows, écrire les
deux versions sans empreinte, bâtir les deux binaires, faire les deux
paquets).
- [x] Vérifier, en série: un build ordinaire donne 1.1.0~<empreinte> et
--version affiche l'empreinte; release donne 1.1.0 tout court des
deux côtés et --version la version seule; release sans
QT_WIN_PREFIX s'arrête avec son message.
Vérifié
- build ordinaire: pdcartes-rami_1.2.0~261021153337_amd64.deb, et
--version qui dit 1.2.0 (build 261021153337);
- release: pdcartes-rami_1.2.0_amd64.deb (champ Version: 1.2.0) et
pdcartes-rami-1.2.0-windows-x86_64.zip, les deux binaires disant 1.2.0
tout court, aucune chaîne d'empreinte dans l'exe;
- release sans QT_WIN_PREFIX: le message, puis un échec;
- après un release, le build ordinaire suivant réécrit l'empreinte dans
l'arbre.
Deux pièges rencontrés
Les lignes de cmake -E echo traversent un shell: une apostrophe y ouvre une
chaîne qui ne se referme pas, et un < y est une redirection. Le message de
la cible garde-fou n'a donc ni l'une ni l'autre.
<sub>Filed by prel from the completed plans at commit time.</sub>