8. ./configure; make; make install

Ne passons pas ce point sous silence : il n'est pas si facile d'inclure des fichiers .l et .y dans les fichiers de configuration d'autoconf et automake.

8.1. Changements dans configure.in

Dans le fichier configure.in, il y a peu à faire : il suffit juste d'ajouter les lignes suivantes :

dnl Checks for programs.
dnl ====================
AM_PROG_LEX
AC_PROG_YACC

dnl Checks for libraries.
dnl =====================
AC_CHECK_LIB(fl, yywrap)

Ces lignes vérifient la présence des programmes flex et bison ou compatibles.

8.2. Changements dans Makefile.am

Par contre, dans le fichier Makefile.am qui se trouve dans le même répertoire que les fichiers sources, il y a plus de travail.

Premièrement, il faut ajouter au début une ligne :

YACC=@YACC@ -d

Il faut en effet ajouter l'option -d à yacc/bison pour qu'il génère le fichier d'en-têtes read_config_yy.h.

Puis on ajoute dans appli_SOURCES les fichier read_config_lex.l et read_config_yy.y. Il ne faut surtout pas ajouter les fichier C générés à partir de ces deux fichiers dans la liste. Attention : il est obligatoire de mettre le fichier read_config_yy.y AVANT le fichier read_config_lex.l dans cette liste car il doit être compilé avant : c'est à l'aide de ce fichier qu'on génère le fichier d'en-têtes read_config_yy.h dont le fichier read_config_lex.l a besoin. C'est plus loin qu'on ajoute les noms des fichiers C générés :

CLEANFILES = read_config_lex.c read_config_yy.c

En effet, ces fichiers ne font pas partie des sources car ils sont générés lors de la compilation. Par contre, si l'on fait un make dist, vu que ce sont des fichiers avec une extension .c, ils feront partie du package. Cela est préférable car une personne voulant recompiler l'appli n'aura pas besoin d'installer flex et bison ou compatibles pour la recompiler. Dans ce but, il est nécessaire d'ajouter le fichier read_config_yy.h à la liste des fichiers à conserver :

EXTRA_DIST = configfile read_config_yy.h

J'ai aussi mis le fichier configfile dans la liste pour qu'il ne soit pas perdu si l'on fait un make distclean!

Et voilà, il ne me reste plus qu'à vous livrer mon fichier configure.in qui m'a servi pour faire les tests :

8.3. configure.in

dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/my_config.h)
AM_INIT_AUTOMAKE(demo_lexyacc, 0.1)

dnl Checks for programs.
AC_PROG_CC
AC_PROG_YACC
AM_PROG_LEX

dnl Checks for libraries.
AC_CHECK_LIB(fl, yywrap)

dnl Checks for header files.
AC_HEADER_STDC

dnl Checks for typedefs, structures, and compiler characteristics.

dnl Checks for library functions.
AC_CHECK_FUNCS(strdup)

AC_OUTPUT(Makefile src/Makefile)

8.4. Makefile.am

Le fichier Makefile.am à la racine est simplissime :

SUBDIRS = src

8.5. src/Makefile.am

Et le fichier Makefile.am dans le répertoire src/ n'est plus si compliqué maintenant qu'il a été expliqué :

YACC=@YACC@ -d
bin_PROGRAMS = demo_lexyacc
demo_lexyacc_SOURCES = main.c read_config_yy.y read_config_lex.l my_config.h
CLEANFILES = read_config_lex.c read_config_yy.c
EXTRA_DIST = configfile read_config_yy.h
création est mise à disposition sous un contrat Creative Commons