/*
 * expression library
 */


.SOURCE.h : ../ast /home/erg/src/gviz/build/sgi.mips3/include

CCFLAGS = $(CC.OPTIMIZE) $(CC.SUFFIX.DYNAMIC:@?$(CC.DLL)??)

/* NOTE: -o mam bug in -I for exparse.c if exparse.y not first */

expr 2.0 :LIBRARY: RELEASE expr.h exlib.h exgram.h exparse.y \
		excc.c excontext.c exdata.c exeval.c exexpr.c \
		exerror.c exopen.c exrewind.c extoken.c extype.c \
		exzero.c

if CC.HOSTTYPE == "*.i386" || "$(-mam)" == "static*"
exeval.o : .CC.NOOPTIMIZE
end

exop.h : exparse.h
	{
	echo "static const char* exop[] = {"
	$(SED) -e '/^[ 	]*#[ 	]*define[ 	][ 	]*[A-Z]/!d' -e 's/^[ 	]*#[ 	]*define[ 	]*\([A-Z0-9_]*\).*/	"\1",/'
	echo "};"
	} < $(*) > $(<)

$(INCLUDEDIR) :INSTALLPROTO: expr.h

$(INCLUDEDIR) :INSTALLDIR: exparse.h

YACCFIX.exparse = ex

/*
 * NOTE: the solaris yacc botches the yyact[] indices (large positive)
 */

YACC.BOTCH.PATTERN = ',[0-9][0-9][0-9][0-9][0-9]*,'

YACC.BOTCH.FIX : .VIRTUAL .FORCE .AFTER
	if	$(GREP) -c $(YACC.BOTCH.PATTERN) $(<<:N=*.c) >/dev/null
	then	: $(YACC) is botched : yyact indices are bogus :
		$(CP) $(<<:N=*.c:/^/O/:T=F) $(<<:N=*.c)
		$(CP) $(<<:N=*.h:/^/O/:T=F) $(<<:N=*.h)
	else	for i in $(<<:N=*.h) $(<<:N=*.c)
		do	$(SED) -e '1i\
/* : : generated by a yacc that works -- solaris take note : : */' -e '/^[ 	]*#[ 	]*[il][di][en][ne][t]*[ 	]["0-9].*/s,,/* & */,' -e '/^[ 	]*#[ 	]*include[ 	]*"exlib\.h"/i\
#ifndef gettxt\
#define gettxt(h,t)	(t)\
#endif' $i > O$i
		done
	fi

%.c %.h : %.y YACC.BOTCH.FIX

:SAVE: Oexparse.c Oexparse.h
