sabato 29 giugno 2013

Qt: trucco per versionare applicazioni e librerie

Ciao a tutti. Recentemente sono stato impegnato da un piccolo problema durante la finalizzazione di un'applicazione. Il problema da risolvere era creare un widget che riportasse la versione all'utente nella sezione "About". Il mio obiettivo era utilizzare un unico file che contensse la definizione della versione corrente, sia da far comparire nel widget sia per generare le librerie lib*.so.maj.min.patch. La mia soluzione è stata aggirare il compilatore c++ e il sistema di pre-build qmake con un semplice trucco. Per prima cosa riportiamo il file Version.h:
#ifndef VERSION_H_
#define VERSION_H_

#define BUILD_VERSION_NUMBER
#ifdef BUILD_VERSION_NUMBER

#define MY_MAJOR_VERSION 1
#define MY_MINOR_VERSION 2
#define MY_PATCH_VERSION 3

#define OTHER_INTERESTING_DEFINES 0

#else

MY_MAJOR_VERSION = 1
MY_MINOR_VERSION = 2
MY_PATCH_VERSION = 3

#endif

Già da questa porzione di codice si capisce qual'è stato il trucco. Il pre-compilatore esclude le righe che darebbero un errore di compilazione in c++ grazie alla definizione on-the-fly di "BUILD_VERSION_NUMBER". Il sistema di pre-build qmake consente di inserire negli script "Project" commenti se questi sono preceduti dal carattere '#'. A questo punto il file Version.h viene incluso nella classe del widget che, così facendo, potrà utilizzare le define MY_MAYOR_VERSION, MY_MINOR_VERSION, MY_PATCH_VERSION. Successivamente il file Version.h viene incluso anche dal file *.pro che dovrà contenere la seguente porzione di codice:
include ( Version.h )

VER_MAJ      = $${MY_MAJOR_VERSION}
VER_MIN      = $${MY_MINOR_VERSION}
VER_PAT      = $${MY_PATCH_VERSION}
Le variabili VER_MAJ, VER_MIN e VER_PAT vengono poi usate da qmake per numerare le librerie. Chiudo questo breve articolo con una domanda: c'è un modo migliore per fare questo? La mia risposta è: "probabilmente si, ma mi sono divertito molto a trovare questa soluzione!"

sabato 12 gennaio 2013

Maude and gEdit: syntax hightlight

Scrivendo la mia tesi specialistica, di cui sicuramente avrò modo di parlare anche qui più avanti (in particolare quando sarà ad un punto stabile e coerente) ho dovuto analizzare e scrivere file scritti in un linguaggio di rewrite logic chiamato maude.

Per chi fosse curioso esiste un pacchetto già pronto da scaricare su ubuntu: sudo apt-get install maude per tutti gli altri c'è il tar.gz a questo indirizzo. Purtroppo gedit non supporta da solo questo linguaggio quindi vi lascio il primo draft del syntax highlight. Per installarlo bisogna scaricare i due file
maude.lang
maude.xml

maude.lang va posizionato all'interno della cartella:
"~/.local/share/gtksourceview3.0/language-specs"

maude.xml va posizionato all'interno della cartella:
"~/.local/share/mime/packages"

A questo punto bisogna posizionarsi sulla cartella ~/.local/share con un terminale e dare il comando
"update-mime-database mime"

Questi due file sono una prima versione che aggiornerò sicuramente più avanti per dare una colorazione agli statement più usati.

Ogni consiglio è gradito ;)