add scheme apply, rename apply-> apply_env.
[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 boot.mes
8
9 #mes.o: mes.c mes.h
10 mes: mes.c mes.h
11
12 mes.h: mes.c GNUmakefile
13         ( echo '#if MES'; echo '#if MES' 1>&2;\
14         grep -E '^(scm [*])*[a-z0-9_]+ \(.*\)( {|$$)' $< | grep -Ev '\(.*(char |bool |int )' | sed -e 's,^scm [*],,' | sort |\
15                 while read f; do\
16                         fun=$$(echo $$f | sed -e 's,^scm [*],,' -e 's,{.*,,');\
17                         name=$$(echo $$fun | sed -e 's,^scm [\*],,' | grep -o '^[^ ]*');\
18                         scm_name=$$(echo $$name | sed -e 's,_to_,->,' -e 's,_p$$,?,' -e 's,_x$$,!,' -e 's,^builtin_,,' -re 's,(.*)_$$,c:\1,' | sed \
19                                 -e 's,^divide$$,/,'\
20                                 -e 's,^is?$$,=,'\
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
34         ./mes.test
35         ./mes.test ./mes
36         cat scm.mes test.mes | ./mes
37
38 boot.mes: mes.mes loop2.mes scm.mes test.mes
39         cat $^ > $@
40
41 boot: all
42         ./mes < boot.mes
43
44 run: all
45         cat scm.mes test.mes | ./mes