1db5cf968586e54f75cbed3371852ce91592f85b
[mes.git] / GNUmakefile
1 .PHONY: all check default 
2 CFLAGS=-std=c99 -O3 -finline-functions
3 #CFLAGS=-std=c99 -g
4
5 default: all
6
7 all: mes
8
9 mes: mes.c mes.h
10
11 mes.h: mes.c GNUmakefile
12         ( echo '#if MES_C'; echo '#if MES_FULL' 1>&2;\
13         grep -E '^(scm [*])*[a-z0-9_]+ \(.*\)( {|$$)' $< | grep -Ev '\(.*(char |bool |int )' | sed -e 's,^scm [*],,' | sort |\
14                 while read f; do\
15                         fun=$$(echo $$f | sed -e 's,^scm [*],,' -e 's,{.*,,');\
16                         name=$$(echo $$fun | sed -e 's,^scm [\*],,' | grep -o '^[^ ]*');\
17                         scm_name=$$(echo $$name | sed -e 's,_to_,->,' -e 's,_p$$,?,' -e 's,_x$$,!,' -e 's,^builtin_,,' -re 's,(.*)_$$,c:\1,' | sed \
18                                 -e 's,^divide$$,/,'\
19                                 -e 's,^is?$$,=,'\
20                                 -e 's,^greater?$$,>,'\
21                                 -e 's,^less?$$,<,'\
22                                 -e 's,^minus$$,-,'\
23                                 -e 's,^multiply$$,*,'\
24                                 -e 's,^plus$$,+,'\
25                                 -e 's,_,-,g');\
26                         args=$$(echo $$fun | grep -o 'scm [\*]' | wc -l);\
27                         [ "$$(echo $$fun | fgrep -o ... )" = "..." ] && args=n;\
28                         echo "scm *$$fun;";\
29                         echo "scm scm_$$name = {FUNCTION$$args, .name=\"$$scm_name\", .function$$args=&$$name};";\
30                         echo "a = add_environment (a, \"$$scm_name\", &scm_$$name);" 1>&2;\
31         done; echo '#endif'; echo '#endif' 1>&2) > $@ 2>environment.i
32
33 check: all guile-check
34         ./mes.test
35         ./mes.test ./mes
36         cat scm.mes lib/srfi/srfi-0.scm test.mes | ./mes
37
38 guile-check:
39         guile -s test.mes
40
41 run: all
42         cat scm.mes test.mes | ./mes
43
44 psyntax: all
45         cat scm.mes psyntax.mes psyntax.pp psyntax2.mes | ./mes
46
47 syntax: all
48         cat scm.mes syntax.mes syntax-test.mes | ./mes
49
50 syntax.test: syntax.mes syntax-test.mes
51         cat $^ > $@
52
53 guile-syntax: syntax.test
54         guile -s $^
55
56 syntax-case: all
57         cat scm.mes syntax.mes syntax-case-lib.mes syntax-case.mes syntax-case-after.mes syntax-case-test.mes | ./mes
58
59 syntax-case.test: syntax.mes syntax-case-lib.mes syntax-case.mes syntax-case-after.mes syntax-case-test.mes
60         cat $^ > $@
61
62 guile-syntax-case: syntax-case.test
63         guile -s $^
64
65 macro: all
66         cat scm.mes macro.mes | ./mes
67
68 peg: all
69         cat scm.mes syntax.mes syntax-case-lib.mes syntax-case.mes syntax-case-after.mes peg.mes peg/codegen.scm peg/string-peg.scm peg/simplify-tree.scm peg/using-parsers.scm peg/cache.scm peg-test.mes | ./mes
70
71 peg.test: peg/pmatch.scm peg.mes peg/codegen.scm peg/string-peg.scm peg/simplify-tree.scm peg/using-parsers.scm peg/cache.scm peg-test.mes
72         cat $^ | sed 's,\(;; Packages the results of a parser\),(when (guile?) (set! compile-peg-pattern (@@ (ice-9 peg codegen) compile-peg-pattern)))\n\1,' > $@
73
74 guile-peg: peg.test
75 #       guile -s peg-test.mes
76 #       @echo "======================================="
77         guile -s $^
78
79 clean:
80         rm -f mes environment.i mes.h peg.test syntax.test
81
82 record: all
83         cat scm.mes syntax.mes lib/record.mes lib/record.scm lib/srfi/srfi-9.scm record.mes |./mes
84
85
86 paren: all
87         cat scm.mes syntax.mes lib/srfi/srfi-0.scm lib/record.mes lib/record.scm lib/srfi/srfi-9.scm lib/lalr.mes lib/lalr.scm paren.scm | ./mes
88 #       #echo '___P((()))'
89
90 paren.test: lib/lalr.scm paren.scm
91         cat $^ > $@
92
93 guile-paren: paren.test
94         echo '___P((()))' | guile -s $^