| # -*-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; |