Re: [HACKERS] msvc, build and install with cygwin in the PATH
Andrew Dunstan wrote: 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. I have committed a fix that is somewhat similar to this. The Install.pm module needs some love, but that will have to wait till the next cycle. Thanks, Andrew! //Magnus ---(end of broadcast)--- TIP 4: Have you searched our list archives? http://archives.postgresql.org
Re: [HACKERS] msvc, build and install with cygwin in the PATH
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. I have committed a fix that is somewhat similar to this. The Install.pm module needs some love, but that will have to wait till the next cycle. cheers andrew ---(end of broadcast)--- TIP 4: Have you searched our list archives? http://archives.postgresql.org
Re: [HACKERS] msvc, build and install with cygwin in the PATH
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 4: Have you searched our list archives? http://archives.postgresql.org
Re: [HACKERS] msvc, build and install with cygwin in the PATH
Andrew Dunstan schrieb: Hannes Eder wrote: -open($D, dir /b $subdirs $spec |) || croak Could not list $spec\n; +open($D, cmd /c dir /b $subdirs $spec |) || croak Could not list $spec\n; What the heck are we doing here anyway? We should be doing this a la Perl - calling out to dir /b is surely not the best way to do this. If we need to recurse we should use File::Find. I think since the code in src/tools/msvc is specific to MSVC and therefor, at least currently, specific to Windows. Calling out to dir /b /s or cmd /c dir /b /s works on WinNT and higher. On Win9x/ME command.com should be called instead of cmd.exe. In order to be more portable maybe we should use the environment variable COMSPEC, which should always point to an appropriate command processor. Is it worth doing this the Perl-way and using File::Find? If so, I can work an a patch for that. Hannes. ---(end of broadcast)--- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq
Re: [HACKERS] msvc, build and install with cygwin in the PATH
On Wed, May 30, 2007 at 12:09:05PM +0200, Hannes Eder wrote: Andrew Dunstan schrieb: Hannes Eder wrote: -open($D, dir /b $subdirs $spec |) || croak Could not list $spec\n; +open($D, cmd /c dir /b $subdirs $spec |) || croak Could not list $spec\n; What the heck are we doing here anyway? We should be doing this a la Perl - calling out to dir /b is surely not the best way to do this. If we need to recurse we should use File::Find. I think since the code in src/tools/msvc is specific to MSVC and therefor, at least currently, specific to Windows. Calling out to dir /b /s or cmd /c dir /b /s works on WinNT and higher. On Win9x/ME command.com should be called instead of cmd.exe. In order to be more portable maybe we should use the environment variable COMSPEC, which should always point to an appropriate command processor. We only support NT based OSes anyway, so I don't see COMSPEC as being a problem. The reason it is the way it is is because that part was originally just a .bat-file and I just copy/pasted the commands... Are you actually *running* the script from inside cygwin? How else does it pick up the wrong command processor? 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. //Magnus ---(end of broadcast)--- TIP 2: Don't 'kill -9' the postmaster
Re: [HACKERS] msvc, build and install with cygwin in the PATH
Magnus Hagander schrieb: Are you actually *running* the script from inside cygwin? How else does it pick up the wrong command processor? I run the script within cmd.exe, but cygwin´s /usr/bin directory is in my PATH, therefor cygwin dir executable is in the PATH (/usr/bin/dir). Instead of running cmd.exe´s dir command, cygwin´s /usr/bin/dir is invoked, when calling open($D, dir /b $subdirs $spec |) || croak Could not list $spec\n; but they do not work in the same way. So my original patch just solves the issue to run src/tools/msvc/install.(bat¦pl¦pm) while leaving the cygwin´s /usr/bin in the PATH. 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. Time permitting I´ll provide a patch. Hannes. ---(end of broadcast)--- TIP 7: You can help support the PostgreSQL project by donating at http://www.postgresql.org/about/donate
Re: [HACKERS] msvc, build and install with cygwin in the PATH
On Wed, May 30, 2007 at 01:56:24PM +0200, Hannes Eder wrote: Magnus Hagander schrieb: Are you actually *running* the script from inside cygwin? How else does it pick up the wrong command processor? I run the script within cmd.exe, but cygwin´s /usr/bin directory is in my PATH, therefor cygwin dir executable is in the PATH (/usr/bin/dir). Instead of running cmd.exe´s dir command, cygwin´s /usr/bin/dir is invoked, when calling They actually *put* that in there? Wow. That's yet another reason never to let cygwni touch your global path :-) 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. Time permitting I´ll provide a patch. Thanks. //Magnus ---(end of broadcast)--- TIP 7: You can help support the PostgreSQL project by donating at http://www.postgresql.org/about/donate
Re: [HACKERS] msvc, build and install with cygwin in the PATH
Hannes Eder wrote: -open($D, dir /b $subdirs $spec |) || croak Could not list $spec\n; +open($D, cmd /c dir /b $subdirs $spec |) || croak Could not list $spec\n; What the heck are we doing here anyway? We should be doing this a la Perl - calling out to dir /b is surely not the best way to do this. If we need to recurse we should use File::Find. cheers andrew ---(end of broadcast)--- TIP 9: In versions below 8.0, the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match