summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel E. Denny <jdenny@clemson.edu>2009-08-04 18:06:20 -0400
committerJoel E. Denny <jdenny@clemson.edu>2009-08-04 21:27:06 -0400
commit269e222e24b03ccc4ab7881d960750ddeb131b05 (patch)
tree41a6a9ec136a78411a65e23974e9fb1417150112
parent35905f2b4583efaa3d2dd52ec7bb834e6a571cc8 (diff)
downloadbison-269e222e24b03ccc4ab7881d960750ddeb131b05.tar.gz
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.
-rw-r--r--ChangeLog9
-rw-r--r--Makefile.am7
-rw-r--r--build-aux/local.mk1
-rwxr-xr-xbuild-aux/update-b4-copyright124
-rw-r--r--data/yacc.c5
5 files changed, 143 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 402a9bfe..0f33560d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
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.
* .x-update-copyright: New.
* Makefile.am (EXTRA_DIST): Remove maint.mk.
diff --git a/Makefile.am b/Makefile.am
index 68d6d8b6..1bd44016 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -60,3 +60,10 @@ $(top_srcdir)/.version: configure
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.'
diff --git a/build-aux/local.mk b/build-aux/local.mk
index d3cb8317..c914172e 100644
--- a/build-aux/local.mk
+++ b/build-aux/local.mk
@@ -1,3 +1,4 @@
EXTRA_DIST += \
+build-aux/update-b4-copyright \
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
index 00000000..8cc5bbad
--- /dev/null
+++ b/build-aux/update-b4-copyright
@@ -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;
diff --git a/data/yacc.c b/data/yacc.c
index 52c8fae6..f3b2c348 100644
--- a/data/yacc.c
+++ b/data/yacc.c
@@ -156,8 +156,7 @@ m4_define([b4_rhs_location],
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. */
@@ -1599,7 +1598,7 @@ yypushreturn:
]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