1# Copyright (c) 2015-2016, 2018, 2020 Paul Mattes.
2# All rights reserved.
3#
4# Redistribution and use in source and binary forms, with or without
5# modification, are permitted provided that the following conditions
6# are met:
7#     * Redistributions of source code must retain the above copyright
8#       notice, this list of conditions and the following disclaimer.
9#     * Redistributions in binary form must reproduce the above copyright
10#       notice, this list of conditions and the following disclaimer in the
11#       documentation and/or other materials provided with the distribution.
12#     * Neither the name of Paul Mattes nor his contributors may be used
13#       to endorse or promote products derived from this software without
14#       specific prior written permission.
15#
16# THIS SOFTWARE IS PROVIDED BY PAUL MATTES "AS IS" AND ANY EXPRESS OR
17# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
19# NO EVENT SHALL PAUL MATTES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27# Top-level Makefile for suite3270.
28
29all: @T_ALL@
30
31# Cleverness for 'make targets':
32#  MIXED is true if there is at least one Unix target and at least one Windows
33#   target
34#  M1 is true if there is more than one target
35MIXED := $(shell (echo @T_ALL@ | grep -q '\<[^w]') && (echo @T_ALL@ | grep -q '\<[w]') && echo true)
36M1 := $(shell test `echo @T_ALL@ | wc -w` -gt 1 && echo true)
37
38# List targets
39targets:
40	@echo "Targets:"
41	@echo " all                 @T_ALL@"
42ifdef MIXED
43	@echo "  unix                build all Unix programs"
44	@echo "  windows             build all Windows programs"
45endif
46	@echo "  lib                 build all libraries"
47ifdef MIXED
48	@echo "  unix-lib            build all Unix libraries"
49	@echo "  windows-lib         build all Windows libraries"
50endif
51ifdef M1
52	@echo "  <program>           build <program>"
53endif
54	@echo " install              install programs"
55	@echo " install.man          install man pages"
56	@echo " clean                remove all intermediate files"
57ifdef MIXED
58	@echo "  unix-clean          remove Unix intermediate files"
59	@echo "  windows-clean       remove Windows intermediate files"
60endif
61	@echo "  lib-clean           remove library intermediate files"
62ifdef MIXED
63	@echo "  unix-lib-clean      remove Unix library intermediate files"
64	@echo "  windows-lib-clean   remove Windows library intermediate files"
65endif
66ifdef M1
67	@echo "  <program>-clean     remove <program> intermediate files"
68endif
69	@echo " clobber              remove all derived files"
70ifdef MIXED
71	@echo "  unix-clobber        remove Unix derived files"
72	@echo "  windows-clobber     remove Windows derived files"
73endif
74	@echo "  lib-clobber         remove library derived files"
75ifdef MIXED
76	@echo "  unix-lib-clobber    remove Unix library derived files"
77	@echo "  windows-lib-clobber remove Windows library derived files"
78endif
79ifdef M1
80	@echo "  <program>-clobber   remove <program> derived files"
81endif
82
83# Library ependencies.
84c3270 s3270 b3270 tcl3270 x3270 pr3287: unix-lib
85wc3270 ws3270 wb3270 wpr3287: windows-lib
86
87# x3270if dependencies.
88c3270 s3270 b3270 tcl3270 x3270: x3270if
89wc3270 ws3270 wb3270: wx3270if
90
91.PHONY: x3270if
92
93# s3270 dependencies.
94tcl3270: s3270
95
96.PHONY: s3270
97
98# Individual targets.
99unix-lib: lib3270 lib3270i lib32xx lib3270stubs
100windows-lib: libw3270 libw3270i libw32xx libw3270stubs libexpat
101lib: @T_LIB@
102lib3270:
103	cd lib/3270 && $(MAKE)
104lib3270i:
105	cd lib/3270i && $(MAKE)
106lib32xx:
107	cd lib/32xx && $(MAKE)
108lib3270stubs:
109	cd lib/3270stubs && $(MAKE)
110libw3270: libw3270-32 libw3270-64
111libw3270-32:
112	cd lib/w3270 && $(MAKE)
113libw3270-64:
114	cd lib/w3270 && $(MAKE) WIN64=1
115libw3270i: libw3270i-32 libw3270i-64
116libw3270i-32:
117	cd lib/w3270i && $(MAKE)
118libw3270i-64:
119	cd lib/w3270i && $(MAKE) WIN64=1
120libw32xx: libw32xx-32 libw32xx-64
121libw32xx-32:
122	cd lib/w32xx && $(MAKE)
123libw32xx-64:
124	cd lib/w32xx && $(MAKE) WIN64=1
125libw3270stubs: libw3270stubs-32 libw3270stubs-64
126libw3270stubs-32:
127	cd lib/w3270stubs && $(MAKE)
128libw3270stubs-64:
129	cd lib/w3270stubs && $(MAKE) WIN64=1
130libexpat: libexpat-32 libexpat-64
131libexpat-32:
132	cd lib/libexpat && $(MAKE)
133libexpat-64:
134	cd lib/libexpat && $(MAKE) WIN64=1
135c3270: lib3270 lib3270i lib32xx
136	cd c3270 && $(MAKE)
137s3270: lib3270 lib32xx
138	cd s3270 && $(MAKE)
139b3270: lib3270 lib32xx
140	cd b3270 && $(MAKE)
141tcl3270: lib3270 lib32xx
142	cd tcl3270 && $(MAKE)
143x3270: lib3270 lib3270i lib32xx
144	cd x3270 && $(MAKE)
145pr3287: lib32xx
146	cd pr3287 && $(MAKE)
147x3270if:
148	cd x3270if && $(MAKE)
149wc3270: wc3270-32 wc3270-64
150wc3270-32: libw3270-32 libw3270i-32 libw32xx-32
151	cd wc3270 && $(MAKE)
152wc3270-64: libw3270-64 libw3270i-64 libw32xx-64
153	cd wc3270 && $(MAKE) WIN64=1
154ws3270: ws3270-32 ws3270-64
155ws3270-32: libw3270-32 libw32xx-32
156	cd ws3270 && $(MAKE)
157ws3270-64: libw3270-64 libw32xx-64
158	cd ws3270 && $(MAKE) WIN64=1
159wb3270: wb3270-32 wb3270-64
160wb3270-32: libw3270-32 libw32xx-32
161	cd wb3270 && $(MAKE)
162wb3270-64: libw3270-64 libw32xx-64
163	cd wb3270 && $(MAKE) WIN64=1
164wpr3287: wpr3287-32 wpr3287-64
165wpr3287-32: libw32xx-32
166	cd wpr3287 && $(MAKE)
167wpr3287-64: libw32xx-64
168	cd wpr3287 && $(MAKE) WIN64=1
169wx3270if: wx3270if-32 wx3270if-64
170wx3270if-32:
171	cd wx3270if && $(MAKE)
172wx3270if-64:
173	cd wx3270if && $(MAKE) WIN64=1
174
175FORCE:
176
177unix: c3270 s3270 b3270 tcl3270 x3270 pr3287 x3270if
178windows: wc3270 ws3270 wb3270 wpr3287 wx3270if
179
180# Installation
181install unix-install: @T_INSTALL@
182x3270-install: x3270
183	cd x3270 && $(MAKE) install
184c3270-install: c3270
185	cd c3270 && $(MAKE) install
186s3270-install: s3270
187	cd s3270 && $(MAKE) install
188b3270-install: b3270
189	cd b3270 && $(MAKE) install
190tcl3270-install: tcl3270
191	cd tcl3270 && $(MAKE) install
192pr3287-install: pr3287
193	cd pr3287 && $(MAKE) install
194x3270if-install: x3270if
195	cd x3270if && $(MAKE) install
196
197# Manual page install
198install.man unix-install.man: @T_INSTALL_MAN@
199x3270-install.man: x3270
200	cd x3270 && $(MAKE) install.man
201c3270-install.man: c3270
202	cd c3270 && $(MAKE) install.man
203s3270-install.man: s3270
204	cd s3270 && $(MAKE) install.man
205b3270-install.man: b3270
206	cd b3270 && $(MAKE) install.man
207tcl3270-install.man: tcl3270
208	cd tcl3270 && $(MAKE) install.man
209pr3287-install.man: pr3287
210	cd pr3287 && $(MAKE) install.man
211x3270if-install.man: x3270if
212	cd x3270if && $(MAKE) install.man
213
214# Clean and clobber targets
215clean: @T_CLEAN@
216unix-lib-clean: lib3270-clean lib3270i-clean lib32xx-clean lib3270stubs-clean
217windows-lib-clean: libw3270-clean libw3270i-clean libw32xx-clean libw3270stubs-clean libexpat-clean
218lib-clean: @T_LIB_CLEAN@
219unix-clean: @T_UNIX_CLEAN@
220windows-clean: @T_WINDOWS_CLEAN@
221lib3270-clean:
222	cd lib/3270 && $(MAKE) clean
223lib3270i-clean:
224	cd lib/3270i && $(MAKE) clean
225lib32xx-clean:
226	cd lib/32xx && $(MAKE) clean
227lib3270stubs-clean:
228	cd lib/3270stubs && $(MAKE) clean
229libw3270-clean: libw3270-clean-32 libw3270-clean-64
230libw3270-clean-32:
231	cd lib/w3270 && $(MAKE) clean
232libw3270-clean-64:
233	cd lib/w3270 && $(MAKE) clean WIN64=1
234libw3270i-clean: libw3270i-clean-32 libw3270i-clean-64
235libw3270i-clean-32:
236	cd lib/w3270i && $(MAKE) clean
237libw3270i-clean-64:
238	cd lib/w3270i && $(MAKE) clean WIN64=1
239libw32xx-clean: libw32xx-clean-32 libw32xx-clean-64
240libw32xx-clean-32:
241	cd lib/w32xx && $(MAKE) clean
242libw32xx-clean-64:
243	cd lib/w32xx && $(MAKE) clean WIN64=1
244libw3270stubs-clean: libw3270stubs-clean-32 libw3270stubs-clean-64
245libw3270stubs-clean-32:
246	cd lib/w3270stubs && $(MAKE) clean
247libw3270stubs-clean-64:
248	cd lib/w3270stubs && $(MAKE) clean WIN64=1
249libexpat-clean: libexpat-clean-32 libexpat-clean-64
250libexpat-clean-32:
251	cd lib/libexpat && $(MAKE) clean
252libexpat-clean-64:
253	cd lib/libexpat && $(MAKE) clean WIN64=1
254x3270-clean:
255	cd x3270 && $(MAKE) clean
256c3270-clean:
257	cd c3270 && $(MAKE) clean
258s3270-clean:
259	cd s3270 && $(MAKE) clean
260b3270-clean:
261	cd b3270 && $(MAKE) clean
262tcl3270-clean:
263	cd tcl3270 && $(MAKE) clean
264pr3287-clean:
265	cd pr3287 && $(MAKE) clean
266x3270if-clean:
267	cd x3270if && $(MAKE) clean
268wc3270-clean: wc3270-clean-32 wc3270-clean-64
269wc3270-clean-32:
270	cd wc3270 && $(MAKE) clean
271wc3270-clean-64:
272	cd wc3270 && $(MAKE) clean WIN64=1
273ws3270-clean: ws3270-clean-32 ws3270-clean-64
274ws3270-clean-32:
275	cd ws3270 && $(MAKE) clean
276ws3270-clean-64:
277	cd ws3270 && $(MAKE) clean WIN64=1
278wb3270-clean: wb3270-clean-32 wb3270-clean-64
279wb3270-clean-32:
280	cd wb3270 && $(MAKE) clean
281wb3270-clean-64:
282	cd wb3270 && $(MAKE) clean WIN64=1
283wx3270if-clean: wx3270if-clean-32 wx3270if-clean-64
284wx3270if-clean-32:
285	cd wx3270if && $(MAKE) clean
286wx3270if-clean-64:
287	cd wx3270if && $(MAKE) clean WIN64=1
288
289clobber: @T_CLOBBER@
290unix-lib-clobber: lib3270-clobber lib3270i-clobber lib32xx-clobber lib3270stubs-clobber
291windows-lib-clobber: libw3270-clobber libw3270i-clobber libw32xx-clobber libw3270stubs-clobber libexpat-clobber
292lib-clobber: @T_LIB_CLOBBER@
293unix-clobber: @T_UNIX_CLOBBER@
294windows-clobber: @T_WINDOWS_CLOBBER@
295lib3270-clobber:
296	cd lib/3270 && $(MAKE) clobber
297lib3270i-clobber:
298	cd lib/3270i && $(MAKE) clobber
299lib32xx-clobber:
300	cd lib/32xx && $(MAKE) clobber
301lib3270stubs-clobber:
302	cd lib/3270stubs && $(MAKE) clobber
303libw3270-clobber: libw3270-clobber-32 libw3270-clobber-64
304libw3270-clobber-32:
305	cd lib/w3270 && $(MAKE) clobber
306libw3270-clobber-64:
307	cd lib/w3270 && $(MAKE) clobber WIN64=1
308libw3270i-clobber: libw3270i-clobber-32 libw3270i-clobber-64
309libw3270i-clobber-32:
310	cd lib/w3270i && $(MAKE) clobber
311libw3270i-clobber-64:
312	cd lib/w3270i && $(MAKE) clobber WIN64=1
313libw32xx-clobber: libw32xx-clobber-32 libw32xx-clobber-64
314libw32xx-clobber-32:
315	cd lib/w32xx && $(MAKE) clobber
316libw32xx-clobber-64:
317	cd lib/w32xx && $(MAKE) clobber WIN64=1
318libw3270stubs-clobber: libw3270stubs-clobber-32 libw3270stubs-clobber-64
319libw3270stubs-clobber-32:
320	cd lib/w3270stubs && $(MAKE) clobber
321libw3270stubs-clobber-64:
322	cd lib/w3270stubs && $(MAKE) clobber WIN64=1
323libexpat-clobber: libexpat-clobber-32 libexpat-clobber-64
324libexpat-clobber-32:
325	cd lib/libexpat && $(MAKE) clobber
326libexpat-clobber-64:
327	cd lib/libexpat && $(MAKE) clobber WIN64=1
328x3270-clobber:
329	cd x3270 && $(MAKE) clobber
330c3270-clobber:
331	cd c3270 && $(MAKE) clobber
332s3270-clobber:
333	cd s3270 && $(MAKE) clobber
334b3270-clobber:
335	cd b3270 && $(MAKE) clobber
336tcl3270-clobber:
337	cd tcl3270 && $(MAKE) clobber
338pr3287-clobber:
339	cd pr3287 && $(MAKE) clobber
340x3270if-clobber:
341	cd x3270if && $(MAKE) clobber
342wc3270-clobber: wc3270-clobber-32 wc3270-clobber-64
343wc3270-clobber-32:
344	cd wc3270 && $(MAKE) clobber
345wc3270-clobber-64:
346	cd wc3270 && $(MAKE) clobber WIN64=1
347ws3270-clobber: ws3270-clobber-32 ws3270-clobber-64
348ws3270-clobber-32:
349	cd ws3270 && $(MAKE) clobber
350ws3270-clobber-64:
351	cd ws3270 && $(MAKE) clobber WIN64=1
352wb3270-clobber: wb3270-clobber-32 wb3270-clobber-64
353wb3270-clobber-32:
354	cd wb3270 && $(MAKE) clobber
355wb3270-clobber-64:
356	cd wb3270 && $(MAKE) clobber WIN64=1
357wpr3287-clobber: wpr3287-clobber-32 wpr3287-clobber-64
358wpr3287-clobber-32:
359	cd wpr3287 && $(MAKE) clobber
360wpr3287-clobber-64:
361	cd wpr3287 && $(MAKE) clobber WIN64=1
362wx3270if-clobber: wx3270if-clobber-32 wx3270if-clobber-64
363wx3270if-clobber-32:
364	cd wx3270if && $(MAKE) clobber
365wx3270if-clobber-64:
366	cd wx3270if && $(MAKE) clobber WIN64=1
367