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