Passiamo ora dalla teoria alla pratica eseguendo le diverse fasi
indicate negli articoli precedenti.
Prima fase: Dai sorgenti al file configure.in
Supponiamo di aver già eseguito l'autoscan, ora ci accingiamo
a editare il file configure.in nel seguente modo:
dnl Process this file with autoconf to produce a configure
script.
AC_INIT(main.c)
dnl Checks for programs.
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE(matrix,0.1)
AC_PROG_CC
AC_PROG_INSTALL
dnl Checks for libraries.
dnl Checks for header files.
AC_HEADER_STDC
if test $ac_cv_header_stdc = no; then
AC_MSG_ERROR([Matrix richiede ANSI C])
fi
dnl Checks for typedefs, structures, and compiler characteristics.
dnl Checks for library functions.
AC_CHECK_FUNCS(getline)
AC_OUTPUT(Makefile)
Il file configure.in mostrato sopra é suddiviso in diverse sezioni,
suddivisione che viene rispettata da tutti i file configure.in.
Queste sezioni sono:
Inizializzazione
Controllo programmi presenti nel sistema, da cui il vostro programma
dipende
Controllo librerie necessarie e presenti nel sistema
Controllo degli header per la compilazione
Controllo delle funzioni di libreria
Per ogni sezione si specificano delle macro (leggi regole di controllo),
che servono a svolgere ogni singolo controllo sulla configurazione
richiesta dal programma per funzionare. Penso che abbiate già capito,
che i commenti nel file configure.in sono differenti rispetto ai
Makefile tradizionali, dove erano rappresentati da #. Qui infatti
i commenti si esprimono mediante la parola dnl, ovvero tutto ciò,
che é specificato dopo la parola dnl fino a fine linea viene ignorato
dall'autoconf.
Iniziamo la descrizione del configure.in presentato, cercando di
chiarire le cose passo dopo passo:
riga 1: dnl Process this file with autoconf to produce a configure
script.
riga 2: AC_INIT(main.c)
riga 3: dnl Checks for programs.
riga 4: AM_CONFIG_HEADER(config.h)
riga 5: AM_INIT_AUTOMAKE(matrix,0.1)
riga 6: AC_PROG_CC
riga 7: AC_PROG_INSTALL
riga 8: dnl Checks for libraries.
riga 9: dnl Checks for header files.
riga 10:AC_HEADER_STDC
riga 11:if test $ac_cv_header_stdc = no; then
riga 12:AC_MSG_ERROR([Matrix richiede ANSI C])
riga 13:fi
riga 14:dnl Checks for typedefs, structures, and compiler characteristics.
riga 15:dnl Checks for library functions.
riga 16:AC_CHECK_FUNC(getline)
riga 17:AC_OUTPUT(Makefile)
La riga 2 (AC_INIT(main.c)) imposta lo script configure in modo
che controlli il file specificato tra parentesi per assicurarsi
che la directory corrente sia quella contente i file sorgente del
pacchetto. Questa é la fase di inizializzazione.
La riga 4 serve all'autoconf per generare lo script configure
La riga 5 (AM_INIT_AUTOMAKE(matrix,0.1)), serve a svolgere le inizializzazioni
per l'uso con automake, dove l'espressione posta tra parentesi rappresenta
rispettivamente il nome e la versione del pacchetto. In generale
ogni macro, che ha come prime due lettere 'AM' é una macro per l'uso
di automake. Se volete scrivervi manualmente i Makefile non avete
bisogno di questa macro.
AC_PROG_CC. Questa macro controlla il tipo di compilatore che avete.
AC_PROG_INSTALL. Questa riga serve a controllare se avete un'utility
di installazione compatibile BSD.
AC_HEADER_STDC. Questa macro controlla se i file header dello standard
ANSI C sono presenti.
Ora abbiamo 3 righe interessanti (11,12,13):
riga 11:if test $ac_cv_header_stdc
= no; then
riga 12:AC_MSG_ERROR([L'applicazione richiede ANSI C])
riga 13:fi
In parole queste tre righe si traducono in :
se il test precedente é negativo
==> allora scrivi su schermo il messaggio:
"L'applicazione richiede ANSI
C"
Facciamone una breve descrizione. La riga 11 usa una variabile (simile
a quelle dei makefile) $ac_cv_header_stdc, che viene impostata durante
l'esecuzione dello script configure. Questa variabile corrisponde
alla macro $AC_HEADER_STDC. Da notare che ogni macro ha una variabile
simile, per esempio la macro AC_PROG_FUNCS ha una variabile $ac_cv_prog_funcs
associata.
Durante l'esecuzione, configure testa se la richiesta di una data
macro é soddisfatta o meno nel sistema e imposta la variabile associata
alla macro. Nelle righe sopra illustrate (11,12,13) si va a verificare
la compatibilità con l'ANSI C, se tale compatibilità é presente
allora la $ac_cv_header_stdc sarà uguale a 'yes', altrimenti sarà
uguale a 'no'. In quest'ultimo caso l'esecuzione di configure sarà
interrotta e apparirà sullo schermo il messaggio tra parentesi quadre
presente nella macro AC_MSG_ERROR.
Torna all'indice Generale del corso di Corso di C con Linux di Software Planet