This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl #61392] Method call documentation in perlobj.pod
[perl5.git] / win32 / sync_ext.pl
CommitLineData
3b48d85d
VK
1=comment
2
02b1e604
VK
3Synchronize filename cases for extensions.
4
d2b25974
VK
5This script could be used to perform following renaming:
6if there exist file, for example, "FiLeNaME.c" and
7filename.obj then it renames "filename.obj" to "FiLeNaME.obj".
8There is a problem when some compilers (e.g.Borland) generate
9such .obj files and then "make" process will not treat them
10as dependant and already maked files.
11
02b1e604
VK
12This script takes two arguments - first and second extensions to
13synchronize filename cases with.
3b48d85d
VK
14
15There may be specified following options:
16 --verbose <== say everything what is going on
17 --recurse <== recurse subdirectories
18 --dummy <== do not perform actual renaming
19 --say-subdir
20Every such option can be specified with an optional "no" prefix to negate it.
21
22Typically, it is invoked as:
02b1e604 23 perl sync_ext.pl c obj --verbose
3b48d85d
VK
24
25=cut
26
27use strict;
28
29my ($ext1, $ext2) = map {quotemeta} grep {!/^--/} @ARGV;
30my %opts = (
31 #defaults
32 'verbose' => 0,
33 'recurse' => 1,
34 'dummy' => 0,
35 'say-subdir' => 0,
36 #options itself
37 (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth
38 (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt
39 );
40
41my $sp = '';
42sub xx {
43 opendir DIR, '.';
44 my @t = readdir DIR;
45 my @f = map {/^(.*)\.$ext1$/i} @t;
46 my %f = map {lc($_)=>$_} map {/^(.*)\.$ext2$/i} @t;
47 for (@f) {
48 my $lc = lc($_);
49 if (exists $f{$lc} and $f{$lc} ne $_) {
50 print STDERR "$sp$f{$lc}.$ext2 <==> $_.$ext1\n" if $opts{verbose};
51 if ($opts{dummy}) {
52 print STDERR "ren $f{$lc}.$ext2 $_.$ext2\n";
53 }
54 else {
55 system "ren $f{$lc}.$ext2 $_.$ext2";
56 }
57 }
58 }
59 if ($opts{recurse}) {
60 for (grep {-d&&!/^\.\.?$/} @t) {
61 print STDERR "$sp\\$_\n" if $opts{'say-subdir'};
62 $sp .= ' ';
63 chdir $_ or die;
64 xx();
65 chdir ".." or die;
66 chop $sp;
67 }
68 }
69}
70
71xx();