| # -*-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! | |
| # It also for some obscure reason, will break if we use ASAN!! | |
| if (get_config('USE_SYSTEM_GLOB') eq 'yes' && !exists($FEATURES{sanitize})) { | |
| symlink($dir, $lnk); | |
| run_make_test(qq!all: ; \@echo \$(wildcard $lnk)!, '', "$lnk"); | |
| unlink($lnk); | |
| } | |
| } | |
| 1; |