bug-gnulib
[Top][All Lists]
Advanced

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

Re: maint.mk: absolute VPATH build fix


From: Akim Demaille
Subject: Re: maint.mk: absolute VPATH build fix
Date: Sun, 29 Jul 2012 08:49:42 +0200

Le 28 juil. 2012 à 23:26, Bruno Haible a écrit :

> Hi Akim,
> 
> Akim Demaille wrote:
>> +  $$(git --git-dir $(srcdir)/.git cat-file tag v$(VERSION) \
> 
> This code makes the assumption that the top-level dir of a project
> (that is, the one with the top-level Makefile.am and configure.ac)
> is at the root of the git project. Which is not necessarily the case.
> For an example, see the
>  http://git.savannah.gnu.org/gitweb/?p=bibledit.git;a=tree
> project: it has several subdirectories with configure.ac and Makefile.am
> each, but none at the top level.
> 
> Can you make it work without this assumption? I.e. from $(srcdir), walk
> up to the first ancestor directory that contains a .git subdir?

Hi Bruno,

This is easy to do in that case:

commit 767b67254209634a7a13eb99a51df5dc1e9388f0
Author: Akim Demaille <address@hidden>
Date:   Sat Jul 28 12:40:53 2012 +0200

    maint.mk: absolute VPATH build fix
    
    * top/maint.mk (gpg_key_ID): Help git find .git when, for instance,
    $(srcdir) is not a parent of $(builddir).

diff --git a/ChangeLog b/ChangeLog
index 378c405..51f4a76 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2012-07-29  Akim Demaille  <address@hidden>
+
+       maint.mk: absolute VPATH build fix
+       * top/maint.mk (gpg_key_ID): Help git find .git when, for instance,
+       $(srcdir) is not a parent of $(builddir).
+
 2012-07-27  Jim Meyering  <address@hidden>
 
        maint.mk: new rule: refresh-gnulib-patches
diff --git a/top/maint.mk b/top/maint.mk
index baff0e9..2af938e 100644
--- a/top/maint.mk
+++ b/top/maint.mk
@@ -1256,10 +1256,11 @@ bootstrap-tools ?= autoconf,automake,gnulib
 
 # If it's not already specified, derive the GPG key ID from
 # the signed tag we've just applied to mark this release.
-gpg_key_ID ?= \
-  $$(git cat-file tag v$(VERSION) \
-     | gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null \
-     | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
+gpg_key_ID ?=                                                          \
+  $$(cd $(srcdir)                                                      \
+     && git cat-file tag v$(VERSION)                                   \
+        | gpgv --status-fd 1 --keyring /dev/null - - 2>/dev/null       \
+        | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}')
 
 translation_project_ ?= address@hidden
 


But there's another occurrence of that issue.  I suggest this patch.
(I'd like a critical eye from a native on the --help snippet :).

commit 67ad543c52477f07acef242178f1090f76900dcf
Author: Akim Demaille <address@hidden>
Date:   Sun Jul 29 08:46:55 2012 +0200

    gitlog-to-changelog: don't expect .git to be in $srcdir
    
    Reported by Bruno Haible.
    <http://lists.gnu.org/archive/html/bug-gnulib/2012-07/msg00265.html>
    
    * build-aux/gitlog-to-changelog (&git_dir_option): New.
    Use it.

diff --git a/ChangeLog b/ChangeLog
index 51f4a76..36812a0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2012-07-29  Akim Demaille  <address@hidden>
 
+       gitlog-to-changelog: don't expect .git to be in $srcdir
+       Reported by Bruno Haible.
+       <http://lists.gnu.org/archive/html/bug-gnulib/2012-07/msg00265.html>
+       * build-aux/gitlog-to-changelog (&git_dir_option): New.
+       Use it.
+
+2012-07-29  Akim Demaille  <address@hidden>
+
        maint.mk: absolute VPATH build fix
        * top/maint.mk (gpg_key_ID): Help git find .git when, for instance,
        $(srcdir) is not a parent of $(builddir).
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index d79e7aa..7e75707 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -3,7 +3,7 @@ eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
     if 0;
 # Convert git log output to ChangeLog format.
 
-my $VERSION = '2012-07-16 18:34'; # UTC
+my $VERSION = '2012-07-29 06:11'; # 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
@@ -68,7 +68,8 @@ OPTIONS:
                   header; the default is to cluster adjacent commit messages
                   if their headers are the same and neither commit message
                   contains multiple paragraphs.
-   --srcdir=DIR the root of the source tree, containing the '.git' directory.
+   --srcdir=DIR the root of the source tree, a parent of whom contains
+                the '.git' directory.
    --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;
@@ -193,6 +194,30 @@ sub parse_amend_file($)
   return $h;
 }
 
+# git_dir_option $SRCDIR
+#
+# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
+# is undef).  Return as a list (0 or 1 element).
+sub git_dir_option($)
+{
+  my ($srcdir) = @_;
+  my @res = ();
+  if (defined $srcdir)
+    {
+      my $qdir = shell_quote $srcdir;
+      my $cmd = "cd $qdir && git rev-parse --show-toplevel";
+      my $qcmd = shell_quote $cmd;
+      my $git_dir = qx($cmd);
+      defined $git_dir
+        or die "$ME: cannot run $qcmd: $!\n";
+      die "$ME: $qcmd had unexpected exit code or signal ($?)\n"
+        if $?;
+      chomp $git_dir;
+      push @res, "--git-dir=$git_dir/.git";
+    }
+  @res;
+}
+
 {
   my $since_date;
   my $format_string = '%s%n%b%n';
@@ -224,7 +249,7 @@ sub parse_amend_file($)
   my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
 
   my @cmd = ('git',
-             defined $srcdir ? ("--git-dir=$srcdir/.git") : (),
+             git_dir_option $srcdir,
              qw(log --log-size),
              '--pretty=format:%H:%ct  %an  <%ae>%n%n'.$format_string, @ARGV);
   open PIPE, '-|', @cmd




reply via email to

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