Name Date Size #Lines LOC

..15-Mar-2024-

archives/H17-Aug-2023-397192

basic/H17-Aug-2023-18981

execution/H17-Aug-2023-358243

shell/H17-Aug-2023-501245

suffixes/H17-Aug-2023-20695

syntax/H17-Aug-2023-314159

sysmk/H17-Aug-2023-346150

variables/H17-Aug-2023-276143

MakefileH A D17-Aug-2023290 1712

Makefile.dependH A D17-Aug-2023164 114

Makefile.incH A D17-Aug-202320 31

READMEH A D17-Aug-20235.5 KiB174122

common.shH A D12-Jan-20249.3 KiB533324

test-new.mkH A D17-Aug-2023176 95

README

1
2This directory contains regression tests for make(1).
3
4To invoke the tests, please refer to tests(7).
5
6----------------------------------------------------------------------------
7
8The rest of this file is intended for developers.
9
10The tests are invoked via the test.sh script or prove(1) from p5-Test-Harness.
11Tests are normally executed in a special test directory that is built under
12/tmp. The reason for this is, that make tests are generally influenced by
13all file in a directory, by files in one of make's obscure object directories
14as well as in other directories make happens to look into. Therefor the
15test scripts build a clean environment in the temp directory and the
16tests are executed by cd-ing into that directory and invoking make. The
17output of the make run (standard output, standard error and the exit status)
18are written into files that are created in another directory. So the layout
19for the shell/builtin test looks like:
20
21	./shell/builtin/			- directory with test stuff
22	/tmp/make.${USER}/shell/builtin		- actual test directory
23	/tmp/make.${USER}/shell/builtin.OUTPUT	- output files
24
25So a full test consists of the following steps:
26
27	setup	- Set up the test environment by creating the test directory
28		  and populating it with the needed files. If the test
29		  directory already exists an error is printed.
30
31	run	- Run the test and produce the output into the output
32		  directory.
33
34	show	- Show the result files on the screen.
35
36	compare	- Compare the results in the output directory with those
37		  in the test source directory. This just prints whether
38		  the test was ok or not in the format used by prove(1).
39
40	diff	- Diff the output files and the expected output files.
41
42	reset	- Reset the test to its initial state.
43
44	clean	- Remove both the test directory and the output directory.
45
46Each of these steps can independently be invoked with the test script
47contained in each directory. These test scripts are called test.t.
48Additionally the scripts understand the following commands:
49
50	test	- Run setup, run and compare.
51
52	prove	- Run setup, run, compare and clean. This is identically
53		  to invoking the script without an argument.
54
55	desc	- Print a short test description.
56
57	update	- Update the expected results from the actual results.
58
59The test script has the following syntax:
60
61	% test.t [-v] [-m path_to_make_binary] command
62
63To invoke it via prove(1) use:
64
65	% [MAKE_PROG=path_to_make_binary] prove [options] [files/directories]
66
67Example:
68	% sh test.t -m `pwd`/../obj/make run
69	% MAKE_PROG=/usr/obj/usr/src/usr.bin/make/make prove -r
70
71The test scripts use the following environment variables that can be set
72by the user in the test script's environment:
73
74	WORK_BASE
75		- Base directory for working files. If not set
76		  /tmp/make.${USER} is used.
77
78	MAKE_PROG
79		- Path to the make program to test. If not set
80		  /usr/bin/make is used.
81
82The following variables are available to test scripts:
83
84	SRC_BASE
85		- test source base directory. This is determined by
86		  repeatedly doing cd .. and checking for common.sh.
87		  Therefor this can fail if a test source directory is
88		  actually a symbolic link and is physically not located
89		  below the directory containing common.sh.
90
91	SUBDIR
92		- subdirectory below WORK_BASE and SRC_BASE for current test
93
94	WORK_DIR
95		- ${WORK_BASE}/${SUBDIR}
96
97	SRC_DIR
98		- ${SRC_BASE}/${SUBDIR}
99
100The following variables and functions may be defined by the test script.
101This also lists special filenames.
102
103	DESC
104		A one-line description of the test.
105
106	TEST_MAKE_DIRS
107		A list of pairs of directory names and modes. These
108		directories are created during setup and reset. When
109		the directory already exists (during reset) only the
110		mode change is applied.
111
112		TEST_MAKE_DIRS="subdir 775 subdir/sub 555"
113
114	TEST_COPY_FILES
115		A list of pairs of file names and modes. These files
116		are copied from the source to the working directory
117		during setup and reset. When the file already exists
118		(during reset) only the mode change is applied. Files
119		may be copied from/to sub-directories. The sub-directory
120		in the working directory must already exists (see
121		TEST_MAKE_DIRS).
122
123		TEST_COPY_FILES="libtest.a 444 subdir/libfoo.a 444"
124
125	TEST_TOUCH
126		List of pairs of file names and arguments to touch(1).
127		During setup and reset for each list element touch(1)
128		is executed.
129
130		TEST_TOUCH="file1 '-t 200501011257'"
131
132	TEST_LINK
133		List of pairs of filenames. Each pair is passed to ln(1).
134		All names are prefixed with the working directory.
135
136	Makefile
137		If a file with this name exists in the source directory
138		it is automatically copied to the working directory.
139
140	setup_test()
141		If this function exists it is executed at the end of the
142		setup.
143
144	reset_test()
145		If this function exists it is executed at the end of the
146		reset.
147
148	TEST_CLEAN_FILES
149		A list of file to be deleted when resetting.
150
151	TEST_N
152		Number of tests in this script. If not set this is assumed
153		to be 1.
154
155	TEST_<number>
156		Arguments to make for test number <number>. If not set
157		the default argument of test<number> is used. To run a test
158		without argument to make, set TEST_<number> to the empty string.
159
160	TEST_<number>_SKIP
161		To skip a test (for whatever reason) this should be set
162		to a string explaining the reason for skipping the test.
163
164	TEST_<number>_TODO
165		For a test that should fail this is a short string describing
166		what the problem in make(1) is that should be fixed.
167
168	run_test()
169		Function to run a test. This function gets a single argument
170		which is the number of the test to executed. The default
171		function evaluates the variable TEST_<number> and calls
172		make with the arguments in this variable.
173
174