MSVC build broken with perl 5.10

Started by Magnus Haganderalmost 18 years ago6 messages
#1Magnus Hagander
magnus@hagander.net

I just tried the MSVC build on a system with ActiveState Perl 5.10, and
it doesn't work. Some quick debugging before I downgraded to 5.8 showed
that this regexp in Project.pm line 262:
my $replace_re =
qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$};

matches things properly using Perl 5.8 in for example
src/bin/initdb/Makefile (matches a total of around 10 Makefiles), but
in 5.10 it simply does not match anything...

Any perl guru out there who can comment on why? ;-)

//Magnus

#2Andrew Dunstan
andrew@dunslane.net
In reply to: Magnus Hagander (#1)
Re: MSVC build broken with perl 5.10

Magnus Hagander wrote:

I just tried the MSVC build on a system with ActiveState Perl 5.10, and
it doesn't work. Some quick debugging before I downgraded to 5.8 showed
that this regexp in Project.pm line 262:
my $replace_re =
qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$};

matches things properly using Perl 5.8 in for example
src/bin/initdb/Makefile (matches a total of around 10 Makefiles), but
in 5.10 it simply does not match anything...

Any perl guru out there who can comment on why? ;-)

Perhaps you would like to comment it using the x format, so that it
doesn't just look like white noise.

cheers

andrew

#3Magnus Hagander
magnus@hagander.net
In reply to: Andrew Dunstan (#2)
Re: MSVC build broken with perl 5.10

Andrew Dunstan wrote:

Magnus Hagander wrote:

I just tried the MSVC build on a system with ActiveState Perl 5.10,
and it doesn't work. Some quick debugging before I downgraded to
5.8 showed that this regexp in Project.pm line 262:
my $replace_re =
qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$};

matches things properly using Perl 5.8 in for example
src/bin/initdb/Makefile (matches a total of around 10 Makefiles),
but in 5.10 it simply does not match anything...

Any perl guru out there who can comment on why? ;-)

Perhaps you would like to comment it using the x format, so that it
doesn't just look like white noise.

That would be a good idea, no? ;-) I have no idea what you mean with
"using the x format", though, but I agree in general that the
white-noise format is not a good idea...

//Magnus

#4Martijn van Oosterhout
kleptog@svana.org
In reply to: Magnus Hagander (#3)
Re: MSVC build broken with perl 5.10

On Thu, Apr 10, 2008 at 04:12:56PM +0200, Magnus Hagander wrote:

my $replace_re =
qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$};

Perhaps you would like to comment it using the x format, so that it
doesn't just look like white noise.

That would be a good idea, no? ;-) I have no idea what you mean with
"using the x format", though, but I agree in general that the
white-noise format is not a good idea...

Using x format modifier means you can put comments and whitespace in your regex, like:

my $replace_re = qr{^([^:\n\$]+\.c) # This matches the filename in $1
\s*:\s*(?:%\s*:\ )? # somethig with a %-sign
...etc...
}x;
Check the perlre manpage for more info.

Have a nice day,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/

Show quoted text

Please line up in a tree and maintain the heap invariant while
boarding. Thank you for flying nlogn airlines.

#5Zeugswetter Andreas OSB SD
Andreas.Zeugswetter@s-itsolutions.at
In reply to: Magnus Hagander (#1)
1 attachment(s)
Re: [HACKERS] MSVC build broken with perl 5.10

Magnus Hagander wrote:

I just tried the MSVC build on a system with ActiveState Perl 5.10,

and

it doesn't work. Some quick debugging before I downgraded to 5.8

showed

that this regexp in Project.pm line 262:
my $replace_re = qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*:

)?\$(\([^\)]+\))\/(.*)\/[^\/]+$};

matches things properly using Perl 5.8 in for example
src/bin/initdb/Makefile (matches a total of around 10 Makefiles), but
in 5.10 it simply does not match anything...

Any perl guru out there who can comment on why? ;-)

The answer is actually simple, the \n needs the multiline modifier,
and thus the m needs to be part of the quote-like operator.

The perl doc states:
"This operator quotes (and possibly compiles) its STRING"
(it seems 5.8 did not compile, but 5.10 does)

I feel that it is rather not a perl bug, and that the modifiers need to
be put
on the qr{}. I do not quite see why this re needs to be multiline in the
first place,
but I have not touched that in the attached patch, that is ready to
apply.
(modification works in perl 5.6, 5.8, 5.10)

Andreas

Attachments:

Project.pm.patchapplication/octet-stream; name=Project.pm.patchDownload
*** Project.pm.orig	Tue Feb 05 16:17:23 2008
--- Project.pm	Tue Apr 15 14:56:21 2008
***************
*** 256,262 ****
      }
  
      # Match rules that pull in source files from different directories
!     my $replace_re = qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$};
      while ($mf =~ m{$replace_re}m)
      {
          my $match = $1;
--- 256,263 ----
      }
  
      # Match rules that pull in source files from different directories
!     # example: pg_crc.c: $(top_srcdir)/src/backend/utils/hash/pg_crc.c
!     my $replace_re = qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*: )?\$(\([^\)]+\))\/(.*)\/[^\/]+$}m;
      while ($mf =~ m{$replace_re}m)
      {
          my $match = $1;
#6Andrew Dunstan
andrew@dunslane.net
In reply to: Zeugswetter Andreas OSB SD (#5)
Re: [HACKERS] MSVC build broken with perl 5.10

Zeugswetter Andreas OSB SD wrote:

Magnus Hagander wrote:

I just tried the MSVC build on a system with ActiveState Perl 5.10,

and

it doesn't work. Some quick debugging before I downgraded to 5.8

showed

that this regexp in Project.pm line 262:
my $replace_re = qr{^([^:\n\$]+\.c)\s*:\s*(?:%\s*:

)?\$(\([^\)]+\))\/(.*)\/[^\/]+$};

matches things properly using Perl 5.8 in for example
src/bin/initdb/Makefile (matches a total of around 10 Makefiles), but
in 5.10 it simply does not match anything...

Any perl guru out there who can comment on why? ;-)

The answer is actually simple, the \n needs the multiline modifier,
and thus the m needs to be part of the quote-like operator.

The perl doc states:
"This operator quotes (and possibly compiles) its STRING"
(it seems 5.8 did not compile, but 5.10 does)

I feel that it is rather not a perl bug, and that the modifiers need to
be put
on the qr{}. I do not quite see why this re needs to be multiline in the
first place,
but I have not touched that in the attached patch, that is ready to
apply.
(modification works in perl 5.6, 5.8, 5.10)

Thanks, that makes sense. I wonder how it ever worked before. Anyway,
patch applied back as far as 8.2.

cheers

andrew