1# $Id: Makefile2.m4,v 1.303 2021-02-28 21:39:57 phil Exp $
2changequote([,])dnl
3define([CMT],[dnl])dnl
4CMT([################################################################])
5CMT([establish m4 macros to collect various options])
6CMT()
7CMT([extra C compiler cpp flags for all .c files & make depend])
8define([ADD_CPPFLAGS],[divert(1) $1[]divert(0)dnl])dnl
9define([_CPPFLAGS],[undivert(1)])dnl
10CMT()
11CMT([extra C compiler optimize/debug flags for all .c files])
12define([ADD_OPT],[divert(2) $1[]divert(0)dnl])dnl
13define([_OPT],[undivert(2)])dnl
14CMT()
15CMT([extra source files to make depend])
16define([ADD_SRCS],[divert(3) $1[]divert(0)dnl])dnl
17define([_SRCS],[undivert(3)])dnl
18CMT()
19CMT([extra object files to snolib])
20define([ADD_OBJS],[divert(4) $1[]divert(0)dnl])dnl
21define([_OBJS],[undivert(4)])dnl
22CMT()
23CMT([extra C compiler flags for final link (for snobol4 AND loadable modules)])
24define([ADD_LDFLAGS],[divert(5) $1[]divert(0)dnl])dnl
25define([_LDFLAGS],[undivert(5)])dnl
26CMT()
27CMT([extra C compiler flags for all .c files])
28define([ADD_CFLAGS],[divert(6) $1[]divert(0)dnl])dnl
29define([_CFLAGS],[undivert(6)])dnl
30CMT()
31CMT([LDFLAGS for snobol4 (libs, MOSTLY)])
32define([ADD_SNOBOL4_LDFLAGS],[divert(7) $1[]divert(0)dnl])dnl
33define([_SNOBOL4_LDFLAGS],[undivert(7)])dnl
34
35################################################################
36# defaults (may be overridden in config.m4)
37
38OPT=-O
39
40CCM=./cc-M
41
42# for pow(3)
43MATHLIB=-lm
44
45SH=sh
46SHELL=/bin/sh
47
48# either snobol4 or isnobol4;
49# isnobol4 has had functions reordered for better inlining.
50# if compiler does not perform inlining, snobol4 can be used
51# with no penalty (and slightly simpler build process).
52
53SNOBOL4=isnobol4
54#SNOBOL4=snobol4
55
56# default flags for install of binaries:
57INSTALL_BIN_FLAGS=-s
58
59all:	build_all timing.out
60
61########
62# default lib source files
63
64BAL_C=$(SRCDIR)lib/bal.c
65BREAK_C=$(SRCDIR)lib/break.c
66COMPIO_OBJ_C=$(SRCDIR)lib/compio_obj.c
67DATE_C=$(SRCDIR)lib/date.c
68DIRNAME_C=$(SRCDIR)lib/generic/dirname.c
69DUMP_C=$(SRCDIR)lib/dump.c
70DYNAMIC_C=$(SRCDIR)lib/bsd/dynamic.c
71ENDEX_C=$(SRCDIR)lib/endex.c
72EXISTS_C=$(SRCDIR)lib/generic/exists.c
73EXPOPS_C=$(SRCDIR)lib/generic/expops.c
74FISATTY_C=$(SRCDIR)lib/generic/fisatty.c
75HASH_C=$(SRCDIR)lib/hash.c
76INET_C=$(SRCDIR)lib/bsd/inet.c
77INET6_C=$(SRCDIR)lib/bsd/inet6.c
78INIT_C=$(SRCDIR)lib/init.c
79INTSPC_C=$(SRCDIR)lib/generic/intspc.c
80IO_C=$(SRCDIR)lib/io.c
81LEXCMP_C=$(SRCDIR)lib/lexcmp.c
82LOAD_C=$(SRCDIR)lib/bsd/load.c
83LOADX_C=$(SRCDIR)lib/loadx.c
84MSTIME_C=$(SRCDIR)lib/bsd/mstime.c
85NEWER_C=$(SRCDIR)lib/generic/newer.c
86ORDVST_C=$(SRCDIR)lib/ordvst.c
87PAIR_C=$(SRCDIR)lib/pair.c
88PAT_C=$(SRCDIR)lib/pat.c
89PML_C=$(SRCDIR)lib/pml.c
90POPEN_C=$(SRCDIR)lib/bsd/popen.c
91PTYIO_OBJ_C=$(SRCDIR)lib/dummy/ptyio_obj.c
92REALST_C=$(SRCDIR)lib/realst.c
93REPLACE_C=$(SRCDIR)lib/replace.c
94SPCINT_C=$(SRCDIR)lib/ansi/spcint.c
95SPREAL_C=$(SRCDIR)lib/ansi/spreal.c
96STDIO_OBJ_C=$(SRCDIR)lib/stdio_obj.c
97STREAM_C=$(SRCDIR)lib/stream.c
98SUSPEND_C=$(SRCDIR)lib/posix/suspend.c
99STR_C=$(SRCDIR)lib/str.c
100TERM_C=$(SRCDIR)lib/posix/term.c
101TLSIO_OBJ_C=$(SRCDIR)lib/openssl/tlsio_obj.c
102TOP_C=$(SRCDIR)lib/top.c
103TREE_C=$(SRCDIR)lib/tree.c
104TTY_C=$(SRCDIR)lib/posix/tty.c
105# please keep in alphabetical order!!
106
107# aux sources
108BZERO_C=$(SRCDIR)lib/auxil/bzero.c
109BCOPY_C=$(SRCDIR)lib/auxil/bcopy.c
110GETOPT_C=$(SRCDIR)lib/auxil/getopt.c
111BINDRESVPORT_C=$(SRCDIR)lib/auxil/bindresvport.c
112GETLINE_C=$(SRCDIR)lib/auxil/getline.c
113BUFIO_OBJ_C=$(SRCDIR)lib/auxil/bufio_obj.c
114MEMIO_OBJ_C=$(SRCDIR)lib/auxil/memio_obj.c
115
116# dummy sources
117EXECL_C=$(SRCDIR)lib/dummy/execl.c
118FINITE_C=$(SRCDIR)lib/dummy/finite.c
119GETENV_C=$(SRCDIR)lib/dummy/getenv.c
120ISNAN_C=$(SRCDIR)lib/dummy/isnan.c
121SYSTEM_C=$(SRCDIR)lib/dummy/system.c
122
123# snolib sources
124ATAN_C=$(SRCDIR)lib/snolib/atan.c
125CHOP_C=$(SRCDIR)lib/snolib/chop.c
126COS_C=$(SRCDIR)lib/snolib/cos.c
127DELETE_C=$(SRCDIR)lib/snolib/delete.c
128ENVIRON_C=$(SRCDIR)lib/snolib/environ.c
129EXECUTE_C=$(SRCDIR)lib/generic/execute.c
130EXIT_C=$(SRCDIR)lib/snolib/exit.c
131EXP_C=$(SRCDIR)lib/snolib/exp.c
132FILE_C=$(SRCDIR)lib/snolib/file.c
133FINDUNIT_C=$(SRCDIR)lib/snolib/findunit.c
134GETSTRING_C=$(SRCDIR)lib/snolib/getstring.c
135HANDLE_C=$(SRCDIR)lib/snolib/handle.c
136HOST_C=$(SRCDIR)lib/snolib/host.c
137LOG_C=$(SRCDIR)lib/snolib/log.c
138LOGIC_C=$(SRCDIR)modules/logic/logic.c
139NDBM_C=$(SRCDIR)modules/ndbm/ndbm.c
140ORD_C=$(SRCDIR)lib/snolib/ord.c
141PTY_C=$(SRCDIR)lib/posix/pty.c
142RANDOM_C=$(SRCDIR)modules/random/random.c
143READLINE_C=$(SRCDIR)modules/readline/readline.c
144RENAME_C=$(SRCDIR)lib/snolib/rename.c
145RETSTRING_C=$(SRCDIR)lib/snolib/retstring.c
146SERV_C=$(SRCDIR)lib/snolib/serv.c
147SIN_C=$(SRCDIR)lib/snolib/sin.c
148SPRINTF_C=$(SRCDIR)modules/sprintf/sprintf.c
149SQRT_C=$(SRCDIR)lib/snolib/sqrt.c
150SSET_C=$(SRCDIR)lib/snolib/sset.c
151STCL_C=$(SRCDIR)lib/snolib/stcl.c
152SYS_C=$(SRCDIR)lib/posix/sys.c
153TAN_C=$(SRCDIR)lib/snolib/tan.c
154# for cygwin!
155COM_CPP=$(SRCDIR)lib/win32/com.cpp
156
157# private copy of CFLAGS for data_init.o; here so it can be overridden
158# (ie; to just $(MYCPPFLAGS)) by config.m4 during debug (optimizing it
159# is painful but worthwhile for production, or for compiler bugs!)
160
161DATA_INIT_CFLAGS=$(CFLAGS)
162
163################ objects
164
165# or inet6.o
166INET_O=	inet.o
167
168# end of defaults
169################################################################
170CMT()
171CMT([establish base values:])
172ADD_OPT([$(OPT)])
173CMT()
174# config.m4:
175include(config.m4)
176# end of local config
177################################################################
178
179# for PML functions.
180ADD_SNOBOL4_LDFLAGS([$(MATHLIB)])
181
182# after local config
183
184CONFIG_CPPFLAGS=[]_CPPFLAGS
185
186# NOTE: NOT named CPPFLAGS; some versions of make include CPPFLAGS in cc cmd
187MYCPPFLAGS=-I$(SRCDIR)include -I$(SRCDIR). $(CONFIG_CPPFLAGS) -DSNOBOL4
188
189COPT=[]_OPT
190
191CONFIG_LDFLAGS=[]_LDFLAGS
192LDFLAGS=$(CONFIG_LDFLAGS) _SNOBOL4_LDFLAGS
193
194################
195# compiler flags
196
197CONFIG_CFLAGS=[]_CFLAGS
198CFLAGS=$(CONFIG_CFLAGS) $(COPT) $(MYCPPFLAGS)
199
200################
201
202# add to new files to SRCS too!
203
204# from configure ADD_OBJS:
205AUX_OBJS=[]_OBJS
206
207OBJS=	main.o $(SNOBOL4).o data.o data_init.o syn.o bal.o \
208	break.o date.o dump.o dynamic.o endex.o expops.o \
209	fisatty.o hash.o getstring.o handle.o $(INET_O) \
210	init.o intspc.o io.o lexcmp.o load.o loadx.o \
211	mstime.o newer.o ordvst.o pair.o pat.o pml.o ptyio_obj.o \
212	realst.o replace.o retstring.o spcint.o spreal.o \
213	stdio_obj.o str.o stream.o suspend.o term.o top.o \
214	tree.o tty.o \
215	atan.o chop.o cos.o delete.o execute.o exists.o \
216	exit.o exp.o file.o findunit.o host.o ord.o log.o rename.o \
217	serv.o sin.o sqrt.o sset.o sys.o tan.o \
218	$(AUX_OBJS)
219
220# from configure ADD_SRCS
221AUX_SRCS=[]_SRCS
222
223SRCS=	$(SRCDIR)main.c $(SRCDIR)$(SNOBOL4).c $(SRCDIR)data.c \
224	$(SRCDIR)data_init.c $(SRCDIR)syn.c $(BAL_C) \
225	$(BREAK_C) $(DATE_C) $(DUMP_C) $(DYNAMIC_C) \
226	$(ENDEX_C) $(EXPOPS_C) $(FISATTY_C) $(GETSTRING_C) \
227	$(HANDLE_C) $(HASH_C) $(INET_C) $(INIT_C) \
228	$(INTSPC_C) $(IO_C) $(LEXCMP_C) $(LOAD_C) \
229	$(MSTIME_C) $(NEWER_C) $(ORDVST_C) $(PAIR_C) $(PAT_C) $(PML_C) \
230	$(PTYIO_OBJ_C) $(REALST_C) $(REPLACE_C) \
231	$(RETSTRING_C) $(SPCINT_C) $(SPREAL_C) \
232	$(STDIO_OBJ_C) $(STR_C) $(STREAM_C) $(SUSPEND_C) \
233	$(TERM_C) $(TOP_C) $(TREE_C) $(TTY_C) \
234	$(ATAN_C) $(CHOP_C) $(COS_C) $(DELETE_C) \
235	$(EXISTS_C) $(EXIT_C) $(EXECUTE_C) $(EXP_C) $(FILE_C) \
236	$(FINDUNIT_C) $(HOST_C) $(LOG_C) \
237	$(LOGIC_C) $(ORD_C) $(RANDOM_C) $(RENAME_C) \
238	$(SERV_C) $(SIN_C) $(SPRINTF_C) $(SQRT_C) \
239	$(SSET_C) $(SYS_C) $(TAN_C) \
240	$(AUX_SRCS)
241
242################
243# link, regression test & timing
244
245.PRECIOUS: $(SNOBOL4).o data_init.o snobol4
246
247BUILD_ALL=sdb snobol4 snopea docs build_modules
248build_all: $(BUILD_ALL)
249
250xsnobol4: $(OBJS)
251	rm -f xsnobol4$(EXT)
252	$(MAKE) -f Makefile2 build.o
253	$(CC) -o xsnobol4 $(OBJS) build.o $(LDFLAGS) $(SNOBOL4_LDFLAGS)
254
255changequote(@,@)dnl
256
257# invoked in submake by xsnobol4, $(SOFILENAME) rules
258build.o: always
259	rm -f build.c
260	echo '/* MACHINE GENERATED.  EDITING IS FUTILE */'	> build.c
261	echo '#include "h.h"'					>> build.c
262	echo 'const char build_files[] = "'$(SRCS)'";'		>> build.c
263	echo 'const char build_date[] = "'`date`'";'		>> build.c
264	echo 'const char build_dir[] = "'`pwd`'";'		>> build.c
265	$(CC) $(CFLAGS) -c build.c
266changequote([,])dnl
267
268always:
269
270
271# avoid CFLAGS: -O causes crash on gcc 4.4.6 x86_64?
272cpuid:	cpuid.c
273	$(CC) -o cpuid cpuid.c
274
275################ modules
276
277# NOTE! FreeBSD 3.2 (a pre-C99 test platform) does not have "make -C"
278RUNMAKE=SNOBOL4='../../snobol4 -N -I../.. -I../../snolib' $(MAKE)
279
280clean_modules:
281	for M in $(MODULES); do \
282	    (cd modules/$$M; $(RUNMAKE) clean) \
283	done
284
285build_modules:
286	for M in $(MODULES); do \
287	    (cd modules/$$M; $(RUNMAKE) all) \
288	done
289
290debug_modules:
291	for M in $(MODULES); do \
292	    (cd modules/$$M; $(RUNMAKE) debug) \
293	done
294
295test_modules:
296	for M in $(MODULES); do \
297	    (cd modules/$$M; $(RUNMAKE) test) \
298	done
299
300install_modules:
301	for M in $(MODULES); do \
302	    (cd modules/$$M; $(RUNMAKE) install) \
303	done
304
305################ shared library
306
307SO=so
308SONAME=snobol4
309SOFILENAME=lib$(SONAME)$(SO_EXT)
310
311# do actual work to make shared library.
312# invoked by top level Makefile
313# in so directory, running so/Makefile2 (created with custom config.m4)
314# with target shared_library and SRCDIR=../
315
316# for Makefile, so it is agnostic about filename/extension:
317shared_library: $(SOFILENAME)
318
319$(SOFILENAME): $(OBJS)
320	$(MAKE) -f Makefile2 build.o
321	$(SO_LD) -o $(SOFILENAME) $(SO_LDFLAGS) $(OBJS) build.o $(LDFLAGS)
322
323#### make shared library for ssnobol4 rule (below)
324
325# for ssnobol4, from here (Makefile2), in top directory
326# ask top level Makefile to build so/Makefile2 and run
327# to make shared library.
328
329$(SO)/$(SOFILENAME): always
330	$(MAKE) shared_library
331
332#### snobol4 executable using shared library
333
334# invoked from Makefile, in top directory
335# ask top level Makefile to build so/Makefile2 and run it
336
337# unless $(SOFILENAME) is installed a well-known location
338# you'll likely need to set LD_LIBRARY_PATH
339# (or DYLD_LIBRARY path on OSX)
340
341# snobol4 interpreter using shared library (may be up to 8% slower)
342ssnobol4: $(SO)/$(SOFILENAME) ssnobol4.c
343	$(CC) -Iinclude -o ssnobol4 ssnobol4.c -L$(SO) -l$(SONAME)
344
345# tiny test of invoking SNOBOL4 in a program:
346tlib: $(SO)/$(SOFILENAME) tlib.c
347	$(CC) -Iinclude -o tlib tlib.c -L$(SO) -l$(SONAME)
348
349################
350# run regression tests.
351
352timing.out: tested timing timing.sno test/bench.sno test/v311.sil
353	@echo Running timing script...
354	./timing > timing.out.tmp
355	mv timing.out.tmp timing.out
356	@echo '********************************************************' 1>&2
357	@echo 'Please consider mailing timing.out to timing@snobol4.org' 1>&2
358	@echo 'Anonymized results are posted at http://www.snobol4.org' 1>&2
359	@echo 'And you will be notified when test versions are available.' 1>&2
360	@echo '********************************************************' 1>&2
361
362tested snobol4: xsnobol4 test/tests.in cpuid
363	@echo Running regression tests...
364	(cd test; BLOCKS=$(BLOCKS) SNOPATH=..:../snolib ./run.sh ../xsnobol4 -N)
365	-rm -f snobol4$(EXT)
366	cp xsnobol4$(EXT) snobol4$(EXT)
367	$(MAKE) -f Makefile2 test_modules
368	@echo Passed regression tests.
369	date > tested
370
371#test_modules: xsnobol4
372
373################
374
375# may need additional options due to size (and SIL code issues)
376$(SNOBOL4).o: $(SRCDIR)$(SNOBOL4).c
377	$(CC) $(CFLAGS) $(SNOBOL4_C_CFLAGS) -c $(SRCDIR)$(SNOBOL4).c
378
379main.o: $(SRCDIR)main.c
380	$(CC) $(CFLAGS) -c $(SRCDIR)main.c
381
382data.o: $(SRCDIR)data.c
383	$(CC) $(CFLAGS) -c $(SRCDIR)data.c
384
385# NOTE: private options; includes data_init.h, which is huge and tends
386# to gum up the optimizer.  For development, I keep a local-config
387# file with the line "DATA_INIT_CFLAGS=$(MYCPPFLAGS)" so that no
388# attempt to optimize compilation of data_init.c occurs.  This may
389# result in a slightly larger executable, or slower startup, but since
390# I may compile data_init.c many times in the course of a debug
391# session, it's worth it.
392# NOTE! 9/2013: gcc no longer takes forever!!
393data_init.o: $(SRCDIR)data_init.c
394	$(CC) $(DATA_INIT_CFLAGS) -c $(SRCDIR)data_init.c
395
396syn.o: $(SRCDIR)syn.c
397	$(CC) $(CFLAGS) -c $(SRCDIR)syn.c
398
399################ scripts
400
401sdb:	sdb.sh config.m4
402	rm -f sdb
403	sed -e "s@<SNOLIB_LIB>@$(SNOLIB_LIB)@" \
404	    -e "s@<BINDIR>@$(BINDIR)@" \
405	    -e "s@<VERS>@-$(VERS)@" \
406	    < sdb.sh > sdb
407	chmod a+x sdb
408
409snopea:	snopea.in config.m4
410	rm -f snopea
411	sed -e "s@<BINDIR>@$(BINDIR)@" \
412	    -e "s@<VERS>@-$(VERS)@" \
413	    < snopea.in > snopea
414	chmod a+x snopea
415
416#################################################################
417# lib files
418
419bal.o:	$(BAL_C)
420	$(CC) $(CFLAGS) -c $(BAL_C)
421
422break.o: $(BREAK_C)
423	$(CC) $(CFLAGS) -c $(BREAK_C)
424
425compio_obj.o: $(COMPIO_OBJ_C)
426	$(CC) $(CFLAGS) -c $(COMPIO_OBJ_C)
427
428date.o:	$(DATE_C)
429	$(CC) $(CFLAGS) -c $(DATE_C)
430
431dirname.o: $(DIRNAME_C)
432	$(CC) $(CFLAGS) -c $(DIRNAME_C)
433
434dump.o:	$(DUMP_C)
435	$(CC) $(CFLAGS) -c $(DUMP_C)
436
437dynamic.o: $(DYNAMIC_C)
438	$(CC) $(CFLAGS) -c $(DYNAMIC_C)
439
440endex.o: $(ENDEX_C)
441	$(CC) $(CFLAGS) -c $(ENDEX_C)
442
443exists.o: $(EXISTS_C)
444	$(CC) $(CFLAGS) -c $(EXISTS_C)
445
446expops.o: $(EXPOPS_C)
447	$(CC) $(CFLAGS) -c $(EXPOPS_C)
448
449fisatty.o: $(FISATTY_C)
450	$(CC) $(CFLAGS) -c $(FISATTY_C)
451
452hash.o:	$(HASH_C)
453	$(CC) $(CFLAGS) -c $(HASH_C)
454
455inet.o:	$(INET_C)
456	$(CC) $(CFLAGS) -c $(INET_C)
457
458inet6.o: $(INET6_C)
459	$(CC) $(CFLAGS) -c $(INET6_C)
460
461init.o:	$(INIT_C)
462	$(CC) $(CFLAGS) -c $(INIT_C)
463
464intspc.o: $(INTSPC_C)
465	$(CC) $(CFLAGS) -c $(INTSPC_C)
466
467io.o:	$(IO_C) $(MAKEFILE2)
468	$(CC) $(CFLAGS) -c $(IO_C)
469
470lexcmp.o: $(LEXCMP_C)
471	$(CC) $(CFLAGS) -c $(LEXCMP_C)
472
473load.o:	$(LOAD_C) $(MAKEFILE2)
474	$(CC) $(CFLAGS) -c $(LOAD_C)
475
476loadx.o: $(LOADX_C)
477	$(CC) $(CFLAGS) -c $(LOADX_C)
478
479mstime.o: $(MSTIME_C)
480	$(CC) $(CFLAGS) -c $(MSTIME_C)
481
482newer.o: $(NEWER_C)
483	$(CC) $(CFLAGS) -c $(NEWER_C)
484
485ordvst.o: $(ORDVST_C)
486	$(CC) $(CFLAGS) -c $(ORDVST_C)
487
488pair.o:	$(PAIR_C)
489	$(CC) $(CFLAGS) -c $(PAIR_C)
490
491pat.o:	$(PAT_C)
492	$(CC) $(CFLAGS) -c $(PAT_C)
493
494pml.o:	$(PML_C)
495	$(CC) $(CFLAGS) -c $(PML_C)
496
497popen.o: $(POPEN_C)
498	$(CC) $(CFLAGS) -c $(POPEN_C)
499
500realst.o: $(REALST_C)
501	$(CC) $(CFLAGS) -c $(REALST_C)
502
503replace.o: $(REPLACE_C)
504	$(CC) $(CFLAGS) -c $(REPLACE_C)
505
506spcint.o: $(SPCINT_C)
507	$(CC) $(CFLAGS) -c $(SPCINT_C)
508
509spreal.o: $(SPREAL_C)
510	$(CC) $(CFLAGS) -c $(SPREAL_C)
511
512stdio_obj.o: $(STDIO_OBJ_C)
513	$(CC) $(CFLAGS) -c $(STDIO_OBJ_C)
514
515str.o: $(STR_C)
516	$(CC) $(CFLAGS) -c $(STR_C)
517
518stream.o: $(STREAM_C)
519	$(CC) $(CFLAGS) -c $(STREAM_C)
520
521suspend.o: $(SUSPEND_C)
522	$(CC) $(CFLAGS) -c $(SUSPEND_C)
523
524term.o:	$(TERM_C)
525	$(CC) $(CFLAGS) -c $(TERM_C)
526
527top.o:	$(TOP_C)
528	$(CC) $(CFLAGS) -c $(TOP_C)
529
530tree.o:	$(TREE_C)
531	$(CC) $(CFLAGS) -c $(TREE_C)
532
533tty.o:	$(TTY_C)
534	$(CC) $(CFLAGS) -c $(TTY_C)
535
536ptyio_obj.o: $(PTYIO_OBJ_C)
537	$(CC) $(CFLAGS) -c $(PTYIO_OBJ_C)
538
539tlsio_obj.o: $(TLSIO_OBJ_C)
540	$(CC) $(CFLAGS) -c $(TLSIO_OBJ_C)
541
542#################
543# aux files -- porting aids not used in all builds;
544
545bzero.o: $(BZERO_C)
546	$(CC) $(CFLAGS) -c $(BZERO_C)
547
548bcopy.o: $(BCOPY_C)
549	$(CC) $(CFLAGS) -c $(BCOPY_C)
550
551getopt.o: $(GETOPT_C)
552	$(CC) $(CFLAGS) -c $(GETOPT_C)
553
554bindresvport.o: $(BINDRESVPORT_C)
555	$(CC) $(CFLAGS) -c $(BINDRESVPORT_C)
556
557CLOSEFROM_C=$(SRCDIR)lib/bsd/closefrom.c
558closefrom.o: $(CLOSEFROM_C)
559	$(CC) $(CFLAGS) -c $(CLOSEFROM_C)
560
561getdtablesize.o: $(GETDTABLESIZE_C)
562	$(CC) $(CFLAGS) -c $(GETDTABLESIZE_C)
563
564getline.o: $(GETLINE_C)
565	$(CC) $(CFLAGS) -c $(GETLINE_C)
566
567bufio_obj.o: $(BUFIO_OBJ_C)
568	$(CC) $(CFLAGS) -c $(BUFIO_OBJ_C)
569
570memio_obj.o: $(MEMIO_OBJ_C)
571	$(CC) $(CFLAGS) -c $(MEMIO_OBJ_C)
572
573################
574# dummy files
575
576isnan.o: $(ISNAN_C)
577	$(CC) $(CFLAGS) -c $(ISNAN_C)
578
579# for snolib/host.c
580getenv.o: $(GETENV_C)
581	$(CC) $(CFLAGS) -c $(GETENV_C)
582
583# for snolib/host.c
584system.o: $(SYSTEM_C)
585	$(CC) $(CFLAGS) -c $(SYSTEM_C)
586
587################################################################
588# Used to be snolib.a
589# "external" functions that are always built-in via pml.h
590# everything else is now built as a module!
591
592atan.o:	$(ATAN_C)
593	$(CC) $(CFLAGS) -c $(ATAN_C)
594
595chop.o: $(CHOP_C)
596	$(CC) $(CFLAGS) -c $(CHOP_C)
597
598cos.o: $(COS_C)
599	$(CC) $(CFLAGS) -c $(COS_C)
600
601delete.o: $(DELETE_C)
602	$(CC) $(CFLAGS) -c $(DELETE_C)
603
604environ.o: $(ENVIRON_C)
605	$(CC) $(CFLAGS) -c $(ENVIRON_C)
606
607execute.o: $(EXECUTE_C)
608	$(CC) $(CFLAGS) -c $(EXECUTE_C)
609
610exit.o: $(EXIT_C)
611	$(CC) $(CFLAGS) -c $(EXIT_C)
612
613exp.o: $(EXP_C)
614	$(CC) $(CFLAGS) -c $(EXP_C)
615
616file.o: $(FILE_C)
617	$(CC) $(CFLAGS) -c $(FILE_C)
618
619findunit.o: $(FINDUNIT_C)
620	$(CC) $(CFLAGS) -c $(FINDUNIT_C)
621
622fork.o: $(FORK_C)
623	$(CC) $(CFLAGS) -c $(FORK_C)
624
625getstring.o: $(GETSTRING_C)
626	$(CC) $(CFLAGS) -c $(GETSTRING_C)
627
628handle.o: $(HANDLE_C)
629	$(CC) $(CFLAGS) -c $(HANDLE_C)
630
631HOST_C_CFLAGS=-DCC=\""$(CC)"\" -DCOPT=\""$(COPT)"\" -DHAVE_BUILD_VARS \
632	-DCONFIG_CFLAGS="\"$(CONFIG_CFLAGS)\"" \
633	-DCONFIG_CPPFLAGS="\"$(CONFIG_CPPFLAGS)\"" \
634	-DCONFIG_LDFLAGS="\"$(CONFIG_LDFLAGS)\""
635
636host.o: $(HOST_C)
637	$(CC) $(CFLAGS) $(HOST_C_CFLAGS) -c $(HOST_C)
638
639log.o: $(LOG_C)
640	$(CC) $(CFLAGS) -c $(LOG_C)
641
642logic.o: $(LOGIC_C)
643	$(CC) $(CFLAGS) -c $(LOGIC_C)
644
645ndbm.o: $(NDBM_C)
646	$(CC) $(CFLAGS) -c $(NDBM_C)
647
648ord.o: $(ORD_C)
649	$(CC) $(CFLAGS) -c $(ORD_C)
650
651pty.o:	$(PTY_C)
652	$(CC) $(CFLAGS) -c $(PTY_C)
653
654random.o: $(RANDOM_C)
655	$(CC) $(CFLAGS) -c $(RANDOM_C)
656
657readline.o: $(READLINE_C)
658	$(CC) $(CFLAGS) -c $(READLINE_C)
659
660rename.o: $(RENAME_C)
661	$(CC) $(CFLAGS) -c $(RENAME_C)
662
663retstring.o: $(RETSTRING_C)
664	$(CC) $(CFLAGS) -c $(RETSTRING_C)
665
666serv.o: $(SERV_C)
667	$(CC) $(CFLAGS) -c $(SERV_C)
668
669sin.o: $(SIN_C)
670	$(CC) $(CFLAGS) -c $(SIN_C)
671
672sprintf.o: $(SPRINTF_C)
673	$(CC) $(CFLAGS) -c $(SPRINTF_C)
674
675sqrt.o: $(SQRT_C)
676	$(CC) $(CFLAGS) -c $(SQRT_C)
677
678sset.o: $(SSET_C)
679	$(CC) $(CFLAGS) -c $(SSET_C)
680
681stcl.o: $(STCL_C)
682	$(CC) $(CFLAGS) -c $(STCL_C)
683
684sys.o:	$(SYS_C)
685	$(CC) $(CFLAGS) -c $(SYS_C)
686
687tan.o:	$(TAN_C)
688	$(CC) $(CFLAGS) -c $(TAN_C)
689
690time.o:	$(TIME_C)
691	$(CC) $(CFLAGS) -c $(TIME_C)
692
693com.o:	$(COM_CPP)
694	$(CC) $(CFLAGS) -c $(COM_CPP)
695
696################
697# GENERATED_DOCS:
698
699SNOPEA=./snobol4 -N -Isnolib -I. snopea.in
700
701GENERATED_DOCS=snopea.1 snopea.1.html
702
703snopea.1: snopea snolib/snopea.sno snobol4
704	$(SNOPEA) snopea snopea.1
705
706snopea.1.html: snopea snolib/snopea.sno snobol4
707	$(SNOPEA) snopea snopea.1.html
708
709docs:	snobol4 $(GENERATED_DOCS) always
710	cd doc; $(MAKE) all
711
712always:
713
714#################
715# installation
716
717# install .h files for dynamicly loaded functions
718INSTALL_H=[include]/h.h [include]/snotypes.h [include]/macros.h \
719	[include]/load.h [include]/dt.h [include]/str.h [include]/handle.h \
720	[include]/module.h config.h equ.h version.h
721
722# generated SNOLIB files (host.sno generated at top level)
723GENSNOLIB=host.sno config.sno
724
725SNOLIB_FILES=snolib/*.sno $(GENSNOLIB)
726
727install: snobol4 timing.out install_notiming
728
729define([INSTALL_MAN_PAGES],[(]cd $1; \
730	    $(INSTALL) -d [$(MAN]$2[DIR)]; \
731	    for F in *.$2; do \
732		$(INSTALL) -m 644 $$F [$(MAN]$2[DIR)]; \
733ifdef([COMPRESS_MAN_PAGES],[dnl
734		$(MAN_COMPRESS) [$(MAN]$2[DIR)/$$F]; \
735],)dnl
736[	    done)])dnl
737
738install_notiming: build_all
739	$(INSTALL) -d $(BINDIR)
740	$(INSTALL) $(INSTALL_BIN_FLAGS) snobol4 $(BINDIR)/snobol4-$(VERS)
741	$(INSTALL) sdb $(BINDIR)/sdb-$(VERS)
742	$(INSTALL) snopea $(BINDIR)/snopea-$(VERS)
743	rm -f $(BINDIR)/snobol4 $(BINDIR)/sdb $(BINDIR)/snopea
744	cd $(BINDIR) && ln -s snobol4-$(VERS) snobol4
745	cd $(BINDIR) && ln -s sdb-$(VERS) sdb
746	cd $(BINDIR) && ln -s snopea-$(VERS) snopea
747	$(INSTALL) -d $(MAN1DIR)
748	INSTALL_MAN_PAGES(.,1)
749	INSTALL_MAN_PAGES(doc,1)
750	INSTALL_MAN_PAGES(doc,3)
751	INSTALL_MAN_PAGES(doc,7)
752	$(INSTALL) -d $(SNOLIB)
753	$(INSTALL) -d $(SNOLIB_DOC)
754	$(INSTALL) -m 644 README $(SNOLIB_DOC)
755	$(INSTALL) -m 644 CHANGES $(SNOLIB_DOC)
756	$(INSTALL) -d $(SNOLIB)/local
757	$(INSTALL) -d $(SNOLIB_LIB)
758	$(INSTALL) -d $(SNOLIB_LIB)/shared
759	$(INSTALL) -d $(SNOLIB_LOCAL)
760	$(INSTALL) -d $(SNOLIB_LOCAL)/shared
761	rm -f $(SNOLIB_LIB)/dynload
762	rm -f $(MAN3DIR)/snobol4tcl.3 $(MAN3DIR)/snobol4dbm.3
763	for F in $(SNOLIB_FILES); do \
764		$(INSTALL) -m 644 $$F $(SNOLIB_LIB); \
765	done
766	$(MAKE) -f Makefile2 install_modules
767	$(INSTALL) -d $(INCLUDE_DIR)
768	for F in $(INSTALL_H); do \
769		$(INSTALL) -m 644 $$F $(INCLUDE_DIR); \
770	done
771ifdef([INSTALL_DOCS],[dnl
772	$(INSTALL) -d $(DOC_DIR)
773	for F in doc/*.html modules/*/*.html; do \
774		$(INSTALL) -m 644 $$F $(DOC_DIR); \
775	done
776],)dnl
777ifdef([INSTALL_SYSDEP],[	]INSTALL_SYSDEP
778,)dnl
779	@echo '*********************************************************' 1>&2
780	@echo 'Have you mailed a copy of timing.out to timing@snobol4.org ?' 1>&2
781	@echo '*********************************************************' 1>&2
782
783printenv:
784	env
785
786################
787MAKEFILE2=Makefile2
788
789# was MYCPPFLAGS, changed to pick up -DSHARED
790DEPENDFLAGS=$(CFLAGS)
791
792depend:
793	sed '/^# DO NOT DELETE THIS LINE/q' $(MAKEFILE2) > $(MAKEFILE2).tmp
794	$(CCM) $(DEPENDFLAGS) $(SRCS) >> $(MAKEFILE2).tmp
795	mv -f $(MAKEFILE2).tmp $(MAKEFILE2)
796