summaryrefslogtreecommitdiff
path: root/tests/scripts/features/output-sync
blob: 66c093659b4860437e189ceefb95cb8e0280fe4b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#                                                                    -*-perl-*-

$description = "Test --output-sync (-O) option.";

$details = "Test the synchronization of output from parallel jobs.";

if (!$parallel_jobs) {
  return -1;
}

if ($vos) {
  $sleep_command = "sleep -seconds";
}
else {
  $sleep_command = "sleep";
}

# The following subdirectories with Makefiles are used in several
# of the following tests.
mkdir('foo', 0777);
mkdir('bar', 0777);

open(MAKEFILE,"> foo/Makefile");
print MAKEFILE <<EOF;
all: foo

foo: ; \@echo foo: start; $sleep_command 2; echo foo: end

foo-fail: ; \@$sleep_command 2; false
EOF
close(MAKEFILE);

open(MAKEFILE,"> bar/Makefile");
print MAKEFILE <<EOF;
all: bar baz

bar: ; \@echo bar: start; $sleep_command 1; echo bar: end

baz: ; \@echo baz: start; $sleep_command 4; echo baz: end
EOF
close(MAKEFILE);

# Test coarse synchronization.
run_make_test('
all: make-foo make-bar

make-foo: ; $(MAKE) -C foo

make-bar: ; $(MAKE) -C bar',
'-j -O2',
"#MAKEPATH# -C foo
#MAKEPATH# -C bar
#MAKE#[1]: Entering directory '#PWD#/foo'
#MAKE#[1]: Entering directory '#PWD#/foo'
foo: start
foo: end
#MAKE#[1]: Leaving directory '#PWD#/foo'
#MAKE#[1]: Leaving directory '#PWD#/foo'
#MAKE#[1]: Entering directory '#PWD#/bar'
#MAKE#[1]: Entering directory '#PWD#/bar'
bar: start
bar: end
#MAKE#[1]: Leaving directory '#PWD#/bar'
#MAKE#[1]: Entering directory '#PWD#/bar'
baz: start
baz: end
#MAKE#[1]: Leaving directory '#PWD#/bar'
#MAKE#[1]: Leaving directory '#PWD#/bar'\n");

# Test fine synchronization.
run_make_test('
all: make-foo make-bar

make-foo: ; $(MAKE) -C foo

make-bar: ; $(MAKE) -C bar',
'-j --output-sync',
"#MAKEPATH# -C foo
#MAKEPATH# -C bar
#MAKE#[1]: Entering directory '#PWD#/foo'
#MAKE#[1]: Entering directory '#PWD#/bar'
#MAKE#[1]: Entering directory '#PWD#/bar'
bar: start
bar: end
#MAKE#[1]: Leaving directory '#PWD#/bar'
#MAKE#[1]: Entering directory '#PWD#/foo'
foo: start
foo: end
#MAKE#[1]: Leaving directory '#PWD#/foo'
#MAKE#[1]: Leaving directory '#PWD#/foo'
#MAKE#[1]: Entering directory '#PWD#/bar'
baz: start
baz: end
#MAKE#[1]: Leaving directory '#PWD#/bar'
#MAKE#[1]: Leaving directory '#PWD#/bar'\n");

# Test that messages from make itself are enclosed with
# "Entering/Leaving directory" messages.
run_make_test('
all: make-foo-fail make-bar-bar

make-foo-fail: ; $(MAKE) -C foo foo-fail

make-bar-bar: ; $(MAKE) -C bar bar',
'-j -O',
"#MAKEPATH# -C foo foo-fail
#MAKEPATH# -C bar bar
#MAKE#[1]: Entering directory '#PWD#/foo'
#MAKE#[1]: Entering directory '#PWD#/bar'
#MAKE#[1]: Entering directory '#PWD#/bar'
bar: start
bar: end
#MAKE#[1]: Leaving directory '#PWD#/bar'
#MAKE#[1]: Leaving directory '#PWD#/bar'
#MAKE#[1]: Entering directory '#PWD#/foo'
Makefile:5: recipe for target 'foo-fail' failed
#MAKE#[1]: Leaving directory '#PWD#/foo'
#MAKE#[1]: Entering directory '#PWD#/foo'
#MAKE#[1]: *** [foo-fail] Error 1
#MAKE#[1]: Leaving directory '#PWD#/foo'
#MAKE#[1]: Leaving directory '#PWD#/foo'
#MAKEFILE#:4: recipe for target 'make-foo-fail' failed
#MAKE#: *** [make-foo-fail] Error 2\n",
512);

# Remove temporary directories and contents.
rmfiles('foo/Makefile');
rmdir('foo');
rmfiles('bar/Makefile');
rmdir('bar');

# This tells the test driver that the perl test script executed properly.
1;