summaryrefslogtreecommitdiff
path: root/regen_perly.pl
diff options
context:
space:
mode:
authorNicholas Clark <nick@ccl4.org>2013-05-02 13:34:13 +0200
committerNicholas Clark <nick@ccl4.org>2013-05-06 09:36:45 +0200
commit9c221ee4de41f3d9f157be3eb25993315147c7ab (patch)
tree961240342ad807e01e7d463207e355cf6be7cdbd /regen_perly.pl
parentd358b6cc0072c98e9f7a7f0eba0e719792701e93 (diff)
downloadperl-9c221ee4de41f3d9f157be3eb25993315147c7ab.tar.gz
Improve the logic in regen_perly.pl for manually generating token macros.
Without this fixup the build breaks on Win32. Previously it was enabled using a second regular expression to parse the bison version string. This effectively duplicates the first regular expression that parses the bison version string to determine if the version of bison found can be used. The second regular expression could get missed when changing the first, as happened with commit f5cf236ddbe8e24e. So refactor the code to extract the bison version once, and then use this later as a simple numeric comparison. With this change, we can actually use bison 2.7 to regenerate perly.*
Diffstat (limited to 'regen_perly.pl')
-rw-r--r--regen_perly.pl11
1 files changed, 8 insertions, 3 deletions
diff --git a/regen_perly.pl b/regen_perly.pl
index 7907c20a58..b96275639c 100644
--- a/regen_perly.pl
+++ b/regen_perly.pl
@@ -73,16 +73,21 @@ unless ($version) { die <<EOF; }
Could not find a version of bison in your path. Please install bison.
EOF
+# Don't change this to add new bison versions without testing that the generated
+# files actually work :-) Win32 in particular may not like them. :-(
unless ($version =~ /\b(1\.875[a-z]?|2\.[0134567])\b/) { die <<EOF; }
You have the wrong version of bison in your path; currently 1.875
-2.0, 2.1, 2.3-2.7 is required. Try installing
- http://ftp.gnu.org/gnu/bison/bison-2.7.tar.gz
+2.0, 2.1, 2.3, 2.4, 2.5, 2.6 or 2.7 is required. Try installing
+ http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz
or similar. Your bison identifies itself as:
$version
EOF
+# bison's version number, not the entire string, is most useful later on.
+$version = $1;
+
# creates $tmpc_file and $tmph_file
my_system("$bison -d -o $tmpc_file $y_file");
@@ -116,7 +121,7 @@ open my $tmph_fh, '<', $tmph_file or die "Can't open $tmph_file: $!\n";
my $endcore_done = 0;
# Token macros need to be generated manually from bison 2.4 on
-my $gather_tokens = ($version =~ /\b2\.[456]\b/ ? undef : 0);
+my $gather_tokens = $version >= 2.4 ? undef : 0;
my $tokens;
while (<$tmph_fh>) {
# bison 2.6 adds header guards, which break things because of where we