[BACK]Return to Makefile CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / usr.bin / make / unit-tests

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>