# libcparse: classes for parsing C/C++

SUBDIRS = 

XINCPATH = c++
XINCFILES += CLex.hh CParse.hh CAction.hh TokenList.hh
INCFILES += CParse.enum.h ActionStack.h 
SRCFILES += CLex.cc CParse.cc CParse.tab.cc ActionStack.cc \
	TokenList.cc CAction.cc CLex_test.cc CParse_test.cc 
LINKFILES += CParse.y
LXFILES += CLex_test
LIBFILES += libcparse.a
TARGETS += ${LIBFILES}

CLex_test_OBJS = CLex_test.o
CLex_test_LIBS = -L$(BASE)/lib -lcparse -lparse
CLex_test: $(CLex_test_OBJS)

CParse_test_OBJS = CParse_test.o
CParse_test_LIBS = -L$(BASE)/lib -lcparse -lparse
CParse_test: $(CParse_test_OBJS)

libcparse.a_OBJS += CParse.o CParse.tab.o CLex.o CAction.o ActionStack.o \
		 TokenList.o
libcparse.a: $(libcparse.a_OBJS)


all: ${TARGETS}

#test: CParse.enum.h libcparse.a all 
#	rm -f CLex_test CParse_test otest deco
#	$(MAKE) $(LXFILES)

CParse.tab.mg.cc CParse.tab.h: CParse.y config.var
	@cmd="$(BINDIR)/shacc -d -t -o CParse.tab.mg.cc -b CParse CParse.y"; \
	echo $$cmd; \
	($$cmd); \
	if [ $$? != 0 ] ; then \
		echo "warning: failed to generate $@"; \
		rm -f $@ ; \
	fi

CParse.enum.mg.h CParse.enum.mg.h.tmp: CParse.tab.h
	@if [ ! -r $< ] ; then \
		echo "warning: failed to generate $@"; \
		exit 0; \
	fi; \
	newer=1; \
	if [ -r $@.tmp ] ; then \
		newer=`find $< -newer $@.tmp -print`; \
	fi;  \
	if [ -n $$newer ] ; then \
		echo "#pragma Make Exclusive" > $@.tmp; \
		echo "#define _MultipleInclude_" >> $@.tmp; \
		awk '/#define/ && !/YY/ \
			{ print "\t"substr($$2,2)" = "$$3"," }' \
					 < $< >> $@.tmp; \
		if [ ! -r $@ ] ; then \
			cp $@.tmp $@; \
			echo $@ created; \
		else \
			( cmp -s $@.tmp $@ ) ;  \
			if [ $$? != 0 ] ; then \
				cp $@.tmp $@; \
				echo $@ changed; \
			else \
				echo no change to $@; \
			fi \
		fi \
	fi

#CParse.tab.mg.cc CParse.tab.h: CParse.y config.var
#	@cmd="$(BINDIR)/yacc++ -d -v -t CParse.y -o CParse.tab.mg.cc"; \
#	echo $$cmd; \
#	($$cmd); \
#	if [ $$? != 0 ] ; then \
#		echo "warning: failed to generate $@"; \
#		rm -f $@ ; \
#	fi

#CParse.enum.mg.h CParse.enum.mg.h.tmp: CParse.tab.h
#	@if [ ! -r $< ] ; then \
#		echo "warning: failed to generate $@"; \
#		exit 0; \
#	fi; \
#	if [ $< -nt $@.tmp -o ! -r $@.tmp ] ; then \
#		echo "#pragma Make Exclusive" > $@.tmp; \
#		echo "#define _MultipleInclude_" >> $@.tmp; \
#		awk '/#define/ && !/YY/ \
#			{ print "\t"substr($$2,2)" = "$$3"," }' \
#					 < $< >> $@.tmp; \
#		if [ ! -r $@ ] ; then \
#			cp $@.tmp $@; \
#			echo $@ created; \
#		else \
#			( cmp -s $@.tmp $@ ) ;  \
#			if [ $$? != 0 ] ; then \
#				cp $@.tmp $@; \
#				echo $@ changed; \
#			else \
#				echo no change to $@; \
#			fi \
#		fi \
#	fi

#CParse.tab.o: CParse.tab.mg.cc CParse.enum.mg.h
#CParse.o: CParse.enum.mg.h
#CAction.o: CParse.enum.mg.h
#CParse_test.o: CParse.enum.mg.h

CParse.enum-mg.h: CParse.enum.mg.h
	@

CParse.tab-mg.cc: CParse.tab.mg.cc
	@

preconfigfiles: CParse.enum.mg.h
configfiles: CParse.tab.mg.cc 

