summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <ebb9@byu.net>2009-08-12 14:25:53 -0600
committerEric Blake <ebb9@byu.net>2009-08-14 07:23:24 -0600
commitf2b17001accafe0c7d159d5e18c963c3622d23ed (patch)
treec033d8406bf5452a04a4604f77fd7bf715a5d684
parentc6aa493da470a5f2578508632058188e81a91af6 (diff)
downloadautoconf-f2b17001accafe0c7d159d5e18c963c3622d23ed.tar.gz
Prepare to bulk update copyright years.
* build-aux/update-copyright: New file. * cfg.mk (gnulib-update): Sync it from gnulib. (update-copyright-exclude-regexp): New varialbe. (web-manual): Move... * maint.mk (web-manual): ...here, to match gnulib. (update-copyright): New target, copied from gnulib's maint.mk (it would be nice to sync this file...). (build_aux): New macro. (VC_LIST, emit_upload_commands): Use it. * build-aux/texinfo.tex: Resynchronize from upstream. * lib/autoconf/general.m4 (_AC_COPYRIGHT_YEARS): Reformat to meet expected pattern. * lib/autotest/general.m4 (_AT_COPYRIGHT_YEARS): Likewise. Signed-off-by: Eric Blake <ebb9@byu.net>
-rw-r--r--ChangeLog17
-rw-r--r--build-aux/texinfo.tex3
-rwxr-xr-xbuild-aux/update-copyright246
-rw-r--r--cfg.mk18
-rw-r--r--lib/autoconf/general.m47
-rw-r--r--lib/autotest/general.m47
-rw-r--r--maint.mk31
7 files changed, 312 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index 430c6faf..22b4f085 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2009-08-14 Eric Blake <ebb9@byu.net>
+
+ Prepare to bulk update copyright years.
+ * build-aux/update-copyright: New file.
+ * cfg.mk (gnulib-update): Sync it from gnulib.
+ (update-copyright-exclude-regexp): New varialbe.
+ (web-manual): Move...
+ * maint.mk (web-manual): ...here, to match gnulib.
+ (update-copyright): New target, copied from gnulib's
+ maint.mk (it would be nice to sync this file...).
+ (build_aux): New macro.
+ (VC_LIST, emit_upload_commands): Use it.
+ * build-aux/texinfo.tex: Resynchronize from upstream.
+ * lib/autoconf/general.m4 (_AC_COPYRIGHT_YEARS): Reformat to meet
+ expected pattern.
+ * lib/autotest/general.m4 (_AT_COPYRIGHT_YEARS): Likewise.
+
2009-08-12 Paolo Bonzini <bonzini@gnu.org>
Fix testsuite log capturing for tests 183 and 186.
diff --git a/build-aux/texinfo.tex b/build-aux/texinfo.tex
index 4592fbba..3b44d401 100644
--- a/build-aux/texinfo.tex
+++ b/build-aux/texinfo.tex
@@ -3,7 +3,7 @@
% Load plain if necessary, i.e., if running under initex.
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
%
-\def\texinfoversion{2009-05-24.17}
+\def\texinfoversion{2009-07-25.15}
%
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -4322,6 +4322,7 @@ end
\definedummyword\code
\definedummyword\command
\definedummyword\dfn
+ \definedummyword\email
\definedummyword\emph
\definedummyword\env
\definedummyword\file
diff --git a/build-aux/update-copyright b/build-aux/update-copyright
new file mode 100755
index 00000000..d8445fee
--- /dev/null
+++ b/build-aux/update-copyright
@@ -0,0 +1,246 @@
+#!/usr/bin/perl -0777 -pi
+# Update an FSF copyright year list to include the current year.
+
+my $VERSION = '2009-08-14.05:03'; # UTC
+
+# 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/>.
+
+# Written by Jim Meyering and Joel E. Denny
+
+# The arguments to this script should be names of files that contain FSF
+# copyright statements to be updated. For example, you might wish to
+# use the update-copyright target rule in maint.mk from gnulib's
+# maintainer-makefile module.
+#
+# Iff an FSF copyright statement is discovered in a file and the final
+# year is not the current year, then the statement is updated for the
+# new year, 2-digit years are converted to 4-digit years by prepending
+# "19", and the statement is reformatted to fit within 72 columns. A
+# warning is printed for every file for which no FSF copyright statement
+# is discovered.
+#
+# Each file's FSF copyright statement must be formated correctly in
+# order to be recognized. For example, each of these is fine:
+#
+# Copyright @copyright{} 1990-2005, 2007-2009 Free Software
+# Foundation, Inc.
+#
+# # Copyright (C) 1990-2005, 2007-2009 Free Software
+# # Foundation, Inc.
+#
+# /*
+# * Copyright &copy; 90,2005,2007-2009
+# * Free Software Foundation, Inc.
+# */
+#
+# However, the following format is not recognized because the line
+# prefix changes after the first line:
+#
+# ## Copyright (C) 1990-2005, 2007-2009 Free Software
+# # Foundation, Inc.
+#
+# The following copyright statement is not recognized because the
+# copyright holder is not the FSF:
+#
+# Copyright (C) 1990-2005, 2007-2009 Acme, Inc.
+#
+# However, any correctly formatted FSF copyright statement following
+# either of the previous two copyright statements would be recognized.
+#
+# The exact conditions that a file's FSF copyright statement must meet
+# to be recognized are:
+#
+# 1. It is the first FSF copyright statement that meets all of the
+# following conditions. Subsequent FSF copyright statements are
+# ignored.
+# 2. Its format is "Copyright (C)", then a list of copyright years,
+# and then the name of the copyright holder, which is "Free
+# Software Foundation, Inc.".
+# 3. The "(C)" takes one of the following forms or is omitted
+# entirely:
+#
+# A. (C)
+# B. (c)
+# C. @copyright{}
+# D. &copy;
+#
+# 4. The "Copyright" appears at the beginning of a line except that it
+# may be prefixed by any sequence (e.g., a comment) of no more than
+# 5 characters.
+# 5. Iff such a prefix is present, the same prefix appears at the
+# beginning of each remaining line within the FSF copyright
+# statement. There is one exception in order to support C-style
+# comments: if the first line's prefix contains nothing but
+# whitespace surrounding a "/*", then the prefix for all subsequent
+# lines is the same as the first line's prefix except with each of
+# "/" and possibly "*" replaced by a " ". The replacement of "*"
+# by " " is consistent throughout all subsequent lines.
+# 6. Blank lines, even if preceded by the prefix, do not appear
+# within the FSF copyright statement.
+# 7. Each copyright year is 2 or 4 digits, and years are separated by
+# commas or dashes. Whitespace may occur after commas.
+#
+# Environment variables:
+#
+# 1. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
+# copyright years (such as 90, 1991, 1992-2007, 2008) in an updated
+# FSF copyright statement is collapsed to a single interval (such
+# as 1990-2008). If unset or set to 0, all existing copyright year
+# intervals are expanded.
+# 2. For testing purposes, you can set the assumed current year in
+# UPDATE_COPYRIGHT_YEAR.
+
+use strict;
+use warnings;
+
+my $copyright_re = 'Copyright';
+my $circle_c_re = '(?:\([cC]\)|@copyright{}|&copy;)';
+my $holder = 'Free Software Foundation, Inc.';
+my $prefix_max = 5;
+my $margin = 72;
+my $tab_width = 8;
+
+my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
+if (!$this_year || $this_year !~ m/^\d{4}$/)
+ {
+ my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
+ $this_year = $year + 1900;
+ }
+
+# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
+my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
+
+my $leading;
+my $prefix;
+my $ws_re;
+my $stmt_re;
+while (/(^|\n)(.{0,$prefix_max})$copyright_re/g)
+ {
+ $leading = "$1$2";
+ $prefix = $2;
+ if ($prefix =~ /^(\s*\/)\*(\s*)$/)
+ {
+ $prefix =~ s,/, ,;
+ my $prefix_ws = $prefix;
+ $prefix_ws =~ s/\*/ /; # Only whitespace.
+ if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
+ {
+ $prefix = $prefix_ws;
+ }
+ }
+ $ws_re = '[ \t\r\f]'; # \s without \n
+ $ws_re =
+ "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
+ my $holder_re = $holder;
+ $holder_re =~ s/\s/$ws_re/g;
+ my $stmt_remainder_re =
+ "(?:$ws_re$circle_c_re)?"
+ . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|-))*"
+ . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
+ if (/\G$stmt_remainder_re/)
+ {
+ $stmt_re =
+ quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
+ last;
+ }
+ }
+if (defined $stmt_re)
+ {
+ /$stmt_re/ or die; # Should never die.
+ my $stmt = $1;
+ my $final_year_orig = $2;
+
+ # Handle two-digit year numbers like "98" and "99".
+ my $final_year = $final_year_orig;
+ $final_year <= 99
+ and $final_year += 1900;
+
+ if ($final_year != $this_year)
+ {
+ # Update the year.
+ $stmt =~ s/$final_year_orig/$final_year, $this_year/;
+
+ # Normalize all whitespace including newline-prefix sequences.
+ $stmt =~ s/$ws_re/ /g;
+
+ # Put spaces after commas.
+ $stmt =~ s/, ?/, /g;
+
+ # Convert 2-digit to 4-digit years.
+ $stmt =~ s/(\b\d\d\b)/19$1/g;
+
+ # Make the use of intervals consistent.
+ if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
+ {
+ $stmt =~ s/(\d{4})-(\d{4})/join(', ', $1..$2)/eg;
+ }
+ else
+ {
+ $stmt =~
+ s/
+ (\d{4})
+ (?:
+ (,\ |-)
+ ((??{
+ if ($2 eq '-') { '\d{4}'; }
+ elsif (!$3) { $1 + 1; }
+ else { $3 + 1; }
+ }))
+ )+
+ /$1-$3/gx;
+ }
+
+ # Format within margin.
+ my $stmt_wrapped;
+ my $text_margin = $margin - length($prefix);
+ if ($prefix =~ /^(\t+)/)
+ {
+ $text_margin -= length($1) * ($tab_width - 1);
+ }
+ while (length $stmt)
+ {
+ if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
+ || ($stmt =~ s/^([\S]+)(?: |$)//))
+ {
+ my $line = $1;
+ $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
+ $stmt_wrapped .= $line;
+ }
+ else
+ {
+ # Should be unreachable, but we don't want an infinite
+ # loop if it can be reached.
+ die;
+ }
+ }
+
+ # Replace the old copyright statement.
+ s/$stmt_re/$stmt_wrapped/;
+ }
+ }
+else
+ {
+ print STDERR "$ARGV: warning: FSF copyright statement not found\n";
+ }
+
+# Local variables:
+# indent-tabs-mode: nil
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "my $VERSION = '"
+# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
+# time-stamp-time-zone: "UTC"
+# time-stamp-end: "'; # UTC"
+# End:
diff --git a/cfg.mk b/cfg.mk
index 07da7487..deb8c69a 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -33,6 +33,9 @@ gnu_ftp_host-beta = alpha.gnu.org
gnu_ftp_host-major = ftp.gnu.org
gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))
+# Used in maint.mk's web-manual rule
+manual_title = Creating Automatic Configuration Scripts
+
url_dir_list = \
ftp://$(gnu_rel_host)/gnu/autoconf
@@ -59,8 +62,9 @@ gnulib-update:
cp $(gnulib_dir)/build-aux/mdate-sh $(srcdir)/build-aux
cp $(gnulib_dir)/build-aux/missing $(srcdir)/build-aux
cp $(gnulib_dir)/build-aux/move-if-change $(srcdir)/build-aux
- cp $(gnulib_dir)/build-aux/vc-list-files $(srcdir)/build-aux
cp $(gnulib_dir)/build-aux/texinfo.tex $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/update-copyright $(srcdir)/build-aux
+ cp $(gnulib_dir)/build-aux/vc-list-files $(srcdir)/build-aux
cp $(gnulib_dir)/doc/fdl.texi $(srcdir)/doc
cp $(gnulib_dir)/doc/gendocs_template $(srcdir)/doc
cp $(gnulib_dir)/doc/gnu-oids.texi $(srcdir)/doc
@@ -105,10 +109,8 @@ autom4te-update:
local-checks-to-skip ?= \
changelog-check sc_unmarked_diagnostics
-.PHONY: web-manual
-web-manual:
- @cd $(srcdir)/doc ; \
- $(SHELL) ../build-aux/gendocs.sh -o '$(abs_builddir)/doc/manual' \
- --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
- "$(PACKAGE_NAME) - Creating Automatic Configuration Scripts"
- @echo " *** Upload the doc/manual directory to web-cvs."
+# Don't adjust copyright in upstream files.
+update-copyright-exclude-regexp = \
+(^|/)(COPYING|build-aux/|GNUmakefile\
+|Autom4te/(Configure_ac|Channels|FileUtils|Struct|XFile)\
+|doc/(fdl|gendocs|gnu-oids|make-stds|standards)).*$$
diff --git a/lib/autoconf/general.m4 b/lib/autoconf/general.m4
index f030c26b..ecc7db20 100644
--- a/lib/autoconf/general.m4
+++ b/lib/autoconf/general.m4
@@ -1,9 +1,10 @@
# This file is part of Autoconf. -*- Autoconf -*-
# Parameterized macros.
-m4_define([_AC_COPYRIGHT_YEARS],
-[Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+m4_define([_AC_COPYRIGHT_YEARS], [
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-Foundation, Inc.])
+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
diff --git a/lib/autotest/general.m4 b/lib/autotest/general.m4
index cf88b99c..d73932c0 100644
--- a/lib/autotest/general.m4
+++ b/lib/autotest/general.m4
@@ -1,8 +1,9 @@
# This file is part of Autoconf. -*- Autoconf -*-
# M4 macros used in building test suites.
-m4_define([_AT_COPYRIGHT_YEARS],
-[Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-2009 Free Software Foundation, Inc.])
+m4_define([_AT_COPYRIGHT_YEARS], [
+Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+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
diff --git a/maint.mk b/maint.mk
index 1b35a3bb..6394508f 100644
--- a/maint.mk
+++ b/maint.mk
@@ -21,6 +21,9 @@
# ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
ME := maint.mk
+# Override this in cfg.mk if you use a non-standard build-aux directory.
+build_aux ?= $(srcdir)/build-aux
+
# Do not save the original name or timestamp in the .tar.gz file.
# Use --rsyncable if available.
gzip_rsyncable := \
@@ -31,7 +34,7 @@ GIT = git
VC = $(GIT)
VC-tag = git tag -s -m '$(VERSION)'
-VC_LIST = $(srcdir)/build-aux/vc-list-files -C $(srcdir)
+VC_LIST = $(build_aux)/vc-list-files -C $(srcdir)
VC_LIST_EXCEPT = \
$(VC_LIST) | if test -f $(srcdir)/.x-$@; then \
@@ -552,7 +555,7 @@ move_if_change ?= move-if-change
emit_upload_commands:
@echo =====================================
@echo =====================================
- @echo "$(srcdir)/build-aux/gnupload $(GNUPLOADFLAGS) \\"
+ @echo "$(build_aux)/gnupload $(GNUPLOADFLAGS) \\"
@echo " --to $(gnu_rel_host):$(PACKAGE) \\"
@echo " $(rel-files)"
@echo '# send the /tmp/announcement e-mail'
@@ -575,3 +578,27 @@ alpha beta major: news-date-check changelog-check $(local-check)
$(VC) commit -m \
'$(prev_version_file): Record previous version: $(VERSION).' \
$(prev_version_file)
+
+
+.PHONY: web-manual
+web-manual:
+ @test -z "$(manual_title)" \
+ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || :
+ @cd '$(srcdir)/doc'; \
+ $(SHELL) ../build-aux/gendocs.sh -o '$(abs_builddir)/doc/manual' \
+ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \
+ "$(PACKAGE_NAME) - $(manual_title)"
+ @echo " *** Upload the doc/manual directory to web-cvs."
+
+# If you have an additional project-specific rule,
+# define it in cfg.mk and set this variable to its name.
+update-copyright-local ?=
+
+# Run this rule once per year (usually early in January)
+# to update all FSF copyright year lists in your project.
+update-copyright-exclude-regexp ?= (^|/)COPYING$$
+.PHONY: update-copyright
+update-copyright: $(update-copyright-local)
+ grep -l -w Copyright $$($(VC_LIST_EXCEPT)) \
+ | grep -v -E '$(update-copyright-exclude-regexp)' \
+ | xargs $(build_aux)/$@