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