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