| # -*-perl-*- | |
| $description = "Test vpath for particular classes of filenames."; | |
| $details = ""; | |
| mkdir('work'); | |
| @files_to_touch = ("work${pathsep}main.c","work${pathsep}defs.h", | |
| "work${pathsep}kbd.c","work${pathsep}command.h", | |
| "work${pathsep}commands.c","work${pathsep}display.c", | |
| "work${pathsep}buffer.h","work${pathsep}insert.c", | |
| "work${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 work${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"); | |
| # Validate that vpath indented with TAB gives a warning | |
| run_make_test(q! | |
| #TAB#vpath %.h b3 | |
| all:;@echo hi | |
| !, | |
| '', "#MAKEFILE#:2: warning: vpath directive lines cannot start with TAB\nhi"); | |
| 1; |