CC = cc
CFLAGS = -O
S = ../../src
CINCLUDES = -I$S

%.o: %.c
	$(CC) -c $(CFLAGS) $(CINCLUDES) $*.c

all: nidrgen $S/NIDR_keywds.H $S/dakota.input.txt

### Avoid regenerating files needlessly, which can be counterproductive on
### systems with older versions of [f]lex and bison:  require explicit
### "make src-scanner" invocation to update $S/nidr-scanner and $S/nidr-parser.c
### and explicit "make nidrgen.c" to recreate nidrgen.c from nidrgen.l.

src-scanner: $S/nidr-scanner.c $S/nidr-parser.c

clean:
	rm -f nidrgen
veryclean:
	rm -f nidrgen nidrgen.c $S/nidr-scanner.c $S/nidr-parser.c $S/NIDR_keywds.H $S/dakota.input.txt


$S/nidr-scanner.c: nidrscan.l
	lex nidrscan.l
	sed 's/lex.yy.c/nidr-scanner.c/;s!#line.*!/* & */!;s/yy/nidr/g;s/reset_lex_state/reset_nidrlex_state/' lex.yy.c >$S/nidr-scanner.c
	rm lex.yy.c

$S/nidr-parser.c $S/nidr-parser.h: nidrparse.y
	bison -y -d nidrparse.y
	sed 's/y.tab.c/nidr-parser.c/;s!#line.*!/* & */!;s/yy/nidr/g;s/reset_lex_state/reset_nidrlex_state/' y.tab.c >$S/nidr-parser.c
	sed 's/yy/nidr/' y.tab.h >y.tab.hzap
	cmp -s y.tab.hzap $S/nidr-parser.h && rm y.tab.hzap || mv y.tab.hzap $S/nidr-parser.h
	rm y.tab.c y.tab.h

nidrgen:
	$(CC) $(CFLAGS) $(CINCLUDES) nidrgen.c -o nidrgen

nidrgen.c: nidrgen.l
	lex nidrgen.l
	sed 's/lex.yy.c/nidrgen.c/;s!#line.*!/* & */!;s/yyparse/nidrparse/g' lex.yy.c >nidrgen.c
	rm lex.yy.c

$S/NIDR_keywds.H: nidrgen $S/dakota.input.nspec
	./nidrgen $S/dakota.input.nspec >$S/NIDR_keywds.H

$S/dakota.input.txt: $S/dakota.input.nspec
	./nidrgen -f $S/dakota.input.nspec >$S/dakota.input.txt

#	sed 's/{[^}]*}//g' $S/dakota.input.nspec >$S/dakota.input.txt
