start of new file
[IRC.git] / Robust / JavaGrammar / Makefile
1 # Makefile to create simple test framework for the java parsers.
2 # Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
3 # Released under the terms of the GPL with NO WARRANTY. See COPYING.
4
5 # java environment.
6 JAVA=java
7 JAVAC=javac
8 JFLAGS=-g
9 #CUPFLAGS=-dump_states
10
11 # list the available java grammar versions
12 JAVA_GRAMMARS=10 11 12 14 15
13
14 all: $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).class) \
15         Lex/Lex.class Main/Main.class
16
17 # Feed the appropriate CUP specification to javaCUP.
18 Parse/Grm%.java Parse/Sym%.java: Parse/java%.cup
19         cd Parse && \
20         ${JAVA} java_cup.Main ${CUPFLAGS} -parser Grm$* -symbols Sym$* \
21                 < java$*.cup 2>Grm$*.err && tail Grm$*.err
22
23 # Compile the java source for the parser.
24 Parse/Grm%.class: Parse/Lexer.java Parse/Grm%.java Parse/Sym%.java
25         ${JAVAC} ${JFLAGS} $^
26
27 # Make the lexer symbols from the parser symbols.
28 Lex/Sym.java: $(foreach j,$(JAVA_GRAMMARS),Parse/Sym$(j).java)
29 # verify that these are all identical!
30         @if cat $^ | sed -e 's/Sym[0-9][0-9]/Sym/g' | sort | uniq -c | \
31         egrep -v '^[ ]*[0-9]*[05]       ' | grep -v "^[ ]*[0-9]*[       ]*//"\
32         ; then \
33           echo $^ "are not identical;" ;\
34           echo "we won't be able to build a single lexer for all of these." ;\
35           exit 1;\
36         fi
37 # now make a generic version.
38         sed -e "s/package Parse/package Lex/" -e "s/Sym10/Sym/g" \
39                 < Parse/Sym10.java > $@
40
41 # Compile the java source for the (unified) lexer.
42 Lex/Lex.class: Lex/*.java Lex/Sym.java
43         ${JAVAC} ${JFLAGS} Lex/*.java
44
45 # Compile the java source for the driver.
46 Main/Main.class: Main/Main.java
47         ${JAVAC} ${JFLAGS} Main/*.java
48
49 # run some quick tests.
50 test: Parse/Lexer.java Parse/Grm14.java all phony
51         for n in 1 2 3 4 5; do \
52         ( ${JAVA} Main.Main Parse/Lexer.java $$n && \
53           ${JAVA} Main.Main Parse/Grm14.java $$n && \
54           ${JAVA} Main.Main tests/Escape.java) || exit 1; \
55         done
56         for n in 2 3 4 5; do \
57           ${JAVA} Main.Main tests/Eric.java $$n || exit 1; \
58         done
59         ${JAVA} Main.Main tests/TestJSR201.java 5
60         ${JAVA} Main.Main tests/Test15.java 5
61         ${JAVA} Main.Main tests/Eric15.java 5
62 # always run the test.
63 phony:
64
65 # target to make the distributed files.
66 dist:
67         -$(RM) -rf JavaGrammar javagrm.tar.gz javagrm.zip
68         cvs -d `cat CVS/Root` co -A -P JavaGrammar
69         find JavaGrammar -type d -name CVS | xargs $(RM) -rf
70         tar czvf javagrm.tar.gz JavaGrammar
71         zip -r javagrm.zip JavaGrammar
72         cp javagrm.tar.gz `date +javagrm-%d-%b-%Y.tar.gz`
73         cp README javagrm-README.txt
74         $(RM) -rf JavaGrammar
75 upload: dist
76         chmod a+r javagrm*
77         scp javagrm* shades.cs.princeton.edu:/u/appel/public_html/modern/java/CUP
78
79 # clean up after ourselves.
80 clean:
81         $(RM) Lex/Sym.java \
82                 $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).err) \
83                 $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).java) \
84                 $(foreach j,$(JAVA_GRAMMARS),Parse/Sym$(j).java) \
85                 Parse/parser.java Parse/sym.java \
86               */*.class 
87
88 veryclean: clean
89         $(RM) *~ */*~ javagrm*