1 ##################################################
3 ### Makefile for LCLint testing ###
5 ### designed for use with GNU make ###
7 ##################################################
9 .PHONY: all fulltest quicktest funcpointer cast abstract
10 .PHONY: version help abstptr abstract alias alttypes ansireserved
11 .PHONY: argorder args blocks break cases cast charlit
12 .PHONY: clauses commentchar
13 .PHONY: compdestroy controldepth csyntax czechnames czechoslovaknames
14 .PHONY: decl enum exports external fields flags funcpointer glob globals
15 .PHONY: impabstract init inparam internal iter keep libs lintcomments
16 .PHONY: list macros macrosef merge modifies modtest moduncon mongoincludes
17 .PHONY: null observer oldstyle outglob outparam preds prefixes printflike rc
18 .PHONY: refcounts release repexpose sharing slovaknames special
19 .PHONY: specclauses stack staticarray
20 .PHONY: strings structassign
21 .PHONY: typequals ud ulstypes union unreachable unused
22 .PHONY: db1 db2 db3 tests2.2 tests2.2a tests2.4 tests2.5
23 .PHONY: all test fulltest expects quicktest
24 .PHONY: nullterminatedtest
26 .SUFFIXES: .out .expect .c .lcl .h .lh .diff
30 # Command to run lclint
31 LCLINT = ${HOME}/lclint-dev/src/lclint
34 # Make sure .lclintrc files are not used so test results do not
35 # depend on local settings.
36 LCLINTRN = $(LCLINTP) -nof -hints -booltype "bool"
37 LCLINTR = $(LCLINTRN) -exportlocal
39 UNITTESTS = help abstptr abstract alias alttypes ansireserved argorder args blocks break cases cast charlit clauses commentchar compdestroy controldepth csyntax czechnames czechoslovaknames decl enum exports external fields flags funcpointer glob globals impabstract init inparam internal iter keep libs lintcomments list macros macrosef merge modifies modtest moduncon mongoincludes null nullterminatedtest observer oldstyle outglob outparam preds prefixes printflike rc refcounts release repexpose sharing slovaknames specclauses special stack staticarray strings structassign typequals ud ulstypes union unreachable unused tests2.2 tests2.2a tests2.4 tests2.5
41 UNITEXPECTS = $(addsuffix .expect, $(UNITTESTS))
43 INTEGTESTS = db1 db2 db3
44 INTEGEXPECTS = $(addsuffix .expect, $(INTEGTESTS))
46 LCLINTTESTS = $(UNITTESTS) $(INTEGTESTS)
53 CLEANOUTPUT = $(GREP) -v "LCLint 2." | $(GREP) -v "make -e" | $(GREP) -v "make\[" | $(GREP) -v "lclint -nof" | $(GREP) -v "make -e"
58 $(MAKE) -e $(*) |& $(CLEANOUTPUT) > $(*).expect ; \
62 $(MAKE) -e $(*) |& $(CLEANOUTPUT) > $(*).out ; \
63 diff $(*).expect $(*).out
66 echo "Saving old expects: " ; \
67 more *.expect | cat > expects-`date +"%y-%m-%d-%H"`
68 @$(foreach test, $(UNITTESTS), \
69 echo "Making "$(test)".expect: " ; \
70 $(MAKE) -e $(test) |& $(CLEANOUTPUT) > $(test).expect ; \
71 cat $(test).expect ; )
72 @echo "Integration Tests"
73 @$(foreach test, $(INTEGTESTS), \
74 echo "Making "$(test)".expect: "; \
75 $(MAKE) -e $(test) |& $(CLEANOUTPUT) > $(test).expect ; \
76 cat $(test).expect ; )
80 @echo 'Testing '$(LCLINTP)
84 @$(LCLINTP) -help version
85 @$(LCLINTP) -help vars
89 @$(foreach test, $(UNITTESTS), \
90 echo "Checking "$(test)"... " ; \
91 $(MAKE) -e $(test) |& $(CLEANOUTPUT) > $(test).out ; \
92 $(DIFF) $(test).expect $(test).out ; \
93 if ($$status) echo "*** FAIL ***" ; \
96 @echo "Integration Tests"
98 @$(foreach test, $(INTEGTESTS), \
99 echo "Checking "$(test)"... "; \
100 $(MAKE) -e $(test) |& $(CLEANOUTPUT) > $(test).out ; \
101 $(DIFF) $(test).expect $(test).out ; )
103 quicktest: $(LCLINTTESTS)
110 -$(LCLINTP) -help version
114 -@setenv LARCH_PATH "/dev/null"; $(LCLINTP) empty.lcl
117 -@$(LCLINTP) +boolint +boolint
118 -@$(LCLINTP) -help flags alpha
119 -@$(LCLINTP) -help flags all
122 $(LCLINTR) abstptr -expect 9
123 $(LCLINTR) abstptr +voidabstract -expect 6
126 $(LCLINTR) abst_t.lcl commentcmd.c -expect 15
130 $(LCLINTR) mut alias +globalias -expect 19
131 $(LCLINTR) mut alias2 +globalias -expect 17
132 $(LCLINTR) +lh alias3 -expect 14
133 $(LCLINTR) +lh alias4 +boolint
134 $(LCLINTR) alias4 -pred +retalias -expect 6
135 $(LCLINTR) +lh alias5 +memchecks -null -specundef -expect 5
138 $(LCLINTR) alttypes.c -expect 2
141 $(LCLINTR) ansireserved.c +ansireserved -nolib -expect 8
142 $(LCLINTR) ansireserved.c +ansireserved +ansireservedlocal -nolib -expect 11
143 $(LCLINTRN) ansireserved.c +checks -exportlocal -exportheadervar -exportheader -expect 9
146 $(LCLINTR) argorder.c -expect 4
147 $(LCLINTR) argorder2 -expect 5
148 $(LCLINTR) argorder3.c -expect 8
149 $(LCLINTR) argorder4 -expect 9
150 $(LCLINTR) argorder4 -evalorder -expect 1
151 $(LCLINTR) argorder5.c +evalorderuncon -expect 3
154 $(LCLINTR) args -noeffect -expect 12
157 $(LCLINTR) blocks.c -expect 4
158 $(LCLINTR) blocks.c +ifblock +elseifcomplete -expect 7
159 $(LCLINTR) blocks.c -ifempty +whileempty +whileblock -expect 3
160 $(LCLINTR) blocks.c -ifempty +forempty +forblock -expect 3
161 $(LCLINTR) blocks.c +allempty -expect 6
162 $(LCLINTRN) blocks.c +strict -exportlocal +partial -exportheader -expect 11
165 $(LCLINTR) break.c -expect 4
166 $(LCLINTR) break.c +deepbreak -expect 6
167 $(LCLINTR) break.c +deepbreak -looploopbreak -expect 5
170 $(LCLINTR) cases.c -expect 5
171 $(LCLINTR) cases2.c -expect 2
172 $(LCLINTRN) cases2.c +checks -exportlocal -exportheader -expect 3
173 $(LCLINTRN) cases2.c +checks -exportlocal -exportheader -branchstate -expect 3
176 $(LCLINTR) cast -accessmodule -expect 20
177 $(LCLINTRN) cast2.c +checks -exportlocal -exportheader -expect 3
179 ### Two addition errors detected with 2.5 with -numliteral.
182 $(LCLINTR) +hints charlit.c -expect 4
183 $(LCLINTR) +hints -numliteral charlit.c -expect 6
184 $(LCLINTR) +hints charlit.c +charintliteral +ignoresigns
187 $(LCLINTR) clauses.c +memchecks -expect 4
188 $(LCLINTR) clauses2.c +memchecks
189 $(LCLINTR) clauses3.c +memchecks -expect 2
190 $(LCLINTR) clauses3.c +memchecks +unixlib -expect 3
193 $(LCLINTR) commentchar.c -expect 4
194 $(LCLINTR) -commentchar '#' commentchar.c -expect 4
197 $(LCLINTR) +hints -controlnestdepth 2 controldepth.c -expect 2
198 $(LCLINTR) +hints -controlnestdepth 1 controldepth.c -expect 2
201 $(LCLINTRN) compdestroy.c +checks -exportlocal -exportheader -expect 1
202 $(LCLINTRN) compdestroy.c +checks -exportlocal -exportheader +strictdestroy -expect 2
203 $(LCLINTRN) compdestroy.c +checks -exportlocal -exportheader +strictdestroy +strictusereleased -expect 3
204 $(LCLINTRN) compdestroy.c +strict +partial -exportheader -expect 3
207 $(LCLINTR) +quiet -incondefs csyntax.c -expect 1
208 $(LCLINTR) +quiet csyntax2.c -expect 2
209 $(LCLINTR) +quiet csyntax3.c -expect 1
210 $(LCLINTR) +quiet -incondefs csyntax4.c
211 $(LCLINTR) +quiet csyntax5.c
212 $(LCLINTR) +quiet csyntax6.c
213 $(LCLINTR) +quiet csyntax7.c
214 $(LCLINTR) +quiet csyntax8.c
215 $(LCLINTR) +quiet csyntax9.c
216 $(LCLINTR) +quiet csyntax10.c
217 $(LCLINTR) +quiet csyntax11.c
218 $(LCLINTR) +quiet csyntax12.c
219 $(LCLINTR) +quiet csyntax13.c -expect 1
220 $(LCLINTR) +quiet csyntax14.c
221 $(LCLINTR) +quiet csyntax15.c
222 $(LCLINTR) +quiet csyntax16.c -expect 2
223 $(LCLINTR) +quiet csyntax17.c -expect 3
226 $(LCLINTR) czechnames.c
227 $(LCLINTR) +hints +czech czechnames.c -expect 2
228 $(LCLINTR) +hints +czech -czechvars czechnames.c -expect 1
229 $(LCLINTR) +hints +czech -accessczech czechnames.c -expect 6
232 $(LCLINTR) +hints +czechoslovak czechnames.c -expect 1
233 $(LCLINTR) +hints +czechoslovak slovaknames.c -expect 1
234 $(LCLINTR) +hints +czechoslovak +slovakvars slovaknames.c -expect 2
237 # Was expect 3 before 2.4. Earlier versions did not handle implicit
238 # function pointers correctly.
242 $(LCLINTR) decl.c -expect 2
243 $(LCLINTRN) decl.c +strict -exportlocal -expect 5
244 $(LCLINTR) decl2 -expect 4
247 $(LCLINTR) enum -expect 16
248 $(LCLINTR) enum -misscase -expect 14
251 $(LCLINTR) exports.c +exporttype +exportvar +exportfcn +topuse +typeuse -expect 6
252 $(LCLINTR) exports.c +exportany -expect 3
256 $(LCLINTR) external.c +partial
257 $(LCLINTR) external.c +partial +distinctexternalnames -expect 2
258 $(LCLINTR) external.c -nolib +partial -externalnamelength 3 -expect 3
259 $(LCLINTR) external.c -nolib +partial -externalnamelength 3 +externalnamecaseinsensitive -expect 3
260 $(LCLINTR) external.c +partial -externalnamelength 3 -expect 4
263 $(LCLINTR) fields.c +memchecks -expect 6
264 $(LCLINTR) fields2.c +memchecks -expect 5
265 $(LCLINTR) fields3.c +memchecks
268 $(LCLINTR) flags.c -expect 8
269 $(LCLINTR) +nocomments flags.c -expect 2
271 # two new errors (invalid lhs)
274 $(LCLINTR) +memchecks +noparams funcpointer.c -expect 18
277 $(LCLINTR) glob -expect 4
278 $(LCLINTR) glob -globuse -expect 3
279 $(LCLINTR) glob +globunspec -expect 6
282 $(LCLINTR) -modifies globals.c -expect 5
283 $(LCLINTR) -modifies globals.c +allglobals -expect 6
284 $(LCLINTR) -modifies globals.c +impcheckedglobals -expect 6
285 $(LCLINTR) -modifies globals.c -globals -checkstrictglobals -expect 2
286 $(LCLINTR) -modifies globals.c +globunspec -expect 6
287 $(LCLINTR) -modifies globals.c +globunspec +allglobals -expect 8
290 $(LCLINTR) -accessfile impabstract.c
291 $(LCLINTR) -accessfile +hints +impabstract impabstract.c -expect 2
292 $(LCLINTR) -accessfile +hints +impabstract impabstract -expect 2
295 $(LCLINTR) init.c -expect 12
296 $(LCLINTRN) init.c +checks -exportlocal -exportheadervar -expect 15
299 $(LCLINTR) inparam.c -expect 2
300 $(LCLINTR) +impouts inparam.c -expect 1
303 $(LCLINTR) internal.c -expect 1
304 $(LCLINTR) internal.c +distinctinternalnames -expect 2
305 $(LCLINTR) internal.c -internalnamelen 28 -expect 3
306 $(LCLINTR) internal.c +internalnamecaseinsensitive -expect 3
307 $(LCLINTR) internal.c +internalnamecaseinsensitive +internalnamelookalike -expect 11
310 $(LCLINTR) iter -expect 14 -lclexpect 1
311 $(LCLINTR) iter2.c -expect 12
314 $(LCLINTR) keep.c +memchecks -expect 6
317 # 2 new errors found (fixed spec of signal)
321 $(LCLINTR) libs.c +longunsignedunsignedintegral -expect 15
322 $(LCLINTR) libs.c -expect 19
323 $(LCLINTR) libs.c +globunspec +modunspec -expect 22
324 $(LCLINTR) libs.c +strictlib +globunspec +modunspec -expect 39
327 $(LCLINTR) lintcomments.c -expect 4
328 $(LCLINTR) lintcomments.c -warnlintcomments -expect 1
329 $(LCLINTR) lintcomments.c -lintcomments -expect 4
332 $(LCLINTR) list.c -expect 3
335 $(LCLINTR) macros -expect 17
336 $(LCLINTR) macros.c +allmacros -expect 34
337 $(LCLINTR) macros.c +fcnmacros -expect 31
341 $(LCLINTR) macrosef -expect 4
342 $(LCLINTR) macrosef.c +allmacros -expect 3
343 $(LCLINTR) macrosef.c +allmacros +sefuncon -expect 4
346 $(LCLINTRN) merge.c +checks -exportlocal -exportheadervar -exportheader -expect 3
349 $(LCLINTR) modifies.c modclient.c +impcheckedstatics +mustmod -expect 7
352 $(LCLINTR) modtest -expect 10
353 $(LCLINTR) modtest +modunspec -expect 13
354 $(LCLINTR) modtest +mustmod -expect 14
357 $(LCLINTR) moduncon.c +moduncon -memchecks -expect 4
358 $(LCLINTRN) moduncon.c +strict -exportlocal -expect 22
361 $(LCLINTR) mongoincludes.c -includenest 1 -expect 19
362 $(LCLINTR) mongoincludes.c -includenest 2 -expect 10
363 $(LCLINTR) mongoincludes.c -includenest 3 -expect 4
364 $(LCLINTR) mongoincludes.c -includenest 4 -expect 1
365 $(LCLINTR) mongoincludes.c -includenest 5 -expect 0
368 $(LCLINTR) null1.c -expect 14
369 $(LCLINTR) null1.c -null -expect 4
370 $(LCLINTR) null2.c -expect 10
371 $(LCLINTR) null3.c -expect 15
372 $(LCLINTR) null3.c -warnunixlib +unixlib -expect 16
373 $(LCLINTR) null4.c -expect 1
374 $(LCLINTR) null5.c -expect 4
375 $(LCLINTR) null6 -expect 4
376 $(LCLINTR) +quiet null6.lcl -dump null6
377 $(LCLINTR) null6.c -load null6 -expect 4
380 # Before 2.4, expected one more because error was reported both as
381 # dependent and observer.
385 $(LCLINTRN) observer +checks -exportlocal -exportheader -expect 9
386 $(LCLINTRN) observer.c +checks -exportlocal -exportheader -expect 8
387 $(LCLINTR) observer.c -expect 7
390 $(LCLINTR) oldstyle -expect 3
393 $(LCLINTR) outglob -expect 10
396 $(LCLINTR) outparam -expect 12
399 $(LCLINTR) +hints preds.c -expect 6
400 $(LCLINTRN) +hints preds.c -weak -expect 1
401 $(LCLINTRN) +hints preds.c -strict -exportlocal -exportheader -expect 8
404 $(LCLINTR) prefixes.c +partial
405 $(LCLINTRN) prefixes.c +allmacros +checks -exportlocal +partial -exportheader -exportheadervar -expect 4
406 $(LCLINTR) prefixes.c -typeprefix "T" -expect 2
407 $(LCLINTR) prefixes.c -typeprefix "^" -expect 1
408 $(LCLINTR) prefixes.c -typeprefix "^*" -expect 2
409 $(LCLINTR) prefixes.c -typeprefix "^%*" -expect 2
410 $(LCLINTR) prefixes.c -typeprefix "^~*" -expect 2
411 $(LCLINTR) prefixes.c -typeprefix "^" +typeprefixexclude -expect 7
412 $(LCLINTR) prefixes.c -filestaticprefix "^^" -expect 4
413 $(LCLINTR) prefixes.c -filestaticprefix "^#" -expect 5
414 $(LCLINTR) prefixes.c -filestaticprefix "^?&x" -expect 5
415 $(LCLINTR) prefixes.c -globalprefix "G" -expect 1
416 $(LCLINTR) prefixes.c -globalprefix "&G?_^" -expect 1
417 $(LCLINTR) prefixes.c -externalprefix "G" -expect 5
418 $(LCLINTR) prefixes.c -typeprefix "T" -externalprefix "G" -expect 4
419 $(LCLINTR) prefixes.c -localprefix "?*" +localprefixexclude -expect 13
422 $(LCLINTR) printflike.c -expect 6
423 $(LCLINTR) printflike.c -warnlintcomments -expect 5
426 $(LCLINTR) -DMYSTERY='"a flag\"wicked cool"' rc.c -expect 1
427 $(LCLINTR) -DMYSTERY=12 rc.c -expect 1
428 $(LCLINTR) -f rc1.lclintrc rc.c -expect 1
429 $(LCLINTR) -UMYSTERY -f rc1.lclintrc rc.c -expect 1
430 $(LCLINTR) -f rc3.lclintrc rc.c -expect 1
433 $(LCLINTR) refcounts.c -expect 7
436 $(LCLINTR) release.c +memchecks -expect 1
439 $(LCLINTR) +lh repexpose +memchecks -expect 12
440 $(LCLINTR) repexpose +memchecks +retalias -expect 15
441 $(LCLINTRN) repexpose +checks -exportlocal -expect 27
444 $(LCLINTR) sharing1.c -expect 21
445 $(LCLINTR) sharing3.c -expect 3
446 $(LCLINTR) sharing4.c -expect 13
447 $(LCLINTR) sharing4.c -paramimptemp -expect 12
448 $(LCLINTR) sharing5.c -expect 6
451 $(LCLINTR) +hints slovaknames.c -expect 1
452 $(LCLINTR) +hints slovaknames.c +accessslovak
453 $(LCLINTR) +hints +slovak slovaknames.c -expect 3
454 $(LCLINTR) +hints +slovak -slovakvars slovaknames.c -expect 2
455 $(LCLINTR) +hints +slovak -accessslovak slovaknames.c -expect 7
458 $(LCLINTR) specclauses.c -expect 6
459 $(LCLINTR) specclauses2.c -expect 8
460 $(LCLINTR) specclauses3.c -expect 6
461 $(LCLINTR) specclauses4.c -expect 3
462 $(LCLINTR) specclauses5.c -expect 3
465 $(LCLINTR) special -expect 20
466 $(LCLINTR) special -relaxquals -expect 22
469 $(LCLINTR) stack.c -expect 5
470 $(LCLINTR) stack.c -stackref
473 $(LCLINTR) staticarray.c -expect 3
476 $(LCLINTR) strings.c -expect 3
477 $(LCLINTR) -readonlystrings -expect 1 strings.c
478 $(LCLINTR) +modobserverstrict -maintype -expect 4 strings.c
481 $(LCLINTR) structassign.c -expect 4
484 $(LCLINTR) typequals.c tq.lcl -expect 5
485 $(LCLINTR) typequals.c -expect 2
488 $(LCLINTR) ud.c -expect 9
489 $(LCLINTR) ud2 -specundef -expect 3
492 $(LCLINTR) ulstypes.c -expect 8
493 $(LCLINTR) ulstypes.c +ignorequals
494 $(LCLINTRN) ulstypes.c +strict -exportheader -exportheadervar -expect 28
495 # 3 more detected with version 2.5 (change in -numliteral setting)
498 $(LCLINTR) +memchecks union.c -expect 8
501 $(LCLINTR) unreachable.c -expect 5
502 $(LCLINTR) -unreachable unreachable.c -expect 2
503 $(LCLINTR) switch.c -expect 4
506 $(LCLINTRN) unused.c +checks -exportlocal -expect 3
507 $(LCLINTRN) unused.c +checks -exportlocal +topuse -expect 6
510 ### Bugs fixed and new features since version 2.1b
515 $(LCLINTR) boolops.c -expect 1 ; \
516 $(LCLINTR) bool.lcl booldef.c -expect 1 ; \
517 $(LCLINTR) boolenum.c -booltype BOOLEAN -expect 1 ; \
518 $(LCLINTR) break.c -expect 1 ; \
519 $(LCLINTR) bstring.c -expect 2 ; \
520 $(LCLINTR) decl.c -expect 1 ; \
521 $(LCLINTR) enumbool.c -expect 2 ; \
522 $(LCLINTR) enumbool.c -booltrue "true" -boolfalse "false" ; \
523 $(LCLINTR) extension.c ; \
524 $(LCLINTR) -gnuextensions extension.c ; \
525 $(LCLINTR) modarray.c ; \
526 $(LCLINTR) nestext.c -expect 1 ; \
527 $(LCLINTR) offsetof.c ; \
528 $(LCLINTR) sizeofarray.c -expect 3 ; \
529 $(LCLINTR) rex.c -expect 1 ; \
530 $(LCLINTR) struct.c -expect 1
534 $(LCLINTR) erik.c -expect 1 ; \
535 $(LCLINTR) boolcomp.c -expect 5 ; \
536 $(LCLINTR) boolenum.c ; \
537 $(LCLINTR) addassign.c -expect 1; \
538 $(LCLINTR) toralf.c -expect 5 ; \
539 $(LCLINTR) fred.c -booltype Bool ; \
540 $(LCLINTR) sizeof.c ; \
541 $(LCLINTR) arrayparam.c -expect 5 ; \
542 $(LCLINTR) notreached.c ; \
543 $(LCLINTR) duff.c -casebreak -firstcase ; \
544 $(LCLINTR) obviousloop.c -expect 4 ; \
545 $(LCLINTR) bitops.c +bitwisesigned -expect 11 ; \
546 $(LCLINTR) bitops.c -expect 5 ; \
547 $(LCLINTR) isalpha.c +strictlib -expect 1 ; \
548 $(LCLINTR) isalpha.c -expect 1 ; \
549 $(LCLINTR) dobb.c ; \
550 $(LCLINTR) popik.c -expect 11
554 $(LCLINTR) emptycase.c ; \
555 $(LCLINTR) enumtest.c ; \
556 $(LCLINTR) duffs.c ; \
557 $(LCLINTR) bitfields.c ; \
558 $(LCLINTR) bug1.c ; \
559 $(LCLINTR) bug2.c -expect 5 ; \
560 $(LCLINTR) bug3.c ; \
561 $(LCLINTR) test0.c ; \
562 $(LCLINTR) test1.c ; \
563 $(LCLINTR) test2.c ; \
564 $(LCLINTR) hexconstants.c -expect 1 ; \
565 $(LCLINTR) +checks hexconstants.c -expect 4 ; \
566 $(LCLINTR) innercomment.c ; \
567 $(LCLINTR) nothing.c ; \
568 $(LCLINTR) offsetof.c -expect 2 ; \
569 $(LCLINTR) komazi.c ; \
570 $(LCLINTR) print.c ; \
571 $(LCLINTR) syslog.c -warnunixlib +unixlib ; \
572 $(LCLINTR) error.c -expect 1 ; \
573 $(LCLINTR) ulrich.c ; \
574 $(LCLINTR) cpptest.c '-D__P(x)=x' ; \
575 $(LCLINTR) longlong.c -expect 4; \
576 $(LCLINTR) subdir/main.c subdir/main.lcl ; \
577 $(LCLINTR) fink.c ; \
578 $(LCLINTR) driverstub.c ; \
579 $(LCLINTR) alignof.c -expect 2 ; \
580 $(LCLINTR) -D DBL_MANT_DIG=25 source.c
583 @cd nullterminatedtest; \
584 $(LCLINTR) test1.c; \
588 setenv LCLINT '$(LCLINTRN)'; cd tests2.5 ; $(MAKE) -e
591 ### Integration Tests
595 setenv LCLINT '$(LCLINTRN)'; cd db1; $(MAKE) -e test
598 setenv LCLINT '$(LCLINTRN)'; cd db2; $(MAKE) -e test
601 setenv LCLINT '$(LCLINTRN)'; cd db3; $(MAKE) -e test
604 -rm -f *~ #*# *.o *.lcs a.out
605 -cd db1 ; $(MAKE) clean
606 -cd db2 ; $(MAKE) clean
607 -cd db3 ; $(MAKE) clean