This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Do the same as #29697 for Win32
[perl5.git] / win32 / sync_ext.pl
... / ...
CommitLineData
1=comment
2
3Synchronize filename cases for extensions.
4
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
12This script takes two arguments - first and second extensions to
13synchronize filename cases with.
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:
23 perl sync_ext.pl c obj --verbose
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();