La maggior parte delle applicazioni di Gnome utilizzano lo stessa sistema di compilazione basato sugli strumenti GNU, automake, autoconf, e libtool. GTK+ e Gnome forniscono una collezione di macro per autoconf che facilitano la creazione di un sistema di compilazione portabile, conforme agli standard GNU. Dato che gli strumenti in ballo sono molteplici, non è sempre facile capire come funziona un albero di sorgenti Gnome. Esistono molteplici manuali per i singoli strumenti, ma nessuno fornisce una visione generale. Questo capitolo ricopre brevemente il loro uso per iniziare a lavorare. Sono descritti anche alcuni particolari strettamente legati a Gnome, mostrando come includere immagini, icone, traduzioni e documentazione.
Se state scrivendo un applicativo molto grande oppure una libreria, questo capitolo non fornisce tutti i dettagli che questo particolare contesto richiede, dovrete molto probabilmente consultare la manualistica degli strumenti GNU per maggiori informazioni. Si potrebbe scrivere un libro intero per descrivere il loro utilizzo.
Iniziando in questo capitolo e continuando nella Parte 2 del libro, utilizzeremo una applicazione di esempio chiamata GnomeHello per mostrare le capacità di Gnome. Il codice sorgente completo di GnomeHello è incluso nell'Appendice E mentre l'albero dei sorgenti completo è disponibile online. È consigliato l'utilizzo di questi sorgenti come modello per il codice della vostra applicazione.
Avrete sicuramente conosciuto lo script gtk-config che rende possibile la facile creazione dei Makefile. Esiste qui un equivalente, chiamato gnome-config (chiamate gnome-config --help per conoscerne le modalità di utilizzo). Ad ogni modo, questi semplici Makefile sono sono adeguati per un applicativo con distribuzione su larga scala.
I sorgenti di applicazioni Gnome e i pacchetti tar creati di questi seguono alcune convenzioni, alcune delle quali sono utilizzate in tutto il resto della comunità del software libero. Aspetti di queste sono formalizzate in documenti come il GNU Project's Coding Standards (http://www.gnu.org/prep/standards_toc.html) e il Linux Filesystem Hierarchy Standard (http://www.pathname.com/fhs/). È buona idea seguire questi standard anche per software non libero, in parte perché sono ideati molto bene dal punto di vista tecnico, e in parte perché seguire il resto della "massa" riduce moltissimi problemi, in particolar modo se vengono utilizzati gli strumenti GNU.
La serie di strumenti GNU, inclusi automake e autoconf rendono molto semplice seguire questi standard. In ogni caso, talvolta esistono buone ragioni per non utilizzarli, ad esempio se desiderate unificare il sistema di compilazione in modo che funzioni su piattaforma diverse, come Windows o MacOS (Alcuni di questi strumenti funzionano anche sotto Windows utilizzando il pacchetto "Cygwin". Maggiori informazioni a riguardo sono disponibili presso http://sourceware.cygnus.com/cygwin.)
Se utilizzate autoconf e automake, gli utenti devono possedere questi strumenti installati sul proprio sistema per poter eseguire la compilazione. Il fine di questi applicativi è quello di creare script di shell portabili e i vari Makefile che funzionino sul sistema degli utenti.
Il pacchetto autoconf include gli eseguibili di aclocal, autoheader e autoconf. Assieme, questi strumenti vengono utilizzati per creare uno script di shell portabile chiamato configure. configure viene distribuito agli utenti all'interno del pacchetto software. Questo esplora il sistema dove verra eseguita la compilazione, creando i vari Makefile e un particolare file header chiamato config.h. Questi file generati da configure sono adattati ai particolari specifici del sistema dell'utente.
configure crea ciascun Makefile da un modello di base, chiamato Makefile.in; automake è lo strumento per creare questi modelli. automake genera i file Makefile.in da un file generato manualmente, Makefile.am. Dovete distribuire il file Makefile.in assieme al vostro software, e gli utenti creeranno i Makefile semplicemente lanciando configure.
Il pacchetto libtool è il terzo importante strumento GNU. Il suo fine è quello di astrarre le idiosincrasie delle librerie condivise (le librerie statiche sono molto simili fra i vari sistemi UNIX-like, ma le condivise presentano maggiore facilità nella portabilità).
Ecco alcune delle caratteristiche che accomunano la maggior parte dei pacchetti Gnome:
Un file chiamato README che descrive il pacchetto stesso.
Un file chiamato INSTALL che spiega come compilare e installare il pacchetto.
Uno script chiamato configure che adatta automaticamente l'application alla piattaforma sulla quale viene compilato. A configure si associa l'argomento --prefix, che specifica il percorso di installazione del pacchetto.
Dei target standard per make, come clean, ecc.
Un file chiamato COPYING contenente il copyright del pacchetto.
Un ChangeLog dove vengono registrate le modifiche apportate al codice sorgente.
I file tar vengono tradizionalmente compressi con gzip e il loro nome include la versione del pacchetto (ad esempio, pippo-0.2.1.tar.gz). Si devono decomprimere all'interno di una singola directory, chiamata con il nome del pacchetto e la sua versione (pippo-0.2.1).
L'internazionalizzazione viene fornita attraverso il pacchetto GNU gettext. Una copia di gettext viene inclusa nella distribuzione dell'applicazione, in modo che gli utenti non devono installarne una copia locale.