1ICK_SPECIFIC_SUBDIR = ick-@PACKAGE_VERSION@
2ickincludedir = $(includedir)/$(ICK_SPECIFIC_SUBDIR)
3ickdatadir = $(datadir)/$(ICK_SPECIFIC_SUBDIR)
4
5AM_CFLAGS = '-DICKINCLUDEDIR="$(ickincludedir)"' \
6            '-DICKDATADIR="$(ickdatadir)"' \
7            '-DICKBINDIR="$(bindir)"' '-DICKLIBDIR="$(libdir)"' \
8            -DYYDEBUG -DICK_HAVE_STDINT_H=@HAVE_STDINT_H@
9AM_CPPFLAGS = -I$(srcdir)/src
10
11bin_PROGRAMS = ick convickt
12ick_SOURCES = src/feh2.c src/dekludge.c src/ick_lose.c \
13              src/fiddle.c src/perpet.c src/uncommon.c
14nodist_ick_SOURCES = parser.y lexer.l
15parser.y : src/parser.y
16	$(LN_S) -f `test -f 'src/parser.y' || echo '$(srcdir)/'`src/parser.y parser.y
17lexer.l : src/lexer.l
18	$(LN_S) -f `test -f 'src/lexer.l' || echo '$(srcdir)/'`src/lexer.l lexer.l
19ick-wrap.c : src/ick-wrap.c
20	$(LN_S) -f `test -f 'src/ick-wrap.c' || echo '$(srcdir)/'`src/ick-wrap.c ick-wrap.c
21pickwrap.c : src/pickwrap.c
22	$(LN_S) -f `test -f 'src/pickwrap.c' || echo '$(srcdir)/'`src/pickwrap.c pickwrap.c
23syslib.i : pit/lib/syslib.i
24	$(LN_S) -f `test -f 'pit/lib/syslib.i' || echo '$(srcdir)/'`pit/lib/syslib.i syslib.i
25syslib3.3i : pit/lib/syslib3.3i
26	$(LN_S) -f `test -f 'pit/lib/syslib.3i' || echo '$(srcdir)/'`pit/lib/syslib3.3i syslib3.3i
27syslib4.4i : pit/lib/syslib4.4i
28	$(LN_S) -f `test -f 'pit/lib/syslib.4i' || echo '$(srcdir)/'`pit/lib/syslib4.4i syslib4.4i
29syslib5.5i : pit/lib/syslib5.5i
30	$(LN_S) -f `test -f 'pit/lib/syslib.5i' || echo '$(srcdir)/'`pit/lib/syslib5.5i syslib5.5i
31syslib6.6i : pit/lib/syslib6.6i
32	$(LN_S) -f `test -f 'pit/lib/syslib.6i' || echo '$(srcdir)/'`pit/lib/syslib6.6i syslib6.6i
33syslib7.7i : pit/lib/syslib7.7i
34	$(LN_S) -f `test -f 'pit/lib/syslib.7i' || echo '$(srcdir)/'`pit/lib/syslib7.7i syslib7.7i
35floatlib.i : pit/lib/floatlib.i
36	$(LN_S) -f `test -f 'pit/lib/floatlib.i' || echo '$(srcdir)/'`pit/lib/floatlib.i floatlib.i
37ecto_b98.c : pit/explib/ecto_b98.c
38	$(LN_S) -f `test -f 'pit/explib/ecto_b98.c' || echo '$(srcdir)/'`pit/explib/ecto_b98.c ecto_b98.c
39ick_ec.h : src/ick_ec.h
40	$(LN_S) -f `test -f 'src/ick_ec.h' || echo '$(srcdir)/'`src/ick_ec.h ick_ec.h
41ick_lose.h : src/ick_lose.h
42	$(LN_S) -f `test -f 'src/ick_lose.h' || echo '$(srcdir)/'`src/ick_lose.h ick_lose.h
43fiddle.h : src/fiddle.h
44	$(LN_S) -f `test -f 'src/fiddle.h' || echo '$(srcdir)/'`src/fiddle.h fiddle.h
45ick_bool.h : src/ick_bool.h
46	$(LN_S) -f `test -f 'src/ick_bool.h' || echo '$(srcdir)/'`src/ick_bool.h ick_bool.h
47yuk.h : src/yuk.h
48	$(LN_S) -f `test -f 'src/ick-ec.h' || echo '$(srcdir)/'`src/yuk.h yuk.h
49ick_LDADD = libidiot.a
50AM_YFLAGS = -d
51# BUILT_SOURCES is used both to make sure parser.h is built early, and to
52# create symlinks used by ick to find files if it's run without first being
53# installed.
54BUILT_SOURCES = parser.h ick-wrap.c pickwrap.c syslib.i syslib3.3i \
55		syslib4.4i syslib5.5i syslib6.6i syslib7.7i floatlib.i \
56		ecto_b98.c ick_ec.h fiddle.h ick_bool.h ick_lose.h yuk.h
57noinst_LIBRARIES = libidiot.a
58libidiot_a_SOURCES = src/idiotism.oil
59libidiot.a: src/idiotism.oil oil$(EXEEXT) src/oil.h src/sizes.h src/ick.h \
60	    parser.h src/fiddle.h src/ick_lose.h src/feh.h
61	./oil$(EXEEXT) < `test -f 'src/idiotism.oil' || echo '$(srcdir)/'`src/idiotism.oil
62	for oo in oilout*.c; do echo $$oo; $(COMPILE) -c $$oo; done
63	$(AR) $(ARFLAGS) libidiot.a oilout*.o
64	$(RANLIB) libidiot.a
65convickt_SOURCES = src/convickt.c src/clc-cset.c src/uncommon.c
66
67@INCLUDE_HIDDEN_FROM_AUTOMAKE@ ./host.mak
68
69noinst_PROGRAMS = oil bin2c
70oil_SOURCES = src/oil.y
71oil_YFLAGS =
72bin2c_SOURCES = src/bin2c.c
73oil$(EXEEXT_FOR_BUILD): src/oil-oil.c bconfig.h
74	$(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) $(CFLAGS_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o oil$(EXEEXT_FOR_BUILD) src/oil-oil.c $(LIBS_FOR_BUILD)
75bin2c$(EXEEXT_FOR_BUILD): src/bin2c.c bconfig.h
76	$(CC_FOR_BUILD) $(DEFAULT_INCLUDES) $(INCLUDES) $(CFLAGS_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o bin2c$(EXEEXT_FOR_BUILD) `test -f 'src/bin2c.c' || echo '$(srcdir)/'`src/bin2c.c $(LIBS_FOR_BUILD)
77oil$(EXEEXT):
78bin2c$(EXEEXT):
79
80# Optional libraries are in lib_LIBRARIES, but with a null build rule.
81lib_LIBRARIES = libick.a libickmt.a libickec.a libyuk.a libick_ecto_b98.a
82libick_ecto_b98_a_SOURCES =
83libick_ecto_b98.a: etc/libick_ecto_b98.a
84	-(test -f etc/libick_ecto_b98.a || test -f $(srcdir)/etc/libick_ecto_b98.a) && $(LN_S) -f `test -f 'etc/libick_ecto_b98.a' || echo '$(srcdir)/'`etc/libick_ecto_b98.a libick_ecto_b98.a
85etc/libick_ecto_b98.a:
86libick_a_SOURCES = src/cesspool.c src/numerals.c src/ick_lose.c src/fiddle.c \
87                   src/arrgghh.c src/clc-cset.c src/uncommon.c
88libick_a_LIBADD = atari.o baudot.o ebcdic.o latin1.o
89libickmt_a_SOURCES = src/cesspool.c src/numerals.c src/ick_lose.c src/fiddle.c \
90                     src/arrgghh.c src/clc-cset.c src/uncommon.c src/unravel.c
91libickmt_a_LIBADD = atari.o baudot.o ebcdic.o latin1.o
92libickec_a_SOURCES = src/cesspool.c src/numerals.c src/ick_lose.c src/fiddle.c \
93                     src/arrgghh.c src/clc-cset.c src/uncommon.c src/ick_ec.c
94libickec_a_LIBADD = atari.o baudot.o ebcdic.o latin1.o
95libyuk_a_SOURCES = src/yuk.c
96atari.o: bin2c$(EXEEXT_FOR_BUILD) src/atari.bin
97	./bin2c$(EXEEXT_FOR_BUILD) ick_clc_cset_atari < `test -f 'src/atari.bin' || echo '$(srcdir)/'`src/atari.bin > atari.c
98	$(COMPILE) -c atari.c
99baudot.o: bin2c$(EXEEXT_FOR_BUILD) src/baudot.bin
100	./bin2c$(EXEEXT_FOR_BUILD) ick_clc_cset_baudot < `test -f 'src/baudot.bin' || echo '$(srcdir)/'`src/baudot.bin > baudot.c
101	$(COMPILE) -c baudot.c
102ebcdic.o: bin2c$(EXEEXT_FOR_BUILD) src/ebcdic.bin
103	./bin2c$(EXEEXT_FOR_BUILD) ick_clc_cset_ebcdic < `test -f 'src/ebcdic.bin' || echo '$(srcdir)/'`src/ebcdic.bin > ebcdic.c
104	$(COMPILE) -c ebcdic.c
105latin1.o: bin2c$(EXEEXT_FOR_BUILD) src/latin1.bin
106	./bin2c$(EXEEXT_FOR_BUILD) ick_clc_cset_latin1 < `test -f 'src/latin1.bin' || echo '$(srcdir)/'`src/latin1.bin > latin1.c
107	$(COMPILE) -c latin1.c
108
109ickinclude_HEADERS = src/ick_ec.h src/fiddle.h src/ick_lose.h src/yuk.h \
110                     src/ick_bool.h
111nodist_ickinclude_HEADERS = config.h abcess.h
112dist_ickdata_DATA = src/atari.bin src/baudot.bin src/ebcdic.bin src/latin1.bin \
113                    src/ick-wrap.c src/pickwrap.c COPYING
114# These necessary pit files are in nodist_ here because they're in EXTRA_DIST
115# later along with the rest of the pit.
116nodist_ickdata_DATA = pit/lib/syslib.i pit/lib/syslib3.3i pit/lib/syslib4.4i \
117                      pit/lib/syslib5.5i pit/lib/syslib6.6i pit/lib/syslib7.7i \
118                      pit/lib/floatlib.i coopt.sh pit/explib/syslibc.c \
119                      pit/explib/compunex.c pit/explib/ecto_b98.c
120dist_man1_MANS = doc/ick.1 doc/convickt.1
121info_TEXINFOS = doc/ick.txi
122
123# How to run splint on this code
124SPLINTOPTS = -I. -I$(top_srcdir)/src +quiet -warnposix -boolops -predboolint
125splint: $(ick_SOURCES) src/parser.h
126	@echo "Running splint on ick..."
127	-(for x in $(ick_SOURCES); do echo $(top_srcdir)/$$x; done) | xargs splint $(SPLINTOPTS) -exportlocal -redef
128
129EXTRA_DIST = pit etc BUGS src/abcessh.in src/feh.h src/fiddle.h src/ick_ec.h \
130             src/ick.h src/ick_lose.h src/oil.h src/pick1.h src/pick2.h \
131             src/sizes.h src/uncommon.h src/yuk.h src/parser.y src/lexer.l \
132             doc/Makefile doc/fdl-1-2.txi doc/fix83.pl doc/fixtoc.pl \
133             doc/ickstyle.css doc/ick.txt doc/intercal.mm doc/READ.ME \
134             doc/THEORY.txt doc/tidy.cfg src/parser.c src/parser.h \
135             src/lexer.c control doc/ick.txi doc/ick.txt doc/chipspec.txt \
136             HISTORY NEWS README buildaux/buildconfig buildaux/buildconfig.ac \
137             buildaux/depcomp buildaux/hostmak.in buildaux/install-sh \
138             buildaux/missing buildaux/ylwrap buildaux/bconfigh.in
139
140# It's ugly to distribute the prebuilt files in the root of the
141# distribution.  configure will move these files back again into the
142# root of the /build tree/, which makes a lot more sense than putting
143# them in the root of the source tree. Also, make sure not to
144# distribute executables lying around in the pit from previous tests.
145dist-hook:
146	$(MKDIR_P) $(distdir)/prebuilt
147	mv $(distdir)/src/parser.c $(distdir)/prebuilt
148	mv $(distdir)/src/parser.h $(distdir)/prebuilt
149	mv $(distdir)/src/lexer.c $(distdir)/prebuilt
150	mv $(distdir)/src/oil-oil.c $(distdir)/prebuilt
151	-find $(distdir)/pit -perm -u+x -type f -and -not -name regresscheck | xargs rm
152	touch $(distdir)/MANIFEST
153	(cd $(distdir); find . | sort > MANIFEST)
154
155# N.B. the parser.y, lexer.l, libraries, headers and skeletons are the
156# links made to simplify the build, not the originals
157CLEANFILES = oilout*.c parser.y lexer.l ick-wrap.c pickwrap.c \
158             atari.c baudot.c ebcdic.c latin1.c ick.dvi \
159             syslib.i syslib3.3i syslib4.4i syslib5.5i \
160             syslib6.6i syslib7.7i ick_ec.h fiddle.h \
161             ick_lose.h yuk.h floatlib.i ecto_b98.c ick_bool.h
162# Distclean deletes the Makefile and thus requires reconfiguring,
163# and therefore this is a safe moment to delete the build tree
164# versions of the prebuilt files. (The source tree versions will
165# be safe in the prebuilt dir, which Automake doesn't even know
166# about.)
167DISTCLEANFILES = src/parser.c src/parser.h src/lexer.c src/oil-oil.c host.mak bconfig.h config.status.build
168
169distclean-local:
170	mkdir -p src
171	rm -rf src/.deps
172	-rmdir src       # this should be empty iff out-of-tree
173
174# A veryclean is a distclean that removes /all/ generated files,
175# even the ones that are part of the distributed system
176veryclean: distclean
177	rm -f $(top_srcdir)/buildaux/buildconfig
178	rm -f $(top_srcdir)/buildaux/depcomp
179	rm -f $(top_srcdir)/buildaux/install-sh
180	rm -f $(top_srcdir)/buildaux/missing
181	rm -f $(top_srcdir)/buildaux/ylwrap
182	rm -f $(top_srcdir)/buildaux/ar-lib
183	rm -f $(top_srcdir)/buildaux/compile
184	rm -f $(top_srcdir)/buildaux/Makefile.in
185	rm -f $(top_srcdir)/buildaux/bconfigh.in
186	rm -f $(top_srcdir)/buildaux/configh.in
187	rm -f $(top_srcdir)/aclocal.m4
188	rm -f $(top_srcdir)/configure
189	rm -rf $(top_srcdir)/autom4te.cache
190	rm -rf $(top_srcdir)/buildaux/autom4te.cache
191
192# Clean the pit test binaries on toplevel make clean
193clean-local:
194	if [ -d pit ]; then cd pit; make clean; fi
195
196
197# A subtle yet potentially common issue: ick favours the install location over
198# the build-directory or current-directory locations for its data files; this
199# means that we can easily test against the wrong version of libick.
200# It would be nice to compare the file contents, but this doesn't work in
201# practice; it's possible that the installed version is stripped and the
202# non-installed version is unstripped (yet they match). Instead, we use the
203# crude heuristic of comparing modification times; an old installed version
204# will be older than an uninstalled version, whereas a version installed from
205# the current sources can be no older (and typically is newer)
206verify-libick-version: $(lib_LIBRARIES)
207	@list='$(lib_LIBRARIES)'; \
208	for p in $$list; do \
209	test ! -f $(DESTDIR)$(libdir)/$$p || test ! $(DESTDIR)$(libdir)/$$p -ot $$p || \
210	( \
211	    echo "Error: You have an old installed version of $$p."; \
212	    echo "This makes it impossible to test ick, as it will look at the"; \
213	    echo "installed version, not the version that was just built."; \
214	    echo "Run make install or make uninstall."; \
215	    false; \
216	) || \
217	exit 1; \
218	done
219
220# Make self-tests available in the standard way
221# The pit has to be writable for the tests to work, unfortunately...
222check-am: ick$(EXEEXT) verify-libick-version
223	chmod u+w $(top_srcdir)/pit
224	chmod u+w $(top_srcdir)/pit/lib
225	chmod u+w $(top_srcdir)/pit/tests
226	make -f $(top_srcdir)/pit/Makefile ICKENV="" ICK="./ick$(EXEEXT)" ICKOPTS="-b" PIT=$(top_srcdir)/pit test
227
228# Run the fuzztest
229fuzz: ick$(EXEEXT) src/idiotism.oil $(top_srcdir)/etc/interfuzz.pl verify-libick-version
230	ICK="./ick$(EXEEXT)" IDIOTISM="$(top_srcdir)/src/idiotism.oil" perl $(top_srcdir)/etc/interfuzz.pl
231
232# Run regression tests, fuzz tests and build tests
233test: fuzz distcheck
234
235# If a documentation file is needed but not available, invoke the doc
236# makefile to build it.
237doc/ick.txt: doc/ick.txi
238	cd $(top_srcdir)/doc && make ick.txt
239
240echo-version:
241	@echo @PACKAGE_VERSION@
242echo-repository-url:
243	@echo @REPOSITORY_URL@
244
245# The build system itself is included in the makefile; tell Automake
246# about the buildaux tweaking.
247$(top_srcdir)/buildaux/buildconfig: $(top_srcdir)/buildaux/buildconfig.ac $(top_srcdir)/buildaux/bconfigh.in
248	cd $(top_srcdir) && $(AUTOCONF) buildaux/buildconfig.ac > buildaux/buildconfig
249	chmod a+x $(top_srcdir)/buildaux/buildconfig
250$(top_srcdir)/buildaux/bconfigh.in: $(top_srcdir)/buildaux/buildconfig.ac
251	cd $(top_srcdir)/buildaux && $(AUTOHEADER) buildconfig.ac
252	rm -f stamp-h1
253	touch $@
254CONFIG_STATUS_DEPENDENCIES=$(top_srcdir)/buildaux/buildconfig $(top_srcdir)/buildaux/bconfigh.in $(top_srcdir)/src/abcessh.in
255
256# Ship a release
257release: intercal-$(VERSION).tar.gz
258	shipper version=$(VERSION) | sh -e -x
259	cd website; upload
260
261# Refresh the website
262refresh:
263	shipper -N -w version=$(VERSION) | sh -e -x
264	cd website; upload
265