Commit | Line | Data |
---|---|---|
97a9a385 MW |
1 | ### -*-makefile-*- |
2 | ### | |
3 | ### Build script for the SOD translator | |
4 | ### | |
5 | ### (c) 2015 Straylight/Edgeware | |
6 | ### | |
7 | ||
8 | ###----- Licensing notice --------------------------------------------------- | |
9 | ### | |
10 | ### This file is part of the Sensble Object Design, an object system for C. | |
11 | ### | |
12 | ### SOD is free software; you can redistribute it and/or modify | |
13 | ### it under the terms of the GNU General Public License as published by | |
14 | ### the Free Software Foundation; either version 2 of the License, or | |
15 | ### (at your option) any later version. | |
16 | ### | |
17 | ### SOD is distributed in the hope that it will be useful, | |
18 | ### but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 | ### GNU General Public License for more details. | |
21 | ### | |
22 | ### You should have received a copy of the GNU General Public License | |
23 | ### along with SOD; if not, write to the Free Software Foundation, | |
24 | ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
25 | ||
b5d086c2 | 26 | include $(top_srcdir)/vars.am |
97a9a385 MW |
27 | |
28 | dist_pkglispsrc_DATA = | |
29 | ||
30 | ###-------------------------------------------------------------------------- | |
31 | ### The source files. | |
32 | ||
33 | ## The system definition file. | |
34 | dist_pkglispsrc_DATA += sod.asd | |
35 | ||
36 | ## The package definition file. | |
37 | dist_pkglispsrc_DATA += package.lisp | |
38 | ||
39 | ## General utilities. | |
40 | dist_pkglispsrc_DATA += utilities.lisp | |
41 | ||
42 | ## The parser library. | |
43 | dist_pkglispsrc_DATA += parser/floc-proto.lisp parser/floc-impl.lisp | |
44 | dist_pkglispsrc_DATA += parser/streams-proto.lisp parser/streams-impl.lisp | |
45 | dist_pkglispsrc_DATA += parser/scanner-proto.lisp parser/scanner-impl.lisp | |
46 | dist_pkglispsrc_DATA += parser/scanner-charbuf-impl.lisp | |
47 | dist_pkglispsrc_DATA += parser/scanner-token-impl.lisp | |
48 | dist_pkglispsrc_DATA += parser/parser-proto.lisp parser/parser-impl.lisp | |
49 | dist_pkglispsrc_DATA += parser/parser-expr-proto.lisp \ | |
50 | parser/parser-expr-impl.lisp | |
51 | dist_pkglispsrc_DATA += parser/scanner-context-impl.lisp | |
52 | ||
53 | ## Lexical analysis and translator-specific parser utilities. | |
54 | dist_pkglispsrc_DATA += lexer-proto.lisp lexer-impl.lisp | |
55 | dist_pkglispsrc_DATA += fragment-parse.lisp | |
56 | ||
57 | ## C type representation. | |
58 | dist_pkglispsrc_DATA += c-types-proto.lisp c-types-impl.lisp \ | |
59 | c-types-parse.lisp | |
60 | ||
61 | ## Property sets. | |
62 | dist_pkglispsrc_DATA += pset-proto.lisp pset-impl.lisp pset-parse.lisp | |
63 | ||
64 | ## Code generation. | |
65 | dist_pkglispsrc_DATA += codegen-proto.lisp codegen-impl.lisp | |
66 | ||
67 | ## Output machinery. | |
68 | dist_pkglispsrc_DATA += output-proto.lisp output-impl.lisp | |
69 | ||
70 | ## Modules. | |
71 | dist_pkglispsrc_DATA += module-proto.lisp module-impl.lisp | |
72 | dist_pkglispsrc_DATA += module-parse.lisp module-output.lisp | |
73 | dist_pkglispsrc_DATA += builtin.lisp | |
74 | ||
75 | ## Class representation and layout. | |
76 | dist_pkglispsrc_DATA += classes.lisp c-types-class-impl.lisp | |
77 | dist_pkglispsrc_DATA += class-utilities.lisp | |
78 | dist_pkglispsrc_DATA += class-make-proto.lisp class-make-impl.lisp | |
79 | dist_pkglispsrc_DATA += class-layout-proto.lisp class-layout-impl.lisp | |
80 | dist_pkglispsrc_DATA += class-finalize-proto.lisp class-finalize-impl.lisp | |
81 | dist_pkglispsrc_DATA += class-output.lisp | |
82 | ||
83 | ## Method generation. | |
84 | dist_pkglispsrc_DATA += method-proto.lisp method-impl.lisp | |
85 | ||
86 | ## User interface. | |
87 | dist_pkglispsrc_DATA += sod-frontend.asd | |
88 | dist_pkglispsrc_DATA += frontend.lisp optparse.lisp | |
89 | ||
90 | ###-------------------------------------------------------------------------- | |
91 | ### Constructing an output image. | |
92 | ||
5e6bcea3 | 93 | CLEANFILES += *.$(fasl) parser/*.$(fasl) |
97a9a385 | 94 | |
b5d086c2 | 95 | ## Building the executable image. |
97a9a385 MW |
96 | bin_PROGRAMS += sod |
97 | sod_SOURCES = | |
98 | sod: $(dist_pkglispsrc_DATA) | |
99 | set -ex; true_srcdir=$$(cd $(srcdir); pwd); \ | |
100 | ASDF_OUTPUT_TRANSLATIONS=$$true_srcdir:$(abs_builddir): \ | |
5e6bcea3 | 101 | $(CL_LAUNCH) -o sod -d ! -l $(LISPSYS) +I -S $$true_srcdir/: \ |
97a9a385 MW |
102 | -s sod-frontend -r sod-frontend:main |
103 | ||
104 | ###-------------------------------------------------------------------------- | |
5e6bcea3 MW |
105 | ### Unit testing. |
106 | ||
107 | ## The system definition. | |
108 | EXTRA_DIST += sod-test.asd | |
109 | ||
110 | ## Basic utilities. | |
111 | EXTRA_DIST += test-base.lisp | |
112 | ||
113 | ## Parser tests. | |
114 | EXTRA_DIST += parser/parser-test.lisp | |
115 | EXTRA_DIST += parser/scanner-charbuf-test.lisp | |
116 | ||
117 | ## Translator tests. | |
118 | EXTRA_DIST += c-types-test.lisp | |
119 | EXTRA_DIST += codegen-test.lisp | |
120 | EXTRA_DIST += lexer-test.lisp | |
121 | ||
122 | ## Running the Lisp tests. | |
123 | check-local: | |
124 | set -ex; true_srcdir=$$(cd $(srcdir); pwd); \ | |
125 | ASDF_OUTPUT_TRANSLATIONS=$$true_srcdir:$(abs_builddir): \ | |
126 | $(CL_LAUNCH) -l $(LISPSYS) +I -S $$true_srcdir/: \ | |
127 | -i '(asdf:test-system "sod")' | |
128 | ||
129 | ###-------------------------------------------------------------------------- | |
97a9a385 MW |
130 | ### Installation. |
131 | ||
132 | ## We want a symlink $(lispsysdir)/sod.asd -> $(lispsrcdir)/sod/sod.asd. It | |
133 | ## would be nice if this were a sane relative symlink, but that involves | |
134 | ## calculating the proper relative path from $(lispsrcdir)/sod to | |
135 | ## $(lispsysdir). Oh, well, here we go. This assumes that the path names | |
136 | ## don't have spaces in them; but that's generally a bad idea in Makefiles | |
137 | ## anyway. | |
138 | install-data-local: | |
139 | $(MKDIR_P) $(DESTDIR)$(lispsysdir) | |
140 | @set -e; \ | |
141 | from=$(lispsysdir) to=$(pkglispsrcdir)/sod.asd; \ | |
142 | set -- $$(echo $$from | tr "/" " "); fwd=$$*; \ | |
143 | set -- $$(echo $$to | tr "/" " "); twd=$$*; \ | |
144 | while :; do \ | |
145 | set -- $$fwd; fhd=$$1 fn=$$#; \ | |
146 | set -- $$twd; thd=$$1 tn=$$#; \ | |
147 | case :$$fn:$$tn: in *:0:*) break ;; esac; \ | |
148 | case "$$fhd" in "$$thd") ;; *) break ;; esac; \ | |
149 | set -- $$fwd; shift; fwd=$$*; \ | |
150 | set -- $$twd; shift; twd=$$*; \ | |
151 | done; \ | |
152 | dots=$$(echo $$fwd | sed 's/[^ ][^ ]*/../g'); \ | |
153 | rel=$$(echo $$dots $$twd | tr " " "/"); \ | |
154 | echo >&2 "ln -s $$rel $$to"; \ | |
5e6bcea3 MW |
155 | ln -s $$rel $(DESTDIR)$$from/sod.asd.new; \ |
156 | mv $(DESTDIR)$$from/sod.asd.new $(DESTDIR)$$from/sod.asd | |
97a9a385 MW |
157 | |
158 | ###----- That's all, folks -------------------------------------------------- |