]> git.ipfire.org Git - thirdparty/automake.git/commitdiff
maint: autogenerate ChangeLog
authorStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 28 Dec 2011 09:17:30 +0000 (10:17 +0100)
committerStefano Lattarini <stefano.lattarini@gmail.com>
Wed, 28 Dec 2011 09:29:59 +0000 (10:29 +0100)
Following the practice set by various other GNU projects, we start
to automatically generate the ChangeLog file from the git commit
messages.  This will avoid duplication (as the ChangeLog entries
were always inserted both in the git commit message and in the
version-controlled ChangeLog file), and potential problems with
spurious merge conflicts (which, although greatly mitigated by
Bruno Haible's `git-merge-changelog' helper program, have never
been completely solved).

* ChangeLog: Moved ...
* ChangeLog.11:... to this.
* Makefile.am (EXTRA_DIST): Add it.
(gitlog_to_changelog_command, gitlog_to_changelog_options): New
variables.
(ChangeLog, am--changelog-regen-hook): New targets.
* .gitignore: Add ChangeLog.

.gitignore
ChangeLog.11 [moved from ChangeLog with 100% similarity]
Makefile.am

index 47823214e8779b2f68c3d49597615a5dcab51944..33e3827fc13e00138737f958bc5b7bc1a22b7250 100644 (file)
@@ -1,5 +1,6 @@
 Makefile.in
 Makefile
+/ChangeLog
 /aclocal.m4
 /configure
 /autom4te.cache
similarity index 100%
rename from ChangeLog
rename to ChangeLog.11
index acb722838850b2557ff30c7ae6985b16b8ec29d1..ed01bbb003df081924a18eaae67757178d0c5a13 100644 (file)
@@ -42,6 +42,7 @@ EXTRA_DIST = \
   ChangeLog.03 \
   ChangeLog.04 \
   ChangeLog.09 \
+  ChangeLog.11 \
   bootstrap \
   $(AUTOMAKESOURCES)
 
@@ -108,6 +109,43 @@ INSTALL: lib/INSTALL
 ## to anybody else
 ##
 
+gitlog_to_changelog_command = $(PERL) $(srcdir)/lib/gitlog-to-changelog
+gitlog_to_changelog_options = --since='2011-12-28 00:00:00'
+
+# Automatic generation of the ChangeLog from git history.
+#
+# When executed from a git checkout, generate the ChangeLog from the git
+# history.  When executed from an extracted distribution tarball, just
+# copy the distributed ChangeLog in the build directory (and if this
+# fails, or if no distributed ChangeLog file is present, complain and
+# give an error).
+#
+# We need the apparently useless dependency from another .PHONY target
+# `am--changelog-regen-hook' to work around a bug of Solaris make, which
+# doesn't execute the recipe of a target named as an existing file, even
+# if such target is declared `.PHONY' (yikes!)
+#
+.PHONY: am--changelog-regen-hook
+am--changelog-regen-hook:
+ChangeLog: am--changelog-regen-hook
+       $(AM_V_GEN)set -e; set -u; \
+## The ChangeLog should be regenerated unconditionally when working from
+## checked-out sources; otherwise, if we're working from a distribution
+## tarball, we expect the ChangeLog to be distributed, so check that it
+## is indeed present in the source directory.
+       if test -d $(srcdir)/.git; then \
+         rm -f $@-t \
+           && $(gitlog_to_changelog_command) \
+              $(gitlog_to_changelog_options) >$@-t \
+           && chmod a-w $@-t \
+           && mv -f $@-t $@ \
+           || exit 1; \
+       elif test ! -f $(srcdir)/$@; then \
+         echo "Source tree is not a git checkout, and no pre-existent" \
+              "$@ file has been found there" >&2; \
+         exit 1; \
+       fi
+
 # Ensure tests are world-executable
 dist-hook:
        cd $(distdir)/tests && chmod a+rx *.test