summaryrefslogtreecommitdiffstats
path: root/usr.bin/bmake/tests
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin/bmake/tests')
-rw-r--r--usr.bin/bmake/tests/Makefile18
-rw-r--r--usr.bin/bmake/tests/README174
-rw-r--r--usr.bin/bmake/tests/archives/Makefile7
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/Makefile32
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.test61
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.11
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.21
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.31
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.41
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.51
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.61
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.71
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.30
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.40
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.51
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.61
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.71
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.20
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.30
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.40
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.50
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.60
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.70
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/legacy_test.sh15
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd/libtest.abin0 -> 2104 bytes
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile32
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.test64
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.11
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.21
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.31
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.41
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.51
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.61
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.71
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.30
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.40
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.51
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.61
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.71
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.20
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.30
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.40
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.50
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.60
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.70
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/legacy_test.sh15
-rw-r--r--usr.bin/bmake/tests/archives/fmt_44bsd_mod/libtest.abin0 -> 2104 bytes
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile32
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.test62
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.11
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.21
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.31
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.41
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.51
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.61
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.71
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.30
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.40
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.50
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.61
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.71
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.20
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.30
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.40
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.50
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.60
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.70
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/legacy_test.sh15
-rw-r--r--usr.bin/bmake/tests/archives/fmt_oldbsd/libtest.abin0 -> 2016 bytes
-rw-r--r--usr.bin/bmake/tests/basic/Makefile7
-rw-r--r--usr.bin/bmake/tests/basic/t0/Makefile12
-rw-r--r--usr.bin/bmake/tests/basic/t0/expected.status.11
-rw-r--r--usr.bin/bmake/tests/basic/t0/expected.stderr.11
-rw-r--r--usr.bin/bmake/tests/basic/t0/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/basic/t0/legacy_test.sh16
-rw-r--r--usr.bin/bmake/tests/basic/t1/Makefile13
-rw-r--r--usr.bin/bmake/tests/basic/t1/Makefile.test5
-rw-r--r--usr.bin/bmake/tests/basic/t1/expected.status.11
-rw-r--r--usr.bin/bmake/tests/basic/t1/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/basic/t1/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/basic/t1/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/basic/t2/Makefile13
-rw-r--r--usr.bin/bmake/tests/basic/t2/Makefile.test6
-rw-r--r--usr.bin/bmake/tests/basic/t2/expected.status.11
-rw-r--r--usr.bin/bmake/tests/basic/t2/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/basic/t2/expected.stdout.12
-rw-r--r--usr.bin/bmake/tests/basic/t2/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/basic/t3/Makefile12
-rw-r--r--usr.bin/bmake/tests/basic/t3/expected.status.11
-rw-r--r--usr.bin/bmake/tests/basic/t3/expected.stderr.11
-rw-r--r--usr.bin/bmake/tests/basic/t3/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/basic/t3/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/common.sh533
-rw-r--r--usr.bin/bmake/tests/execution/Makefile7
-rw-r--r--usr.bin/bmake/tests/execution/ellipsis/Makefile13
-rw-r--r--usr.bin/bmake/tests/execution/ellipsis/Makefile.test21
-rw-r--r--usr.bin/bmake/tests/execution/ellipsis/expected.status.11
-rw-r--r--usr.bin/bmake/tests/execution/ellipsis/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/execution/ellipsis/expected.stdout.112
-rw-r--r--usr.bin/bmake/tests/execution/ellipsis/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/execution/empty/Makefile13
-rw-r--r--usr.bin/bmake/tests/execution/empty/Makefile.test13
-rw-r--r--usr.bin/bmake/tests/execution/empty/expected.status.11
-rw-r--r--usr.bin/bmake/tests/execution/empty/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/execution/empty/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/execution/empty/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/execution/joberr/Makefile13
-rw-r--r--usr.bin/bmake/tests/execution/joberr/Makefile.test10
-rw-r--r--usr.bin/bmake/tests/execution/joberr/expected.status.11
-rw-r--r--usr.bin/bmake/tests/execution/joberr/expected.stderr.130
-rw-r--r--usr.bin/bmake/tests/execution/joberr/expected.stdout.190
-rw-r--r--usr.bin/bmake/tests/execution/joberr/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/execution/plus/Makefile13
-rw-r--r--usr.bin/bmake/tests/execution/plus/Makefile.test7
-rw-r--r--usr.bin/bmake/tests/execution/plus/expected.status.11
-rw-r--r--usr.bin/bmake/tests/execution/plus/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/execution/plus/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/execution/plus/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/shell/Makefile7
-rw-r--r--usr.bin/bmake/tests/shell/builtin/Makefile17
-rw-r--r--usr.bin/bmake/tests/shell/builtin/Makefile.test18
-rw-r--r--usr.bin/bmake/tests/shell/builtin/expected.status.11
-rw-r--r--usr.bin/bmake/tests/shell/builtin/expected.status.21
-rw-r--r--usr.bin/bmake/tests/shell/builtin/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/shell/builtin/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/shell/builtin/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/shell/builtin/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/shell/builtin/legacy_test.sh17
-rw-r--r--usr.bin/bmake/tests/shell/builtin/sh6
-rw-r--r--usr.bin/bmake/tests/shell/meta/Makefile17
-rw-r--r--usr.bin/bmake/tests/shell/meta/Makefile.test18
-rw-r--r--usr.bin/bmake/tests/shell/meta/expected.status.11
-rw-r--r--usr.bin/bmake/tests/shell/meta/expected.status.21
-rw-r--r--usr.bin/bmake/tests/shell/meta/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/shell/meta/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/shell/meta/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/shell/meta/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/shell/meta/legacy_test.sh17
-rw-r--r--usr.bin/bmake/tests/shell/meta/sh6
-rw-r--r--usr.bin/bmake/tests/shell/path/Makefile17
-rw-r--r--usr.bin/bmake/tests/shell/path/Makefile.test31
-rw-r--r--usr.bin/bmake/tests/shell/path/expected.status.11
-rw-r--r--usr.bin/bmake/tests/shell/path/expected.status.21
-rw-r--r--usr.bin/bmake/tests/shell/path/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/shell/path/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/shell/path/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/shell/path/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/shell/path/legacy_test.sh20
-rw-r--r--usr.bin/bmake/tests/shell/path/sh6
-rw-r--r--usr.bin/bmake/tests/shell/path_select/Makefile17
-rw-r--r--usr.bin/bmake/tests/shell/path_select/Makefile.test31
-rw-r--r--usr.bin/bmake/tests/shell/path_select/expected.status.11
-rw-r--r--usr.bin/bmake/tests/shell/path_select/expected.status.21
-rw-r--r--usr.bin/bmake/tests/shell/path_select/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/shell/path_select/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/shell/path_select/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/shell/path_select/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/shell/path_select/legacy_test.sh19
-rw-r--r--usr.bin/bmake/tests/shell/path_select/shell6
-rw-r--r--usr.bin/bmake/tests/shell/replace/Makefile17
-rw-r--r--usr.bin/bmake/tests/shell/replace/Makefile.test21
-rw-r--r--usr.bin/bmake/tests/shell/replace/expected.status.11
-rw-r--r--usr.bin/bmake/tests/shell/replace/expected.status.21
-rw-r--r--usr.bin/bmake/tests/shell/replace/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/shell/replace/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/shell/replace/expected.stdout.13
-rw-r--r--usr.bin/bmake/tests/shell/replace/expected.stdout.26
-rw-r--r--usr.bin/bmake/tests/shell/replace/legacy_test.sh17
-rw-r--r--usr.bin/bmake/tests/shell/replace/shell6
-rw-r--r--usr.bin/bmake/tests/shell/select/Makefile16
-rw-r--r--usr.bin/bmake/tests/shell/select/Makefile.test28
-rw-r--r--usr.bin/bmake/tests/shell/select/expected.status.11
-rw-r--r--usr.bin/bmake/tests/shell/select/expected.status.21
-rw-r--r--usr.bin/bmake/tests/shell/select/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/shell/select/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/shell/select/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/shell/select/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/shell/select/legacy_test.sh16
-rw-r--r--usr.bin/bmake/tests/suffixes/Makefile7
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/Makefile14
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/Makefile.test13
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/TEST1.a1
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/expected.status.11
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/expected.stdout.12
-rw-r--r--usr.bin/bmake/tests/suffixes/basic/legacy_test.sh19
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/Makefile15
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/Makefile.test7
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/TEST1.a1
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/TEST2.a1
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/expected.status.11
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/expected.stdout.12
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild1/legacy_test.sh19
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/Makefile15
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/Makefile.test12
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/TEST1.a1
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/TEST2.a1
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/expected.status.11
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/expected.stdout.12
-rw-r--r--usr.bin/bmake/tests/suffixes/src_wild2/legacy_test.sh19
-rw-r--r--usr.bin/bmake/tests/syntax/Makefile7
-rw-r--r--usr.bin/bmake/tests/syntax/directive-t0/Makefile13
-rw-r--r--usr.bin/bmake/tests/syntax/directive-t0/Makefile.test8
-rw-r--r--usr.bin/bmake/tests/syntax/directive-t0/expected.status.11
-rw-r--r--usr.bin/bmake/tests/syntax/directive-t0/expected.stderr.12
-rw-r--r--usr.bin/bmake/tests/syntax/directive-t0/expected.stdout.10
-rw-r--r--usr.bin/bmake/tests/syntax/directive-t0/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/syntax/enl/Makefile25
-rw-r--r--usr.bin/bmake/tests/syntax/enl/Makefile.test59
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.status.11
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.status.21
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.status.31
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.status.41
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.status.51
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stderr.30
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stderr.40
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stderr.50
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stdout.32
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stdout.41
-rw-r--r--usr.bin/bmake/tests/syntax/enl/expected.stdout.51
-rw-r--r--usr.bin/bmake/tests/syntax/enl/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/Makefile16
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/Makefile.test14
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/expected.status.11
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/expected.status.21
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/syntax/funny-targets/legacy_test.sh12
-rw-r--r--usr.bin/bmake/tests/syntax/semi/Makefile16
-rw-r--r--usr.bin/bmake/tests/syntax/semi/Makefile.test26
-rw-r--r--usr.bin/bmake/tests/syntax/semi/expected.status.11
-rw-r--r--usr.bin/bmake/tests/syntax/semi/expected.status.21
-rw-r--r--usr.bin/bmake/tests/syntax/semi/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/syntax/semi/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/syntax/semi/expected.stdout.12
-rw-r--r--usr.bin/bmake/tests/syntax/semi/expected.stdout.22
-rw-r--r--usr.bin/bmake/tests/syntax/semi/legacy_test.sh13
-rw-r--r--usr.bin/bmake/tests/sysmk/Makefile7
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/1/Makefile13
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.test6
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/1/expected.status.11
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/1/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/1/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/1/legacy_test.sh15
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/2/Makefile7
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/Makefile8
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/mk/Makefile9
-rw-r--r--usr.bin/bmake/tests/sysmk/t0/mk/sys.mk.test3
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/1/Makefile13
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/1/cleanup3
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/1/expected.status.11
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/1/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/1/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/1/legacy_test.sh17
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/2/Makefile7
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/Makefile8
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/mk/Makefile9
-rw-r--r--usr.bin/bmake/tests/sysmk/t1/mk/sys.mk.test3
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/1/Makefile13
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/1/cleanup3
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/1/expected.status.11
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/1/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/1/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/1/legacy_test.sh17
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/2/Makefile7
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/Makefile8
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/mk/Makefile9
-rw-r--r--usr.bin/bmake/tests/sysmk/t2/mk/sys.mk.test3
-rw-r--r--usr.bin/bmake/tests/test-new.mk9
-rw-r--r--usr.bin/bmake/tests/variables/Makefile7
-rw-r--r--usr.bin/bmake/tests/variables/modifier_M/Makefile13
-rw-r--r--usr.bin/bmake/tests/variables/modifier_M/Makefile.test18
-rw-r--r--usr.bin/bmake/tests/variables/modifier_M/expected.status.11
-rw-r--r--usr.bin/bmake/tests/variables/modifier_M/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/variables/modifier_M/expected.stdout.17
-rw-r--r--usr.bin/bmake/tests/variables/modifier_M/legacy_test.sh9
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/Makefile19
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/Makefile.test15
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.status.11
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.status.21
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.status.31
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.stderr.30
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.stdout.11
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.stdout.21
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/expected.stdout.31
-rw-r--r--usr.bin/bmake/tests/variables/modifier_t/legacy_test.sh12
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/Makefile16
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/Makefile.test15
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/expected.status.11
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/expected.status.21
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/expected.stderr.20
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/expected.stdout.12
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/expected.stdout.22
-rw-r--r--usr.bin/bmake/tests/variables/opt_V/legacy_test.sh12
-rw-r--r--usr.bin/bmake/tests/variables/t0/Makefile13
-rw-r--r--usr.bin/bmake/tests/variables/t0/Makefile.test23
-rw-r--r--usr.bin/bmake/tests/variables/t0/expected.status.11
-rw-r--r--usr.bin/bmake/tests/variables/t0/expected.stderr.10
-rw-r--r--usr.bin/bmake/tests/variables/t0/expected.stdout.115
-rw-r--r--usr.bin/bmake/tests/variables/t0/legacy_test.sh9
320 files changed, 2774 insertions, 0 deletions
diff --git a/usr.bin/bmake/tests/Makefile b/usr.bin/bmake/tests/Makefile
new file mode 100644
index 0000000..e225034
--- /dev/null
+++ b/usr.bin/bmake/tests/Makefile
@@ -0,0 +1,18 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake
+
+FILESDIR= ${TESTSDIR}
+FILES= common.sh
+FILES+= test-new.mk
+
+TESTS_SUBDIRS= archives
+TESTS_SUBDIRS+= basic
+TESTS_SUBDIRS+= execution
+TESTS_SUBDIRS+= shell
+TESTS_SUBDIRS+= suffixes
+TESTS_SUBDIRS+= syntax
+TESTS_SUBDIRS+= sysmk
+TESTS_SUBDIRS+= variables
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/README b/usr.bin/bmake/tests/README
new file mode 100644
index 0000000..1ac209b
--- /dev/null
+++ b/usr.bin/bmake/tests/README
@@ -0,0 +1,174 @@
+$FreeBSD$
+
+This directory contains regression tests for make(1).
+
+To invoke the tests, please refer to tests(7).
+
+----------------------------------------------------------------------------
+
+The rest of this file is intended for developers.
+
+The tests are invoked via the test.sh script or prove(1) from p5-Test-Harness.
+Tests are normally executed in a special test directory that is built under
+/tmp. The reason for this is, that make tests are generally influenced by
+all file in a directory, by files in one of make's obscure object directories
+as well as in other directories make happens to look into. Therefor the
+test scripts build a clean environment in the temp directory and the
+tests are executed by cd-ing into that directory and invoking make. The
+output of the make run (standard output, standard error and the exit status)
+are written into files that are created in another directory. So the layout
+for the shell/builtin test looks like:
+
+ ./shell/builtin/ - directory with test stuff
+ /tmp/make.${USER}/shell/builtin - actual test directory
+ /tmp/make.${USER}/shell/builtin.OUTPUT - output files
+
+So a full test consists of the following steps:
+
+ setup - Set up the test environment by creating the test directory
+ and populating it with the needed files. If the test
+ directory already exists an error is printed.
+
+ run - Run the test and produce the output into the output
+ directory.
+
+ show - Show the result files on the screen.
+
+ compare - Compare the results in the output directory with those
+ in the test source directory. This just prints whether
+ the test was ok or not in the format used by prove(1).
+
+ diff - Diff the output files and the expected output files.
+
+ reset - Reset the test to its initial state.
+
+ clean - Remove both the test directory and the output directory.
+
+Each of these steps can independently be invoked with the test script
+contained in each directory. These test scripts are called test.t.
+Additionally the scripts understand the following commands:
+
+ test - Run setup, run and compare.
+
+ prove - Run setup, run, compare and clean. This is identically
+ to invoking the script without an argument.
+
+ desc - Print a short test description.
+
+ update - Update the expected results from the actual results.
+
+The test script has the following syntax:
+
+ % test.t [-v] [-m path_to_make_binary] command
+
+To invoke it via prove(1) use:
+
+ % [MAKE_PROG=path_to_make_binary] prove [options] [files/directories]
+
+Example:
+ % sh test.t -m `pwd`/../obj/make run
+ % MAKE_PROG=/usr/obj/usr/src/usr.bin/make/make prove -r
+
+The test scripts use the following environment variables that can be set
+by the user in the test script's environment:
+
+ WORK_BASE
+ - Base directory for working files. If not set
+ /tmp/make.${USER} is used.
+
+ MAKE_PROG
+ - Path to the make program to test. If not set
+ /usr/bin/make is used.
+
+The following variables are available to test scripts:
+
+ SRC_BASE
+ - test source base directory. This is determined by
+ repeatedly doing cd .. and checking for common.sh.
+ Therefor this can fail if a test source directory is
+ actually a symbolic link and is physically not located
+ below the directory containing common.sh.
+
+ SUBDIR
+ - subdirectory below WORK_BASE and SRC_BASE for current test
+
+ WORK_DIR
+ - ${WORK_BASE}/${SUBDIR}
+
+ SRC_DIR
+ - ${SRC_BASE}/${SUBDIR}
+
+The following variables and functions may be defined by the test script.
+This also lists special filenames.
+
+ DESC
+ A one-line description of the test.
+
+ TEST_MAKE_DIRS
+ A list of pairs of directory names and modes. These
+ directories are created during setup and reset. When
+ the directory already exists (during reset) only the
+ mode change is applied.
+
+ TEST_MAKE_DIRS="subdir 775 subdir/sub 555"
+
+ TEST_COPY_FILES
+ A list of pairs of file names and modes. These files
+ are copied from the source to the working directory
+ during setup and reset. When the file already exists
+ (during reset) only the mode change is applied. Files
+ may be copied from/to sub-directories. The sub-directory
+ in the working directory must already exists (see
+ TEST_MAKE_DIRS).
+
+ TEST_COPY_FILES="libtest.a 444 subdir/libfoo.a 444"
+
+ TEST_TOUCH
+ List of pairs of file names and arguments to touch(1).
+ During setup and reset for each list element touch(1)
+ is executed.
+
+ TEST_TOUCH="file1 '-t 200501011257'"
+
+ TEST_LINK
+ List of pairs of filenames. Each pair is passed to ln(1).
+ All names are prefixed with the working directory.
+
+ Makefile
+ If a file with this name exists in the source directory
+ it is automatically copied to the working directory.
+
+ setup_test()
+ If this function exists it is executed at the end of the
+ setup.
+
+ reset_test()
+ If this function exists it is executed at the end of the
+ reset.
+
+ TEST_CLEAN_FILES
+ A list of file to be deleted when resetting.
+
+ TEST_N
+ Number of tests in this script. If not set this is assumed
+ to be 1.
+
+ TEST_<number>
+ Arguments to make for test number <number>. If not set
+ the default argument of test<number> is used. To run a test
+ without argument to make, set TEST_<number> to the empty string.
+
+ TEST_<number>_SKIP
+ To skip a test (for whatever reason) this should be set
+ to a string explaining the reason for skipping the test.
+
+ TEST_<number>_TODO
+ For a test that should fail this is a short string describing
+ what the problem in make(1) is that should be fixed.
+
+ run_test()
+ Function to run a test. This function gets a single argument
+ which is the number of the test to executed. The default
+ function evaluates the variable TEST_<number> and calls
+ make with the arguments in this variable.
+
diff --git a/usr.bin/bmake/tests/archives/Makefile b/usr.bin/bmake/tests/archives/Makefile
new file mode 100644
index 0000000..f80ffc2
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/archives
+
+TESTS_SUBDIRS= fmt_44bsd fmt_44bsd_mod fmt_oldbsd
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile b/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile
new file mode 100644
index 0000000..15389c8
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/archives/fmt_44bsd
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.status.3
+FILES+= expected.status.4
+FILES+= expected.status.5
+FILES+= expected.status.6
+FILES+= expected.status.7
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stderr.3
+FILES+= expected.stderr.4
+FILES+= expected.stderr.5
+FILES+= expected.stderr.6
+FILES+= expected.stderr.7
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= expected.stdout.3
+FILES+= expected.stdout.4
+FILES+= expected.stdout.5
+FILES+= expected.stdout.6
+FILES+= expected.stdout.7
+FILES+= libtest.a
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.test b/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.test
new file mode 100644
index 0000000..5a8b065
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/Makefile.test
@@ -0,0 +1,61 @@
+# $FreeBSD$
+# This test checks the code reading archive files. The archive file
+# is a BSD4.4 file with __.SYMTAB and #1/N long file names.
+
+#############################################################################
+
+# should be ok
+test1: libtest.a(short.o)
+ @:
+
+libtest.a(short.o): ood
+ @:
+
+#############################################################################
+
+# should be ok
+test2: libtest.a(exactly15char.o)
+ @:
+
+libtest.a(exactly15char.o): ood
+ @:
+
+#############################################################################
+
+# should be ok
+test3: libtest.a(exactly16chars.o)
+ @:
+
+libtest.a(exactly16chars.o): ood
+ @:
+
+#############################################################################
+
+# should be ok
+test4: libtest.a(verylongobjectname.o)
+ @:
+
+libtest.a(verylongobjectname.o): ood
+ @:
+
+#############################################################################
+
+# Truncated to 16 characters
+# should fail
+test5: libtest.a(verylongobjectna)
+ @:
+
+#############################################################################
+
+# Truncated to 15 characters
+# should fail
+test6: libtest.a(verylongobjectn)
+ @:
+
+#############################################################################
+
+# should fail
+test7: libtest.a(\#1/20)
+ @:
+
+ood:
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.1 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.2 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.3 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.3
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.3
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.4 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.4
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.4
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.5 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.5
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.5
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.6 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.6
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.6
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.7 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.7
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.status.7
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.1 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.1
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.2 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.3 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.3
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.4 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.4
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.5 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.5
new file mode 100644
index 0000000..7b91643
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.5
@@ -0,0 +1 @@
+make: don't know how to make verylongobjectna. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.6 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.6
new file mode 100644
index 0000000..fd15190
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.6
@@ -0,0 +1 @@
+make: don't know how to make verylongobjectn. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.7 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.7
new file mode 100644
index 0000000..cb572e1
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stderr.7
@@ -0,0 +1 @@
+make: don't know how to make #1/20. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.1 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.1
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.2 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.3 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.3
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.4 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.4
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.5 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.5
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.6 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.6
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.6
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.7 b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.7
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/expected.stdout.7
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/legacy_test.sh b/usr.bin/bmake/tests/archives/fmt_44bsd/legacy_test.sh
new file mode 100644
index 0000000..2604c96
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/legacy_test.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Archive parsing (BSD4.4 format)."
+
+# Setup
+TEST_COPY_FILES="libtest.a 644"
+
+# Run
+TEST_N=7
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd/libtest.a b/usr.bin/bmake/tests/archives/fmt_44bsd/libtest.a
new file mode 100644
index 0000000..891ce6e
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd/libtest.a
Binary files differ
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile
new file mode 100644
index 0000000..1d2f6e2
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/archives/fmt_44bsd_mod
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.status.3
+FILES+= expected.status.4
+FILES+= expected.status.5
+FILES+= expected.status.6
+FILES+= expected.status.7
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stderr.3
+FILES+= expected.stderr.4
+FILES+= expected.stderr.5
+FILES+= expected.stderr.6
+FILES+= expected.stderr.7
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= expected.stdout.3
+FILES+= expected.stdout.4
+FILES+= expected.stdout.5
+FILES+= expected.stdout.6
+FILES+= expected.stdout.7
+FILES+= libtest.a
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.test b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.test
new file mode 100644
index 0000000..cd999da
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/Makefile.test
@@ -0,0 +1,64 @@
+# $FreeBSD$
+# This test checks the code reading archive files. The archive file
+# is a BSD4.4 file with __.SYMTAB and #1/N long file names.
+#
+# The modification of the archive consists in slashes appended to short names.
+#
+
+#############################################################################
+
+# must be ok
+test1: libtest.a(short.o)
+ @:
+
+libtest.a(short.o): ood
+ @:
+
+#############################################################################
+
+# must be ok
+test2: libtest.a(exactly15char.o)
+ @:
+
+libtest.a(exactly15char.o): ood
+ @:
+
+#############################################################################
+
+# must be ok
+test3: libtest.a(exactly16chars.o)
+ @:
+
+libtest.a(exactly16chars.o): ood
+ @:
+
+#############################################################################
+
+# must be ok
+test4: libtest.a(verylongobjectname.o)
+ @:
+
+libtest.a(verylongobjectname.o): ood
+ @:
+
+#############################################################################
+
+# Truncated to 16 characters
+# must fail
+test5: libtest.a(verylongobjectna)
+ @:
+
+#############################################################################
+
+# Truncated to 15 characters
+# must fail
+test6: libtest.a(verylongobjectn)
+ @:
+
+#############################################################################
+
+# must fail
+test7: libtest.a(\#1/20)
+ @:
+
+ood:
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.1 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.2 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.3 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.3
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.3
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.4 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.4
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.4
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.5 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.5
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.5
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.6 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.6
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.6
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.7 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.7
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.status.7
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.1 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.1
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.2 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.3 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.3
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.4 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.4
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.5 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.5
new file mode 100644
index 0000000..7b91643
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.5
@@ -0,0 +1 @@
+make: don't know how to make verylongobjectna. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.6 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.6
new file mode 100644
index 0000000..fd15190
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.6
@@ -0,0 +1 @@
+make: don't know how to make verylongobjectn. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.7 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.7
new file mode 100644
index 0000000..cb572e1
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stderr.7
@@ -0,0 +1 @@
+make: don't know how to make #1/20. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.1 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.1
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.2 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.2
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.3 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.3
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.4 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.4
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.5 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.5
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.6 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.6
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.6
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.7 b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.7
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/expected.stdout.7
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/legacy_test.sh b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/legacy_test.sh
new file mode 100644
index 0000000..bf13f22
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/legacy_test.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Archive parsing (modified BSD4.4 format)."
+
+# Setup
+TEST_COPY_FILES="libtest.a 644"
+
+# Run
+TEST_N=7
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/archives/fmt_44bsd_mod/libtest.a b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/libtest.a
new file mode 100644
index 0000000..57bc407
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_44bsd_mod/libtest.a
Binary files differ
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile b/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile
new file mode 100644
index 0000000..2a96124
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile
@@ -0,0 +1,32 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/archives/fmt_oldbsd
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.status.3
+FILES+= expected.status.4
+FILES+= expected.status.5
+FILES+= expected.status.6
+FILES+= expected.status.7
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stderr.3
+FILES+= expected.stderr.4
+FILES+= expected.stderr.5
+FILES+= expected.stderr.6
+FILES+= expected.stderr.7
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= expected.stdout.3
+FILES+= expected.stdout.4
+FILES+= expected.stdout.5
+FILES+= expected.stdout.6
+FILES+= expected.stdout.7
+FILES+= libtest.a
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.test b/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.test
new file mode 100644
index 0000000..b8f5116
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/Makefile.test
@@ -0,0 +1,62 @@
+# $FreeBSD$
+# This test checks the code reading archive files. The archive file
+# is an old BSD file with __.SYMTAB and no long file names. Filenames
+# are truncated to 16 characters.
+
+#############################################################################
+
+# must be ok
+test1: libtest.a(short.o)
+ @:
+
+libtest.a(short.o): ood
+ @:
+
+#############################################################################
+
+# must be ok
+test2: libtest.a(exactly15char.o)
+ @:
+
+libtest.a(exactly15char.o): ood
+ @:
+
+#############################################################################
+
+# must be ok
+test3: libtest.a(exactly16chars.o)
+ @:
+
+libtest.a(exactly16chars.o): ood
+ @:
+
+#############################################################################
+
+# must be ok
+test4: libtest.a(verylongobjectname.o)
+ @:
+
+libtest.a(verylongobjectname.o): ood
+ @:
+
+#############################################################################
+
+# Truncated to 16 characters
+# must be ok
+test5: libtest.a(verylongobjectna)
+ @:
+
+#############################################################################
+
+# Truncated to 15 characters
+# must fail
+test6: libtest.a(verylongobjectn)
+ @:
+
+#############################################################################
+
+# must fail
+test7: libtest.a(\#1/20)
+ @:
+
+ood:
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.1 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.2 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.3 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.3
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.3
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.4 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.4
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.4
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.5 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.5
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.5
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.6 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.6
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.6
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.7 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.7
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.status.7
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.1 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.1
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.2 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.2
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.3 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.3
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.4 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.4
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.5 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.5
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.6 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.6
new file mode 100644
index 0000000..fd15190
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.6
@@ -0,0 +1 @@
+make: don't know how to make verylongobjectn. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.7 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.7
new file mode 100644
index 0000000..cb572e1
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stderr.7
@@ -0,0 +1 @@
+make: don't know how to make #1/20. Stop
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.1 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.1
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.2 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.2
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.3 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.3
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.4 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.4
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.5 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.5
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.6 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.6
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.6
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.7 b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.7
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/expected.stdout.7
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/legacy_test.sh b/usr.bin/bmake/tests/archives/fmt_oldbsd/legacy_test.sh
new file mode 100644
index 0000000..c7980c5
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/legacy_test.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Archive parsing (old BSD format)."
+
+# Setup
+TEST_COPY_FILES="libtest.a 644"
+
+# Run
+TEST_N=7
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/archives/fmt_oldbsd/libtest.a b/usr.bin/bmake/tests/archives/fmt_oldbsd/libtest.a
new file mode 100644
index 0000000..3434c53
--- /dev/null
+++ b/usr.bin/bmake/tests/archives/fmt_oldbsd/libtest.a
Binary files differ
diff --git a/usr.bin/bmake/tests/basic/Makefile b/usr.bin/bmake/tests/basic/Makefile
new file mode 100644
index 0000000..56dfb33
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/basic
+
+TESTS_SUBDIRS= t0 t1 t2 t3
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/basic/t0/Makefile b/usr.bin/bmake/tests/basic/t0/Makefile
new file mode 100644
index 0000000..1235659
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t0/Makefile
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/basic/t0
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/basic/t0/expected.status.1 b/usr.bin/bmake/tests/basic/t0/expected.status.1
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t0/expected.status.1
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/basic/t0/expected.stderr.1 b/usr.bin/bmake/tests/basic/t0/expected.stderr.1
new file mode 100644
index 0000000..90280c8
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t0/expected.stderr.1
@@ -0,0 +1 @@
+make: no target to make.
diff --git a/usr.bin/bmake/tests/basic/t0/expected.stdout.1 b/usr.bin/bmake/tests/basic/t0/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t0/expected.stdout.1
diff --git a/usr.bin/bmake/tests/basic/t0/legacy_test.sh b/usr.bin/bmake/tests/basic/t0/legacy_test.sh
new file mode 100644
index 0000000..d23418a
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t0/legacy_test.sh
@@ -0,0 +1,16 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="An empty Makefile file and no target given."
+
+# Setup
+TEST_TOUCH="Makefile ''"
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/basic/t1/Makefile b/usr.bin/bmake/tests/basic/t1/Makefile
new file mode 100644
index 0000000..732dc65
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t1/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/basic/t1
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/basic/t1/Makefile.test b/usr.bin/bmake/tests/basic/t1/Makefile.test
new file mode 100644
index 0000000..d120087
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t1/Makefile.test
@@ -0,0 +1,5 @@
+# $FreeBSD$
+#
+# Just a target and nothing else. No target on command line.
+#
+all:
diff --git a/usr.bin/bmake/tests/basic/t1/expected.status.1 b/usr.bin/bmake/tests/basic/t1/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/basic/t1/expected.stderr.1 b/usr.bin/bmake/tests/basic/t1/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t1/expected.stderr.1
diff --git a/usr.bin/bmake/tests/basic/t1/expected.stdout.1 b/usr.bin/bmake/tests/basic/t1/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t1/expected.stdout.1
diff --git a/usr.bin/bmake/tests/basic/t1/legacy_test.sh b/usr.bin/bmake/tests/basic/t1/legacy_test.sh
new file mode 100644
index 0000000..b07f927
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t1/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="A Makefile file with only a 'all:' file dependency specification."
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/basic/t2/Makefile b/usr.bin/bmake/tests/basic/t2/Makefile
new file mode 100644
index 0000000..58c36ff
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t2/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/basic/t2
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/basic/t2/Makefile.test b/usr.bin/bmake/tests/basic/t2/Makefile.test
new file mode 100644
index 0000000..ab8fe49
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t2/Makefile.test
@@ -0,0 +1,6 @@
+# $FreeBSD$
+#
+# Just a target and a command. No command line targets.
+#
+all:
+ echo hello
diff --git a/usr.bin/bmake/tests/basic/t2/expected.status.1 b/usr.bin/bmake/tests/basic/t2/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t2/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/basic/t2/expected.stderr.1 b/usr.bin/bmake/tests/basic/t2/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t2/expected.stderr.1
diff --git a/usr.bin/bmake/tests/basic/t2/expected.stdout.1 b/usr.bin/bmake/tests/basic/t2/expected.stdout.1
new file mode 100644
index 0000000..e618540
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t2/expected.stdout.1
@@ -0,0 +1,2 @@
+echo hello
+hello
diff --git a/usr.bin/bmake/tests/basic/t2/legacy_test.sh b/usr.bin/bmake/tests/basic/t2/legacy_test.sh
new file mode 100644
index 0000000..da4c60a
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t2/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="A Makefile file with only a 'all:' file dependency specification, and shell command."
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/basic/t3/Makefile b/usr.bin/bmake/tests/basic/t3/Makefile
new file mode 100644
index 0000000..a173414
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t3/Makefile
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/basic/t3
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/basic/t3/expected.status.1 b/usr.bin/bmake/tests/basic/t3/expected.status.1
new file mode 100644
index 0000000..0cfbf08
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t3/expected.status.1
@@ -0,0 +1 @@
+2
diff --git a/usr.bin/bmake/tests/basic/t3/expected.stderr.1 b/usr.bin/bmake/tests/basic/t3/expected.stderr.1
new file mode 100644
index 0000000..90280c8
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t3/expected.stderr.1
@@ -0,0 +1 @@
+make: no target to make.
diff --git a/usr.bin/bmake/tests/basic/t3/expected.stdout.1 b/usr.bin/bmake/tests/basic/t3/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t3/expected.stdout.1
diff --git a/usr.bin/bmake/tests/basic/t3/legacy_test.sh b/usr.bin/bmake/tests/basic/t3/legacy_test.sh
new file mode 100644
index 0000000..3c41bb3
--- /dev/null
+++ b/usr.bin/bmake/tests/basic/t3/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="No Makefile file, no command line target."
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/common.sh b/usr.bin/bmake/tests/common.sh
new file mode 100644
index 0000000..5c5df1e
--- /dev/null
+++ b/usr.bin/bmake/tests/common.sh
@@ -0,0 +1,533 @@
+# $FreeBSD$
+#
+# Common code used run regression tests for usr.bin/make.
+
+#
+# Output a message and exit with an error.
+#
+fatal()
+{
+ echo "fatal: $*" >/dev/stderr
+ exit 1
+}
+
+make_is_fmake() {
+ # This test is not very reliable but works for now: the old fmake
+ # does have a -v option while bmake doesn't.
+ ${MAKE_PROG} -f Makefile.non-existent -v 2>&1 | \
+ grep -q "cannot open.*non-existent"
+}
+
+#
+# Check whether the working directory exists - it must.
+#
+ensure_workdir()
+{
+ if [ ! -d ${WORK_DIR} ] ; then
+ fatal "working directory ${WORK_DIR} does not exist."
+ fi
+}
+
+#
+# Make sure all tests have been run
+#
+ensure_run()
+{
+ if [ -z "${TEST_N}" ] ; then
+ TEST_N=1
+ fi
+
+ FAIL=
+ N=1
+ while [ ${N} -le ${TEST_N} ] ; do
+ if ! skip_test ${N} ; then
+ if [ ! -f ${OUTPUT_DIR}/status.${N} -o \
+ ! -f ${OUTPUT_DIR}/stdout.${N} -o \
+ ! -f ${OUTPUT_DIR}/stderr.${N} ] ; then
+ echo "Test ${SUBDIR}/${N} no yet run"
+ FAIL=yes
+ fi
+ fi
+ N=$((N + 1))
+ done
+
+ if [ ! -z "${FAIL}" ] ; then
+ exit 1
+ fi
+}
+
+#
+# Output usage messsage.
+#
+print_usage()
+{
+ echo "Usage: sh -v -m <path> -w <dir> $0 command(s)"
+ echo " setup - setup working directory"
+ echo " run - run the tests"
+ echo " show - show test results"
+ echo " compare - compare actual and expected results"
+ echo " diff - diff actual and expected results"
+ echo " reset - reset the test to its initial state"
+ echo " clean - delete working and output directory"
+ echo " test - setup + run + compare"
+ echo " prove - setup + run + compare + clean"
+ echo " desc - print short description"
+ echo " update - update the expected results with the current results"
+ echo " help - show this information"
+}
+
+#
+# Return 0 if we should skip the test. 1 otherwise
+#
+skip_test()
+{
+ eval skip=\${TEST_${1}_SKIP}
+ if [ -z "${skip}" ] ; then
+ return 1
+ else
+ return 0
+ fi
+}
+
+#
+# Common function for setup and reset.
+#
+common_setup()
+{
+ #
+ # If a Makefile exists in the source directory - copy it over
+ #
+ if [ -e ${SRC_DIR}/Makefile.test -a ! -e ${WORK_DIR}/Makefile ] ; then
+ cp ${SRC_DIR}/Makefile.test ${WORK_DIR}/Makefile
+ fi
+
+ #
+ # If the TEST_MAKE_DIRS variable is set, create those directories
+ #
+ set -- ${TEST_MAKE_DIRS}
+ while [ $# -ne 0 ] ; do
+ if [ ! -d ${WORK_DIR}/${1} ] ; then
+ mkdir -p -m ${2} ${WORK_DIR}/${1}
+ else
+ chmod ${2} ${WORK_DIR}/${1}
+ fi
+ shift ; shift
+ done
+
+ #
+ # If the TEST_COPY_FILES variable is set, copy those files over to
+ # the working directory. The value is assumed to be pairs of
+ # filenames and modes.
+ #
+ set -- ${TEST_COPY_FILES}
+ while [ $# -ne 0 ] ; do
+ local dstname="$(echo ${1} | sed -e 's,Makefile.test,Makefile,')"
+ if [ ! -e ${WORK_DIR}/${dstname} ] ; then
+ cp ${SRC_DIR}/${1} ${WORK_DIR}/${dstname}
+ fi
+ chmod ${2} ${WORK_DIR}/${dstname}
+ shift ; shift
+ done
+
+ #
+ # If the TEST_TOUCH variable is set, it is taken to be a list
+ # of pairs of filenames and arguments to touch(1). The arguments
+ # to touch must be surrounded by single quotes if there are more
+ # than one argument.
+ #
+ eval set -- ${TEST_TOUCH}
+ while [ $# -ne 0 ] ; do
+ eval touch ${2} ${WORK_DIR}/${1}
+ shift ; shift
+ done
+
+ #
+ # Now create links
+ #
+ eval set -- ${TEST_LINKS}
+ while [ $# -ne 0 ] ; do
+ eval ln ${WORK_DIR}/${1} ${WORK_DIR}/${2}
+ shift ; shift
+ done
+}
+
+#
+# Setup the test. This creates the working and output directories and
+# populates it with files. If there is a setup_test() function - call it.
+#
+eval_setup()
+{
+ #
+ # Check whether the working directory exists. If it does exit
+ # fatally so that we don't clobber a test the user is working on.
+ #
+ if [ -d ${WORK_DIR} ] ; then
+ fatal "working directory ${WORK_DIR} already exists."
+ fi
+
+ #
+ # Now create it and the output directory
+ #
+ mkdir -p ${WORK_DIR}
+ rm -rf ${OUTPUT_DIR}
+ mkdir -p ${OUTPUT_DIR}
+
+ #
+ # Common stuff
+ #
+ common_setup
+
+ #
+ # Now after all execute the user's setup function if it exists.
+ #
+ setup_test
+}
+
+#
+# Default setup_test function does nothing. This may be overriden by
+# the test.
+#
+setup_test()
+{
+}
+
+#
+# Reset the test. Here we need to rely on information from the test.
+# We executed the same steps as in the setup, by try not to clobber existing
+# files.
+# All files and directories that are listed on the TEST_CLEAN_FILES
+# variable are removed. Then the TEST_TOUCH list is executed and finally
+# the reset_test() function called if it exists.
+#
+eval_reset()
+{
+ ensure_workdir
+
+ #
+ # Clean the output directory
+ #
+ rm -rf ${OUTPUT_DIR}/*
+
+ #
+ # Common stuff
+ #
+ common_setup
+
+ #
+ # Remove files.
+ #
+ for f in ${TEST_CLEAN_FILES} ; do
+ rm -rf ${WORK_DIR}/${f}
+ done
+
+ #
+ # Execute test's function
+ #
+ reset_test
+}
+
+#
+# Default reset_test function does nothing. This may be overriden by
+# the test.
+#
+reset_test()
+{
+}
+
+#
+# Clean the test. This simply removes the working and output directories.
+#
+eval_clean()
+{
+ #
+ # If you have special cleaning needs, provide a 'cleanup' shell script.
+ #
+ if [ -n "${TEST_CLEANUP}" ] ; then
+ . ${SRC_DIR}/cleanup
+ fi
+ if [ -z "${NO_TEST_CLEANUP}" ] ; then
+ rm -rf ${WORK_DIR}
+ rm -rf ${OUTPUT_DIR}
+ fi
+}
+
+#
+# Run the test.
+#
+eval_run()
+{
+ ensure_workdir
+
+ if [ -z "${TEST_N}" ] ; then
+ TEST_N=1
+ fi
+
+ N=1
+ while [ ${N} -le ${TEST_N} ] ; do
+ if ! skip_test ${N} ; then
+ ( cd ${WORK_DIR} ;
+ exec 1>${OUTPUT_DIR}/stdout.${N} 2>${OUTPUT_DIR}/stderr.${N}
+ run_test ${N}
+ echo $? >${OUTPUT_DIR}/status.${N}
+ )
+ fi
+ N=$((N + 1))
+ done
+}
+
+#
+# Default run_test() function. It can be replaced by the
+# user specified regression test. The argument to this function is
+# the test number.
+#
+run_test()
+{
+ eval args=\${TEST_${1}-test${1}}
+ ${MAKE_PROG} $args
+}
+
+#
+# Show test results.
+#
+eval_show()
+{
+ ensure_workdir
+
+ if [ -z "${TEST_N}" ] ; then
+ TEST_N=1
+ fi
+
+ N=1
+ while [ ${N} -le ${TEST_N} ] ; do
+ if ! skip_test ${N} ; then
+ echo "=== Test ${N} Status =================="
+ cat ${OUTPUT_DIR}/status.${N}
+ echo ".......... Stdout .................."
+ cat ${OUTPUT_DIR}/stdout.${N}
+ echo ".......... Stderr .................."
+ cat ${OUTPUT_DIR}/stderr.${N}
+ fi
+ N=$((N + 1))
+ done
+}
+
+#
+# Compare results with expected results
+#
+eval_compare()
+{
+ ensure_workdir
+ ensure_run
+
+ if [ -z "${TEST_N}" ] ; then
+ TEST_N=1
+ fi
+
+ echo "1..${TEST_N}"
+ N=1
+ while [ ${N} -le ${TEST_N} ] ; do
+ fail=
+ todo=
+ skip=
+ if ! skip_test ${N} ; then
+ do_compare stdout ${N} || fail="${fail}stdout "
+ do_compare stderr ${N} || fail="${fail}stderr "
+ do_compare status ${N} || fail="${fail}status "
+ eval todo=\${TEST_${N}_TODO}
+ else
+ eval skip=\${TEST_${N}_SKIP}
+ fi
+ msg=
+ if [ ! -z "$fail" ]; then
+ msg="${msg}not "
+ fi
+ msg="${msg}ok ${N} ${SUBDIR}/${N}"
+ if [ ! -z "$fail" -o ! -z "$todo" -o ! -z "$skip" ]; then
+ msg="${msg} # "
+ fi
+ if [ ! -z "$skip" ] ; then
+ msg="${msg}skip ${skip}; "
+ fi
+ if [ ! -z "$todo" ] ; then
+ msg="${msg}TODO ${todo}; "
+ fi
+ if [ ! -z "$fail" ] ; then
+ msg="${msg}reason: ${fail}"
+ fi
+ echo ${msg}
+ N=$((N + 1))
+ done
+}
+
+#
+# Check if the test result is the same as the expected result.
+#
+# $1 Input file
+# $2 Test number
+#
+do_compare()
+{
+ local EXPECTED RESULT
+ EXPECTED="${SRC_DIR}/expected.$1.$2"
+ RESULT="${OUTPUT_DIR}/$1.$2"
+
+ if [ -f $EXPECTED ]; then
+ cat $RESULT | sed -e "s,^$(basename $MAKE_PROG):,make:," | \
+ diff -u $EXPECTED -
+ #diff -q $EXPECTED - 1>/dev/null 2>/dev/null
+ return $?
+ else
+ return 1 # FAIL
+ fi
+}
+
+#
+# Diff current and expected results
+#
+eval_diff()
+{
+ ensure_workdir
+ ensure_run
+
+ if [ -z "${TEST_N}" ] ; then
+ TEST_N=1
+ fi
+
+ N=1
+ while [ ${N} -le ${TEST_N} ] ; do
+ if ! skip_test ${N} ; then
+ FAIL=
+ do_diff stdout ${N}
+ do_diff stderr ${N}
+ do_diff status ${N}
+ fi
+ N=$((N + 1))
+ done
+}
+
+#
+# Check if the test result is the same as the expected result.
+#
+# $1 Input file
+# $2 Test number
+#
+do_diff()
+{
+ local EXPECTED RESULT
+ EXPECTED="${SRC_DIR}/expected.$1.$2"
+ RESULT="${OUTPUT_DIR}/$1.$2"
+
+ echo diff -u $EXPECTED $RESULT
+ if [ -f $EXPECTED ]; then
+ diff -u $EXPECTED $RESULT
+ else
+ echo "${EXPECTED} does not exist"
+ fi
+}
+
+#
+# Update expected results
+#
+eval_update()
+{
+ ensure_workdir
+ ensure_run
+
+ if [ -z "${TEST_N}" ] ; then
+ TEST_N=1
+ fi
+
+ FAIL=
+ N=1
+ while [ ${N} -le ${TEST_N} ] ; do
+ if ! skip_test ${N} ; then
+ cp ${OUTPUT_DIR}/stdout.${N} expected.stdout.${N}
+ cp ${OUTPUT_DIR}/stderr.${N} expected.stderr.${N}
+ cp ${OUTPUT_DIR}/status.${N} expected.status.${N}
+ fi
+ N=$((N + 1))
+ done
+}
+
+#
+# Print description
+#
+eval_desc()
+{
+ echo "${SUBDIR}: ${DESC}"
+}
+
+#
+# Run the test
+#
+eval_test()
+{
+ eval_setup
+ eval_run
+ eval_compare
+}
+
+#
+# Run the test for prove(1)
+#
+eval_prove()
+{
+ eval_setup
+ eval_run
+ eval_compare
+ eval_clean
+}
+
+#
+# Main function. Execute the command(s) on the command line.
+#
+eval_cmd()
+{
+ if [ $# -eq 0 ] ; then
+ # if no arguments given default to 'prove'
+ set -- prove
+ fi
+
+ if ! make_is_fmake ; then
+ for i in $(jot ${TEST_N:-1}) ; do
+ eval TEST_${i}_SKIP=\"make is not fmake\"
+ done
+ fi
+
+ for i
+ do
+ case $i in
+
+ setup | run | compare | diff | clean | reset | show | \
+ test | prove | desc | update)
+ eval eval_$i
+ ;;
+ * | help)
+ print_usage
+ ;;
+ esac
+ done
+}
+
+##############################################################################
+#
+# Main code
+#
+
+#
+# Determine our sub-directory. Argh.
+#
+SRC_DIR=$(dirname $0)
+SRC_BASE=`cd ${SRC_DIR} ; while [ ! -f common.sh ] ; do cd .. ; done ; pwd`
+SUBDIR=`echo ${SRC_DIR} | sed "s@${SRC_BASE}/@@"`
+
+#
+# Construct working directory
+#
+WORK_DIR=$(pwd)/work/${SUBDIR}
+OUTPUT_DIR=${WORK_DIR}.OUTPUT
+
+#
+# Make to use
+#
+MAKE_PROG=${MAKE_PROG:-/usr/bin/make}
diff --git a/usr.bin/bmake/tests/execution/Makefile b/usr.bin/bmake/tests/execution/Makefile
new file mode 100644
index 0000000..2c91bbb
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/execution
+
+TESTS_SUBDIRS= ellipsis empty joberr plus
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/execution/ellipsis/Makefile b/usr.bin/bmake/tests/execution/ellipsis/Makefile
new file mode 100644
index 0000000..5629b4b
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/ellipsis/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/execution/ellipsis
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/execution/ellipsis/Makefile.test b/usr.bin/bmake/tests/execution/ellipsis/Makefile.test
new file mode 100644
index 0000000..d19f642
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/ellipsis/Makefile.test
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+ELLIPSIS= ...
+
+check-ellipsis:
+ @${MAKE} -f ${MAKEFILE} do-$@
+ @${MAKE} -f ${MAKEFILE} -j2 do-$@
+ @${MAKE} -f ${MAKEFILE} -j2 -B do-$@
+
+do-check-ellipsis: do-check-ellipsis-1 do-check-ellipsis-2
+.ORDER: do-check-ellipsis-1 do-check-ellipsis-2
+
+do-check-ellipsis-1:
+ @echo before $@
+ ${ELLIPSIS}
+ @echo after $@
+
+do-check-ellipsis-2:
+ @echo before $@
+ ${ELLIPSIS}
+ @echo after $@
diff --git a/usr.bin/bmake/tests/execution/ellipsis/expected.status.1 b/usr.bin/bmake/tests/execution/ellipsis/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/ellipsis/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/execution/ellipsis/expected.stderr.1 b/usr.bin/bmake/tests/execution/ellipsis/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/ellipsis/expected.stderr.1
diff --git a/usr.bin/bmake/tests/execution/ellipsis/expected.stdout.1 b/usr.bin/bmake/tests/execution/ellipsis/expected.stdout.1
new file mode 100644
index 0000000..a7e5727
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/ellipsis/expected.stdout.1
@@ -0,0 +1,12 @@
+before do-check-ellipsis-1
+before do-check-ellipsis-2
+after do-check-ellipsis-1
+after do-check-ellipsis-2
+before do-check-ellipsis-1
+before do-check-ellipsis-2
+after do-check-ellipsis-1
+after do-check-ellipsis-2
+before do-check-ellipsis-1
+before do-check-ellipsis-2
+after do-check-ellipsis-1
+after do-check-ellipsis-2
diff --git a/usr.bin/bmake/tests/execution/ellipsis/legacy_test.sh b/usr.bin/bmake/tests/execution/ellipsis/legacy_test.sh
new file mode 100644
index 0000000..9e9cd01
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/ellipsis/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Ellipsis command from variable"
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/execution/empty/Makefile b/usr.bin/bmake/tests/execution/empty/Makefile
new file mode 100644
index 0000000..6421b96
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/empty/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/execution/empty
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/execution/empty/Makefile.test b/usr.bin/bmake/tests/execution/empty/Makefile.test
new file mode 100644
index 0000000..f687bce
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/empty/Makefile.test
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+EMPTY=
+
+check-empty:
+ @${MAKE} -f ${MAKEFILE} do-$@
+ @${MAKE} -f ${MAKEFILE} -j2 do-$@
+ @${MAKE} -f ${MAKEFILE} -j2 -B do-$@
+
+do-check-empty:
+ ${EMPTY}
+ @${EMPTY}
+ @-${EMPTY}
diff --git a/usr.bin/bmake/tests/execution/empty/expected.status.1 b/usr.bin/bmake/tests/execution/empty/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/empty/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/execution/empty/expected.stderr.1 b/usr.bin/bmake/tests/execution/empty/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/empty/expected.stderr.1
diff --git a/usr.bin/bmake/tests/execution/empty/expected.stdout.1 b/usr.bin/bmake/tests/execution/empty/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/empty/expected.stdout.1
diff --git a/usr.bin/bmake/tests/execution/empty/legacy_test.sh b/usr.bin/bmake/tests/execution/empty/legacy_test.sh
new file mode 100644
index 0000000..e02d175
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/empty/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Empty command (from variable)"
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/execution/joberr/Makefile b/usr.bin/bmake/tests/execution/joberr/Makefile
new file mode 100644
index 0000000..d183eb1
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/joberr/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/execution/joberr
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/execution/joberr/Makefile.test b/usr.bin/bmake/tests/execution/joberr/Makefile.test
new file mode 100644
index 0000000..aca86e8
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/joberr/Makefile.test
@@ -0,0 +1,10 @@
+# $FreeBSD$
+
+check-joberr:
+.for _t in 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
+ @-${MAKE} -f ${MAKEFILE} -j2 do-$@
+.endfor
+
+do-check-joberr:
+ @echo "Error: build failed"
+ @exit 1
diff --git a/usr.bin/bmake/tests/execution/joberr/expected.status.1 b/usr.bin/bmake/tests/execution/joberr/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/joberr/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/execution/joberr/expected.stderr.1 b/usr.bin/bmake/tests/execution/joberr/expected.stderr.1
new file mode 100644
index 0000000..d0c8a2e
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/joberr/expected.stderr.1
@@ -0,0 +1,30 @@
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
+1 error
diff --git a/usr.bin/bmake/tests/execution/joberr/expected.stdout.1 b/usr.bin/bmake/tests/execution/joberr/expected.stdout.1
new file mode 100644
index 0000000..0ee28f4
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/joberr/expected.stdout.1
@@ -0,0 +1,90 @@
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+Error: build failed
+*** [do-check-joberr] Error code 1
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
+*** [check-joberr] Error code 2 (ignored)
diff --git a/usr.bin/bmake/tests/execution/joberr/legacy_test.sh b/usr.bin/bmake/tests/execution/joberr/legacy_test.sh
new file mode 100644
index 0000000..429bfe1
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/joberr/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Test job make error output"
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/execution/plus/Makefile b/usr.bin/bmake/tests/execution/plus/Makefile
new file mode 100644
index 0000000..8b489d5
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/plus/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/execution/plus
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/execution/plus/Makefile.test b/usr.bin/bmake/tests/execution/plus/Makefile.test
new file mode 100644
index 0000000..ae3bdc3
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/plus/Makefile.test
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+check-+:
+ @${MAKE} -f ${MAKEFILE} -j2 -n do-$@
+
+do-check-+:
+ @+echo $@
diff --git a/usr.bin/bmake/tests/execution/plus/expected.status.1 b/usr.bin/bmake/tests/execution/plus/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/plus/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/execution/plus/expected.stderr.1 b/usr.bin/bmake/tests/execution/plus/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/plus/expected.stderr.1
diff --git a/usr.bin/bmake/tests/execution/plus/expected.stdout.1 b/usr.bin/bmake/tests/execution/plus/expected.stdout.1
new file mode 100644
index 0000000..b334fc7
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/plus/expected.stdout.1
@@ -0,0 +1 @@
+do-check-+
diff --git a/usr.bin/bmake/tests/execution/plus/legacy_test.sh b/usr.bin/bmake/tests/execution/plus/legacy_test.sh
new file mode 100644
index 0000000..0737d1b
--- /dev/null
+++ b/usr.bin/bmake/tests/execution/plus/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Test '+command' execution with -n -jX"
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/shell/Makefile b/usr.bin/bmake/tests/shell/Makefile
new file mode 100644
index 0000000..13b570e
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/shell
+
+TESTS_SUBDIRS= builtin meta path path_select replace select
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/shell/builtin/Makefile b/usr.bin/bmake/tests/shell/builtin/Makefile
new file mode 100644
index 0000000..cd458a9
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/shell/builtin
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= sh
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/shell/builtin/Makefile.test b/usr.bin/bmake/tests/shell/builtin/Makefile.test
new file mode 100644
index 0000000..0376478
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/Makefile.test
@@ -0,0 +1,18 @@
+#
+# In compat mode (the default without -j) a line that contains no shell
+# meta characters and no shell builtins is not passed to the shell but
+# executed directly. In our example the ls line without meta characters
+# will really execute ls, while the line with meta characters will execute
+# our special shell.
+#
+# $FreeBSD$
+
+.SHELL: path="${.CURDIR}/sh"
+
+.PHONY: builtin no-builtin
+
+builtin:
+ @exec ls -d .
+
+no-builtin:
+ @ls -d .
diff --git a/usr.bin/bmake/tests/shell/builtin/expected.status.1 b/usr.bin/bmake/tests/shell/builtin/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/builtin/expected.status.2 b/usr.bin/bmake/tests/shell/builtin/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/builtin/expected.stderr.1 b/usr.bin/bmake/tests/shell/builtin/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/expected.stderr.1
diff --git a/usr.bin/bmake/tests/shell/builtin/expected.stderr.2 b/usr.bin/bmake/tests/shell/builtin/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/expected.stderr.2
diff --git a/usr.bin/bmake/tests/shell/builtin/expected.stdout.1 b/usr.bin/bmake/tests/shell/builtin/expected.stdout.1
new file mode 100644
index 0000000..9c558e3
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/expected.stdout.1
@@ -0,0 +1 @@
+.
diff --git a/usr.bin/bmake/tests/shell/builtin/expected.stdout.2 b/usr.bin/bmake/tests/shell/builtin/expected.stdout.2
new file mode 100644
index 0000000..e350eaf
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/expected.stdout.2
@@ -0,0 +1 @@
+-ec exec ls -d .
diff --git a/usr.bin/bmake/tests/shell/builtin/legacy_test.sh b/usr.bin/bmake/tests/shell/builtin/legacy_test.sh
new file mode 100644
index 0000000..6347583
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/legacy_test.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Check that a command line with a builtin is passed to the shell."
+
+# Setup
+TEST_COPY_FILES="sh 755"
+
+# Run
+TEST_N=2
+TEST_1="-B no-builtin"
+TEST_2="-B builtin"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/shell/builtin/sh b/usr.bin/bmake/tests/shell/builtin/sh
new file mode 100644
index 0000000..3a507b87
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/builtin/sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+echo "$@"
+if ! test -t 0 ; then
+ cat
+fi
diff --git a/usr.bin/bmake/tests/shell/meta/Makefile b/usr.bin/bmake/tests/shell/meta/Makefile
new file mode 100644
index 0000000..b342e79
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/shell/meta
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= sh
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/shell/meta/Makefile.test b/usr.bin/bmake/tests/shell/meta/Makefile.test
new file mode 100644
index 0000000..bcf19d0
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/Makefile.test
@@ -0,0 +1,18 @@
+#
+# In compat mode (the default without -j) a line that contains no shell
+# meta characters and no shell builtins is not passed to the shell but
+# executed directly. In our example the ls line without meta characters
+# will really execute ls, while the line with meta characters will execute
+# our special shell.
+#
+# $FreeBSD$
+
+.SHELL: path="${.OBJDIR}/sh"
+
+.PHONY: meta no-meta
+
+meta:
+ @ls *
+
+no-meta:
+ @ls -d .
diff --git a/usr.bin/bmake/tests/shell/meta/expected.status.1 b/usr.bin/bmake/tests/shell/meta/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/meta/expected.status.2 b/usr.bin/bmake/tests/shell/meta/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/meta/expected.stderr.1 b/usr.bin/bmake/tests/shell/meta/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/expected.stderr.1
diff --git a/usr.bin/bmake/tests/shell/meta/expected.stderr.2 b/usr.bin/bmake/tests/shell/meta/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/expected.stderr.2
diff --git a/usr.bin/bmake/tests/shell/meta/expected.stdout.1 b/usr.bin/bmake/tests/shell/meta/expected.stdout.1
new file mode 100644
index 0000000..9c558e3
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/expected.stdout.1
@@ -0,0 +1 @@
+.
diff --git a/usr.bin/bmake/tests/shell/meta/expected.stdout.2 b/usr.bin/bmake/tests/shell/meta/expected.stdout.2
new file mode 100644
index 0000000..6ac6f19
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/expected.stdout.2
@@ -0,0 +1 @@
+-ec ls *
diff --git a/usr.bin/bmake/tests/shell/meta/legacy_test.sh b/usr.bin/bmake/tests/shell/meta/legacy_test.sh
new file mode 100644
index 0000000..41cd763
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/legacy_test.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Check that a command line with meta characters is passed to the shell."
+
+# Setup
+TEST_COPY_FILES="sh 755"
+
+# Run
+TEST_N=2
+TEST_1="-B no-meta"
+TEST_2="-B meta"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/shell/meta/sh b/usr.bin/bmake/tests/shell/meta/sh
new file mode 100644
index 0000000..3a507b87
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/meta/sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+echo "$@"
+if ! test -t 0 ; then
+ cat
+fi
diff --git a/usr.bin/bmake/tests/shell/path/Makefile b/usr.bin/bmake/tests/shell/path/Makefile
new file mode 100644
index 0000000..5a83a1f
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/shell/path
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= sh
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/shell/path/Makefile.test b/usr.bin/bmake/tests/shell/path/Makefile.test
new file mode 100644
index 0000000..fe40b64
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/Makefile.test
@@ -0,0 +1,31 @@
+#
+# Change the path for builtin shells. There are two methods to do this.
+# This is the first of them when the basename of the path is equal to
+# one of the builtin shells so that the .SHELL target automatically
+# also selectes the shell without specifying the name.
+#
+# Be sure to include a meta-character into the command line, so that
+# really our shell is executed.
+#
+# $FreeBSD$
+#
+
+.ifmake sh_test
+
+.SHELL: path=${.OBJDIR}/sh
+sh_test:
+ @: This is the shell.
+
+.elifmake csh_test
+
+.SHELL: path=${.OBJDIR}/csh
+csh_test:
+ @: This is the C-shell.
+
+.elifmake ksh_test
+
+.SHELL: path=${.OBJDIR}/ksh
+ksh_test:
+ @: This is the Korn-shell.
+
+.endif
diff --git a/usr.bin/bmake/tests/shell/path/expected.status.1 b/usr.bin/bmake/tests/shell/path/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/path/expected.status.2 b/usr.bin/bmake/tests/shell/path/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/path/expected.stderr.1 b/usr.bin/bmake/tests/shell/path/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/expected.stderr.1
diff --git a/usr.bin/bmake/tests/shell/path/expected.stderr.2 b/usr.bin/bmake/tests/shell/path/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/expected.stderr.2
diff --git a/usr.bin/bmake/tests/shell/path/expected.stdout.1 b/usr.bin/bmake/tests/shell/path/expected.stdout.1
new file mode 100644
index 0000000..d881364
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/expected.stdout.1
@@ -0,0 +1 @@
+-ec : This is the shell.
diff --git a/usr.bin/bmake/tests/shell/path/expected.stdout.2 b/usr.bin/bmake/tests/shell/path/expected.stdout.2
new file mode 100644
index 0000000..de3fc89
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/expected.stdout.2
@@ -0,0 +1 @@
+-ec : This is the C-shell.
diff --git a/usr.bin/bmake/tests/shell/path/legacy_test.sh b/usr.bin/bmake/tests/shell/path/legacy_test.sh
new file mode 100644
index 0000000..9289a8d
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/legacy_test.sh
@@ -0,0 +1,20 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="New path for builtin shells."
+
+# Setup
+TEST_COPY_FILES="sh 755"
+TEST_LINKS="sh csh sh ksh"
+
+# Run
+TEST_N=3
+TEST_1="sh_test"
+TEST_2="csh_test"
+TEST_3="ksh_test"
+TEST_3_SKIP="no ksh on FreeBSD"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/shell/path/sh b/usr.bin/bmake/tests/shell/path/sh
new file mode 100644
index 0000000..46169eb
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path/sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+echo $@
+if ! test -t 0 ; then
+ cat
+fi
diff --git a/usr.bin/bmake/tests/shell/path_select/Makefile b/usr.bin/bmake/tests/shell/path_select/Makefile
new file mode 100644
index 0000000..1819f91
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/shell/path_select
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= shell
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/shell/path_select/Makefile.test b/usr.bin/bmake/tests/shell/path_select/Makefile.test
new file mode 100644
index 0000000..05cfb27
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/Makefile.test
@@ -0,0 +1,31 @@
+#
+# Change the path for builtin shells. There are two methods to do this.
+# This is the second of them when both a path and a name are specified.
+# This selects a builtin shell according to the name, but executes it
+# from the specified path.
+#
+# Be sure to include a meta-character into the command line, so that
+# really our shell is executed.
+#
+# $FreeBSD$
+#
+
+.ifmake sh_test
+
+.SHELL: name=sh path=${.CURDIR}/shell
+sh_test:
+ @: This is the shell.
+
+.elifmake csh_test
+
+.SHELL: name=csh path=${.CURDIR}/shell
+csh_test:
+ @: This is the C-shell.
+
+.elifmake ksh_test
+
+.SHELL: name=ksh path=${.CURDIR}/shell
+ksh_test:
+ @: This is the Korn-shell.
+
+.endif
diff --git a/usr.bin/bmake/tests/shell/path_select/expected.status.1 b/usr.bin/bmake/tests/shell/path_select/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/path_select/expected.status.2 b/usr.bin/bmake/tests/shell/path_select/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/path_select/expected.stderr.1 b/usr.bin/bmake/tests/shell/path_select/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/expected.stderr.1
diff --git a/usr.bin/bmake/tests/shell/path_select/expected.stderr.2 b/usr.bin/bmake/tests/shell/path_select/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/expected.stderr.2
diff --git a/usr.bin/bmake/tests/shell/path_select/expected.stdout.1 b/usr.bin/bmake/tests/shell/path_select/expected.stdout.1
new file mode 100644
index 0000000..d881364
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/expected.stdout.1
@@ -0,0 +1 @@
+-ec : This is the shell.
diff --git a/usr.bin/bmake/tests/shell/path_select/expected.stdout.2 b/usr.bin/bmake/tests/shell/path_select/expected.stdout.2
new file mode 100644
index 0000000..de3fc89
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/expected.stdout.2
@@ -0,0 +1 @@
+-ec : This is the C-shell.
diff --git a/usr.bin/bmake/tests/shell/path_select/legacy_test.sh b/usr.bin/bmake/tests/shell/path_select/legacy_test.sh
new file mode 100644
index 0000000..6b75b90
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/legacy_test.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="New path for builtin shells (2)."
+
+# Setup
+TEST_COPY_FILES="shell 755"
+
+# Run
+TEST_N=3
+TEST_1="sh_test"
+TEST_2="csh_test"
+TEST_3="ksh_test"
+TEST_3_SKIP="no ksh on FreeBSD"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/shell/path_select/shell b/usr.bin/bmake/tests/shell/path_select/shell
new file mode 100644
index 0000000..46169eb
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/path_select/shell
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+echo $@
+if ! test -t 0 ; then
+ cat
+fi
diff --git a/usr.bin/bmake/tests/shell/replace/Makefile b/usr.bin/bmake/tests/shell/replace/Makefile
new file mode 100644
index 0000000..0dae915
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/Makefile
@@ -0,0 +1,17 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/shell/replace
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= shell
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/shell/replace/Makefile.test b/usr.bin/bmake/tests/shell/replace/Makefile.test
new file mode 100644
index 0000000..2160dbf
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/Makefile.test
@@ -0,0 +1,21 @@
+#
+# Test that we can replace the shell and set all the shell parameters
+# (except meta and builtin which have their own test). This is done by
+# using a shell script for the shell that echoes all command line
+# arguments and its standard input. The shell name should not be one of
+# the builtin shells.
+#
+# XXX There seems to be a problem here in -j1 mode: for the line without
+# @- make should switch on echoing again, but it doesn't.
+#
+# $FreeBSD$
+
+.SHELL: name="shell" path="${.CURDIR}/shell" \
+ quiet="be quiet" echo="be verbose" filter="be verbose" \
+ echoFlag="x" errFlag="y" \
+ hasErrCtl=y check="check errors" ignore="ignore errors"
+
+.PHONY: test1
+test1:
+ -@funny $$
+ funnier $$
diff --git a/usr.bin/bmake/tests/shell/replace/expected.status.1 b/usr.bin/bmake/tests/shell/replace/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/replace/expected.status.2 b/usr.bin/bmake/tests/shell/replace/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/replace/expected.stderr.1 b/usr.bin/bmake/tests/shell/replace/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/expected.stderr.1
diff --git a/usr.bin/bmake/tests/shell/replace/expected.stderr.2 b/usr.bin/bmake/tests/shell/replace/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/expected.stderr.2
diff --git a/usr.bin/bmake/tests/shell/replace/expected.stdout.1 b/usr.bin/bmake/tests/shell/replace/expected.stdout.1
new file mode 100644
index 0000000..eff99ea
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/expected.stdout.1
@@ -0,0 +1,3 @@
+-c funny $
+funnier $
+-ec funnier $
diff --git a/usr.bin/bmake/tests/shell/replace/expected.stdout.2 b/usr.bin/bmake/tests/shell/replace/expected.stdout.2
new file mode 100644
index 0000000..c79a09a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/expected.stdout.2
@@ -0,0 +1,6 @@
+-yx
+be quiet
+ignore errors
+funny $
+check errors
+funnier $
diff --git a/usr.bin/bmake/tests/shell/replace/legacy_test.sh b/usr.bin/bmake/tests/shell/replace/legacy_test.sh
new file mode 100644
index 0000000..880ca78
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/legacy_test.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Check that the shell can be replaced."
+
+# Setup
+TEST_COPY_FILES="shell 755"
+
+# Run
+TEST_N=2
+TEST_1=
+TEST_2=-j2
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/shell/replace/shell b/usr.bin/bmake/tests/shell/replace/shell
new file mode 100644
index 0000000..46169eb
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/replace/shell
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+echo $@
+if ! test -t 0 ; then
+ cat
+fi
diff --git a/usr.bin/bmake/tests/shell/select/Makefile b/usr.bin/bmake/tests/shell/select/Makefile
new file mode 100644
index 0000000..45e6d72
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/Makefile
@@ -0,0 +1,16 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/shell/select
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/shell/select/Makefile.test b/usr.bin/bmake/tests/shell/select/Makefile.test
new file mode 100644
index 0000000..74d96e1
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/Makefile.test
@@ -0,0 +1,28 @@
+#
+# We just select the builtin shells and check whether it is really
+# executed. This should print just the shell paths. Because we
+# normally don't have a ksh, we make this test conditional. This means
+# one has to recreate the test results once ksh is installed.
+#
+# $FreeBSD$
+#
+
+.ifmake sh_test
+
+.SHELL: name=sh
+sh_test: print_path
+
+.elifmake csh_test
+
+.SHELL: name=csh
+csh_test: print_path
+
+.elifmake ksh_test
+
+.SHELL: name=ksh
+ksh_test: print_path
+
+.endif
+
+print_path:
+ @ps -x -opid,command | awk '$$1=='$$$$' { print $$2; }'
diff --git a/usr.bin/bmake/tests/shell/select/expected.status.1 b/usr.bin/bmake/tests/shell/select/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/select/expected.status.2 b/usr.bin/bmake/tests/shell/select/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/shell/select/expected.stderr.1 b/usr.bin/bmake/tests/shell/select/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/expected.stderr.1
diff --git a/usr.bin/bmake/tests/shell/select/expected.stderr.2 b/usr.bin/bmake/tests/shell/select/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/expected.stderr.2
diff --git a/usr.bin/bmake/tests/shell/select/expected.stdout.1 b/usr.bin/bmake/tests/shell/select/expected.stdout.1
new file mode 100644
index 0000000..c2cdaa0
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/expected.stdout.1
@@ -0,0 +1 @@
+/bin/sh
diff --git a/usr.bin/bmake/tests/shell/select/expected.stdout.2 b/usr.bin/bmake/tests/shell/select/expected.stdout.2
new file mode 100644
index 0000000..5a831e8
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/expected.stdout.2
@@ -0,0 +1 @@
+/bin/csh
diff --git a/usr.bin/bmake/tests/shell/select/legacy_test.sh b/usr.bin/bmake/tests/shell/select/legacy_test.sh
new file mode 100644
index 0000000..46d3eaf
--- /dev/null
+++ b/usr.bin/bmake/tests/shell/select/legacy_test.sh
@@ -0,0 +1,16 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Select the builtin sh shell."
+
+# Run
+TEST_N=3
+TEST_1="sh_test"
+TEST_2="csh_test"
+TEST_3="ksh_test"
+TEST_3_SKIP="no ksh on FreeBSD"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/suffixes/Makefile b/usr.bin/bmake/tests/suffixes/Makefile
new file mode 100644
index 0000000..60ec86e
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/suffixes
+
+TESTS_SUBDIRS= basic src_wild1 src_wild2
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/suffixes/basic/Makefile b/usr.bin/bmake/tests/suffixes/basic/Makefile
new file mode 100644
index 0000000..9ae720e
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/Makefile
@@ -0,0 +1,14 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/suffixes/basic
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= TEST1.a
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/suffixes/basic/Makefile.test b/usr.bin/bmake/tests/suffixes/basic/Makefile.test
new file mode 100644
index 0000000..45d9130
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/Makefile.test
@@ -0,0 +1,13 @@
+# $FreeBSD$
+#
+# Check that a simple suffix rule is correctly processed.
+
+test1: TEST1.b
+ diff -u TEST1.a TEST1.b
+
+.SUFFIXES:
+
+.SUFFIXES: .a .b
+
+.a.b:
+ cat ${.IMPSRC} >${.TARGET}
diff --git a/usr.bin/bmake/tests/suffixes/basic/TEST1.a b/usr.bin/bmake/tests/suffixes/basic/TEST1.a
new file mode 100644
index 0000000..da5569b
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/TEST1.a
@@ -0,0 +1 @@
+I'm test file 1.
diff --git a/usr.bin/bmake/tests/suffixes/basic/expected.status.1 b/usr.bin/bmake/tests/suffixes/basic/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/suffixes/basic/expected.stderr.1 b/usr.bin/bmake/tests/suffixes/basic/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/expected.stderr.1
diff --git a/usr.bin/bmake/tests/suffixes/basic/expected.stdout.1 b/usr.bin/bmake/tests/suffixes/basic/expected.stdout.1
new file mode 100644
index 0000000..582927e
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/expected.stdout.1
@@ -0,0 +1,2 @@
+cat TEST1.a >TEST1.b
+diff -u TEST1.a TEST1.b
diff --git a/usr.bin/bmake/tests/suffixes/basic/legacy_test.sh b/usr.bin/bmake/tests/suffixes/basic/legacy_test.sh
new file mode 100644
index 0000000..3446bf0
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/basic/legacy_test.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Basic suffix operation."
+
+# Setup
+TEST_COPY_FILES="TEST1.a 644"
+
+# Reset
+TEST_CLEAN="Test1.b"
+
+# Run
+TEST_N=1
+TEST_1="-r test1"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/Makefile b/usr.bin/bmake/tests/suffixes/src_wild1/Makefile
new file mode 100644
index 0000000..00be930
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/Makefile
@@ -0,0 +1,15 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/suffixes/src_wild1
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= TEST1.a
+FILES+= TEST2.a
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/Makefile.test b/usr.bin/bmake/tests/suffixes/src_wild1/Makefile.test
new file mode 100644
index 0000000..d0258ad
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/Makefile.test
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+test1: TEST1.b
+ cat TEST1.a TEST2.a | diff -u - TEST1.b
+
+TEST1.b: *.a
+ cat ${.ALLSRC} >${.TARGET}
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/TEST1.a b/usr.bin/bmake/tests/suffixes/src_wild1/TEST1.a
new file mode 100644
index 0000000..da5569b
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/TEST1.a
@@ -0,0 +1 @@
+I'm test file 1.
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/TEST2.a b/usr.bin/bmake/tests/suffixes/src_wild1/TEST2.a
new file mode 100644
index 0000000..34f8508
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/TEST2.a
@@ -0,0 +1 @@
+I'm test file 2.
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/expected.status.1 b/usr.bin/bmake/tests/suffixes/src_wild1/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/expected.stderr.1 b/usr.bin/bmake/tests/suffixes/src_wild1/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/expected.stderr.1
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/expected.stdout.1 b/usr.bin/bmake/tests/suffixes/src_wild1/expected.stdout.1
new file mode 100644
index 0000000..3cd2129
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/expected.stdout.1
@@ -0,0 +1,2 @@
+cat TEST1.a TEST2.a >TEST1.b
+cat TEST1.a TEST2.a | diff -u - TEST1.b
diff --git a/usr.bin/bmake/tests/suffixes/src_wild1/legacy_test.sh b/usr.bin/bmake/tests/suffixes/src_wild1/legacy_test.sh
new file mode 100644
index 0000000..053cc6c
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild1/legacy_test.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Source wildcard expansion."
+
+# Setup
+TEST_COPY_FILES="TEST1.a 644 TEST2.a 644"
+
+# Reset
+TEST_CLEAN="TEST1.b"
+
+# Run
+TEST_N=1
+TEST_1="-r test1"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/Makefile b/usr.bin/bmake/tests/suffixes/src_wild2/Makefile
new file mode 100644
index 0000000..34aad07
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/Makefile
@@ -0,0 +1,15 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/suffixes/src_wild2
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= TEST1.a
+FILES+= TEST2.a
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/Makefile.test b/usr.bin/bmake/tests/suffixes/src_wild2/Makefile.test
new file mode 100644
index 0000000..1dea7ea
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/Makefile.test
@@ -0,0 +1,12 @@
+# $FreeBSD$
+#
+# Source expansion with the source in a macro
+#
+
+SRC=*.a
+
+test1: TEST1.b
+ cat TEST1.a TEST2.a | diff -u - TEST1.b
+
+TEST1.b: ${SRC}
+ cat ${.ALLSRC} >${.TARGET}
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/TEST1.a b/usr.bin/bmake/tests/suffixes/src_wild2/TEST1.a
new file mode 100644
index 0000000..da5569b
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/TEST1.a
@@ -0,0 +1 @@
+I'm test file 1.
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/TEST2.a b/usr.bin/bmake/tests/suffixes/src_wild2/TEST2.a
new file mode 100644
index 0000000..34f8508
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/TEST2.a
@@ -0,0 +1 @@
+I'm test file 2.
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/expected.status.1 b/usr.bin/bmake/tests/suffixes/src_wild2/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/expected.stderr.1 b/usr.bin/bmake/tests/suffixes/src_wild2/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/expected.stderr.1
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/expected.stdout.1 b/usr.bin/bmake/tests/suffixes/src_wild2/expected.stdout.1
new file mode 100644
index 0000000..3cd2129
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/expected.stdout.1
@@ -0,0 +1,2 @@
+cat TEST1.a TEST2.a >TEST1.b
+cat TEST1.a TEST2.a | diff -u - TEST1.b
diff --git a/usr.bin/bmake/tests/suffixes/src_wild2/legacy_test.sh b/usr.bin/bmake/tests/suffixes/src_wild2/legacy_test.sh
new file mode 100644
index 0000000..03cff93
--- /dev/null
+++ b/usr.bin/bmake/tests/suffixes/src_wild2/legacy_test.sh
@@ -0,0 +1,19 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Source wildcard expansion (2)."
+
+# Setup
+TEST_COPY_FILES="TEST1.a 644 TEST2.a 644"
+
+# Reset
+TEST_CLEAN="TEST1.b"
+
+# Run
+TEST_N=1
+TEST_1="-r test1"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/syntax/Makefile b/usr.bin/bmake/tests/syntax/Makefile
new file mode 100644
index 0000000..3cd89f8
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/syntax
+
+TESTS_SUBDIRS= directive-t0 enl funny-targets semi
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/syntax/directive-t0/Makefile b/usr.bin/bmake/tests/syntax/directive-t0/Makefile
new file mode 100644
index 0000000..66e1f32
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/directive-t0/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/syntax/directive-t0
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/syntax/directive-t0/Makefile.test b/usr.bin/bmake/tests/syntax/directive-t0/Makefile.test
new file mode 100644
index 0000000..0f95a21
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/directive-t0/Makefile.test
@@ -0,0 +1,8 @@
+# $FreeBSD$
+#
+# A typo'ed directive.
+#
+
+.uudef foo
+
+all:
diff --git a/usr.bin/bmake/tests/syntax/directive-t0/expected.status.1 b/usr.bin/bmake/tests/syntax/directive-t0/expected.status.1
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/directive-t0/expected.status.1
@@ -0,0 +1 @@
+1
diff --git a/usr.bin/bmake/tests/syntax/directive-t0/expected.stderr.1 b/usr.bin/bmake/tests/syntax/directive-t0/expected.stderr.1
new file mode 100644
index 0000000..de66fcc
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/directive-t0/expected.stderr.1
@@ -0,0 +1,2 @@
+"Makefile", line 6: Unknown directive
+make: fatal errors encountered -- cannot continue
diff --git a/usr.bin/bmake/tests/syntax/directive-t0/expected.stdout.1 b/usr.bin/bmake/tests/syntax/directive-t0/expected.stdout.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/directive-t0/expected.stdout.1
diff --git a/usr.bin/bmake/tests/syntax/directive-t0/legacy_test.sh b/usr.bin/bmake/tests/syntax/directive-t0/legacy_test.sh
new file mode 100644
index 0000000..451c876
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/directive-t0/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="A typo'ed directive."
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/syntax/enl/Makefile b/usr.bin/bmake/tests/syntax/enl/Makefile
new file mode 100644
index 0000000..743e88f
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/Makefile
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/syntax/enl
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.status.3
+FILES+= expected.status.4
+FILES+= expected.status.5
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stderr.3
+FILES+= expected.stderr.4
+FILES+= expected.stderr.5
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= expected.stdout.3
+FILES+= expected.stdout.4
+FILES+= expected.stdout.5
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/syntax/enl/Makefile.test b/usr.bin/bmake/tests/syntax/enl/Makefile.test
new file mode 100644
index 0000000..a7c6955
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/Makefile.test
@@ -0,0 +1,59 @@
+# $FreeBSD$
+#
+# Test handling of escaped newlines.
+#
+
+.ifmake test1
+
+# This should succeed
+\
+\
+\
+test1:
+ @echo ok
+
+.elifmake test2
+
+# This should print ok because the second assignment to foo is actually
+# a continued comment.
+FOO=ok
+#\
+\
+FOO=not ok
+test2:
+ @echo "${FOO}"
+
+.elifmake test3
+
+# Make sure an escaped newline inserts a space
+test3: a\
+b
+
+a:
+ @echo a
+
+b:
+ @echo b
+
+.elifmake test4
+
+# Make sure an escaped newline inserts exactly one space
+FOO=a\
+ b
+
+test4:
+ @echo "${FOO}"
+
+.elifmake test5
+
+# Make sure each escaped newline inserts exactly one space
+FOO=a\
+\
+\
+\
+b
+
+test5:
+ @echo "${FOO}"
+
+.endif
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.status.1 b/usr.bin/bmake/tests/syntax/enl/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.status.2 b/usr.bin/bmake/tests/syntax/enl/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.status.3 b/usr.bin/bmake/tests/syntax/enl/expected.status.3
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.status.3
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.status.4 b/usr.bin/bmake/tests/syntax/enl/expected.status.4
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.status.4
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.status.5 b/usr.bin/bmake/tests/syntax/enl/expected.status.5
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.status.5
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stderr.1 b/usr.bin/bmake/tests/syntax/enl/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stderr.1
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stderr.2 b/usr.bin/bmake/tests/syntax/enl/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stderr.2
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stderr.3 b/usr.bin/bmake/tests/syntax/enl/expected.stderr.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stderr.3
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stderr.4 b/usr.bin/bmake/tests/syntax/enl/expected.stderr.4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stderr.4
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stderr.5 b/usr.bin/bmake/tests/syntax/enl/expected.stderr.5
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stderr.5
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stdout.1 b/usr.bin/bmake/tests/syntax/enl/expected.stdout.1
new file mode 100644
index 0000000..9766475
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stdout.1
@@ -0,0 +1 @@
+ok
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stdout.2 b/usr.bin/bmake/tests/syntax/enl/expected.stdout.2
new file mode 100644
index 0000000..9766475
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stdout.2
@@ -0,0 +1 @@
+ok
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stdout.3 b/usr.bin/bmake/tests/syntax/enl/expected.stdout.3
new file mode 100644
index 0000000..422c2b7
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stdout.3
@@ -0,0 +1,2 @@
+a
+b
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stdout.4 b/usr.bin/bmake/tests/syntax/enl/expected.stdout.4
new file mode 100644
index 0000000..b2901ea
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stdout.4
@@ -0,0 +1 @@
+a b
diff --git a/usr.bin/bmake/tests/syntax/enl/expected.stdout.5 b/usr.bin/bmake/tests/syntax/enl/expected.stdout.5
new file mode 100644
index 0000000..5120076
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/expected.stdout.5
@@ -0,0 +1 @@
+a b
diff --git a/usr.bin/bmake/tests/syntax/enl/legacy_test.sh b/usr.bin/bmake/tests/syntax/enl/legacy_test.sh
new file mode 100644
index 0000000..307c1f0
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/enl/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Test escaped new-lines handling."
+
+# Run
+TEST_N=5
+TEST_2_TODO="bug in parser"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/Makefile b/usr.bin/bmake/tests/syntax/funny-targets/Makefile
new file mode 100644
index 0000000..53a3e4d
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/Makefile
@@ -0,0 +1,16 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/syntax/funny-targets
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/Makefile.test b/usr.bin/bmake/tests/syntax/funny-targets/Makefile.test
new file mode 100644
index 0000000..064ab3a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/Makefile.test
@@ -0,0 +1,14 @@
+# $FreeBSD$
+#
+# PR bin/6612 / GRN r102178
+#
+
+test1: colons::colons::target
+
+colons::colons::target:
+ @echo '${.TARGET}'
+
+test2: exclamation!target
+
+exclamation!target:
+ @echo '${.TARGET}
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/expected.status.1 b/usr.bin/bmake/tests/syntax/funny-targets/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/expected.status.2 b/usr.bin/bmake/tests/syntax/funny-targets/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.1 b/usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.1
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.2 b/usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/expected.stderr.2
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.1 b/usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.1
new file mode 100644
index 0000000..09cb232
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.1
@@ -0,0 +1 @@
+colons::colons::target
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.2 b/usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.2
new file mode 100644
index 0000000..b2f0364
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/expected.stdout.2
@@ -0,0 +1 @@
+exclamation!target
diff --git a/usr.bin/bmake/tests/syntax/funny-targets/legacy_test.sh b/usr.bin/bmake/tests/syntax/funny-targets/legacy_test.sh
new file mode 100644
index 0000000..e9cd317
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/funny-targets/legacy_test.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC='Target names with "funny" embeded characters.'
+
+# Run
+TEST_N=2
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/syntax/semi/Makefile b/usr.bin/bmake/tests/syntax/semi/Makefile
new file mode 100644
index 0000000..00a7f1e
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/Makefile
@@ -0,0 +1,16 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/syntax/semi
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/syntax/semi/Makefile.test b/usr.bin/bmake/tests/syntax/semi/Makefile.test
new file mode 100644
index 0000000..12f5225
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/Makefile.test
@@ -0,0 +1,26 @@
+# $FreeBSD$
+#
+# Test handling of escaped newlines.
+#
+
+.ifmake test1
+
+FOO=
+BAR=bar
+FOO != echo ${FOO} ; echo ${BAR}
+
+test1:
+ echo ${FOO}
+
+.endif
+
+.ifmake test2
+
+FOO=foo
+BAR=bar
+FOO != echo ${FOO} ; echo ${BAR}
+
+test2:
+ echo ${FOO}
+
+.endif
diff --git a/usr.bin/bmake/tests/syntax/semi/expected.status.1 b/usr.bin/bmake/tests/syntax/semi/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/semi/expected.status.2 b/usr.bin/bmake/tests/syntax/semi/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/syntax/semi/expected.stderr.1 b/usr.bin/bmake/tests/syntax/semi/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/expected.stderr.1
diff --git a/usr.bin/bmake/tests/syntax/semi/expected.stderr.2 b/usr.bin/bmake/tests/syntax/semi/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/expected.stderr.2
diff --git a/usr.bin/bmake/tests/syntax/semi/expected.stdout.1 b/usr.bin/bmake/tests/syntax/semi/expected.stdout.1
new file mode 100644
index 0000000..12b9617
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/expected.stdout.1
@@ -0,0 +1,2 @@
+echo bar
+bar
diff --git a/usr.bin/bmake/tests/syntax/semi/expected.stdout.2 b/usr.bin/bmake/tests/syntax/semi/expected.stdout.2
new file mode 100644
index 0000000..be0fa55
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/expected.stdout.2
@@ -0,0 +1,2 @@
+echo foo bar
+foo bar
diff --git a/usr.bin/bmake/tests/syntax/semi/legacy_test.sh b/usr.bin/bmake/tests/syntax/semi/legacy_test.sh
new file mode 100644
index 0000000..092635a
--- /dev/null
+++ b/usr.bin/bmake/tests/syntax/semi/legacy_test.sh
@@ -0,0 +1,13 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Test semicolon handling."
+
+# Run
+TEST_N=2
+TEST_1_TODO="parser bug"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/sysmk/Makefile b/usr.bin/bmake/tests/sysmk/Makefile
new file mode 100644
index 0000000..90d90f1
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk
+
+TESTS_SUBDIRS= t0 t1 t2
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile b/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile
new file mode 100644
index 0000000..5578a9b
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t0/2/1
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.test b/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.test
new file mode 100644
index 0000000..fc95f46
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/1/Makefile.test
@@ -0,0 +1,6 @@
+# $FreeBSD$
+#
+# Can we traverse up to / and find a 'mk/sys.mk'?
+#
+all:
+ @echo ${DASH_M_DOTDOTDOT}
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/1/expected.status.1 b/usr.bin/bmake/tests/sysmk/t0/2/1/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/1/expected.stderr.1 b/usr.bin/bmake/tests/sysmk/t0/2/1/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/1/expected.stderr.1
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/1/expected.stdout.1 b/usr.bin/bmake/tests/sysmk/t0/2/1/expected.stdout.1
new file mode 100644
index 0000000..6f29307
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/1/expected.stdout.1
@@ -0,0 +1 @@
+Found_DotDotDot_sys_mk
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/1/legacy_test.sh b/usr.bin/bmake/tests/sysmk/t0/2/1/legacy_test.sh
new file mode 100644
index 0000000..0214842
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/1/legacy_test.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../../../common.sh
+
+# Description
+DESC="Can we traverse up to / and find a 'mk/sys.mk'?"
+
+# Run
+TEST_N=1
+TEST_1="-m .../mk"
+TEST_MAKE_DIRS="../../mk 755"
+TEST_COPY_FILES="../../mk/sys.mk 644"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/sysmk/t0/2/Makefile b/usr.bin/bmake/tests/sysmk/t0/2/Makefile
new file mode 100644
index 0000000..2204807
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/2/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t0/2
+
+TESTS_SUBDIRS= 1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t0/Makefile b/usr.bin/bmake/tests/sysmk/t0/Makefile
new file mode 100644
index 0000000..f38383c
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t0
+
+TESTS_SUBDIRS= 2
+SUBDIR= mk
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t0/mk/Makefile b/usr.bin/bmake/tests/sysmk/t0/mk/Makefile
new file mode 100644
index 0000000..be1bd5a
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/mk/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t0/mk
+
+FILESDIR= ${TESTSDIR}
+FILES= sys.mk.test
+FILESNAME_sys.mk.test= sys.mk
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t0/mk/sys.mk.test b/usr.bin/bmake/tests/sysmk/t0/mk/sys.mk.test
new file mode 100644
index 0000000..60f1955
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t0/mk/sys.mk.test
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+DASH_M_DOTDOTDOT=Found_DotDotDot_sys_mk
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/1/Makefile b/usr.bin/bmake/tests/sysmk/t1/2/1/Makefile
new file mode 100644
index 0000000..c5e2889
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/1/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t1/2/1
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= cleanup
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/1/cleanup b/usr.bin/bmake/tests/sysmk/t1/2/1/cleanup
new file mode 100644
index 0000000..c3d58b7
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/1/cleanup
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+rm -rf ${WORK_DIR}/../../../t0/2/1
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/1/expected.status.1 b/usr.bin/bmake/tests/sysmk/t1/2/1/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/1/expected.stderr.1 b/usr.bin/bmake/tests/sysmk/t1/2/1/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/1/expected.stderr.1
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/1/expected.stdout.1 b/usr.bin/bmake/tests/sysmk/t1/2/1/expected.stdout.1
new file mode 100644
index 0000000..6f29307
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/1/expected.stdout.1
@@ -0,0 +1 @@
+Found_DotDotDot_sys_mk
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/1/legacy_test.sh b/usr.bin/bmake/tests/sysmk/t1/2/1/legacy_test.sh
new file mode 100644
index 0000000..fb73851
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/1/legacy_test.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../../../common.sh
+
+# Description
+DESC="Can we traverse up to / and find a 'mk/sys.mk' with -C -m?"
+
+# Run
+TEST_N=1
+TEST_1="-C ../../../t0/2/1 -m .../mk"
+TEST_MAKE_DIRS="../../mk 755 ../../../t0/mk 755 ../../../t0/2/1 755"
+TEST_COPY_FILES="../../mk/sys.mk 644 ../../../t0/mk/sys.mk 644 ../../../t0/2/1/Makefile.test 644"
+TEST_CLEAN_FILES="../../../t0/2/1"
+TEST_CLEANUP=clean-special
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/sysmk/t1/2/Makefile b/usr.bin/bmake/tests/sysmk/t1/2/Makefile
new file mode 100644
index 0000000..7c2e619
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/2/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t1/2
+
+TESTS_SUBDIRS= 1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t1/Makefile b/usr.bin/bmake/tests/sysmk/t1/Makefile
new file mode 100644
index 0000000..4d32823
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t1
+
+TESTS_SUBDIRS= 2
+SUBDIR= mk
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t1/mk/Makefile b/usr.bin/bmake/tests/sysmk/t1/mk/Makefile
new file mode 100644
index 0000000..ccfd1b6
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/mk/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t1/mk
+
+FILESDIR= ${TESTSDIR}
+FILES= sys.mk.test
+FILESNAME_sys.mk.test= sys.mk
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t1/mk/sys.mk.test b/usr.bin/bmake/tests/sysmk/t1/mk/sys.mk.test
new file mode 100644
index 0000000..99b8ecc
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t1/mk/sys.mk.test
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+DASH_M_DOTDOTDOT=Found_WRONG_DotDotDot_sys_mk__with_C_before_m
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/1/Makefile b/usr.bin/bmake/tests/sysmk/t2/2/1/Makefile
new file mode 100644
index 0000000..e06539a
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/1/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t2/2/1
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= cleanup
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/1/cleanup b/usr.bin/bmake/tests/sysmk/t2/2/1/cleanup
new file mode 100644
index 0000000..c3d58b7
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/1/cleanup
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+rm -rf ${WORK_DIR}/../../../t0/2/1
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/1/expected.status.1 b/usr.bin/bmake/tests/sysmk/t2/2/1/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/1/expected.stderr.1 b/usr.bin/bmake/tests/sysmk/t2/2/1/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/1/expected.stderr.1
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/1/expected.stdout.1 b/usr.bin/bmake/tests/sysmk/t2/2/1/expected.stdout.1
new file mode 100644
index 0000000..70f1be3
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/1/expected.stdout.1
@@ -0,0 +1 @@
+Found_DotDotDot_sys_mk__with_m_before_C
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/1/legacy_test.sh b/usr.bin/bmake/tests/sysmk/t2/2/1/legacy_test.sh
new file mode 100644
index 0000000..ca817d8
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/1/legacy_test.sh
@@ -0,0 +1,17 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../../../common.sh
+
+# Description
+DESC="Can we traverse up to / and find a 'mk/sys.mk' with -m -C?"
+
+# Run
+TEST_N=1
+TEST_1="-m .../mk -C ../../../t0/2/1"
+TEST_MAKE_DIRS="../../mk 755 ../../../t0/mk 755 ../../../t0/2/1 755"
+TEST_COPY_FILES="../../mk/sys.mk 644 ../../../t0/mk/sys.mk 644 ../../../t0/2/1/Makefile.test 644"
+TEST_CLEAN_FILES="../../../t0/2/1"
+TEST_CLEANUP=clean-special
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/sysmk/t2/2/Makefile b/usr.bin/bmake/tests/sysmk/t2/2/Makefile
new file mode 100644
index 0000000..7d1c68e
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/2/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t2/2
+
+TESTS_SUBDIRS= 1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t2/Makefile b/usr.bin/bmake/tests/sysmk/t2/Makefile
new file mode 100644
index 0000000..734c7d8
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t2
+
+TESTS_SUBDIRS= 2
+SUBDIR= mk
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t2/mk/Makefile b/usr.bin/bmake/tests/sysmk/t2/mk/Makefile
new file mode 100644
index 0000000..29460dc
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/mk/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/sysmk/t2/mk
+
+FILESDIR= ${TESTSDIR}
+FILES= sys.mk.test
+FILESNAME_sys.mk.test= sys.mk
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/sysmk/t2/mk/sys.mk.test b/usr.bin/bmake/tests/sysmk/t2/mk/sys.mk.test
new file mode 100644
index 0000000..55632fd
--- /dev/null
+++ b/usr.bin/bmake/tests/sysmk/t2/mk/sys.mk.test
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+DASH_M_DOTDOTDOT=Found_DotDotDot_sys_mk__with_m_before_C
diff --git a/usr.bin/bmake/tests/test-new.mk b/usr.bin/bmake/tests/test-new.mk
new file mode 100644
index 0000000..f200833
--- /dev/null
+++ b/usr.bin/bmake/tests/test-new.mk
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+NEW_DIR!= make -C ${.CURDIR}/../../../../usr.bin/make -V .OBJDIR
+
+all:
+ rm -rf /tmp/${USER}.make.test
+ env MAKE_PROG=${NEW_DIR}/make ${.SHELL} ./all.sh
+
+.include <bsd.obj.mk>
diff --git a/usr.bin/bmake/tests/variables/Makefile b/usr.bin/bmake/tests/variables/Makefile
new file mode 100644
index 0000000..e010718
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/variables
+
+TESTS_SUBDIRS= modifier_M modifier_t opt_V t0
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/variables/modifier_M/Makefile b/usr.bin/bmake/tests/variables/modifier_M/Makefile
new file mode 100644
index 0000000..2490382
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_M/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/variables/modifier_M
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/variables/modifier_M/Makefile.test b/usr.bin/bmake/tests/variables/modifier_M/Makefile.test
new file mode 100644
index 0000000..34d4cd4
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_M/Makefile.test
@@ -0,0 +1,18 @@
+# $FreeBSD$
+#
+# Test the M modifier.
+#
+FILES = \
+ main.c globals.h \
+ util.c util.h \
+ map.c map.h \
+ parser.y lexer.l \
+ cmdman.1 format.5
+test1:
+ @echo "all files: ${FILES}"
+ @echo "cfiles: ${FILES:M*.c}"
+ @echo "hfiles: ${FILES:M*.h}"
+ @echo "grammar and lexer: ${FILES:M*.[ly]}"
+ @echo "man page: ${FILES:M*.[1-9]}"
+ @echo "utility files: ${FILES:Mutil.?}"
+ @echo "m files: ${FILES:Mm*}"
diff --git a/usr.bin/bmake/tests/variables/modifier_M/expected.status.1 b/usr.bin/bmake/tests/variables/modifier_M/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_M/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/variables/modifier_M/expected.stderr.1 b/usr.bin/bmake/tests/variables/modifier_M/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_M/expected.stderr.1
diff --git a/usr.bin/bmake/tests/variables/modifier_M/expected.stdout.1 b/usr.bin/bmake/tests/variables/modifier_M/expected.stdout.1
new file mode 100644
index 0000000..b29e6df
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_M/expected.stdout.1
@@ -0,0 +1,7 @@
+all files: main.c globals.h util.c util.h map.c map.h parser.y lexer.l cmdman.1 format.5
+cfiles: main.c util.c map.c
+hfiles: globals.h util.h map.h
+grammar and lexer: parser.y lexer.l
+man page: cmdman.1 format.5
+utility files: util.c util.h
+m files: main.c map.c map.h
diff --git a/usr.bin/bmake/tests/variables/modifier_M/legacy_test.sh b/usr.bin/bmake/tests/variables/modifier_M/legacy_test.sh
new file mode 100644
index 0000000..6a3e68f
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_M/legacy_test.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Variable expansion with M modifier"
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/variables/modifier_t/Makefile b/usr.bin/bmake/tests/variables/modifier_t/Makefile
new file mode 100644
index 0000000..d108da4
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/Makefile
@@ -0,0 +1,19 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/variables/modifier_t
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.status.3
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stderr.3
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+FILES+= expected.stdout.3
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/variables/modifier_t/Makefile.test b/usr.bin/bmake/tests/variables/modifier_t/Makefile.test
new file mode 100644
index 0000000..53844ee
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/Makefile.test
@@ -0,0 +1,15 @@
+# $FreeBSD$
+#
+# Test the t modifier.
+#
+# below is missing '
+ASCII= !"\#$$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+
+test1:
+ @echo '${ASCII}'
+
+test2:
+ @echo '${ASCII:tl}'
+
+test3:
+ @echo '${ASCII:tu}'
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.status.1 b/usr.bin/bmake/tests/variables/modifier_t/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.status.2 b/usr.bin/bmake/tests/variables/modifier_t/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.status.3 b/usr.bin/bmake/tests/variables/modifier_t/expected.status.3
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.status.3
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.1 b/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.1
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.2 b/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.2
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.3 b/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.stderr.3
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.1 b/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.1
new file mode 100644
index 0000000..dff38fd
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.1
@@ -0,0 +1 @@
+!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.2 b/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.2
new file mode 100644
index 0000000..71a0f60
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.2
@@ -0,0 +1 @@
+!"#$%&()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
diff --git a/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.3 b/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.3
new file mode 100644
index 0000000..6434c7b
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/expected.stdout.3
@@ -0,0 +1 @@
+!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~
diff --git a/usr.bin/bmake/tests/variables/modifier_t/legacy_test.sh b/usr.bin/bmake/tests/variables/modifier_t/legacy_test.sh
new file mode 100644
index 0000000..7f14571
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/modifier_t/legacy_test.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Variable expansion with t modifiers"
+
+# Run
+TEST_N=3
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/variables/opt_V/Makefile b/usr.bin/bmake/tests/variables/opt_V/Makefile
new file mode 100644
index 0000000..94a6aff
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/Makefile
@@ -0,0 +1,16 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/variables/opt_V
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.status.2
+FILES+= expected.stderr.1
+FILES+= expected.stderr.2
+FILES+= expected.stdout.1
+FILES+= expected.stdout.2
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/variables/opt_V/Makefile.test b/usr.bin/bmake/tests/variables/opt_V/Makefile.test
new file mode 100644
index 0000000..128e511
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/Makefile.test
@@ -0,0 +1,15 @@
+# $FreeBSD$
+#
+# Test the -V option
+#
+
+FOO= foo
+FOOBAR= ${FOO}bar
+
+test1:
+ @echo "-V FOOBAR"
+ @${MAKE} -V FOOBAR
+
+test2:
+ @echo '-V "$${FOOBAR}"'
+ @${MAKE} -V '$${FOOBAR}'
diff --git a/usr.bin/bmake/tests/variables/opt_V/expected.status.1 b/usr.bin/bmake/tests/variables/opt_V/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/variables/opt_V/expected.status.2 b/usr.bin/bmake/tests/variables/opt_V/expected.status.2
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/expected.status.2
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/variables/opt_V/expected.stderr.1 b/usr.bin/bmake/tests/variables/opt_V/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/expected.stderr.1
diff --git a/usr.bin/bmake/tests/variables/opt_V/expected.stderr.2 b/usr.bin/bmake/tests/variables/opt_V/expected.stderr.2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/expected.stderr.2
diff --git a/usr.bin/bmake/tests/variables/opt_V/expected.stdout.1 b/usr.bin/bmake/tests/variables/opt_V/expected.stdout.1
new file mode 100644
index 0000000..050db40
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/expected.stdout.1
@@ -0,0 +1,2 @@
+-V FOOBAR
+foobar
diff --git a/usr.bin/bmake/tests/variables/opt_V/expected.stdout.2 b/usr.bin/bmake/tests/variables/opt_V/expected.stdout.2
new file mode 100644
index 0000000..4da2aef
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/expected.stdout.2
@@ -0,0 +1,2 @@
+-V "${FOOBAR}"
+foobar
diff --git a/usr.bin/bmake/tests/variables/opt_V/legacy_test.sh b/usr.bin/bmake/tests/variables/opt_V/legacy_test.sh
new file mode 100644
index 0000000..4b1122a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/opt_V/legacy_test.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Variable expansion using command line '-V'"
+
+# Run
+TEST_N=2
+
+eval_cmd $*
diff --git a/usr.bin/bmake/tests/variables/t0/Makefile b/usr.bin/bmake/tests/variables/t0/Makefile
new file mode 100644
index 0000000..c4b98e6
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/t0/Makefile
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+TESTSDIR= ${TESTSBASE}/usr.bin/bmake/variables/t0
+
+TAP_TESTS_SH= legacy_test
+
+FILESDIR= ${TESTSDIR}
+FILES= Makefile.test
+FILES+= expected.status.1
+FILES+= expected.stderr.1
+FILES+= expected.stdout.1
+
+.include <bsd.test.mk>
diff --git a/usr.bin/bmake/tests/variables/t0/Makefile.test b/usr.bin/bmake/tests/variables/t0/Makefile.test
new file mode 100644
index 0000000..1cc58ee
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/t0/Makefile.test
@@ -0,0 +1,23 @@
+# $FreeBSD$
+#
+# A unsorted set of macro expansions. This should be sorted out.
+#
+A = 0
+AV = 1
+test1:
+ @echo $A
+ @echo ${AV}
+ @echo ${A}
+ @# The following are soo broken why no syntax error?
+ @echo $(
+ @echo $)
+ @echo ${
+ @echo ${A
+ @echo ${A)
+ @echo ${A){
+ @echo ${AV
+ @echo ${AV)
+ @echo ${AV){
+ @echo ${AV{
+ @echo ${A{
+ @echo $}
diff --git a/usr.bin/bmake/tests/variables/t0/expected.status.1 b/usr.bin/bmake/tests/variables/t0/expected.status.1
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/t0/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/usr.bin/bmake/tests/variables/t0/expected.stderr.1 b/usr.bin/bmake/tests/variables/t0/expected.stderr.1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/t0/expected.stderr.1
diff --git a/usr.bin/bmake/tests/variables/t0/expected.stdout.1 b/usr.bin/bmake/tests/variables/t0/expected.stdout.1
new file mode 100644
index 0000000..e2c70de
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/t0/expected.stdout.1
@@ -0,0 +1,15 @@
+0
+1
+0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/usr.bin/bmake/tests/variables/t0/legacy_test.sh b/usr.bin/bmake/tests/variables/t0/legacy_test.sh
new file mode 100644
index 0000000..8c78e2d
--- /dev/null
+++ b/usr.bin/bmake/tests/variables/t0/legacy_test.sh
@@ -0,0 +1,9 @@
+#! /bin/sh
+# $FreeBSD$
+
+. $(dirname $0)/../../common.sh
+
+# Description
+DESC="Variable expansion."
+
+eval_cmd $*
OpenPOWER on IntegriCloud