problem with bison

Nicolas Flipo Nicolas.Flipo at ensmp.fr
Fri Jul 18 07:38:05 CDT 2008


Hi Satish,

Thanks for your quick answer but I don't manage to make it works
because I don't have enough expertise with makefiles.

Thus here is the Makefile of my initial problem (sorry I just saw that
I forgot to include the last lines concerning the .y.o in my first
message):

PROGRAMME= program
SOURCES.c = verouille.c \
	hydraulique.c debug.c flux_apport.c init_hyd.c\
	adv_bott.c adv_decentre.c transport.c dispersion.c adv_caract.c pk.c  \
	reaere.c tubes.c rayons.c traceur.c \
	bact_nit.c timing.c GMcatch_main.c sortie.c verification_basin.c
output_basin.c messages.c surf-zns.c  \
	phyto.c oxygene.c element_nut.c zoo.c bact.c\
	geometrie.c calculs_courants.c\
	maillage.c init.c  biologie.c\
	matrice.c

SOURCES.l = lexique.l

SOURCES.y = newent.y

SOURCES.h = parametres.h structurs.h var_globals.h functions.h

CFLAGS_GLOBAUX= -g -Wall -DYYDEBUG

CFLAGS= $(CFLAGS_GLOBAUX)

YACC= bison -y
LEX= flex
YFLAGS= -dv
LFLAGS= -v

CC=gcc

OBJ= $(SOURCES.y:.y=.o) $(SOURCES.l:.l=.o) $(SOURCES.c:.c=.o)

CLEANFILES = $(OBJ) core y.*

include ${PETSC_DIR}/bmake/common/base

$(PROGRAMME) : $(OBJ) chkopts
	-$(CLINKER) -o $(PROGRAMME) $(OBJ) ${PETSC_KSP_LIB}
.y.o :
	$(YACC.y) $<
	$(COMPILE.c) -o $@ y.tab.c

giving this error

[user at horsdeprix ]$ make program
In file included from newent.y:166:
var_globals.h:8:35: petscksp.h : File or folder not found

I then tried to replace the target .y.o by a .y.c one. I erased the
target .y.o and replace it by what you said:

.y.c :
	$(YACC.y) $<

what led to the following error

[user at horsdeprix ]$ make program
bison -y -dv  newent.y
mpicxx -o newent.o -c -Wall -Wwrite-strings -Wno-strict-aliasing -g -g
-Wall -DYYDEBUG -I/usr/local/PETSc/petsc-2.3.3-p13
-I/usr/local/PETSc/petsc-2.3.3-p13/bmake/linux-gnu-c-debug
-I/usr/local/PETSc/petsc-2.3.3-p13/include -I. -I/usr/local/include
-I/usr/local/include -I/usr/X11R6/include -D__SDIR__="" newent.c
c++: newent.c : No files or folder of this type
c++: pas de fichier à  l'entrÃ(c)e
make: *** [newent.o] Erreur 1

The thing is that bison -y -dv  newent.y creates three files called
y.tab.c y.tab.h and y.output

If I don't set the -y option I gonna also have three files called
newent.tab.c newent.tab.h and newent.output

And I don't know how to force the makefile to take y.tab.c and y.tab.h
instead of newent.c which does not exist. Maybe it comes from the
lines

OBJ= $(SOURCES.y:.y=.o) $(SOURCES.l:.l=.o) $(SOURCES.c:.c=.o)

and

$(PROGRAMME) : $(OBJ) chkopts
	-$(CLINKER) -o $(PROGRAMME) $(OBJ) ${PETSC_KSP_LIB}

Maybe I also have to include the .tab.h at one point of the compiling process.

Thanks for your help
Nico


On Thu, Jul 17, 2008 at 9:00 PM, Satish Balay <balay at mcs.anl.gov> wrote:
> What I mean by not having the correct make targets is:
>
> PETSc provides a make target for compiling .c files into .o files. i.e
>
> .c.o:
>        ${CC} -c -I${PETSC_DIR} -I ${PETSC_DIR}/include $<
>
> However when your sourcefile is .y - and not .c, make is using a .y.o
> target such as:
>
> .y.o:
>        ${YACC} $<
>        ${CC} -c ${CFLAGS} -o $*.o y.tab.c
>
>
> This '.y.o:' target might be internal to make. So I was speculating
> that becuase this other target is used to create .y.o - instead of the
> '.c.o' from PETSc - the compile is failing.
>
> I was sugesting - perhaps you can add a '.y.c' target in your makefile
> - this way make uses .y -> .c and .c -> .o targets [instead of .y->.o
> target]
>
> .y.c:
>        ${YACC} $<
>
>
> [or whatever the correct syntax for invoking yacc to convert foo.y to foo.c is]
>
> Satish
>
> On Thu, 17 Jul 2008, Nicolas Flipo wrote:
>
>> Hi Satish,
>>
>> I'm not sure to understand exactly what you mean.
>
>> The last thing is that I don't understand why include
>> ${PETSC_DIR}/bmake/common/base doesn't work for bison?
>> Nico
>
>> On Thu, Jul 17, 2008 at 9:40 AM, Satish Balay <balay at mcs.anl.gov> wrote:
>> > Hmm - perhaps you need to specify a '.y.c:' target in your makefile?
>> >
>> > It loks like make is using a '.y.o:' target - thus skipping '.c.o:'
>> > target as defined in PETSc makefiles.
>> >
>> >> gcc -g -Wall -DYYDEBUG    -c -o newent.o y.tab.c
>> >
>> > If PETSc target for .c file is used - you should see
>> > -I$PETSC_DIR/include etc options aswell.
>> >
>> > Satish
>
>



-- 
-------------------------------------------------------
Nicolas Flipo
Centre de Géosciences
Systèmes Hydrologiques et Réservoirs
Ecole Nationale Supérieure des Mines de Paris
35, rue Saint-Honoré
77305 Fontainebleau
tél.: (33) (0)1 64 69 47 52
e-mail: Nicolas.Flipo at ensmp.fr
http://cig.ensmp.fr/~flipo
-------------------------------------------------------




More information about the petsc-users mailing list