Corso di C con Linux

Creiamo un pacchetto con Automake e Autoconf II

 

É obbligo ora elencare un sottoinsieme delle macro più utilizzate e darne una breve descrizione nella seguente tabella.



Tabella 2-6. Macro di Autoconf

Variabile

Descrizione

AC_CHECK_HEADERS(header1.h, header2.h, header3.h, ecc)

Controlla nella directory standard di include, se gli header specificati esistono

AC_CHECK_FILE(nomefile)

Controlla se nel percorso corrente esiste il file nomefile

AC_CHECK_PROG(nome_eseguibile)

Controlla se nel percorso corrente esiste il programma nome_eseguibile

AC_CHECK_LIB(nome_libreria)

Controlla se esiste la libreria nome_libreria nella directory standard delle librerie.

AC_CHECK_FUNC(nome_func)

Controlla se nelle librerie presenti esiste la funzione nome_func.

Variabile

Descrizione

Ritorniamo al nostro esempio in quanto mancano da descrivere le linee 16 e 17, vediamole:
La riga 16, AC_CHECK_FUNC(getline), controlla se nel sistema é presente la funzione getline, usata dal nostro programma. Anche in questo caso potevamo controllare il risultato del test, mediante la variabile $ac_cv_check_func, nello stesso modo fatto precedentemente con $ac_cv_header_stdc.
La riga 17 invece dice di generare al configure il Makefile dal Makefile.in, che deve essere presente prima di essere lanciato il configure. Il Makefile.in si può ottenere mediante automake, come vedremo.
Saltiamo la seconda fase, che consiste nel creare dei semplici file di testo secondo la struttura già descritta e passiamo alla terza fase.

Terza fase: Creazione del Makefile.am.
Nella creazione del Makefile.am, utile all'automake per generare il Makefile.in richiesto da configure, vale quanto detto finora sui Makefile. Possiamo inoltre aggiungere le opzioni già descritte in precedenza. Per i nostri scopi il makefile sarà fatto in questo modo:

       bin_PROGRAMS= matrix
     matrix_SOURCES= main.c token.c


Quarta fase: Autoheader e acconfig.h

Vediamo come ho edito il acconfig.h:

       /* acconfig.h - used by autoheader to make config.h.in
        *      Copyright (C) 1998 Free Software Foundation, Inc.
        *
        *
         */

       /* need this, because some autoconf tests rely on this (e.g. stpcpy)
        * and it should be used for new programs
        */
       #define _GNU_SOURCE  1

       @TOP@


       @BOTTOM@

       #include "filedef.h"


La mia unica necessità era di specificare il _GNU_SOURCE al compilatore, per avere la massima compatibilità con tutti gli standard esistenti e tutte le librerie. Poi ho incluso il mio file header, dove sono contenute le #define.

Quinta fase: Realizziamo lo script configure

Siamo arrivati in fondo, la parte più noiosa é stata svolta, ora basta digitare i seguenti comandi:

       cyberspace.org:~$ aclocal
       cyberspace.org:~$ autoconf
       cyberspace.org:~$ autoheader
       cyberspace.org:~$ automake -a


Cerchiamo di comprendere ogni singolo comando digitato:
aclocal crea un file chiamato aclocal.m4. Questo file é utilizzato sia per scrivere le macro definite dall'utente che dall'automake. Infatti automake usa la macro AM_INIT_AUTOMAKE, che non é riconosciuta dall'autoconf, la cui definizione é posta in aclocal.m4.
autoconf, autoheader, automake eseguono le seguenti elaborazioni:

C'é solo da fare un piccolo appunto, prima di terminare questo paragrafo. Qualcuno di voi si chiederà il significato dell'opzione -a data ad automake. Precedentemente avevamo parlato di file, che automake aggiunge automaticamente che poi vanno editati, quali COPYING, INSTALL, ecc. Ebbene automake li aggiunge solo se gli viene passata l'opzione -a, altrimenti dà un messaggio di errore simile:

       automake: configure.in: required file `./install-sh' not found
       automake: configure.in: required file `./mkinstalldirs' not found
       automake: configure.in: required file `./missing' not found
       automake: Makefile.am: required file `./INSTALL' not found
       automake: Makefile.am: required file `./COPYING' not found

Note finali.
Ora abbiamo finito, il nostro pacchetto é pronto, creiamo il tarball, e nel caso in cui ritenessimo il nostro programma un lavoro ben fatto, potremmo segnalarlo al http://www.frshmeat.net, mettendolo così a disposizione di altri programmatori e/o utenti.

 

 

Torna all'indice Generale del corso di Corso di C con Linux di Software Planet