É 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