lib/, src/: Add man pages for the translator.
[sod] / src / Makefile.am
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
26 include $(top_srcdir)/vars.am
27
28 nobase_dist_pkglispsrc_DATA = $(LISP_SOURCES)
29 LISP_SOURCES =
30 SYSDEFS =
31
32 ASDF_ENV = \
33 ASDF_OUTPUT_TRANSLATIONS=$$(cd $(srcdir); pwd):$(abs_builddir):
34
35 ###--------------------------------------------------------------------------
36 ### The source files.
37
38 ## The package definition file.
39 LISP_SOURCES += package.lisp
40
41 ## General utilities.
42 LISP_SOURCES += utilities.lisp
43
44 ## The parser library.
45 LISP_SOURCES += parser/package.lisp
46 LISP_SOURCES += parser/floc-proto.lisp parser/floc-impl.lisp
47 LISP_SOURCES += parser/streams-proto.lisp parser/streams-impl.lisp
48 LISP_SOURCES += parser/scanner-proto.lisp parser/scanner-impl.lisp
49 LISP_SOURCES += parser/scanner-charbuf-impl.lisp
50 LISP_SOURCES += parser/scanner-token-impl.lisp
51 LISP_SOURCES += parser/parser-proto.lisp parser/parser-impl.lisp
52 LISP_SOURCES += parser/parser-expr-proto.lisp \
53 parser/parser-expr-impl.lisp
54 LISP_SOURCES += parser/scanner-context-impl.lisp
55
56 ## Lexical analysis and translator-specific parser utilities.
57 LISP_SOURCES += lexer-proto.lisp lexer-impl.lisp
58 LISP_SOURCES += fragment-parse.lisp
59
60 ## C type representation.
61 LISP_SOURCES += c-types-proto.lisp c-types-impl.lisp \
62 c-types-parse.lisp
63
64 ## Property sets.
65 LISP_SOURCES += pset-proto.lisp pset-impl.lisp pset-parse.lisp
66
67 ## Code generation.
68 LISP_SOURCES += codegen-proto.lisp codegen-impl.lisp
69
70 ## Output machinery.
71 LISP_SOURCES += output-proto.lisp output-impl.lisp
72
73 ## Modules.
74 LISP_SOURCES += module-proto.lisp module-impl.lisp
75 LISP_SOURCES += module-parse.lisp module-output.lisp
76 LISP_SOURCES += builtin.lisp
77
78 ## Class representation and layout.
79 LISP_SOURCES += classes.lisp c-types-class-impl.lisp
80 LISP_SOURCES += class-utilities.lisp
81 LISP_SOURCES += class-make-proto.lisp class-make-impl.lisp
82 LISP_SOURCES += class-layout-proto.lisp class-layout-impl.lisp
83 LISP_SOURCES += class-finalize-proto.lisp class-finalize-impl.lisp
84 LISP_SOURCES += class-output.lisp
85
86 ## Method generation.
87 LISP_SOURCES += method-proto.lisp method-impl.lisp
88 LISP_SOURCES += method-aggregate.lisp
89
90 ## User interface.
91 LISP_SOURCES += frontend.lisp optparse.lisp
92
93 ## Finishing touches.
94 LISP_SOURCES += final.lisp
95
96 ###--------------------------------------------------------------------------
97 ### Constructing an output image.
98
99 CLEANFILES += *.$(fasl) parser/*.$(fasl)
100
101 ## Autodetected configuration.
102 EXTRA_DIST += auto.lisp.in
103 CLEANFILES += auto.lisp
104 auto.lisp: auto.lisp.in Makefile
105 $(SUBST) $(srcdir)/auto.lisp.in >$@.new $(SUBSTITUTIONS) && \
106 grep '^[^;]' $@.new >$@.strip && \
107 rm -f $@.new && mv $@.strip $@
108
109 ## Building a working-tree system definition.
110 EXTRA_DIST += sod.asd.in
111 CLEANFILES += sod.asd
112 sod.asd: sod.asd.in Makefile
113 $(SUBST) $(srcdir)/sod.asd.in >$@.new $(SUBSTITUTIONS) && \
114 mv $@.new $@
115
116 EXTRA_DIST += sod-frontend.asd.in
117 CLEANFILES += sod-frontend.asd
118 sod-frontend.asd: sod-frontend.asd.in Makefile
119 $(SUBST) $(srcdir)/sod-frontend.asd.in >$@.new $(SUBSTITUTIONS) && \
120 mv $@.new $@
121
122 ## Building the executable image.
123 bin_PROGRAMS += sod
124 sod_SOURCES =
125 sod: $(LISP_SOURCES) sod.asd sod-frontend.asd auto.lisp
126 $(V_DUMP)$(ASDF_ENV) $(CL_LAUNCH) -o sod -d ! -l $(LISPSYS) +I \
127 -s sod-frontend -r sod-frontend:main
128
129 ###--------------------------------------------------------------------------
130 ### Unit testing.
131
132 ## The system definition.
133 EXTRA_DIST += sod-test.asd.in
134
135 ## Basic utilities.
136 EXTRA_DIST += test-base.lisp
137
138 ## Parser tests.
139 EXTRA_DIST += parser/parser-test.lisp
140 EXTRA_DIST += parser/scanner-charbuf-test.lisp
141
142 ## Translator tests.
143 EXTRA_DIST += c-types-test.lisp
144 EXTRA_DIST += codegen-test.lisp
145 EXTRA_DIST += lexer-test.lisp
146
147 ## The system definition.
148 EXTRA_DIST += sod-test.asd.in
149 CLEANFILES += sod-test.asd
150 sod-test.asd: sod-test.asd.in Makefile
151 $(SUBST) $(srcdir)/sod-test.asd.in >$@.new $(SUBSTITUTIONS) && \
152 mv $@.new $@
153
154 ## Running the Lisp tests.
155 check-local: sod sod-test.asd
156 $(V_TEST)$(ASDF_ENV) $(CL_LAUNCH) -l $(LISPSYS) -s sod-test +I \
157 -i '(handler-case (asdf:test-system "sod") ;\
158 (error (cond) ;\
159 (format *error-output* "ERR: ~A~%" cond) ;\
160 (cl-launch:quit 1)))'
161
162 ###--------------------------------------------------------------------------
163 ### Manual pages.
164
165 dist_man_MANS += sod.1
166 dist_man_MANS += sod-module.5
167
168 ###--------------------------------------------------------------------------
169 ### Installation.
170
171 ## We want a symlink $(lispsysdir)/sod.asd -> $(lispsrcdir)/sod/sod.asd. It
172 ## would be nice if this were a sane relative symlink, but that involves
173 ## calculating the proper relative path from $(lispsrcdir)/sod to
174 ## $(lispsysdir). Oh, well, here we go. This assumes that the path names
175 ## don't have spaces in them; but that's generally a bad idea in Makefiles
176 ## anyway.
177 install-data-local:
178 $(MKDIR_P) $(DESTDIR)$(lispsysdir) $(DESTDIR)$(pkglispsrcdir)
179 @set -e; \
180 from=$(lispsysdir) to=$(pkglispsrcdir); \
181 set -- $$(echo $$from | tr "/" " "); fwd=$$*; \
182 set -- $$(echo $$to | tr "/" " "); twd=$$*; \
183 while :; do \
184 set -- $$fwd; fhd=$$1 fn=$$#; \
185 set -- $$twd; thd=$$1 tn=$$#; \
186 case :$$fn:$$tn: in *:0:*) break ;; esac; \
187 case "$$fhd" in "$$thd") ;; *) break ;; esac; \
188 set -- $$fwd; shift; fwd=$$*; \
189 set -- $$twd; shift; twd=$$*; \
190 done; \
191 dots=$$(echo $$fwd | sed 's/[^ ][^ ]*/../g'); \
192 rel=$$(echo $$dots $$twd | tr " " "/"); \
193 for i in sod.asd sod-frontend.asd; do \
194 echo >&2 "CREATE $$to/$$i"; \
195 sed -e '/#|@-auto-@|#/ { r auto.lisp' -e ' d; }' \
196 -e '/#|@-path-@|#/ d' \
197 $(srcdir)/$$i.in >$(DESTDIR)$(pkglispsrcdir)/$$i.new; \
198 mv $(DESTDIR)$(pkglispsrcdir)/$$i.new \
199 $(DESTDIR)$(pkglispsrcdir)/$$i; \
200 echo >&2 "LINK $$rel/$$i $$to/$$i"; \
201 ln -s $$rel/$$i $(DESTDIR)$$from/$$i.new; \
202 mv $(DESTDIR)$$from/$$i.new $(DESTDIR)$$from/$$i; \
203 done
204
205 uninstall-local:
206 for i in sod.asd sod-frontend.asd; do \
207 rm -f $(DESTDIR)$(pkglispsrcdir)/$$i $(DESTDIR)$(lispsysdir)/$$i; \
208 done
209
210 ###----- That's all, folks --------------------------------------------------