1# ast nmake 2d viewpath and makepath tests
2
3INCLUDE cc.def
4
5TEST 01 'no view'
6
7	EXEC
8		INPUT Makefile $'all : .MAKE
9	print $(*.VIEW)
10	print $(...:N=\\(*\\)$(MAKEFILE)*:H)
11	print $(...:N=$(MAKEFILE)*:H)'
12		OUTPUT - $'.\n\nMakefile Makefile.mo'
13
14	EXEC
15		OUTPUT - $'.\n()Makefile\nMakefile Makefile.mo Makefile.ms'
16
17TEST 02 'basic MAKEPATH'
18
19	EXPORT MAKEPATH=../bot
20
21	CD top
22
23	EXEC	-n
24		INPUT ../bot/Makefile $'main :: main.c'
25		INPUT ../bot/main.c $'#include "hdr.h"
26int main(){return 0;}'
27		INPUT ../bot/hdr.h $'extern int n;'
28		OUTPUT - $'+ cc -O -I../bot  -c ../bot/main.c
29+ cc  -O   -o main main.o'
30
31TEST 03 'basic VPATH'
32
33	EXPORT VPATH=$TWD/top:$TWD/bot
34
35	CD	top/src
36
37	EXEC	-n
38		INPUT $TWD/bot/src/Makefile $'main :: main.c'
39		INPUT $TWD/bot/src/main.c $'#include "hdr.h"
40int main(){return 0;}'
41		INPUT $TWD/bot/src/hdr.h $'extern int n;'
42		OUTPUT - $'+ cc -O -I'$TWD$'/bot/src  -c '$TWD$'/bot/src/main.c
43+ cc  -O   -o main main.o'
44
45TEST 04 'VPATH vs -I-'
46
47	EXPORT VPATH=$TWD/dev:$TWD/ofc
48
49	CD	dev
50
51	EXEC	-n -s -g debug.mk s.i CC.DIALECT='-I-'
52		INPUT $TWD/ofc/Makefile $'.INIT : .ppinit
53.ppinit : .MAKE .VIRTUAL .FORCE
54	CC = $(MAKEPP) -I-D'$TWD$'/pp.probe
55s :: s.c'
56		INPUT $TWD/ofc/s.c $'#include "h1.h"'
57		INPUT $TWD/ofc/h1.h $'#include "h2.h"
58int ofc_h1;'
59		INPUT $TWD/ofc/h2.h $'int ofc_h2;'
60		OUTPUT s.i $'# 1 "'$TWD$'/ofc/s.c"
61
62# 1 "'$TWD$'/ofc/h1.h" 1
63
64# 1 "'$TWD$'/ofc/h2.h" 1
65int ofc_h2;
66# 2 "'$TWD$'/ofc/h1.h" 2
67int ofc_h1;
68# 2 "'$TWD$'/ofc/s.c" 2'
69
70	EXEC	-n -s -g debug.mk s.i CC.DIALECT='-I-'
71		INPUT $TWD/dev/h2.h $'int dev_h2;'
72		OUTPUT s.i $'# 1 "'$TWD$'/ofc/s.c"
73
74# 1 "'$TWD$'/ofc/h1.h" 1
75
76# 1 "h2.h" 1
77int dev_h2;
78# 2 "'$TWD$'/ofc/h1.h" 2
79int ofc_h1;
80# 2 "'$TWD$'/ofc/s.c" 2'
81
82TEST 05 ':MAKE: with one node VPATH'
83
84	EXPORT VPATH=$TWD
85
86	EXEC	-n
87		INPUT Makefile $':MAKE:'
88		INPUT lmf/Makefile $':MAKE:'
89		INPUT lmf/src/Makefile $':MAKE:'
90		INPUT lmf/src/api/Makefile $':MAKE:'
91		INPUT lmf/src/api/mmomc/Makefile $':MAKE:'
92		INPUT lmf/src/api/mmomc/tools/Makefile $':MAKE:'
93		INPUT lmf/src/api/mmomc/tools/src/Makefile $':MAKE:'
94		INPUT lmf/src/api/mmomc/tools/src/item/Makefile $':MAKE:'
95		INPUT lmf/src/api/mmomc/tools/src/item/libsrc/Makefile $':MAKE:'
96		INPUT lmf/src/api/mmomc/tools/src/item/libsrc/item/Makefile $'
97NODE1		= $(VPATH:/:/ /G:O=1)
98MMOMCTOP1	= $(PWD:P=R=$(NODE1))
99MMOMCTOP	= $(MMOMCTOP1)/lmf/src/api/mmomc
100ARCH_MAKEFILE	= Item.arch.mk
101include $(MMOMCTOP)/include/nmake/desc.mk
102all :
103	: NODE1 : $(NODE1) :
104	: MMOMCTOP1 : $(MMOMCTOP1) :
105	: MMOMCTOP : $(MMOMCTOP) :
106	: ARCH_MAKEFILE : $(ARCH_MAKEFILE) :
107	: $(MMOMCTOP)/include/nmake/desc.mk :'
108		INPUT lmf/src/api/mmomc/include/nmake/desc.mk $'error 1 hit desc.mk'
109		OUTPUT - $'+ : NODE1 : '$TWD$' :
110+ : MMOMCTOP1 : ../../../../../../../../.. :
111+ : MMOMCTOP : ../../../../../../../../../lmf/src/api/mmomc :
112+ : ARCH_MAKEFILE : Item.arch.mk :
113+ : ../../../../../../../../../lmf/src/api/mmomc/include/nmake/desc.mk :'
114		ERROR - $'lmf/src/api/mmomc/tools/src/item/libsrc/item:
115make [lmf/src/api/mmomc/tools/src/item/libsrc/item]: warning: hit desc.mk
116lmf/src/api/mmomc/tools/src/item/libsrc:
117lmf/src/api/mmomc/tools/src/item:
118lmf/src/api/mmomc/tools/src:
119lmf/src/api/mmomc/tools:
120lmf/src/api/mmomc:
121lmf/src/api:
122lmf/src:
123lmf:'
124
125TEST 06 'VROOT'
126
127	EXPORT VPATH=$TWD/ofc/proj
128
129	CD ofc/proj
130
131	EXEC	-n
132		INPUT $TWD/ofc/proj/Makefile $'all :
133	: $(PWD) : $(VROOT) :'
134		OUTPUT - $'+ : '$TWD$'/ofc/proj : . :'
135
136	CD src
137
138	EXEC	-n
139		INPUT $TWD/ofc/proj/src/Makefile $'all :
140	: $(PWD) : $(VROOT) :'
141		OUTPUT - $'+ : '$TWD$'/ofc/proj/src : .. :'
142
143	CD util
144
145	EXEC	-n
146		INPUT $TWD/ofc/proj/src/util/Makefile $'all :
147	: $(PWD) : $(VROOT) :'
148		OUTPUT - $'+ : '$TWD$'/ofc/proj/src/util : ../.. :'
149
150	EXPORT VPATH=$TWD/dev/proj:$TWD/ofc/proj
151
152	CD $TWD/dev/proj
153
154	EXEC	-n
155		OUTPUT - $'+ : '$TWD$'/dev/proj : . :'
156
157	CD src
158
159	EXEC	-n
160		OUTPUT - $'+ : '$TWD$'/dev/proj/src : .. :'
161
162	CD util
163
164	EXEC	-n
165		OUTPUT - $'+ : '$TWD$'/dev/proj/src/util : ../.. :'
166
167TEST 07 ':MAKE: with 2 node VPATH'
168
169	EXPORT	VPATH=$TWD/top:$TWD/bot
170
171	CD top
172
173	EXEC	-n
174		INPUT $TWD/top/Makefile $':MAKE:'
175		INPUT $TWD/top/a/Makefile $'all : a.x\n\t: $(PWD) : $(*)'
176		INPUT $TWD/bot/a/a.x
177		INPUT $TWD/bot/b/Makefile $'all : b.x\n\t: $(PWD) : $(*)'
178		INPUT $TWD/top/b/b.x
179		OUTPUT - $'+ : '$TWD$'/top/a : '$TWD$'/bot/a/a.x
180+ : '$TWD$'/top/b : b.x'
181		ERROR - $'a:\nb:'
182
183TEST 08 ':INSTALLDIR: with 2 node VPATH'
184
185	EXPORT	VPATH=$TWD/dev:$TWD/ofc
186
187	CD	ofc
188
189	EXEC	install
190		INPUT Makefile $'INSTALLROOT = .
191.SOURCE : src
192$(ETCDIR) :INSTALLDIR: a.c b.c c.c'
193		INPUT src/a.c $'ofc'
194		INPUT src/b.c
195		INPUT src/c.c
196		ERROR - $'+ mkdir -p etc
197+ ignore cp src/a.c etc/a.c
198+ ignore cp src/b.c etc/b.c
199+ ignore cp src/c.c etc/c.c'
200
201	CD	../dev
202
203	EXEC	--regress=sync install
204		ERROR - $'+ mkdir -p etc'
205
206	EXEC	install
207		INPUT src/a.c $'dev'
208		ERROR - $'+ ignore cp src/a.c etc/a.c'
209
210TEST 09 '3 node contained VPATH with .SOURCE dups'
211
212	EXPORT	VPATH=$TWD:$TWD/inca:$TWD/incb
213
214	EXEC	-n
215		INPUT Makefile $'t :: t.c'
216		INPUT t.c $'#include "a.h"
217#include "b.h"
218int main() { return 0; }'
219		INPUT inca/a.h $'#define a 1'
220		INPUT incb/b.h $'#define b 1'
221		OUTPUT - $'+ cc -O -I'$TWD$'/inca -I'$TWD$'/incb  -c t.c
222+ cc  -O   -o t t.o'
223
224	EXEC	-n
225		INPUT Makefile $'.SOURCE.h : inca incb\nt :: t.c'
226
227TEST 10 'VROOT after VPATH change'
228
229	EXPORT	VPATH=$TWD/n1
230
231	CD	n1/a
232
233	EXEC
234		INPUT $TWD/n1/Localrules.mk $'LOCAL = local'
235		INPUT Makefile $'include "$(VROOT)/Localrules.mk"
236all :
237	: LOCAL : $(LOCAL) :
238	: VROOT : $(VROOT) :
239	: VOFFSET : $(VOFFSET) :'
240		ERROR - $'+ : LOCAL : local :
241+ : VROOT : .. :
242+ : VOFFSET : a :'
243
244	EXPORT	VPATH=$TWD/n2:$TWD/n1
245
246	CD	../../n2/a
247
248	EXEC
249
250TEST 11 'VROOT/VOFFSET across levels and nodes'
251
252	EXPORT	VPATH=$TWD/ofc
253
254	CD	ofc/proj
255
256	EXEC
257		INPUT $TWD/ofc/proj/Makefile $'all :
258	: VROOT : $(VROOT) :
259	: VOFFSET : $(VOFFSET) :'
260		INPUT $TWD/ofc/proj/src/Makefile $'all :
261	: VROOT : $(VROOT) :
262	: VOFFSET : $(VOFFSET) :'
263		INPUT $TWD/ofc/proj/src/util/Makefile $'all :
264	: VROOT : $(VROOT) :
265	: VOFFSET : $(VOFFSET) :'
266		ERROR - $'+ : VROOT : .. :\n+ : VOFFSET : proj :'
267
268	CD	src
269
270	EXEC
271		ERROR - $'+ : VROOT : ../.. :\n+ : VOFFSET : proj/src :'
272
273	CD	util
274
275	EXEC
276		ERROR - $'+ : VROOT : ../../.. :\n+ : VOFFSET : proj/src/util :'
277
278	EXPORT	VPATH=$TWD/dev:$TWD/ofc
279
280	CD	../../../../dev/proj
281
282	EXEC
283		ERROR - $'+ : VROOT : .. :\n+ : VOFFSET : proj :'
284
285	CD	src
286
287	EXEC
288		ERROR - $'+ : VROOT : ../.. :\n+ : VOFFSET : proj/src :'
289
290	CD	util
291
292	EXEC
293		ERROR - $'+ : VROOT : ../../.. :\n+ : VOFFSET : proj/src/util :'
294
295TEST 12 'header overlay'
296
297	EXPORT	VPATH=$TWD/top:$TWD/bot
298
299	CD	bot
300
301	EXEC	--regress=sync
302		INPUT Makefile $'t :LIBRARY: t.c'
303		INPUT t.c $'#include "t.h"\nint t(){return 0;}'
304		INPUT t.h $'#define T 1'
305		ERROR - $'+ echo \'\' -lt
306+ 1> t.req
307+ cc -O -I. -c t.c
308+ ar cr libt.a t.o
309+ ignore ranlib libt.a
310+ rm -f t.o'
311
312	EXEC	--regress=sync
313		ERROR -
314
315	CD	../top
316
317	EXEC	--regress=sync
318		INPUT t.h $'#define T 2'
319		ERROR - $'+ cc -O -I. -c '$TWD$'/bot/t.c
320+ cp '$TWD$'/bot/libt.a libt.a
321+ ar cr libt.a t.o
322+ ignore ranlib libt.a
323+ rm -f t.o'
324
325	EXEC	--regress=sync
326		ERROR -
327
328	EXEC	--regress=sync clobber
329		ERROR - $'+ ignore rm -f -r libt.a Makefile.ms'
330
331	CD	../bot
332
333	EXEC	--regress=sync clobber
334		ERROR - $'+ ignore rm -f -r libt.a Makefile.mo Makefile.ms t.req'
335
336TEST 13 'joint metarule overlay'
337
338	EXPORT	VPATH=$TWD/bot
339
340	CD	bot
341
342	EXEC	target
343		INPUT Makefile $'%.c %.h : %.j
344	echo "#define PWD \\"this file is from $(PWD)\\"" > $(<:N=*.h)
345	echo "int i;" >$(<:N=*.c)
346target :: file.j main.c'
347		INPUT file.j
348		INPUT main.c $'#include "file.h"
349int main() { return PWD != 0; }'
350		ERROR - $'+ echo \'#define PWD "this file is from '$TWD$'/bot"\'
351+ 1> file.h
352+ echo \'int i;\'
353+ 1> file.c
354+ cc -O -c file.c
355+ cc -O -I. -c main.c
356+ cc -O -o target file.o main.o'
357
358	EXPORT	VPATH=$TWD/top:$TWD/bot
359
360	CD	../top
361
362	EXEC	--regress=sync target
363		ERROR -
364
365	EXEC	target
366		INPUT file.j $'TOP'
367		ERROR - $'+ echo \'#define PWD "this file is from '$TWD$'/top"\'
368+ 1> file.h
369+ echo \'int i;\'
370+ 1> file.c
371+ cc -O -c file.c
372+ cc -O -I. -c '$TWD$'/bot/main.c
373+ cc -O -o target file.o main.o'
374
375	EXEC	clobber
376		ERROR - $'+ ignore rm -f -r target main.o file.c file.h file.o Makefile.ms'
377
378	CD	../bot
379
380	EXEC	clobber
381		ERROR - $'+ ignore rm -f -r target main.o file.c file.h file.o Makefile.mo Makefile.ms'
382
383TEST 14 'view over multiple subdirs'
384
385	EXPORT	VPATH=$TWD/bot
386
387	CD	bot
388
389	EXEC	-n
390		INPUT Makefile $':MAKE: s1 s1.0 s2
391s2 :
392	cd $(<)
393	nmake $(-) $(=)
394	silent echo $(<) done'
395		INPUT s1/makefile $'s1 :\n\techo make $(<)'
396		INPUT s1.0/nmakefile $'s1.0 :\n\techo make $(<)'
397		INPUT s2/Nmakefile $'s2 :\n\techo make $(<)'
398		OUTPUT - $'+ echo make s1
399+ echo make s1.0
400+ echo make s2
401s2 done'
402		ERROR - $'s1:
403s1.0:
404+ cd s2
405+ nmake --noexec \'--regress=message\' \'--native-pp=-1\' --noprefix-include'
406
407	EXPORT	VPATH=$TWD/top:$TWD/bot
408
409	CD	../top
410
411	EXEC	-n --novirtual
412		INPUT s2/
413		OUTPUT - $'+ echo make s2
414s2 done'
415		ERROR - $'s1: warning: cannot recurse on virtual directory
416s1.0: warning: cannot recurse on virtual directory
417+ cd s2
418+ nmake --noexec \'--regress=message\' \'--native-pp=-1\' --noprefix-include --novirtual'
419
420	EXEC	-n
421		OUTPUT - $'+ echo make s1
422+ echo make s1.0
423+ echo make s2
424s2 done'
425		ERROR - $'s1:
426s1.0:
427+ cd s2
428+ nmake --noexec \'--regress=message\' \'--native-pp=-1\' --noprefix-include'
429
430	EXEC	-n --novirtual
431		ERROR - $'s1:
432s1.0:
433+ cd s2
434+ nmake --noexec \'--regress=message\' \'--native-pp=-1\' --noprefix-include --novirtual'
435
436TEST 15 '3 levels'
437
438	EXPORT	VPATH=$TWD/bot
439
440	CD	bot/esql
441
442	EXEC
443		INPUT $TWD/bot/esql/Makefile $'.SOURCE.eh : ../hdr
444
445ESQL      = print
446ESQLFLAGS =
447
448(ESQL) (ESQLFLAGS) : .PARAMETER
449
450.SOURCE.%.SCAN.esqlc : .FORCE $$(*.SOURCE.ec) $$(*.SOURCE) $$(*.SOURCE.eh) $$(*.SOURCE.h)
451
452/* refer to standard scan rule for SQL files (.SCAN.sql)--though all
453 * embedded SQL statements should conform to ANSI syntax, we allow for
454 * Informix proprietary extensions
455 */
456.SCAN.esqlc : .SCAN
457	Q|/*|*/||C|
458	Q|//||\\\\|LC|
459	Q|"|"|\\\\|LQ|
460	Q|\'|\'|\\\\|LQ|
461	Q|\\\\|||CS|
462	I| EXEC SQL include "%";|
463	I| EXEC SQL include %;|
464	I| $ include "%";|
465	I| $ include <%>;|
466	I| $ include %;|
467
468.ATTRIBUTE.%.ec : .SCAN.esqlc
469
470.sqlc.SEMAPHORE : .SEMAPHORE
471
472%.cc : %.ec .sqlc.SEMAPHORE (ESQL) (ESQLFLAGS)
473	$(CP) $(>) $(<)
474
475all : DBcreateTables.cc DBdropTables.cc'
476		INPUT $TWD/bot/esql/DBcreateTables.ec
477		INPUT $TWD/bot/esql/DBdropTables.ec
478		INPUT $TWD/bot/hdr/DBschema.eh
479		ERROR - $'+ cp DBcreateTables.ec DBcreateTables.cc
480+ cp DBdropTables.ec DBdropTables.cc'
481
482	EXPORT	VPATH=$TWD/mid:$TWD/bot
483
484	CD	../../mid/esql
485
486	EXEC
487		INPUT $TWD/mid/esql/
488		INPUT $TWD/mid/hdr/
489		ERROR -
490
491	EXPORT	VPATH=$TWD/top:$TWD/mid:$TWD/bot
492
493	CD	../../top/esql
494
495	EXEC
496		INPUT $TWD/top/esql/
497		INPUT $TWD/top/hdr/
498