Annotation of src/usr.bin/make/unit-tests/Makefile, Revision 1.228
1.228 ! rillig 1: # $NetBSD: Makefile,v 1.227 2020/11/29 10:57:16 rillig Exp $
1.1 sjg 2: #
3: # Unit tests for make(1)
1.60 rillig 4: #
1.1 sjg 5: # The main targets are:
6: #
1.60 rillig 7: # all:
8: # run all the tests
9: # test:
10: # run 'all', and compare to expected results
11: # accept:
12: # move generated output to expected results
13: #
1.61 rillig 14: # Settable variables
15: #
16: # TEST_MAKE
17: # The make program to be tested.
18: #
1.60 rillig 19: #
20: # Adding a test case
21: #
1.11 sjg 22: # Each feature should get its own set of tests in its own suitably
1.42 apb 23: # named makefile (*.mk), with its own set of expected results (*.exp),
1.61 rillig 24: # and it should be added to the TESTS list.
1.60 rillig 25: #
26: # Any added files must also be added to src/distrib/sets/lists/tests/mi.
1.78 rillig 27: # To do that, just run "make sync-mi" in this directory.
28: #
29: # A few *.mk files are helper files for other tests (such as include-sub.mk)
30: # and are thus not added to TESTS. Such files must be ignored in
31: # src/tests/usr.bin/make/t_make.sh.
1.60 rillig 32: #
1.1 sjg 33:
1.61 rillig 34: # Each test is in a sub-makefile.
35: # Keep the list sorted.
1.92 rillig 36: # Any test that is commented out must be ignored in
37: # src/tests/usr.bin/make/t_make.sh as well.
1.133 rillig 38: TESTS+= archive
1.126 rillig 39: TESTS+= archive-suffix
1.183 rillig 40: TESTS+= cmd-errors
1.185 rillig 41: TESTS+= cmd-errors-lint
1.124 rillig 42: TESTS+= cmd-interrupt
1.75 rillig 43: TESTS+= cmdline
1.188 rillig 44: TESTS+= cmdline-undefined
1.61 rillig 45: TESTS+= comment
1.93 rillig 46: TESTS+= cond-cmp-numeric
1.117 rillig 47: TESTS+= cond-cmp-numeric-eq
48: TESTS+= cond-cmp-numeric-ge
49: TESTS+= cond-cmp-numeric-gt
50: TESTS+= cond-cmp-numeric-le
51: TESTS+= cond-cmp-numeric-lt
52: TESTS+= cond-cmp-numeric-ne
1.93 rillig 53: TESTS+= cond-cmp-string
1.141 rillig 54: TESTS+= cond-cmp-unary
1.103 rillig 55: TESTS+= cond-func
1.93 rillig 56: TESTS+= cond-func-commands
57: TESTS+= cond-func-defined
58: TESTS+= cond-func-empty
59: TESTS+= cond-func-exists
60: TESTS+= cond-func-make
1.217 rillig 61: TESTS+= cond-func-make-main
1.93 rillig 62: TESTS+= cond-func-target
1.61 rillig 63: TESTS+= cond-late
1.93 rillig 64: TESTS+= cond-op
65: TESTS+= cond-op-and
1.192 rillig 66: TESTS+= cond-op-and-lint
1.93 rillig 67: TESTS+= cond-op-not
68: TESTS+= cond-op-or
1.192 rillig 69: TESTS+= cond-op-or-lint
1.93 rillig 70: TESTS+= cond-op-parentheses
1.61 rillig 71: TESTS+= cond-short
1.93 rillig 72: TESTS+= cond-token-number
73: TESTS+= cond-token-plain
74: TESTS+= cond-token-string
75: TESTS+= cond-token-var
1.142 rillig 76: TESTS+= cond-undef-lint
1.61 rillig 77: TESTS+= cond1
1.81 rillig 78: TESTS+= counter
1.147 rillig 79: TESTS+= counter-append
1.93 rillig 80: TESTS+= dep
81: TESTS+= dep-colon
1.152 rillig 82: TESTS+= dep-colon-bug-cross-file
1.93 rillig 83: TESTS+= dep-double-colon
1.172 rillig 84: TESTS+= dep-double-colon-indep
1.93 rillig 85: TESTS+= dep-exclam
1.107 rillig 86: TESTS+= dep-none
1.174 rillig 87: TESTS+= dep-percent
1.109 rillig 88: TESTS+= dep-var
1.93 rillig 89: TESTS+= dep-wildcards
90: TESTS+= depsrc
1.173 rillig 91: TESTS+= depsrc-end
1.93 rillig 92: TESTS+= depsrc-exec
93: TESTS+= depsrc-ignore
94: TESTS+= depsrc-made
95: TESTS+= depsrc-make
96: TESTS+= depsrc-meta
97: TESTS+= depsrc-nometa
98: TESTS+= depsrc-nometa_cmp
99: TESTS+= depsrc-nopath
100: TESTS+= depsrc-notmain
101: TESTS+= depsrc-optional
102: TESTS+= depsrc-phony
103: TESTS+= depsrc-precious
104: TESTS+= depsrc-recursive
105: TESTS+= depsrc-silent
106: TESTS+= depsrc-use
107: TESTS+= depsrc-usebefore
1.105 rillig 108: TESTS+= depsrc-usebefore-double-colon
1.93 rillig 109: TESTS+= depsrc-wait
110: TESTS+= deptgt
111: TESTS+= deptgt-begin
1.224 rillig 112: TESTS+= deptgt-begin-fail
113: TESTS+= deptgt-begin-fail-indirect
1.93 rillig 114: TESTS+= deptgt-default
115: TESTS+= deptgt-delete_on_error
116: TESTS+= deptgt-end
1.222 rillig 117: TESTS+= deptgt-end-fail
1.223 rillig 118: TESTS+= deptgt-end-fail-indirect
1.146 rillig 119: TESTS+= deptgt-end-jobs
1.93 rillig 120: TESTS+= deptgt-error
121: TESTS+= deptgt-ignore
122: TESTS+= deptgt-interrupt
123: TESTS+= deptgt-main
124: TESTS+= deptgt-makeflags
125: TESTS+= deptgt-no_parallel
126: TESTS+= deptgt-nopath
127: TESTS+= deptgt-notparallel
128: TESTS+= deptgt-objdir
129: TESTS+= deptgt-order
130: TESTS+= deptgt-path
131: TESTS+= deptgt-path-suffix
132: TESTS+= deptgt-phony
133: TESTS+= deptgt-precious
134: TESTS+= deptgt-shell
135: TESTS+= deptgt-silent
136: TESTS+= deptgt-stale
137: TESTS+= deptgt-suffixes
1.77 rillig 138: TESTS+= dir
1.114 rillig 139: TESTS+= dir-expand-path
1.93 rillig 140: TESTS+= directive
1.140 rillig 141: TESTS+= directive-dinclude
1.93 rillig 142: TESTS+= directive-elif
143: TESTS+= directive-elifdef
144: TESTS+= directive-elifmake
145: TESTS+= directive-elifndef
146: TESTS+= directive-elifnmake
147: TESTS+= directive-else
148: TESTS+= directive-endif
149: TESTS+= directive-error
150: TESTS+= directive-export
151: TESTS+= directive-export-env
1.156 rillig 152: TESTS+= directive-export-gmake
1.93 rillig 153: TESTS+= directive-export-literal
1.130 rillig 154: TESTS+= directive-for
1.127 rillig 155: TESTS+= directive-for-generating-endif
1.140 rillig 156: TESTS+= directive-hyphen-include
1.93 rillig 157: TESTS+= directive-if
1.197 rillig 158: TESTS+= directive-if-nested
1.93 rillig 159: TESTS+= directive-ifdef
160: TESTS+= directive-ifmake
161: TESTS+= directive-ifndef
162: TESTS+= directive-ifnmake
1.140 rillig 163: TESTS+= directive-include
164: TESTS+= directive-include-fatal
1.93 rillig 165: TESTS+= directive-info
1.140 rillig 166: TESTS+= directive-sinclude
1.93 rillig 167: TESTS+= directive-undef
168: TESTS+= directive-unexport
169: TESTS+= directive-unexport-env
170: TESTS+= directive-warning
1.61 rillig 171: TESTS+= dollar
172: TESTS+= doterror
173: TESTS+= dotwait
1.64 rillig 174: TESTS+= envfirst
1.61 rillig 175: TESTS+= error
1.63 sjg 176: TESTS+= # escape # broken by reverting POSIX changes
1.61 rillig 177: TESTS+= export
178: TESTS+= export-all
179: TESTS+= export-env
1.89 rillig 180: TESTS+= export-variants
1.61 rillig 181: TESTS+= forloop
182: TESTS+= forsubst
1.190 rillig 183: TESTS+= gnode-submake
1.162 rillig 184: TESTS+= hanoi-include
1.86 rillig 185: TESTS+= impsrc
1.61 rillig 186: TESTS+= include-main
1.189 rillig 187: TESTS+= job-flags
1.154 rillig 188: TESTS+= job-output-long-lines
1.83 rillig 189: TESTS+= lint
1.90 rillig 190: TESTS+= make-exported
1.61 rillig 191: TESTS+= moderrs
192: TESTS+= modmatch
193: TESTS+= modmisc
194: TESTS+= modts
195: TESTS+= modword
1.226 sjg 196: .if ${.MAKE.UID:U0} > 0
1.198 sjg 197: TESTS+= objdir-writable
1.225 sjg 198: .endif
1.93 rillig 199: TESTS+= opt
200: TESTS+= opt-backwards
201: TESTS+= opt-chdir
202: TESTS+= opt-debug
1.134 rillig 203: TESTS+= opt-debug-all
204: TESTS+= opt-debug-archive
205: TESTS+= opt-debug-curdir
206: TESTS+= opt-debug-cond
207: TESTS+= opt-debug-dir
208: TESTS+= opt-debug-errors
209: TESTS+= opt-debug-file
210: TESTS+= opt-debug-for
211: TESTS+= opt-debug-graph1
212: TESTS+= opt-debug-graph2
213: TESTS+= opt-debug-graph3
214: TESTS+= opt-debug-hash
215: TESTS+= opt-debug-jobs
216: TESTS+= opt-debug-lint
217: TESTS+= opt-debug-loud
218: TESTS+= opt-debug-meta
219: TESTS+= opt-debug-making
220: TESTS+= opt-debug-no-rm
221: TESTS+= opt-debug-parse
222: TESTS+= opt-debug-suff
223: TESTS+= opt-debug-targets
224: TESTS+= opt-debug-varraw
225: TESTS+= opt-debug-var
226: TESTS+= opt-debug-x-trace
1.93 rillig 227: TESTS+= opt-define
228: TESTS+= opt-env
229: TESTS+= opt-file
230: TESTS+= opt-ignore
231: TESTS+= opt-include-dir
232: TESTS+= opt-jobs
233: TESTS+= opt-jobs-internal
234: TESTS+= opt-keep-going
235: TESTS+= opt-m-include-dir
236: TESTS+= opt-no-action
237: TESTS+= opt-no-action-at-all
238: TESTS+= opt-query
239: TESTS+= opt-raw
240: TESTS+= opt-silent
241: TESTS+= opt-touch
1.199 rillig 242: TESTS+= opt-touch-jobs
1.93 rillig 243: TESTS+= opt-tracefile
244: TESTS+= opt-var-expanded
245: TESTS+= opt-var-literal
246: TESTS+= opt-warnings-as-errors
247: TESTS+= opt-where-am-i
248: TESTS+= opt-x-reduce-exported
1.61 rillig 249: TESTS+= order
1.162 rillig 250: TESTS+= parse-var
1.88 rillig 251: TESTS+= phony-end
1.61 rillig 252: TESTS+= posix
1.63 sjg 253: TESTS+= # posix1 # broken by reverting POSIX changes
1.61 rillig 254: TESTS+= qequals
1.84 rillig 255: TESTS+= recursive
1.93 rillig 256: TESTS+= sh
1.106 rillig 257: TESTS+= sh-dots
1.93 rillig 258: TESTS+= sh-jobs
259: TESTS+= sh-jobs-error
260: TESTS+= sh-leading-at
261: TESTS+= sh-leading-hyphen
262: TESTS+= sh-leading-plus
263: TESTS+= sh-meta-chars
264: TESTS+= sh-multi-line
265: TESTS+= sh-single-line
1.162 rillig 266: TESTS+= shell-csh
267: TESTS+= shell-custom
268: TESTS+= shell-ksh
269: TESTS+= shell-sh
1.169 rillig 270: TESTS+= suff-add-later
271: TESTS+= suff-clear-regular
272: TESTS+= suff-clear-single
1.212 rillig 273: TESTS+= suff-incomplete
1.175 rillig 274: TESTS+= suff-lookup
1.167 rillig 275: TESTS+= suff-main
1.218 rillig 276: TESTS+= suff-main-several
1.220 rillig 277: TESTS+= suff-phony
1.150 rillig 278: TESTS+= suff-rebuild
1.203 rillig 279: TESTS+= suff-self
1.219 rillig 280: TESTS+= suff-transform-debug
1.169 rillig 281: TESTS+= suff-transform-endless
282: TESTS+= suff-transform-expand
283: TESTS+= suff-transform-select
1.61 rillig 284: TESTS+= sunshcmd
285: TESTS+= ternary
286: TESTS+= unexport
287: TESTS+= unexport-env
1.91 rillig 288: TESTS+= use-inference
1.93 rillig 289: TESTS+= var-class
290: TESTS+= var-class-cmdline
291: TESTS+= var-class-env
292: TESTS+= var-class-global
293: TESTS+= var-class-local
294: TESTS+= var-class-local-legacy
295: TESTS+= var-op
296: TESTS+= var-op-append
297: TESTS+= var-op-assign
298: TESTS+= var-op-default
299: TESTS+= var-op-expand
300: TESTS+= var-op-shell
1.162 rillig 301: TESTS+= var-op-sunsh
1.179 rillig 302: TESTS+= var-recursive
1.61 rillig 303: TESTS+= varcmd
1.64 rillig 304: TESTS+= vardebug
305: TESTS+= varfind
1.61 rillig 306: TESTS+= varmisc
1.93 rillig 307: TESTS+= varmod
308: TESTS+= varmod-assign
309: TESTS+= varmod-defined
1.61 rillig 310: TESTS+= varmod-edge
1.93 rillig 311: TESTS+= varmod-exclam-shell
312: TESTS+= varmod-extension
313: TESTS+= varmod-gmtime
314: TESTS+= varmod-hash
315: TESTS+= varmod-head
316: TESTS+= varmod-ifelse
317: TESTS+= varmod-l-name-to-value
318: TESTS+= varmod-localtime
319: TESTS+= varmod-loop
320: TESTS+= varmod-match
1.99 rillig 321: TESTS+= varmod-match-escape
1.93 rillig 322: TESTS+= varmod-no-match
323: TESTS+= varmod-order
324: TESTS+= varmod-order-reverse
325: TESTS+= varmod-order-shuffle
326: TESTS+= varmod-path
327: TESTS+= varmod-quote
328: TESTS+= varmod-quote-dollar
329: TESTS+= varmod-range
330: TESTS+= varmod-remember
331: TESTS+= varmod-root
332: TESTS+= varmod-select-words
333: TESTS+= varmod-shell
334: TESTS+= varmod-subst
335: TESTS+= varmod-subst-regex
336: TESTS+= varmod-sysv
337: TESTS+= varmod-tail
338: TESTS+= varmod-to-abs
339: TESTS+= varmod-to-lower
340: TESTS+= varmod-to-many-words
341: TESTS+= varmod-to-one-word
342: TESTS+= varmod-to-separator
343: TESTS+= varmod-to-upper
344: TESTS+= varmod-undefined
345: TESTS+= varmod-unique
346: TESTS+= varname
347: TESTS+= varname-dollar
348: TESTS+= varname-dot-alltargets
349: TESTS+= varname-dot-curdir
1.122 rillig 350: TESTS+= varname-dot-includes
1.93 rillig 351: TESTS+= varname-dot-includedfromdir
352: TESTS+= varname-dot-includedfromfile
1.122 rillig 353: TESTS+= varname-dot-libs
1.93 rillig 354: TESTS+= varname-dot-make-dependfile
355: TESTS+= varname-dot-make-expand_variables
356: TESTS+= varname-dot-make-exported
357: TESTS+= varname-dot-make-jobs
358: TESTS+= varname-dot-make-jobs-prefix
359: TESTS+= varname-dot-make-level
360: TESTS+= varname-dot-make-makefile_preference
361: TESTS+= varname-dot-make-makefiles
362: TESTS+= varname-dot-make-meta-bailiwick
363: TESTS+= varname-dot-make-meta-created
364: TESTS+= varname-dot-make-meta-files
365: TESTS+= varname-dot-make-meta-ignore_filter
366: TESTS+= varname-dot-make-meta-ignore_paths
367: TESTS+= varname-dot-make-meta-ignore_patterns
368: TESTS+= varname-dot-make-meta-prefix
369: TESTS+= varname-dot-make-mode
370: TESTS+= varname-dot-make-path_filemon
371: TESTS+= varname-dot-make-pid
372: TESTS+= varname-dot-make-ppid
373: TESTS+= varname-dot-make-save_dollars
374: TESTS+= varname-dot-makeoverrides
375: TESTS+= varname-dot-newline
376: TESTS+= varname-dot-objdir
377: TESTS+= varname-dot-parsedir
378: TESTS+= varname-dot-parsefile
379: TESTS+= varname-dot-path
1.115 rillig 380: TESTS+= varname-dot-shell
1.93 rillig 381: TESTS+= varname-dot-targets
1.110 rillig 382: TESTS+= varname-empty
1.93 rillig 383: TESTS+= varname-make
384: TESTS+= varname-make_print_var_on_error
1.170 rillig 385: TESTS+= varname-make_print_var_on_error-jobs
1.132 rillig 386: TESTS+= varname-makefile
1.93 rillig 387: TESTS+= varname-makeflags
388: TESTS+= varname-pwd
389: TESTS+= varname-vpath
1.66 rillig 390: TESTS+= varparse-dynamic
1.191 rillig 391: TESTS+= varparse-errors
1.156 rillig 392: TESTS+= varparse-mod
1.149 rillig 393: TESTS+= varparse-undef-partial
1.61 rillig 394: TESTS+= varquote
395:
1.201 rillig 396: # Ideas for more tests:
397: # char-0020-space.mk
398: # char-005C-backslash.mk
399: # escape-cond-str.mk
400: # escape-cond-func-arg.mk
401: # escape-cond-func-arg.mk
402: # escape-varmod.mk
403: # escape-varmod-define.mk
404: # escape-varmod-match.mk
405: # escape-varname.mk
406: # escape-varassign-varname.mk
407: # escape-varassign-varname-cmdline.mk
408: # escape-varassign-value.mk
409: # escape-varassign-value-cmdline.mk
410: # escape-dependency-source.mk
411: # escape-dependency-target.mk
412: # escape-for-varname.mk
413: # escape-for-item.mk
414: # posix-*.mk (see posix.mk and posix1.mk)
415:
1.198 sjg 416: .if ${.OBJDIR} != ${.CURDIR}
417: RO_OBJDIR:= ${.OBJDIR}/roobj
418: .else
419: RO_OBJDIR:= ${TMPDIR:U/tmp}/roobj
420: .endif
1.98 rillig 421: # Additional environment variables for some of the tests.
422: # The base environment is -i PATH="$PATH".
1.194 rillig 423: ENV.depsrc-optional+= TZ=UTC
1.64 rillig 424: ENV.envfirst= FROM_ENV=value-from-env
1.198 sjg 425: ENV.objdir-writable+= RO_OBJDIR=${RO_OBJDIR}
1.65 rillig 426: ENV.varmisc= FROM_ENV=env
427: ENV.varmisc+= FROM_ENV_BEFORE=env
428: ENV.varmisc+= FROM_ENV_AFTER=env
1.180 rillig 429: ENV.varmod-localtime+= TZ=Europe/Berlin
1.196 rillig 430: ENV.varname-vpath+= VPATH=varname-vpath.dir:varname-vpath.dir2
1.64 rillig 431:
432: # Override make flags for some of the tests; default is -k.
1.123 rillig 433: # If possible, write ".MAKEFLAGS: -dv" in the test .mk file instead of
434: # settings FLAGS.test=-dv here, since that is closer to the test code.
1.151 rillig 435: FLAGS.cond-func-make= via-cmdline
1.128 rillig 436: FLAGS.directive-ifmake= first second
1.195 rillig 437: FLAGS.doterror= # none, especially not -k
1.202 rillig 438: FLAGS.varname-empty= -dv '$${:U}=cmdline-u' '=cmdline-plain'
1.61 rillig 439:
1.137 rillig 440: # Some tests need extra postprocessing.
1.227 rillig 441: SED_CMDS.dir= ${:D remove output from -DCLEANUP mode }
1.228 ! rillig 442: SED_CMDS.dir+= -e '/^OpenDirs_Done:/d'
1.227 rillig 443: SED_CMDS.dir+= -e '/^CachedDir refCount/d'
1.216 rillig 444: SED_CMDS.export= -e '/^[^=_A-Za-z0-9]*=/d'
445: SED_CMDS.export-all= ${SED_CMDS.export}
446: SED_CMDS.export-env= ${SED_CMDS.export}
1.155 rillig 447: SED_CMDS.job-output-long-lines= \
448: ${:D Job separators on their own line are ok. } \
449: -e '/^--- job-[ab] ---$$/d' \
450: ${:D Plain output lines are ok as well. } \
451: ${:D They may come in multiples of 1024 or as 10000. } \
452: -e '/^aa*$$/d' \
453: -e '/^bb*$$/d' \
454: ${:D The following lines should rather not occur since the job } \
455: ${:D marker should always be at the beginning of the line. } \
456: -e '/^aa*--- job-b ---$$/d' \
457: -e '/^bb*--- job-a ---$$/d'
1.215 rillig 458: SED_CMDS.objdir-writable= -e 's,${RO_OBJDIR},OBJDIR/roobj,g'
459: SED_CMDS.opt-debug-graph1= ${STD_SED_CMDS.dg1}
1.162 rillig 460: SED_CMDS.opt-debug-jobs= -e 's,([0-9][0-9]*),(<pid>),'
461: SED_CMDS.opt-debug-jobs+= -e 's,pid [0-9][0-9]*,pid <pid>,'
462: SED_CMDS.opt-debug-jobs+= -e 's,Process [0-9][0-9]*,Process <pid>,'
463: SED_CMDS.opt-debug-jobs+= -e 's,JobFinish: [0-9][0-9]*,JobFinish: <pid>,'
1.210 rillig 464: SED_CMDS.opt-debug-jobs+= -e 's,Command: ${.SHELL:T},Command: <shell>,'
1.163 rillig 465: # The "-q" may be there or not, see jobs.c, variable shells.
1.211 rillig 466: SED_CMDS.opt-debug-jobs+= -e 's,^\(.Command: <shell>\) -q,\1,'
1.219 rillig 467: SED_CMDS.sh-dots= -e 's,^.*\.\.\.:.*,<normalized: ...: not found>,'
1.215 rillig 468: SED_CMDS.suff-main+= ${STD_SED_CMDS.dg1}
1.218 rillig 469: SED_CMDS.suff-main-several+= ${STD_SED_CMDS.dg1}
1.219 rillig 470: SED_CMDS.suff-transform-debug+= ${STD_SED_CMDS.dg1}
1.207 sjg 471: SED_CMDS.var-op-shell+= \
472: -e 's,^${.SHELL:T}: [ 0-9:]*,,' \
473: -e '/command/s,No such.*,not found,'
1.205 rillig 474: SED_CMDS.vardebug+= -e 's,${.SHELL},</path/to/shell>,'
1.94 rillig 475: SED_CMDS.varmod-subst-regex+= \
476: -e 's,\(Regex compilation error:\).*,\1 (details omitted),'
1.79 rillig 477: SED_CMDS.varmod-edge+= -e 's, line [0-9]*:, line omitted:,'
1.144 rillig 478: SED_CMDS.varname-dot-parsedir= -e '/in some cases/ s,^make: "[^"]*,make: "<normalized>,'
479: SED_CMDS.varname-dot-parsefile= -e '/in some cases/ s,^make: "[^"]*,make: "<normalized>,'
1.177 rillig 480: SED_CMDS.varname-dot-shell= -e 's, = /[^ ]*, = (details omitted),g'
481: SED_CMDS.varname-dot-shell+= -e 's,"/[^" ]*","(details omitted)",g'
482: SED_CMDS.varname-dot-shell+= -e 's,\[/[^] ]*\],[(details omitted)],g'
1.61 rillig 483:
1.64 rillig 484: # Some tests need an additional round of postprocessing.
1.214 rillig 485: POSTPROC.deptgt-suffixes= awk '/^\#\*\*\* Suffixes/,/^never-stop/'
1.190 rillig 486: POSTPROC.gnode-submake= awk '/Input graph/, /^$$/'
1.221 rillig 487: POSTPROC.opt-debug-graph1= ${STD_POSTPROC.dg1}
1.112 rillig 488: POSTPROC.varname-empty= ${TOOL_SED} -n -e '/^Var_Set/p' -e '/^out:/p'
1.219 rillig 489: POSTPROC.suff-main-several= ${STD_POSTPROC.dg1}
490: POSTPROC.suff-transform-debug= ${STD_POSTPROC.dg1}
1.64 rillig 491:
1.99 rillig 492: # Some tests reuse other tests, which makes them unnecessarily fragile.
1.89 rillig 493: export-all.rawout: export.mk
494: unexport.rawout: export.mk
495: unexport-env.rawout: export.mk
496:
1.61 rillig 497: # End of the configuration section.
498:
1.215 rillig 499: # Some standard sed commands, to be used in the SED_CMDS above.
500:
501: # Omit details from the output of the -dg1 option such as process IDs.
502: STD_SED_CMDS.dg1= -e 's,${.CURDIR},<curdir>,'
503: STD_SED_CMDS.dg1+= -e 's,^\(\.MAKE *=\) .*,\1 <details omitted>,'
504: STD_SED_CMDS.dg1+= -e 's,^\(\.MAKE\.[A-Z_]* *=\) .*,\1 <details omitted>,'
505: STD_SED_CMDS.dg1+= -e 's,^\(MACHINE[_ARCH]* *=\) .*,\1 <details omitted>,'
506: STD_SED_CMDS.dg1+= -e 's,^\(MAKE *=\) .*,\1 <details omitted>,'
1.221 rillig 507:
508: # The layout of the lines in the directory cache vary depending on the path
509: # length, which cannot be predicted. Therefore omit these lines.
1.219 rillig 510: STD_POSTPROC.dg1= awk '/Directory Cache/,/^$$/ { next } { print }'
1.215 rillig 511:
512: # End of the configuration helpers section.
513:
1.1 sjg 514: .MAIN: all
515:
1.61 rillig 516: UNIT_TESTS:= ${.PARSEDIR}
1.44 apb 517: .PATH: ${UNIT_TESTS}
1.7 sjg 518:
1.145 rillig 519: .if ${USE_ABSOLUTE_TESTNAMES:Uno} == yes
520: OUTFILES= ${TESTS:@test@${.CURDIR:tA}/${test}.out@}
521: .else
1.61 rillig 522: OUTFILES= ${TESTS:=.out}
1.145 rillig 523: .endif
1.42 apb 524:
525: all: ${OUTFILES}
1.9 sjg 526:
1.95 rillig 527: CLEANFILES= *.rawout *.out *.status *.tmp *.core *.tmp
1.61 rillig 528: CLEANFILES+= obj*.[och] lib*.a # posix1.mk
529: CLEANFILES+= issue* .[ab]* # suffixes.mk
1.95 rillig 530: CLEANDIRS= dir dummy # posix1.mk
1.48 apb 531:
1.1 sjg 532: clean:
1.48 apb 533: rm -f ${CLEANFILES}
1.95 rillig 534: rm -rf ${CLEANDIRS}
1.1 sjg 535:
1.61 rillig 536: TEST_MAKE?= ${.MAKE}
537: TOOL_SED?= sed
1.1 sjg 538:
1.28 sjg 539: # ensure consistent results from sort(1)
1.61 rillig 540: LC_ALL= C
541: LANG= C
1.29 sjg 542: .export LANG LC_ALL
1.28 sjg 543:
1.153 rillig 544: MAKE_TEST_ENV?= MALLOC_OPTIONS="JA" # for jemalloc
545:
1.213 rillig 546: .if ${:!uname -s!} == "NetBSD"
547: LIMIT_RESOURCES?= ulimit -v 200000
548: .endif
549: LIMIT_RESOURCES?= :
550:
1.138 rillig 551: # Each test is run in a sub-make, to keep the tests for interfering with
552: # each other, and because they use different environment variables and
553: # command line options.
1.42 apb 554: .SUFFIXES: .mk .rawout .out
555: .mk.rawout:
1.96 rillig 556: @${_MKMSG_TEST:Uecho '# test '} ${.PREFIX}
1.64 rillig 557: @set -eu; \
1.213 rillig 558: ${LIMIT_RESOURCES}; \
1.64 rillig 559: cd ${.OBJDIR}; \
1.153 rillig 560: env -i PATH="$$PATH" ${MAKE_TEST_ENV} ${ENV.${.PREFIX:T}} \
1.98 rillig 561: ${TEST_MAKE} \
562: -r -C ${.CURDIR} -f ${.IMPSRC} \
1.145 rillig 563: ${FLAGS.${.PREFIX:T}:U-k} \
1.98 rillig 564: > ${.TARGET}.tmp 2>&1 \
1.64 rillig 565: && status=$$? || status=$$?; \
566: echo $$status > ${.TARGET:R}.status
1.42 apb 567: @mv ${.TARGET}.tmp ${.TARGET}
568:
1.137 rillig 569: # Postprocess the test output so that the results can be compared.
1.62 rillig 570: #
571: # always pretend .MAKE was called 'make'
1.61 rillig 572: _SED_CMDS+= -e 's,^${TEST_MAKE:T:S,.,\\.,g}[][0-9]*:,make:,'
573: _SED_CMDS+= -e 's,${TEST_MAKE:S,.,\\.,g},make,'
1.200 rillig 574: _SED_CMDS+= -e 's,${TEST_MAKE:T:S,.,\\.,g}[][0-9]* warning,make warning,'
575: _SED_CMDS+= -e 's,^usage: ${TEST_MAKE:T:S,.,\\.,g} ,usage: make ,'
1.62 rillig 576: # replace anything after 'stopped in' with unit-tests
1.61 rillig 577: _SED_CMDS+= -e '/stopped/s, /.*, unit-tests,'
1.62 rillig 578: # strip ${.CURDIR}/ from the output
1.61 rillig 579: _SED_CMDS+= -e 's,${.CURDIR:S,.,\\.,g}/,,g'
580: _SED_CMDS+= -e 's,${UNIT_TESTS:S,.,\\.,g}/,,g'
581:
1.42 apb 582: .rawout.out:
1.145 rillig 583: @${TOOL_SED} ${_SED_CMDS} ${SED_CMDS.${.PREFIX:T}} \
1.64 rillig 584: < ${.IMPSRC} > ${.TARGET}.tmp1
1.145 rillig 585: @${POSTPROC.${.PREFIX:T}:Ucat} < ${.TARGET}.tmp1 > ${.TARGET}.tmp2
1.64 rillig 586: @rm ${.TARGET}.tmp1
587: @echo "exit status `cat ${.TARGET:R}.status`" >> ${.TARGET}.tmp2
588: @mv ${.TARGET}.tmp2 ${.TARGET}
1.42 apb 589:
590: # Compare all output files
591: test: ${OUTFILES} .PHONY
592: @failed= ; \
1.61 rillig 593: for test in ${TESTS}; do \
1.42 apb 594: diff -u ${UNIT_TESTS}/$${test}.exp $${test}.out \
595: || failed="$${failed}$${failed:+ }$${test}" ; \
596: done ; \
597: if [ -n "$${failed}" ]; then \
598: echo "Failed tests: $${failed}" ; false ; \
599: else \
600: echo "All tests passed" ; \
601: fi
1.1 sjg 602:
603: accept:
1.61 rillig 604: @for test in ${TESTS}; do \
1.42 apb 605: cmp -s ${UNIT_TESTS}/$${test}.exp $${test}.out \
606: || { echo "Replacing $${test}.exp" ; \
607: cp $${test}.out ${UNIT_TESTS}/$${test}.exp ; } \
608: done
1.1 sjg 609:
1.139 rillig 610: # Note: only works for adding tests.
611: # To remove a test, the $$mi file must be edited manually.
1.78 rillig 612: sync-mi:
613: @set -eu; \
614: cd "${MAKEFILE:tA:H}/../../.."; \
615: mi="distrib/sets/lists/tests/mi"; \
1.105 rillig 616: cvs update "$$mi"; \
1.139 rillig 617: testsdir="usr.bin/make/unit-tests"; \
618: fmt="./usr/tests/$$testsdir/%s\ttests-usr.bin-tests\tcompattestfile,atf\\n"; \
1.182 rillig 619: cat "$$mi" > "$$mi.tmp"; \
620: (cd "$$testsdir" && ls *.exp *.mk) | xargs printf "$$fmt" >> "$$mi.tmp"; \
621: distrib/sets/fmt-list "$$mi.tmp"; \
622: mv "$$mi.tmp" "$$mi"; \
1.78 rillig 623: cvs diff "$$mi" || true
624:
1.50 sjg 625: .if exists(${TEST_MAKE})
1.168 sjg 626: ${TESTS:=.rawout}: ${TEST_MAKE}
627: # in meta mode, we *know* if a target script is impacted
628: # by a makefile change.
629: .if ${.MAKE.MODE:Unormal:Mmeta} == ""
630: ${TESTS:=.rawout}: ${.PARSEDIR}/Makefile
631: .endif
1.50 sjg 632: .endif
633:
1.42 apb 634: .-include <bsd.obj.mk>
CVSweb <webmaster@jp.NetBSD.org>