automake-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Automake-commit] [SCM] GNU Automake branch, msvc, updated. v1.11-632-g3


From: Stefano Lattarini
Subject: [Automake-commit] [SCM] GNU Automake branch, msvc, updated. v1.11-632-g3cec0f6
Date: Tue, 27 Dec 2011 21:16:06 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Automake".

http://git.sv.gnu.org/gitweb/?p=automake.git;a=commitdiff;h=3cec0f63c97df20bb559851ed04186dbb902cc07

The branch, msvc has been updated
       via  3cec0f63c97df20bb559851ed04186dbb902cc07 (commit)
       via  77b2c71c376f45b51a0e41774ab0e3cdf8d17932 (commit)
       via  6c9aa32580c5f98ba05eeb95088b98349afa422b (commit)
       via  44da9cbd7dbbdb858d11e8dcdf213c32be7e333c (commit)
       via  b1b43854dfcb2419bfd5c725aebc42b866374b75 (commit)
      from  d2fc8246603a665891b673d4a3b759e846232ff0 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 3cec0f63c97df20bb559851ed04186dbb902cc07
Merge: d2fc824 77b2c71
Author: Stefano Lattarini <address@hidden>
Date:   Tue Dec 27 22:14:53 2011 +0100

    Merge branch 'maint' into msvc
    
    * maint:
      tests: drop unnecessary requirement in 'subpkg.test'
      gitlog-to-changelog: new auxiliary script, synced from gnulib
      docs: "aclocal --install -I /abs/dir" actually copies files
      docs: fix node names for automake and aclocal invocations

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                          |   74 ++++
 Makefile.am                                        |    1 +
 NEWS                                               |    6 +
 doc/automake.texi                                  |    9 +-
 lib/Makefile.am                                    |    2 +-
 lib/gitlog-to-changelog                            |  353 ++++++++++++++++++++
 tests/Makefile.am                                  |    1 +
 ...rint-acdir.test => aclocal-install-absdir.test} |   20 +-
 tests/subpkg.test                                  |    2 +-
 9 files changed, 451 insertions(+), 17 deletions(-)
 create mode 100755 lib/gitlog-to-changelog
 copy tests/{aclocal-print-acdir.test => aclocal-install-absdir.test} (59%)
 mode change 100755 => 100644

