1# Constantin Knizhnik
2# Moscow Software Center
3# Pascal to C/C++ compiler.
4#
5
6.SUFFIXES: .cxx .c .h .o .a .exe
7
8default : all
9
10#
11# Install path
12#
13INSTALL_LIB_DIR =
14INSTALL_BIN_DIR =
15
16#
17# Target.
18#
19
20BINS =	ptoc.exe cganal.exe
21LIBS =  ptoc.a Xbgi.a
22
23#
24# Chose compiler You prefer.
25#
26
27CC =	gcc -Zmt
28CCFLAGS = -O2 -Wall -c
29
30DEFINES =
31INCLUDES =	-I.
32
33YACC =		bison -d -p zz
34LEX =		flex -i -F -8
35
36#
37# Chose linker You prefer.
38#
39
40LD =		$(CC)
41LDFLAGS = -Zcrtdll
42
43
44AR =            ar
45ARFLAGS =       -ru
46
47#
48# File lists.
49#
50
51INCS =		main.h token.h token.dpp nmtbl.h bring.h tpexpr.h trnod.h util.h
52
53SRCS =		trnod.cxx nmtbl.cxx bring.cxx tpexpr.cxx util.cxx main.cxx parser.cxx lex.cxx token.cxx dprintf.cxx
54
55LIB_SRCS =      set.c paslib.c io.c
56
57OBJS =		$(SRCS:.cxx=.o)
58
59LIB_OBJS =      $(LIB_SRCS:.c=.o)
60
61#
62# Default way in which source files should be compiled.
63#
64
65.cxx.o :
66		$(CC) $(CCFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
67
68.c.o :
69		$(CC) $(CCFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<
70
71#
72# Custom targets.
73#
74
75
76$(OBJS) : $(INCS)
77
78parser.cxx parser.h : parser.y
79		$(YACC) parser.y
80		mv parser.tab.c parser.cxx
81		mv parser.tab.h parser.h
82
83lex.cxx : lex.l
84		$(LEX) lex.l
85		mv lex.yy.c lex.cxx
86
87lex.o: lex.cxx token.h token.dpp
88set.o: set.h ptoc.h
89array.o: array.h ptoc.h
90paslib.o: paslib.h ptoc.h
91io.o: io.h ptoc.h
92analyse.o: analyse.cxx main.h
93
94ptoc.a: $(LIB_OBJS)
95	rm -f $@
96	$(AR) $(ARFLAGS) $@ $(LIB_OBJS)
97	ar s $@
98
99cganal.exe : analyse.o
100	$(LD) $(LDFLAGS) -o $@ analyse.o
101
102ptoc.exe : $(OBJS)
103	$(LD) $(LDFLAGS) -o $@ $(OBJS)
104
105Xbgi.a:
106	(cd Xbgi && $(MAKE) -f makefile.emx)
107
108all : $(BINS) $(LIBS)
109
110examples: $(BINS) $(LIBS)
111	(cd examples && $(MAKE) -f makefile.emx)
112
113clean:
114	rm -f $(BINS) *.a a.out *.exe *.pdb *.lib *.tgz *.zip *.o lex.yy.c \
115		parser.tab.* WinBGI/*.pdb yy.log core y.output parser.output *.exe *~
116	(cd examples && make -f makefile.emx clean)
117	(cd Xbgi && make -f makefile.emx clean)
118
119tgz: clean
120	(cd .. && tar cvzf ptoc.tgz ptoc)
121
122copytgz: tgz
123	mcopy -o ../ptoc.tgz a:
124
125install: $(BINS) $(LIBS)
126	cp $(BINS) $(INSTALL_BIN_DIR)
127	cp $(LIBS) $(INSTALL_LIB_DIR)
128