| # -*-perl-*- |
| |
| $description = "The following test creates a makefile to test wildcard |
| expansions and the ability to put a command on the same |
| line as the target name separated by a semi-colon."; |
| |
| $details = "\ |
| This test creates 4 files by the names of 1.example, |
| two.example and 3.example. We execute three tests. The first |
| executes the print1 target which tests the '*' wildcard by |
| echoing all filenames by the name of '*.example'. The second |
| test echo's all files which match '?.example' and |
| [a-z0-9].example. Lastly we clean up all of the files using |
| the '*' wildcard as in the first test"; |
| |
| touch("example.1"); |
| touch("example.two"); |
| touch("example.3"); |
| touch("example.for"); |
| touch("example._"); |
| |
| # TEST #1 |
| # ------- |
| |
| run_make_test(qq/ |
| .PHONY: print1 print2 clean |
| print1: ;\@echo \$(wildcard example.*) |
| print2: |
| \t\@echo \$(wildcard example.?) |
| \t\@echo \$(wildcard example.[a-z0-9]) |
| \t\@echo \$(wildcard example.[!A-Za-z_\\!]) |
| clean: |
| \t$CMD_rmfile \$(wildcard example.*) |
| /, |
| 'print1', "example.1 example.3 example._ example.for example.two\n"); |
| |
| # TEST #2 |
| # ------- |
| |
| run_make_test(undef, 'print2', "example.1 example.3 example._\n" |
| ."example.1 example.3\n" |
| ."example.1 example.3\n"); |
| |
| # TEST #3 |
| # ------- |
| |
| $answer = "$CMD_rmfile example.1 example.3 example._ example.for example.two"; |
| if ($vos) |
| { |
| $answer .= " \n"; |
| } |
| else |
| { |
| $answer .= "\n"; |
| } |
| |
| run_make_test(undef, 'clean', $answer); |
| |
| # TEST #4: Verify that failed wildcards don't return the pattern |
| |
| run_make_test(q! |
| all: ; @echo $(wildcard xz--y*.7) |
| !, |
| '', "\n"); |
| |
| # TEST #5: wildcard used to verify file existence |
| |
| touch('xxx.yyy'); |
| |
| run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, '', "file=xxx.yyy\n"); |
| |
| unlink('xxx.yyy'); |
| |
| run_make_test(q!exists: ; @echo file=$(wildcard xxx.yyy)!, '', "file=\n"); |
| |
| # TEST #7: verify that when the input pattern has a trailing slash wildcard |
| # returns only directories. |
| # |
| # Currently this doesn't work with our embedded GLOB so disable it. |
| # ------- |
| |
| if (get_config('USE_SYSTEM_GLOB') eq 'yes') { |
| touch("hellof"); |
| mkdir("hellod", 0770); |
| mkdir("hellod/worldd", 0770); |
| touch("hellod/worldf"); |
| mkdir("hellod/worldd/kend1", 0770); |
| mkdir("hellod/worldd/kend2", 0770); |
| touch("hellod/worldd/kenf1"); |
| touch("hellod/worldd/kenf2"); |
| |
| run_make_test(qq! |
| print3: |
| \t\@echo \$(wildcard hello*) |
| \t\@echo \$(wildcard hello*/) |
| \t\@echo \$(wildcard hellod/world*) |
| \t\@echo \$(wildcard hellod/world*/) |
| \t\@echo \$(wildcard hello* hellod/world*) |
| \t\@echo \$(wildcard hello*/ hellod/world*/) |
| \t\@echo \$(wildcard hellod/*) |
| \t\@echo \$(wildcard hellod/*/) |
| \t\@echo \$(wildcard */world*) |
| \t\@echo \$(wildcard */worldd/) |
| \t\@echo \$(wildcard hellod/*/ken*/) |
| \t\@echo \$(wildcard hellod/*/ken?[12]) |
| \t\@echo \$(wildcard hellod/*/ken?[12]/) |
| !, '', |
| "hellod hellof\n" |
| ."hellod/\n" |
| ."hellod/worldd hellod/worldf\n" |
| ."hellod/worldd/\n" |
| ."hellod hellof hellod/worldd hellod/worldf\n" |
| ."hellod/ hellod/worldd/\n" |
| ."hellod/worldd hellod/worldf\n" |
| ."hellod/worldd/\n" |
| ."hellod/worldd hellod/worldf\n" |
| ."hellod/worldd/\n" |
| ."hellod/worldd/kend1/ hellod/worldd/kend2/\n" |
| ."hellod/worldd/kend1 hellod/worldd/kend2 " |
| ."hellod/worldd/kenf1 hellod/worldd/kenf2\n" |
| ."hellod/worldd/kend1/ hellod/worldd/kend2/\n"); |
| |
| unlink('hellof', 'hellod/worldf', 'hellod/worldd/kenf1', |
| 'hellod/worldd/kenf2'); |
| foreach $d ('hellod/worldd/kend1', 'hellod/worldd/kend2', 'hellod/worldd', |
| 'hellod') { |
| rmdir($d); |
| } |
| } |
| |
| if ($port_type ne 'W32') { |
| # Check wildcard on the root directory |
| run_make_test('print4: ; @echo $(wildcard /)', '', "/\n"); |
| } |
| |
| if ($port_type ne 'W32' && eval { symlink("",""); 1 }) { |
| |
| # TEST #6: check for wildcards matching directories |
| # See SV 53465 |
| |
| my $dir = '__rdir'; |
| my $lnk = '__ldir'; |
| mkdir($dir, 0777); |
| symlink($dir, $lnk); |
| |
| run_make_test(qq!all: ; \@echo \$(wildcard $lnk*/.)!, '', "$lnk/."); |
| |
| unlink($lnk); |
| rmdir($dir); |
| |
| # Test for dangling symlinks |
| # This doesn't work with the built-in glob... needs to be updated! |
| |
| if (get_config('USE_SYSTEM_GLOB') eq 'yes') { |
| symlink($dir, $lnk); |
| |
| run_make_test(qq!all: ; \@echo \$(wildcard $lnk)!, '', "$lnk"); |
| |
| unlink($lnk); |
| } |
| } |
| |
| 1; |