diff --git a/ChangeLog b/ChangeLog
index be6a33d..874b557 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,77 @@
+2011-12-27  Stefano Lattarini  <address@hidden>
+
+       tests: drop unnecessary in 'subpkg.test'
+       * tests/subpkg.test ($required): Drop "bison", it is not required
+       anymore since commit `v1.11-502-g7e5ae80'.
+
+2011-12-27  Stefano Lattarini  <address@hidden>
+
+       gitlog-to-changelog: new auxiliary script, synced from gnulib
+
+       We have plans to stop maintaining a version-controlled ChangeLog
+       file in the Automake repository, and instead begin to generate it
+       automatically from the git log messages.  To do so, we will use
+       the `gitlog-to-changelog' script from gnulib.
+
+       * lib/gitlog-to-changelog: New, synced from gnulib.
+       * Makefile.am (fetch): Fetch and sync it.
+       * lib/Makefile.am (EXTRA_DIST): Distribute it.
+
+2011-12-27  Stefano Lattarini  <address@hidden>
+
+       docs: "aclocal --install -I /abs/dir" actually copies files
+
+       This change is for automake bug#8407.
+
+       In the past, there had been some debate and confusion about
+       whether "aclocal --install" should copy third-party .m4 files
+       in the first directory passed to the `-I' option even when
+       such directory was given as an absolute path, or whether it
+       was better to do so only for directories specified with a
+       relative path.
+
+       The rationale for this latter behaviour was that, before the
+       existence of the `ACLOCAL_PATH' variable, the only way (a poor
+       way, I might add) for a common user to extend the search path
+       of a system-wide installation of aclocal was to export something
+       like ACLOCAL="aclocal -I /my/extra/macros" in the environment.
+       Today, the correct way to proceed is undoubtedly through the
+       use of ACLOCAL_PATH, so we can settle the question once and for
+       all, and start verifying the correct behaviour of `-I' with a
+       new test.
+
+       * tests/aclocal-install-absdir.test: New test.
+       * tests/Makefile.am (TESTS): Add it.
+       * doc/automake.texi (aclocal Options): Be more explicit about
+       this part of `--install' semantics.
+
+2011-12-26  Stefano Lattarini  <address@hidden>
+
+       docs: fix node names for automake and aclocal invocations
+
+       With the older node names, an "info automake" command issued
+       from the command line would have opened the node about the
+       invocation of the automake program, rather than the Top node
+       of the automake documentation.  To invoke the Top node, one
+       had to issue the command "info Automake" instead (note the
+       different capitalization).  This was suboptimal, and certainly
+       confusing.
+
+       With this change, "info automake" will open the Top node of the
+       automake documentation; to access the nodes about the invocation
+       of the automake and aclocal program, one has now to issue "info
+       automake-invocation" and "info aclocal-invocation" respectively.
+
+       This change fixes automake bug#8071.
+
+       See also commits `v2.61a-22-ge9215d1' and `v2.61a-72-g8c07b48' in
+       the autoconf git repository, which tackled a similar issue.
+
+       * doc/automake.texi (@direntry): Rename nodes `aclocal' and
+       `automake' to `aclocal-invocation' and `automake-invocation'
+       respectively.
+       * NEWS: Update.
+
 2011-12-24  Stefano Lattarini  <address@hidden>
 
        gitignore: use only one .gitignore file, in the top-level directory
diff --git a/Makefile.am b/Makefile.am
index bb7b322..acb7228 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -704,6 +704,7 @@ fetch:
        $(WGET_SV_GIT_CF)config.sub -O config.sub && \
        $(WGET_SV_CVS)texinfo/texinfo/doc/texinfo.tex -O texinfo.tex && \
        $(WGET_SV_GIT_GL)doc/INSTALL -O INSTALL && \
+       $(WGET_SV_GIT_GL)build-aux/gitlog-to-changelog -O gitlog-to-changelog 
&& \
        $(WGET_GCC)config-ml.in -O config-ml.in && \
        $(WGET_GCC)symlink-tree -O symlink-tree)
 ## Don't exit after test because we want to give as many errors as
diff --git a/NEWS b/NEWS
index 8c5d897..2b21b70 100644
--- a/NEWS
+++ b/NEWS
@@ -28,6 +28,12 @@ New in 1.11.0a:
 
 * Miscellaneous changes:
 
+  - In the Automake info documentation, the Top node and the nodes about
+    the invocation of the automake and aclocal programs have been renamed;
+    now, calling "info automake" will open the Top node, while calling
+    "info automake-invocation" and "info aclocal-invocation" will access
+    the nodes about the invocation of respectively automake and aclocal.
+
   - Automake is now distributed as a gzip-compressed and an xz-compressed
     tarball.  Previously, bzip2 was used instead of xz.
 
diff --git a/doc/automake.texi b/doc/automake.texi
index 0f54287..e6dd2cf 100644
--- a/doc/automake.texi
+++ b/doc/automake.texi
@@ -38,9 +38,6 @@ section entitled ``GNU Free Documentation License.''
 @end quotation
 @end copying
 
address@hidden info Automake  points to the Automake package's documentation
address@hidden info automake  points to the automake script's documentation
address@hidden (Autoconf has a similar setup.)
 @dircategory Software development
 @direntry
 * Automake: (automake).         Making GNU standards-compliant Makefiles.
@@ -48,8 +45,8 @@ section entitled ``GNU Free Documentation License.''
 
 @dircategory Individual utilities
 @direntry
-* aclocal: (automake)Invoking aclocal.          Generating aclocal.m4.
-* automake: (automake)Invoking Automake.        Generating Makefile.in.
+* aclocal-invocation: (automake)Invoking aclocal.    Generating aclocal.m4.
+* automake-invocation: (automake)Invoking Automake.  Generating Makefile.in.
 @end direntry
 
 @titlepage
@@ -3244,6 +3241,8 @@ Add the directory @var{dir} to the list of directories 
searched for
 Install system-wide third-party macros into the first directory
 specified with @samp{-I @var{dir}} instead of copying them in the
 output file.
address@hidden The following semantics is checked by 
`aclocal-install-absdir.test'.
+Note that this will happen also if @var{dir} is an absolute path.
 
 @cindex serial number and @option{--install}
 When this option is used, and only when this option is used,
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 5bdc02e..f4acc8a 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -31,7 +31,7 @@ dist_script_DATA = config.guess config.sub install-sh 
mdate-sh missing \
   mkinstalldirs elisp-comp ylwrap acinstall depcomp compile py-compile \
   symlink-tree ar-lib
 
