X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=x2p%2Ffind2perl.PL;h=e9275d0c5c57ab7f7ef1657f455e42de5e055c65;hb=b212a3c602c7ab2fcce55cf1027f73c6280d3b7b;hp=7b6834d70f5f4fb9c59d614033498a9ba2fa0f1d;hpb=500972986e4a730e372de46210df9f1cb838f621;p=p5sagit%2Fp5-mst-13.2.git diff --git a/x2p/find2perl.PL b/x2p/find2perl.PL index 7b6834d..e9275d0 100644 --- a/x2p/find2perl.PL +++ b/x2p/find2perl.PL @@ -42,20 +42,6 @@ use vars qw/$statdone/; use File::Spec::Functions 'curdir'; my $startperl = "#! $perlpath -w"; -# -# Modified September 26, 1993 to provide proper handling of years after 1999 -# Tom Link -# University of Pittsburgh -# -# Modified April 7, 1998 with nasty hacks to implement the troublesome -follow -# Billy Constantine -# University of Adelaide, Adelaide, South Australia -# -# Modified 1999-06-10, 1999-07-07 to migrate to cleaner perl5 usage -# Ken Pizzini -# -# Modified 2000-01-28 to use the 'follow' option of File::Find - sub tab (); sub n ($$); sub fileglob_to_re ($); @@ -80,6 +66,7 @@ my $out = ''; my $declaresubs = "sub wanted;\n"; my %init = (); my ($follow_in_effect,$Skip_And) = (0,0); +my $print_needed = 1; while (@ARGV) { $_ = shift; @@ -98,8 +85,10 @@ while (@ARGV) { } elsif ($_ eq '!') { $out .= tab . "!"; next; - } elsif ($_ eq 'name') { - $out .= tab . '/' . fileglob_to_re(shift) . "/s"; + } elsif (/^(i)?name$/) { + $out .= tab . '/' . fileglob_to_re(shift) . "/s$1"; + } elsif (/^(i)?path$/) { + $out .= tab . '$File::Find::name =~ /' . fileglob_to_re(shift) . "/s$1"; } elsif ($_ eq 'perm') { my $onum = shift; $onum =~ /^-?[0-7]+$/ @@ -117,8 +106,10 @@ while (@ARGV) { $out .= tab . "-$filetest _"; } elsif ($_ eq 'print') { $out .= tab . 'print("$name\n")'; + $print_needed = 0; } elsif ($_ eq 'print0') { $out .= tab . 'print("$name\0")'; + $print_needed = 0; } elsif ($_ eq 'fstype') { my $type = shift; $out .= tab; @@ -183,6 +174,7 @@ while (@ARGV) { $declaresubs .= "sub doexec (\$\@);\n"; $init{doexec} = 1; } + $print_needed = 0; } elsif ($_ eq 'ok') { my @cmd = (); while (@ARGV && $ARGV[0] ne ';') @@ -191,9 +183,10 @@ while (@ARGV) { $out .= tab; for (@cmd) { s/'/\\'/g } - { local $" = "','"; $out .= "doexec(0, '@cmd')"; } + { local $" = "','"; $out .= "doexec(1, '@cmd')"; } $declaresubs .= "sub doexec (\$\@);\n"; $init{doexec} = 1; + $print_needed = 0; } elsif ($_ eq 'prune') { $out .= tab . '($File::Find::prune = 1)'; } elsif ($_ eq 'xdev') { @@ -210,6 +203,7 @@ while (@ARGV) { my $prog = shift; $prog =~ s/'/\\'/g; $out .= tab . "eval {$prog}"; + $print_needed = 0; } elsif ($_ eq 'depth') { $find = 'finddepth'; next; @@ -217,6 +211,7 @@ while (@ARGV) { $out .= tab . "ls"; $declaresubs .= "sub ls ();\n"; $init{ls} = 1; + $print_needed = 0; } elsif ($_ eq 'tar') { die "-tar must have a filename argument\n" unless @ARGV; my $file = shift; @@ -258,6 +253,12 @@ while (@ARGV) { } } +if ($print_needed) { + my $t = tab; + if ($t !~ /&&\s*$/) { $t .= '&& ' } + $out .= "\n" . $t . 'print("$name\n")'; +} + print <<"END"; $startperl @@ -280,6 +281,14 @@ $declaresubs END +if (exists $init{doexec}) { + print <<'END'; +use Cwd (); +my $cwd = Cwd::cwd(); + +END +} + if (exists $init{ls}) { print <<'END'; my @rwx = qw(--- --x -w- -wx r-- r-x rw- rwx); @@ -348,9 +357,6 @@ END if (exists $init{doexec}) { print <<'END'; -use Cwd (); -my $cwd = Cwd::cwd(); - sub doexec ($@) { my $ok = shift; my @command = @_; # copy so we don't try to s/// aliases to constants @@ -765,6 +771,18 @@ File name matches specified GLOB wildcard pattern. GLOB may need to be quoted to avoid interpretation by the shell (just as with using C). +=item C<-iname GLOB> + +Like C<-name>, but the match is case insensitive. + +=item C<-path GLOB> + +Path name matches specified GLOB wildcard pattern. + +=item C<-ipath GLOB> + +Like C<-path>, but the match is case insensitive. + =item C<-perm PERM> Low-order 9 bits of permission match octal value PERM. @@ -810,7 +828,7 @@ True if (hard) link count of file matches N (see below). True if file's size matches N (see below) N is normally counted in 512-byte blocks, but a suffix of "c" specifies that size should be -counted in characters (bytes) and a suffix of "k" specifes that +counted in characters (bytes) and a suffix of "k" specifies that size should be counted in 1024-byte blocks. =item C<-atime N> @@ -833,7 +851,9 @@ True if last-modified time of file matches N. =item C<-print> -Print out path of file (always true). +Print out path of file (always true). If none of C<-exec>, C<-ls>, +C<-print0>, or C<-ok> is specified, then C<-print> will be added +implicitly. =item C<-print0> @@ -841,7 +861,7 @@ Like -print, but terminates with \0 instead of \n. =item C<-exec OPTIONS ;> -exec() the arguments in OPTIONS in a subprocess; any occurence of {} in +exec() the arguments in OPTIONS in a subprocess; any occurrence of {} in OPTIONS will first be substituted with the path of the current file. Note that the command "rm" has been special-cased to use perl's unlink() function instead (as an optimization). The C<;> must be passed as @@ -887,7 +907,7 @@ Predicates which take a numeric argument N can come in three forms: =head1 SEE ALSO -find +find, File::Find. =cut !NO!SUBS!