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.
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.
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 :
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)
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
© 2001 Yves Mettier