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

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

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

### 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 -lm

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

NIDR_keywds.H: nidrgen $S/dakota.input.nspec $S/dakota.input.desc
	./nidrgen $S/dakota.input.nspec $S/dakota.input.desc $S/NIDR_initdefs.h NIDR_keywds.H
	cmp -s NIDR_keywds.H $S/NIDR_keywds.H || cp NIDR_keywds.H $S/NIDR_keywds.H

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

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

$S/NIDR_guikeywds.h: nidrgen $S/dakota.input.nspec $S/dakota.input.desc
	./nidrgen -egG $S/dakota.input.nspec $S/dakota.input.desc >$S/NIDR_guikeywds.h

NIDR_keywds0.h: $S/dakota.input.nspec nidrgen
	./nidrgen -ftn- $S/dakota.input.nspec >NIDR_keywds0.h

dakreorder_src = dakreorder.c $S/nidr.c $S/nidr-parser.c $S/nidr-scanner.c $S/avltree.c
dakreorder: $(dakreorder_src)
	$(CC) -o dakreorder $(CFLAGS) $(dakreorder_src)
