I used to have a different patch from Andrew that did part of this, and more, and conflicted rather badly with it. However, I never got around to applying that one, and I can't seem to find it anymore.
Andrew -do you recall if you had all this in yours, and is it still something you want in, or should we just go with this one? //Magnus Bruce Momjian wrote: > Magnus, what is your reaction to this patch? > > --------------------------------------------------------------------------- > > Hannes Eder wrote: >> Magnus Hagander wrote: >> >Hannes Eder wrote: >> >> Is it worth doing this the "Perl-way" and using File::Find? If so, I >> can >> >> work an a patch for that. >> >> >> > It's certainly cleaner that way, but I don't find it a major issue. >> But I'd >> > rather see that fix than the other one. >> >> Here we go. See attached patch. Your comments are welcome. >> >> Hannes. >> > >> *** ..\pgsql-cvshead\src\tools\msvc\Install.pm Mo Mai 14 16:36:10 2007 >> --- src\tools\msvc\Install.pm Mi Jun 6 20:39:47 2007 >> *************** >> *** 10,15 **** >> --- 10,18 ---- >> use Carp; >> use File::Basename; >> use File::Copy; >> + use File::Find; >> + use File::Glob; >> + use File::Spec; >> >> use Exporter; >> our (@ISA,@EXPORT_OK); >> *************** >> *** 99,104 **** >> --- 102,142 ---- >> print "\n"; >> } >> >> + sub FindFiles >> + { >> + my $spec = shift; >> + my $nonrecursive = shift; >> + my $pat = basename($spec); >> + my $dir = dirname($spec); >> + >> + if ($dir eq '') { $dir = '.'; } >> + >> + -d $dir || croak "Could not list directory $dir: $!\n"; >> + >> + if ($nonrecursive) >> + { >> + return glob($spec); >> + } >> + >> + # borrowed from File::DosGlob >> + # escape regex metachars but not glob chars >> + $pat =~ s:([].+^\-\${}[|]):\\$1:g; >> + # and convert DOS-style wildcards to regex >> + $pat =~ s/\*/.*/g; >> + $pat =~ s/\?/.?/g; >> + >> + $pat = '^' . $pat . '\z'; >> + >> + my @res; >> + find( >> + { >> + wanted => sub { /$pat/s && push (@res, >> File::Spec->canonpath($File::Find::name)); } >> + }, >> + $dir >> + ); >> + return @res; >> + } >> + >> sub CopySetOfFiles >> { >> my $what = shift; >> *************** >> *** 106,126 **** >> my $target = shift; >> my $silent = shift; >> my $norecurse = shift; >> - my $D; >> >> - my $subdirs = $norecurse?'':'/s'; >> print "Copying $what" unless ($silent); >> ! open($D, "dir /b $subdirs $spec |") || croak "Could not list $spec\n"; >> ! while (<$D>) >> { >> - chomp; >> next if /regress/; # Skip temporary install in regression subdir >> ! my $tgt = $target . basename($_); >> print "."; >> ! my $src = $norecurse?(dirname($spec) . '/' . $_):$_; >> ! copy($src, $tgt) || croak "Could not copy $src: $!\n"; >> } >> ! close($D); >> print "\n"; >> } >> >> --- 144,161 ---- >> my $target = shift; >> my $silent = shift; >> my $norecurse = shift; >> >> print "Copying $what" unless ($silent); >> ! >> ! foreach (FindFiles($spec, $norecurse)) >> { >> next if /regress/; # Skip temporary install in regression subdir >> ! my $src = $_; >> ! my $tgt = $target . basename($src); >> print "."; >> ! copy($src, $tgt) || croak "Could not copy $src to $tgt: $!\n"; >> } >> ! >> print "\n"; >> } >> >> *************** >> *** 371,395 **** >> { >> my $target = shift; >> my $nlspath = shift; >> - my $D; >> >> print "Installing NLS files..."; >> EnsureDirectories($target, "share/locale"); >> ! open($D,"dir /b /s nls.mk|") || croak "Could not list nls.mk\n"; >> ! while (<$D>) >> { >> - chomp; >> s/nls.mk/po/; >> my $dir = $_; >> next unless ($dir =~ /([^\\]+)\\po$/); >> my $prgm = $1; >> $prgm = 'postgres' if ($prgm eq 'backend'); >> - my $E; >> - open($E,"dir /b $dir\\*.po|") || croak "Could not list contents of >> $_\n"; >> >> ! while (<$E>) >> { >> - chomp; >> my $lang; >> next unless /^(.*)\.po/; >> $lang = $1; >> --- 406,425 ---- >> { >> my $target = shift; >> my $nlspath = shift; >> >> print "Installing NLS files..."; >> EnsureDirectories($target, "share/locale"); >> ! >> ! foreach (FindFiles("nls.mk")) >> { >> s/nls.mk/po/; >> my $dir = $_; >> next unless ($dir =~ /([^\\]+)\\po$/); >> my $prgm = $1; >> $prgm = 'postgres' if ($prgm eq 'backend'); >> >> ! foreach (FindFiles("$dir\\*.po", 1)) >> { >> my $lang; >> next unless /^(.*)\.po/; >> $lang = $1; >> *************** >> *** 401,409 **** >> && croak("Could not run msgfmt on $dir\\$_"); >> print "."; >> } >> - close($E); >> } >> ! close($D); >> print "\n"; >> } >> >> --- 431,438 ---- >> && croak("Could not run msgfmt on $dir\\$_"); >> print "."; >> } >> } >> ! >> print "\n"; >> } >> > >> ---------------------------(end of broadcast)--------------------------- >> TIP 6: explain analyze is your friend > ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster