1#                                                                    -*-perl-*-
2
3$description = "Test the -L option.";
4
5$details = "Verify that symlink handling with and without -L works properly.";
6
7# Only run these tests if the system sypports symlinks
8
9# Apparently the Windows port of Perl reports that it does support symlinks
10# (in that the symlink() function doesn't fail) but it really doesn't, so
11# check for it explicitly.
12
13if ($port_type eq 'W32' || !( eval { symlink("",""); 1 })) {
14  # This test is N/A
15  -1;
16} else {
17
18  # Set up a symlink sym -> dep
19  # We'll make both dep and targ older than sym
20  $pwd =~ m%/([^/]+)$%;
21  $dirnm = $1;
22  &utouch(-10, 'dep');
23  &utouch(-5, 'targ');
24  symlink("../$dirnm/dep", 'sym');
25
26  # Without -L, nothing should happen
27  # With -L, it should update targ
28  run_make_test('targ: sym ; @echo make $@ from $<', '',
29                "#MAKE#: `targ' is up to date.");
30  run_make_test(undef, '-L', "make targ from sym");
31
32  # Now update dep; in all cases targ should be out of date.
33  &touch('dep');
34  run_make_test(undef, '', "make targ from sym");
35  run_make_test(undef, '-L', "make targ from sym");
36
37  # Now update targ; in all cases targ should be up to date.
38  &touch('targ');
39  run_make_test(undef, '', "#MAKE#: `targ' is up to date.");
40  run_make_test(undef, '-L', "#MAKE#: `targ' is up to date.");
41
42  # Add in a new link between sym and dep.  Be sure it's newer than targ.
43  sleep(1);
44  rename('dep', 'dep1');
45  symlink('dep1', 'dep');
46
47  # Without -L, nothing should happen
48  # With -L, it should update targ
49  run_make_test(undef, '', "#MAKE#: `targ' is up to date.");
50  run_make_test(undef, '-L', "make targ from sym");
51
52  rmfiles('targ', 'dep', 'sym', 'dep1');
53
54  # Check handling when symlinks point to non-existent files.  Without -L we
55  # should get an error: with -L we should use the timestamp of the symlink.
56
57  symlink("../$dirname/dep", 'sym');
58  run_make_test('targ: sym ; @echo make $@ from $<', '',
59                "#MAKE#: *** No rule to make target `sym', needed by `targ'.  Stop.", 512);
60
61  run_make_test('targ: sym ; @echo make $@ from $<', '-L',
62                'make targ from sym');
63
64
65  rmfiles('targ', 'sym');
66
67  1;
68}
69