]> git.saurik.com Git - bison.git/commitdiff
maint: automate b4_copyright updates.
authorJoel E. Denny <jdenny@clemson.edu>
Tue, 4 Aug 2009 22:06:20 +0000 (18:06 -0400)
committerJoel E. Denny <jdenny@clemson.edu>
Wed, 5 Aug 2009 01:27:06 +0000 (21:27 -0400)
* Makefile.am (update-b4-copyright): New target rule.
* build-aux/local.mk (EXTRA_DIST): Add update-b4-copyright.
* build-aux/update-b4-copyright: New.
* data/yacc.c: Remove stray characters around b4_copyright
invocations.

ChangeLog
Makefile.am
build-aux/local.mk
build-aux/update-b4-copyright [new file with mode: 0755]
data/yacc.c

index 402a9bfe94feaa3cf83d745695304b73769e02ef..0f33560d4c6b207e9947599fad7f8c749b7865a3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-08-04  Joel E. Denny  <jdenny@clemson.edu>
+
+       maint: automate b4_copyright updates.
+       * Makefile.am (update-b4-copyright): New target rule.
+       * build-aux/local.mk (EXTRA_DIST): Add update-b4-copyright.
+       * build-aux/update-b4-copyright: New.
+       * data/yacc.c: Remove stray characters around b4_copyright
+       invocations.
+
 2009-08-04  Joel E. Denny  <jdenny@clemson.edu>
 
        maint: automate annual package-wide copyright-year update.
 2009-08-04  Joel E. Denny  <jdenny@clemson.edu>
 
        maint: automate annual package-wide copyright-year update.
index 68d6d8b68c22492954c4204553cec34bedf9a52f..1bd44016638278ec2ced75f365b6498e7e98be07 100644 (file)
@@ -60,3 +60,10 @@ $(top_srcdir)/.version: configure
        echo $(VERSION) > $@-t && mv $@-t $@
 dist-hook:
        echo $(VERSION) > $(distdir)/.tarball-version
        echo $(VERSION) > $@-t && mv $@-t $@
 dist-hook:
        echo $(VERSION) > $(distdir)/.tarball-version
+
+.PHONY: update-b4-copyright
+update-b4-copyright:
+       find data -type f                    \
+         | grep -v -E '^data/bison.m4$$'    \
+         | xargs $(build_aux)/$@
+       @echo 'warning: src/parse-gram.[hc] may need to be regenerated.'
index d3cb83170a0dc67a26c467233b30631618ca7993..c914172e6a0992366b389fc47c97199a7024efa3 100644 (file)
@@ -1,3 +1,4 @@
 EXTRA_DIST +=                                  \
 EXTRA_DIST +=                                  \
+build-aux/update-b4-copyright                  \
 build-aux/prev-version.txt                     \
 build-aux/cross-options.pl
 build-aux/prev-version.txt                     \
 build-aux/cross-options.pl
diff --git a/build-aux/update-b4-copyright b/build-aux/update-b4-copyright
new file mode 100755 (executable)
index 0000000..8cc5bba
--- /dev/null
@@ -0,0 +1,124 @@
+#!/usr/bin/perl -0777 -pi
+# Update an b4_copyright invocation to include the current year.
+
+# Copyright (C) 2009 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+use strict;
+use warnings;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d\d(\d\d)?$/)
+  {
+    my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+    $this_year = $year + 1900;
+  }
+my $margin = 72;
+my $old_re = <<'EOF'
+  (
+    (?:^|\n)
+    (?:
+      b4_copyright\(\[[^]]*]
+      | m4_(?:push|pop)def\(\[b4_copyright_years]
+    )
+  )
+  (?:
+    ,\s*
+    (
+      \[\s* (?:\d{4}(,\s*|-))* (\d{4}) \s*]
+    )
+  )?
+  \)
+EOF
+  ;
+
+while (/$old_re/x)
+  {
+    my $b4_copyright_line = $1;
+    my $year_lines = $2;
+    my $sep = $3 ? $3 : "";
+    my $final_year = $4;
+    $year_lines .= ')';
+
+    # Mark it completed.
+    $b4_copyright_line =~ s/b4_/b4*/g;
+
+    # If there was a second argument, it contains years, so update them.
+    if ($final_year)
+      {
+        $b4_copyright_line .= ',';
+        if ($final_year != $this_year)
+          {
+            # Update the year.
+            if ($sep eq '-' && $final_year + 1 == $this_year)
+              {
+                $year_lines =~ s/$final_year/$this_year/;
+              }
+            elsif ($sep ne '-' && $final_year + 1 == $this_year)
+              {
+                $year_lines =~ s/$final_year/$final_year-$this_year/;
+              }
+            else
+              {
+                $year_lines =~ s/$final_year/$final_year, $this_year/;
+              }
+          }
+
+          # Normalize all whitespace.
+          $year_lines =~ s/\s+/ /g;
+
+          # Put spaces after commas.
+          $year_lines =~ s/, ?/, /g;
+
+          # Format within margin.
+          my $year_lines_new;
+          my $indent = index ($b4_copyright_line, '[');
+          --$indent if ($b4_copyright_line =~ m/^\n/);
+          while (length $year_lines)
+            {
+              my $text_margin = $margin - $indent;
+              if (($year_lines =~ s/^(.{1,$text_margin})(?: |$)//)
+                  || ($year_lines =~ s/^([\S]+)(?: |$)//))
+                {
+                  my $line = "\n" . (' 'x$indent) . $1;
+                  ++$indent if (!$year_lines_new);
+                  $year_lines_new .= $line;
+                }
+              else
+                {
+                  # Should be unreachable, but we don't want an infinite
+                  # loop if it can be reached.
+                  die;
+                }
+            }
+          $year_lines = $year_lines_new;
+      }
+
+    # Replace the old invocation.
+    s/$old_re/$b4_copyright_line$year_lines/x;
+  }
+
+if (/\bb4_copyright\(/)
+  {
+    print STDERR
+      "$ARGV: warning: failed to update a b4_copyright invocation\n";
+  }
+if (/\[b4_copyright_years]/)
+  {
+    print STDERR
+      "$ARGV: warning: failed to update a b4_copyright_years use\n";
+  }
+
+s/b4\*copyright/b4_copyright/g;
index 52c8fae602f6ac28add5bff76b6f6162aa6308ae..f3b2c3487324706485b763e4abd8f5e32a8d7adb 100644 (file)
@@ -156,8 +156,7 @@ m4_define([b4_rhs_location],
 m4_changecom()
 m4_divert_push(0)dnl
 @output(b4_parser_file_name@)@
 m4_changecom()
 m4_divert_push(0)dnl
 @output(b4_parser_file_name@)@
-b4_copyright([Implementation for Bison's Yacc-like parsers in C])dnl'
-[
+b4_copyright([Implementation for Bison's Yacc-like parsers in C])[
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
 
 /* C LALR(1) parser skeleton written by Richard Stallman, by
    simplifying the original so-called "semantic" parser.  */
@@ -1599,7 +1598,7 @@ yypushreturn:
 ]b4_epilogue[]dnl
 b4_defines_if(
 [@output(b4_spec_defines_file@)@
 ]b4_epilogue[]dnl
 b4_defines_if(
 [@output(b4_spec_defines_file@)@
-b4_copyright([Interface for Bison's Yacc-like parsers in C])dnl'
+b4_copyright([Interface for Bison's Yacc-like parsers in C])dnl
 
 b4_percent_code_get([[requires]])[]dnl
 
 
 b4_percent_code_get([[requires]])[]dnl