# Reverse Polish Notation, syntax.y
# © 2001, Michael Piefel <piefel@informatik.hu-berlin.de>
 
.PRECIOUS: lexic.c y.output

# Tools
SHELL    = /bin/sh
YACC     = bison
LEX      = flex
CC       = ${CXX}
KC       = kc++

#Flages
YFLAGS   = -d -y
LFLAGS   = -t
CXXFLAGS = -g -Wall -Wno-unused -DYYDEBUG -DYYERROR_VERBOSE
CFLAGS   = ${CXXFLAGS}

# Sources
KFILES   = rpn.k main.k abs.k
CFILES   = 
YFILES   = syntax.y
LFILES   = lexic.l


# Goals
PARSER  = rpn-parser  

# Help files

KC_TIME = .kc_time_stamp

KC_OGEN = k.o csgiok.o unpk.o rk.o
KC_OSRC = $(KFILES:.k=.o)
OBJS    = $(KC_OGEN) $(KC_OSRC) $(YFILES:.y=.o) $(LFILES:.l=.o) $(CFILES:.cc=.o)


# default rule
$(PARSER)::

# include or make autodependencies
ifeq (.depend,$(wildcard .depend))
include .depend
else
$(PARSER):: depend
endif

# Rules
$(KC_TIME): $(KFILES)
        $(KC) $(KFILES)
        touch $(KC_TIME)

$(PARSER):: $(KC_TIME) $(OBJS)
        $(CXX) $(CFLAGS) $(OBJS) ${LIBS} -o $@


syntax.h : y.tab.h
        -cmp -s syntax.h y.tab.h || cp y.tab.h syntax.h

y.tab.h : syntax.c

depend dep:
        @echo Make dependencies first
        $(MAKE) $(KC_TIME)
        #$(MAKE) $(CFILES)
        $(MAKE) $(YFILES:.y=.c)
        $(MAKE) $(LFILES:.l=.c)
        $(MAKE) syntax.h
        $(CC) -M *.cc > .depend
  
clean:
        -rm -f $(OBJS) core *~ *.bak  $(KFILES:.k=.cc)  $(KC_OGEN:.o=.cc) $(KC_TIME) .kc* \
        $(YFILES:.y=.c) $(LFILES:.l=.c) $(KC_OGEN:.o=.h) $(KFILES:.k=.h) out.* \
        y.tab.h