-EXTRA_DIST = gnupload
+EXTRA_DIST = gnupload gitlog-to-changelog
 
 install-data-hook:
        @$(POST_INSTALL)
diff --git a/lib/gitlog-to-changelog b/lib/gitlog-to-changelog
new file mode 100755
index 0000000..ee1ac87
--- /dev/null
+++ b/lib/gitlog-to-changelog
@@ -0,0 +1,353 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+# Convert git log output to ChangeLog format.
+
+my $VERSION = '2011-12-24 18:51'; # UTC
+# The definition above must lie within the first 8 lines in order
+# for the Emacs time-stamp write hook (at end) to update it.
+# If you change this file with Emacs, please let the write hook
+# do its job.  Otherwise, update this string manually.
+
+# Copyright (C) 2008-2011 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 of the License, 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
+
+use strict;
+use warnings;
+use Getopt::Long;
+use POSIX qw(strftime);
+
+(my $ME = $0) =~ s|.*/||;
+
+# use File::Coda; # http://meyering.net/code/Coda/
+END {
+  defined fileno STDOUT or return;
+  close STDOUT and return;
+  warn "$ME: failed to close standard output: $!\n";
+  $? ||= 1;
+}
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try `$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME [OPTIONS] [ARGS]
+
+Convert git log output to ChangeLog format.  If present, any ARGS
+are passed to "git log".  To avoid ARGS being parsed as options to
+$ME, they may be preceded by '--'.
+
+OPTIONS:
+
+   --amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
+                  makes a change to SHA1's commit log text or metadata.
+   --append-dot append a dot to the first line of each commit message if
+                  there is no other punctuation or blank at the end.
+   --since=DATE convert only the logs since DATE;
+                  the default is to convert all log entries.
+   --format=FMT set format string for commit subject and body;
+                  see 'man git-log' for the list of format metacharacters;
+                  the default is '%s%n%b%n'
+
+   --help       display this help and exit
+   --version    output version information and exit
+
+EXAMPLE:
+
+  $ME --since=2008-01-01 > ChangeLog
+  $ME -- -n 5 foo > last-5-commits-to-branch-foo
+
+In a FILE specified via --amend, comment lines (starting with "#") are ignored.
+FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
+a line) referring to a commit in the current project, and CODE refers to one
+or more consecutive lines of Perl code.  Pairs must be separated by one or
+more blank line.
+
+Here is sample input for use with --amend=FILE, from coreutils:
+
+3a169f4c5d9159283548178668d2fae6fced3030
+# fix typo in title:
+s/all tile types/all file types/
+
+1379ed974f1fa39b12e2ffab18b3f7a607082202
+# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
+# Change the author to be Paul.  Note the escaped "@":
+s,Jim .*>,Paul Eggert <address@hidden>,
+
+EOF
+    }
+  exit $exit_code;
+}
+
+# If the string $S is a well-behaved file name, simply return it.
+# If it contains white space, quotes, etc., quote it, and return the new 
string.
+sub shell_quote($)
+{
+  my ($s) = @_;
+  if ($s =~ m![^\w+/.,-]!)
+    {
+      # Convert each single quote to '\''
+      $s =~ s/\'/\'\\\'\'/g;
+      # Then single quote the string.
+      $s = "'$s'";
+    }
+  return $s;
+}
+
+sub quoted_cmd(@)
+{
+  return join (' ', map {shell_quote $_} @_);
+}
+
+# Parse file F.
+# Comment lines (starting with "#") are ignored.
+# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
+# (alone on a line) referring to a commit in the current project, and
+# CODE refers to one or more consecutive lines of Perl code.
+# Pairs must be separated by one or more blank line.
+sub parse_amend_file($)
+{
+  my ($f) = @_;
+
+  open F, '<', $f
+    or die "$ME: $f: failed to open for reading: $!\n";
+
+  my $fail;
+  my $h = {};
+  my $in_code = 0;
+  my $sha;
+  while (defined (my $line = <F>))
+    {
+      $line =~ /^\#/
+        and next;
+      chomp $line;
+      $line eq ''
+        and $in_code = 0, next;
+
+      if (!$in_code)
+        {
+          $line =~ /^([0-9a-fA-F]{40})$/
+            or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
+              $fail = 1, next;
+          $sha = lc $1;
+          $in_code = 1;
+          exists $h->{$sha}
+            and (warn "$ME: $f:$.: duplicate SHA1\n"),
+              $fail = 1, next;
+        }
+      else
+        {
+          $h->{$sha} ||= '';
+          $h->{$sha} .= "$line\n";
+        }
+    }
+  close F;
+
+  $fail
+    and exit 1;
+
+  return $h;
+}
+
+{
+  my $since_date;
+  my $format_string = '%s%n%b%n';
+  my $amend_file;
+  my $append_dot = 0;
+  GetOptions
+    (
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+     'since=s' => \$since_date,
+     'format=s' => \$format_string,
+     'amend=s' => \$amend_file,
+     'append-dot' => \$append_dot,
+    ) or usage 1;
+
+
+  defined $since_date
+    and unshift @ARGV, "--since=$since_date";
+
+  # This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
+  # that makes a correction in the log or attribution of that commit.
+  my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
+
+  my @cmd = (qw (git log --log-size),
+             '--pretty=format:%H:%ct  %an  <%ae>%n%n'.$format_string, @ARGV);
+  open PIPE, '-|', @cmd
+    or die ("$ME: failed to run `". quoted_cmd (@cmd) ."': $!\n"
+            . "(Is your Git too old?  Version 1.5.1 or later is required.)\n");
+
+  my $prev_multi_paragraph;
+  my $prev_date_line = '';
+  my @prev_coauthors = ();
+  while (1)
+    {
+      defined (my $in = <PIPE>)
+        or last;
+      $in =~ /^log size (\d+)$/
+        or die "$ME:$.: Invalid line (expected log size):\n$in";
+      my $log_nbytes = $1;
+
+      my $log;
+      my $n_read = read PIPE, $log, $log_nbytes;
+      $n_read == $log_nbytes
+        or die "$ME:$.: unexpected EOF\n";
+
+      # Extract leading hash.
+      my ($sha, $rest) = split ':', $log, 2;
+      defined $sha
+        or die "$ME:$.: malformed log entry\n";
+      $sha =~ /^[0-9a-fA-F]{40}$/
+        or die "$ME:$.: invalid SHA1: $sha\n";
+
+      # If this commit's log requires any transformation, do it now.
+      my $code = $amend_code->{$sha};
+      if (defined $code)
+        {
+          eval 'use Safe';
+          my $s = new Safe;
+          # Put the unpreprocessed entry into "$_".
+          $_ = $rest;
+
+          # Let $code operate on it, safely.
+          my $r = $s->reval("$code")
+            or die "$ME:$.:$sha: failed to eval \"$code\":address@hidden";
+
+          # Note that we've used this entry.
+          delete $amend_code->{$sha};
+
+          # Update $rest upon success.
+          $rest = $_;
+        }
+
+      my @line = split "\n", $rest;
+      my $author_line = shift @line;
+      defined $author_line
+        or die "$ME:$.: unexpected EOF\n";
+      $author_line =~ /^(\d+)  (.*>)$/
+        or die "$ME:$.: Invalid line "
+          . "(expected date/author/email):\n$author_line\n";
+      my $date_line = sprintf "%s  $2\n", strftime ("%F", localtime ($1));
+
+      my @coauthors = grep /^Co-authored-by:.*$/, @line;
+      # Omit "Co-authored-by..." and "Signed-off-by..." lines.
+      @line = grep !/^Signed-off-by: .*>$/, @line;
+      @line = grep !/^Co-authored-by: /, @line;
+
+      # Remove leading and trailing blank lines.
+      if (@line)
+        {
+          while ($line[0] =~ /^\s*$/) { shift @line; }
+          while ($line[$#line] =~ /^\s*$/) { pop @line; }
+        }
+
+      # Record whether there are two or more paragraphs.
+      my $multi_paragraph = grep /^\s*$/, @line;
+
+      # Format 'Co-authored-by: A U Thor <address@hidden>' lines in
+      # standard multi-author ChangeLog format.
+      for (@coauthors)
+        {
+          s/^Co-authored-by:\s*/\t    /;
+          s/\s*</  </;
+
+          /<address@hidden>/
+            or warn "$ME: warning: missing email address for "
+              . substr ($_, 5) . "\n";
+        }
+
+      # If this header would be different from the previous date/name/email/
+      # coauthors header, or if this or the previous entry consists of two
+      # or more paragraphs, then print the header.
+      if ($date_line ne $prev_date_line
+          or "@coauthors" ne "@prev_coauthors"
+          or $multi_paragraph
+          or $prev_multi_paragraph)
+        {
+          $prev_date_line eq ''
+            or print "\n";
+          print $date_line;
+          @coauthors
+            and print join ("\n", @coauthors), "\n";
+        }
+      $prev_date_line = $date_line;
+      @prev_coauthors = @coauthors;
+      $prev_multi_paragraph = $multi_paragraph;
+
+      # If there were any lines
+      if (@line == 0)
+        {
+          warn "$ME: warning: empty commit message:\n  $date_line\n";
+        }
+      else
+        {
+          if ($append_dot)
+            {
+              # If the first line of the message has enough room, then
+              if (length $line[0] < 72)
+                {
+                  # append a dot if there is no other punctuation or blank
+                  # at the end.
+                  $line[0] =~ /[[:punct:]\s]$/
+                    or $line[0] .= '.';
+                }
+            }
+
+          # Prefix each non-empty line with a TAB.
+          @line = map { length $_ ? "\t$_" : '' } @line;
+
+          print "\n", join ("\n", @line), "\n";
+        }
+
+      defined ($in = <PIPE>)
+        or last;
+      $in ne "\n"
+        and die "$ME:$.: unexpected line:\n$in";
+    }
+
+  close PIPE
+    or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
+  # FIXME-someday: include $PROCESS_STATUS in the diagnostic
+
+  # Complain about any unused entry in the --amend=F specified file.
+  my $fail = 0;
+  foreach my $sha (keys %$amend_code)
+    {
+      warn "$ME:$amend_file: unused entry: $sha\n";
+      $fail = 1;
+    }
+
+  exit $fail;
+}
+
+# Local Variables:
+# mode: perl
+# 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/tests/Makefile.am b/tests/Makefile.am
index b481d1a..8894fcf 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -78,6 +78,7 @@ acloca20.test \
 acloca21.test \
 acloca22.test \
 aclocal-acdir.test \
+aclocal-install-absdir.test \
 aclocal-print-acdir.test \
 aclocal-path.test \
 aclocal-path-install.test \
diff --git a/tests/aclocal-print-acdir.test b/tests/aclocal-install-absdir.test
old mode 100755
new mode 100644
similarity index 59%
copy from tests/aclocal-print-acdir.test
copy to tests/aclocal-install-absdir.test
index 368416c..1a642b5
--- a/tests/aclocal-print-acdir.test
+++ b/tests/aclocal-install-absdir.test
@@ -14,22 +14,22 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# Test on aclocal's `--print-ac-dir' option.
+# Make sure "aclocal --install" install files also in directories
+# passed to `-I' as absolute paths.  Now that we support the
+# ACLOCAL_PATH variable, it is clear that this is the right thing
+# to do.  See also automake bug#8407.
 
 . ./defs || Exit 1
 
 set -e
 
-$ACLOCAL --print-ac-dir
-test "`$ACLOCAL --print-ac-dir`" = "$testaclocaldir/acdir"
+mkdir loc sys
 
-$ACLOCAL -Wno-obsolete --acdir foo --print-ac-dir
-test "`$ACLOCAL -Wno-obsolete --acdir foo --print-ac-dir`" = foo
+echo 'AM_DUMMY_MACRO' >> configure.in
+echo 'AC_DEFUN([AM_DUMMY_MACRO], [:])' >> sys/foo.m4
 
-$ACLOCAL --system-acdir /bar --print-ac-dir
-test "`$ACLOCAL --system-acdir /bar --print-ac-dir`" = /bar
-
-$ACLOCAL --automake-acdir /bar --print-ac-dir
-test "`$ACLOCAL --automake-acdir /bar --print-ac-dir`" = 
"$testaclocaldir/acdir"
+cwd=`pwd` || fatal_ "cannot get current working directory"
+env ACLOCAL_PATH="$cwd/sys" $ACLOCAL --verbose --install -I "$cwd/loc"
+diff sys/foo.m4 loc/foo.m4
 
 :
diff --git a/tests/subpkg.test b/tests/subpkg.test
index cfa5acb..381fc54 100755
--- a/tests/subpkg.test
+++ b/tests/subpkg.test
@@ -16,7 +16,7 @@
 
 # Check subpackage handling.
 
-required='gcc bison'
+required=gcc
 . ./defs || Exit 1
 
 set -e


hooks/post-receive
-- 
GNU Automake



reply via email to

[Prev in Thread] Current Thread [Next in Thread]