make clean: remove symbols.i.
[mes.git] / GNUmakefile
1 .PHONY: all check clean default distclean help install release
2 default: all
3
4 .config.make: configure GNUmakefile
5         ./configure
6
7 OUT:=out
8 CFLAGS:=-std=c99 -O3 -finline-functions
9 #CFLAGS:=-std=c99 -O0
10 #CFLAGS:=-pg -std=c99 -O0
11 #CFLAGS:=-std=c99 -O0 -g
12
13 include .config.make
14 -include .local.make
15 include make/install.make
16
17
18 all: mes
19
20 mes: mes.c mes.h
21
22 clean:
23         rm -f mes environment.i symbols.i mes.h *.cat a.out
24
25 distclean: clean
26         rm -f .config.make
27
28 mes.h: mes.c GNUmakefile
29         ( echo '#if MES_C'; echo '#if MES_FULL' 1>&2;\
30         grep -E '^(scm [*])*[a-z0-9_]+ \(.*\)( {|$$)' $< | grep -Ev '\(.*(char |bool |int )' | sed -e 's,^scm [*],,' | sort |\
31                 while read f; do\
32                         fun=$$(echo $$f | sed -e 's,^scm [*],,' -e 's,{.*,,');\
33                         name=$$(echo $$fun | sed -e 's,^scm [\*],,' | grep -o '^[^ ]*');\
34                         scm_name=$$(echo $$name | sed -e 's,_to_,->,' -e 's,_p$$,?,' -e 's,_x$$,!,' -e 's,^builtin_,,' -re 's,(.*)_$$,c:\1,' | sed \
35                                 -e 's,^divide$$,/,'\
36                                 -e 's,^is?$$,=,'\
37                                 -e 's,^greater?$$,>,'\
38                                 -e 's,^less?$$,<,'\
39                                 -e 's,^minus$$,-,'\
40                                 -e 's,^multiply$$,*,'\
41                                 -e 's,^plus$$,+,'\
42                                 -e 's,_,-,g');\
43                         args=$$(echo $$fun | grep -o 'scm [\*]' | wc -l);\
44                         [ "$$(echo $$fun | fgrep -o ... )" = "..." ] && args=n;\
45                         echo "scm *$$fun;";\
46                         echo "scm scm_$$name = {FUNCTION$$args, .name=\"$$scm_name\", .function$$args=&$$name};";\
47                         echo "a = add_environment (a, \"$$scm_name\", &scm_$$name);" 1>&2;\
48         done; echo '#endif'; echo '#endif' 1>&2) > $@ 2>environment.i
49         grep -oE '^scm ([a-z_]+) = {SYMBOL,' mes.c | cut -d' ' -f 2 |\
50                 while read f; do\
51                         echo "symbols = cons (&$$f, symbols);";\
52                 done > symbols.i
53
54 check: all guile-check mes-check
55
56 TESTS:=\
57  tests/base.test\
58  tests/closure.test\
59  tests/quasiquote.test\
60  tests/let.test\
61  tests/scm.test\
62  tests/record.test\
63  tests/let-syntax.test\
64  tests/match.test\
65 #
66
67 BASE-0:=module/mes/base-0.mes
68 MES-0:=guile/mes-0.scm
69 MES:=./mes
70
71 mes-check: all
72         for i in $(TESTS); do\
73                 cat $(BASE-0) $$(scripts/include.mes $$i) $$i | $(MES);\
74         done
75
76 guile-check:
77         for i in $(TESTS); do\
78                 guile -s <(cat $(MES-0) $$(scripts/include.mes $$i | grep -Ev 'let.mes|quasiquote.mes|srfi-0') $$i);\
79         done
80         for i in $(TESTS); do\
81                 guile -s <(cat $(MES-0) module/mes/test.mes $$i);\
82         done
83
84 MAIN_C:=doc/examples/main.c
85 mescc: all
86         scripts/mescc.mes $(MAIN_C)
87         ./a.out
88
89 mescc.cat: $(MES-0) module/mes/lalr.mes module/mes/elf.mes module/mes/libc-i386.mes $(shell scripts/include.mes scripts/mescc.mes | grep -Ev '/mes/|/srfi/')
90         echo '(compile)' | cat $^ - > $@
91
92 guile-mescc: mescc.cat
93         cat $(MAIN_C) | guile -s $^ > a.out
94         chmod +x a.out
95         ./a.out
96
97 help: help-top
98
99 install: all
100
101 release: all
102
103 help:
104         @echo
105
106 define HELP_TOP
107 Usage: make [OPTION]... [TARGET]...
108
109 Targets:
110   all             update everything
111   check           run unit tests
112   clean           remove all generated stuff
113   dist            create tarball in $(TARBALL)
114   distclean       also clean configuration
115   mescc           compile cc/main.c to a.out
116   install         install in $$(PREFIX) [$(PREFIX)]
117   release         make a release
118   update-hash     update hash in guix.scm
119 endef
120 export HELP_TOP
121 help-top:
122         @echo "$$HELP_TOP"