# Constantin Knizhnik
# Moscow Software Center
# Pascal to C/C++ compiler.
#

.SUFFIXES: .cxx .c .h .o .a

default : all


#
# Target.
#

TARG =		ptoc cganal libptoc.a 

#
# Chose compiler You prefere.
#

CC =		gcc -O5 -g -Wall --strict-prototypes -c
CFLAGS =

DEFINES =
INCLUDES =	-I.

YACC =		bison -d -p zz 
LEX =		flex -i -F -8

#
# Chose linker You prefere.
#

LD =		gcc -static 
#LD =		cxx -non_shared
LFLAGS =


AR =            ar
ARFLAGS =       -ru

#
# File lists.
#

INCS =		main.h token.h token.dpp nmtbl.h bring.h tpexpr.h trnod.h util.h

SRCS =		trnod.cxx nmtbl.cxx bring.cxx tpexpr.cxx util.cxx main.cxx parser.cxx lex.cxx token.cxx dprintf.cxx 

LIB_SRCS =      set.c paslib.c io.c

OBJS =		$(SRCS:.cxx=.o)

LIB_OBJS =      $(LIB_SRCS:.c=.o)

#
# Default way in which source files should be compiled.
#

.cxx.o : 
		$(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<

.c.o : 
		$(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<

#
# Custom targets.
#


$(OBJS) : $(INCS)

parser.cxx parser.h : parser.y 
		$(YACC) parser.y 
		mv parser.tab.c parser.cxx
		mv parser.tab.h parser.h

lex.cxx : lex.l token.h token.dpp
		$(LEX) lex.l
		mv lex.yy.c lex.cxx

set.o: set.h ptoc.h 
array.o: array.h ptoc.h 
paslib.o: paslib.h ptoc.h
io.o: io.h ptoc.h 
analyse.o: analyse.cxx main.h

libptoc.a: $(LIB_OBJS)
	rm -f $@
	$(AR) $(ARFLAGS) $@ $(LIB_OBJS)
	ranlib $@
 
cganal : analyse.o
	$(LD) $(LFLAGS) -o $@ analyse.o

ptoc : $(OBJS)
	$(LD) $(LFLAGS) -o $@ $(OBJS)


all : $(TARG) 

clean :
	rm -f $(TARG) a.out *.o *.a lex.yy.c parser.tab.*\
		yy.log core y.output parser.output *~\
	        examples/*.o examples/a.out examples/*~


copy: clean
	tar cvf /tmp/ptoc.tar *
