diff options
author | Eric Blake <ebb9@byu.net> | 2009-08-12 14:25:53 -0600 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-08-14 07:23:24 -0600 |
commit | f2b17001accafe0c7d159d5e18c963c3622d23ed (patch) | |
tree | c033d8406bf5452a04a4604f77fd7bf715a5d684 | |
parent | c6aa493da470a5f2578508632058188e81a91af6 (diff) | |
download | autoconf-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-- | ChangeLog | 17 | ||||
-rw-r--r-- | build-aux/texinfo.tex | 3 | ||||
-rwxr-xr-x | build-aux/update-copyright | 246 | ||||
-rw-r--r-- | cfg.mk | 18 | ||||
-rw-r--r-- | lib/autoconf/general.m4 | 7 | ||||
-rw-r--r-- | lib/autotest/general.m4 | 7 | ||||
-rw-r--r-- | maint.mk | 31 |
7 files changed, 312 insertions, 17 deletions
@@ -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 © 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. © +# +# 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{}|©)'; +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: @@ -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 @@ -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)/$@ |