summaryrefslogtreecommitdiff
path: root/tests/scripts/features/vpath
blob: 7c034b5eba1ca9269b1b58926efe1c8eddb4442c (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
#                                                                     -*-perl-*-

$description = "Test vpath for particular classes of filenames.";

$details = "";

@files_to_touch = ("$workdir${pathsep}main.c","$workdir${pathsep}defs.h",
                   "$workdir${pathsep}kbd.c","$workdir${pathsep}command.h",
                   "$workdir${pathsep}commands.c","$workdir${pathsep}display.c",
                   "$workdir${pathsep}buffer.h","$workdir${pathsep}insert.c",
                   "$workdir${pathsep}command.c");

&touch(@files_to_touch);

run_make_test(q!
vpath %.c foo
vpath %.c #WORK#
vpath %.h #WORK#
objects = main.o kbd.o commands.o display.o insert.o
edit: $(objects) ; @echo cc -o $@ $^
main.o : main.c defs.h ; @echo cc -c $(firstword $^)
kbd.o : kbd.c defs.h command.h ; @echo cc -c kbd.c
commands.o : command.c defs.h command.h ; @echo cc -c commands.c
display.o : display.c defs.h buffer.h ; @echo cc -c display.c
insert.o : insert.c defs.h buffer.h ; @echo cc -c insert.c
!,
    '', "cc -c $workdir${pathsep}main.c\ncc -c kbd.c\ncc -c commands.c\n"
        ."cc -c display.c\ncc -c insert.c\n"
        ."cc -o edit main.o kbd.o commands.o display.o insert.o\n");

unlink(@files_to_touch);

# TEST 2: after vpath lookup ensure we don't get incorrect circular dependency
# warnings due to change of struct file ptr.  Savannah bug #13529.

mkdir('vpath-d', 0777);

run_make_test(q!
vpath %.te vpath-d/
.SECONDARY:
default: vpath-d/a vpath-d/b
vpath-d/a: fail.te
vpath-d/b : fail.te
vpath-d/fail.te:
!,
              '', "#MAKE#: Nothing to be done for 'default'.\n");

rmdir('vpath-d');

# Test VPATH vs vpath

run_make_test(q!
VPATH = #WORK#:#PWD#
vpath %.c foo
vpath %.c #WORK#
vpath %.c #PWD#
vpath %.h #WORK#
vpath %.c
vpath
all: ; @echo ALL IS WELL
!,
              '', "ALL IS WELL\n");

# Test interaction of -lfoo and vpath

my @dirs_to_make = qw(a1 b1 a2 b2 b3);
for my $d (@dirs_to_make) {
    mkdir($d, 0777);
}

my @files_to_touch = ("a1${pathsep}lib1.a",
                      "a1${pathsep}libc.a",
                      "b1${pathsep}lib1.so",
                      "a2${pathsep}lib2.a",
                      "b2${pathsep}lib2.so",
                      "lib3.a",
                      "b3${pathsep}lib3.so");
&touch(@files_to_touch);

my $answer = "a1${pathsep}lib1.a a1${pathsep}libc.a " .
             "a2${pathsep}lib2.a lib3.a\n";
if ($port_type eq 'VMS-DCL') {
    $answer =~ s/ /,/g;
}

run_make_test('
vpath %.h b3
vpath %.a a1
vpath %.so b1
vpath % a2 b2
vpath % b3
all: -l1 -lc -l2 -l3; @echo $^
',
              '', $answer);

unlink(@files_to_touch);
for my $d (@dirs_to_make) {
    rmdir($d);
}

# Check that if we find find files with VPATH, we don't do pattern search

mkdir("vpa");

run_make_test(q!
VPATH = vpa
%.x: ; @echo pattern $@
vpa/foo.x: ; @echo vpath $@
!,
              'foo.x', "vpath vpa/foo.x\n");

rmdir("vpa");

1;