build: Generate per-cycle ChangeLog files
authorEmmanuele Bassi <ebassi@linux.intel.com>
Wed, 18 Nov 2009 14:21:08 +0000 (14:21 +0000)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Wed, 18 Nov 2009 14:43:46 +0000 (14:43 +0000)
We should generate a ChangeLog for each minor version cycle, starting
from the Git import date (since before that we used ChangeLog-style
commit messages that don't really look good with the Git ones).

For this reason we can take Cairo's Makefile.am.changelog file and,
after tweaking it to fit our use case, let it generate the correct
ChangeLogs on dist.

ChangeLog [deleted file]
Makefile.am
build/autotools/Makefile.am.changelog
configure.ac

diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644 (file)
index afcea38..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,5 +0,0 @@
-2008-12-08  Emmanuele Bassi  <ebassi@linux.intel.com>
-
-       * *: Clutter moved from Subversion to Git. If you are reading
-       this then you should use `git log` to read the changes from
-       the commit messages.
index 63841f2..37250d4 100644 (file)
@@ -1,5 +1,4 @@
 include $(top_srcdir)/build/autotools/Makefile.am.silent
-include $(top_srcdir)/build/autotools/Makefile.am.changelog
 
 NULL =
 
@@ -61,3 +60,5 @@ MAINTAINERCLEANFILES =        \
        Makefile.in     \
        missing         \
        $(NULL)
+
+include $(top_srcdir)/build/autotools/Makefile.am.changelog
index 34a8f65..8f6f545 100644 (file)
@@ -1,19 +1,78 @@
-PREV_RELEASE=git-import
-
-changelog:
-       @if test -d "$(srcdir)/.git"; \
-       then \
-               to=""; \
-               from="$(PREV_RELEASE)"; \
-               echo Creating ChangeLog && \
-               ( cd "$(top_srcdir)" && \
-                 echo '# Generated by configure.  Do no edit.'; echo; \
-                 $(top_srcdir)/missing --run perl $(top_srcdir)/build/gen-changelog.pl $$from..$$to ) > ChangeLog.tmp \
-               && mv -f ChangeLog.tmp $(top_distdir)/ChangeLog \
-               || ( rm -f ChangeLog.tmp ; \
-                    echo Failed to generate ChangeLog >&2 ); \
+# Taken from Cairo - build/Makefile.am.changelog
+# Modified to fit the Clutter build environment
+
+CURR_CHANGELOG_VERSION=$(CLUTTER_MAJOR_VERSION).$$(echo "($(CLUTTER_MINOR_VERSION)+1)/2*2" | bc)
+# examines $version
+PREV_CHANGELOG_VERSION=$$(if test "x$$(echo "($$version-0.1)*2/2"|bc)" = "x$$(echo "$$version*2/2"|bc)"; \
+                         then echo "$$version-$$(echo "$$version" | sed 's/[0-9]/0/g;s/[0-9]$$/2/')"; \
+                         else echo "$$version-1.0"; \
+                         fi | bc | sed 's/[.]0*/./;s/^0[.]\?$$/git-import/;s/[.]$$/.0/')
+
+CHANGELOGS = ChangeLog \
+       `version=$(CURR_CHANGELOG_VERSION); \
+       version=$(PREV_CHANGELOG_VERSION); \
+       while test "x$$version" != xgit-import; do \
+               echo ChangeLog.pre-$$version; \
+               version=$(PREV_CHANGELOG_VERSION); \
+       done`
+
+MAINTAINERCLEANFILES += $(srcdir)/ChangeLog $(srcdir)/ChangeLog.pre-*
+CLEANFILES += $(srcdir)/ChangeLog.cache-*
+
+changelogs:
+       @$(MAKE) $(AM_MAKEFLAGS) $(CHANGELOGS)
+
+dist-hook: changelogs
+       changelogs="$(CHANGELOGS)"; \
+       for changelog in $$changelogs; do \
+               cp $(srcdir)/$$changelog $(distdir)/ 2>/dev/null || \
+               cp $$changelog $(distdir)/; \
+       done
+
+$(srcdir)/ChangeLog:
+       @if test -d "$(srcdir)/.git"; then \
+               version=$(CURR_CHANGELOG_VERSION); \
+               prev=$(PREV_CHANGELOG_VERSION).0; \
+               nearest_tag=`git describe | sed 's/-.*//'`; \
+               before=$(srcdir)/ChangeLog.cache-$$prev..$$nearest_tag; \
+               after=$(srcdir)/ChangeLog.cache-$$nearest_tag..; \
+               $(MAKE) $(AM_MAKEFLAGS) $$before $$after && \
+               echo Creating $@ && \
+               { echo '# Generated by configure.  Do not edit.'; echo; \
+                 cat $$after; echo; cat $$before; } > $@; \
+       else \
+               test -f $@ || \
+               (echo A git checkout is required to generate $@ >&2 && \
+                echo A git checkout is required to generate this file >> $@); \
+       fi
+
+DISTCLEANFILES += ChangeLog.cache-*
+
+ChangeLog.cache-*..: .git
+
+ChangeLog%: $(srcdir)/ChangeLog%
+
+$(srcdir)/ChangeLog.cache-% $(srcdir)/ChangeLog.pre-%:
+       @echo Creating $@
+       @if test -d "$(srcdir)/.git"; then \
+         (cd "$(srcdir)" && \
+         version=$$(echo "$@" | sed 's/.*ChangeLog\([.].*-\)\?//'); \
+         if echo "$@" | grep -q '^ChangeLog[.]cache'; then \
+               spec=$$version; \
+         else \
+               to=$$version; \
+               test "x$$version" = x && version=$(CURR_CHANGELOG_VERSION); \
+               from=$(PREV_CHANGELOG_VERSION); \
+               test "x$$to" = x || to=$$to.0; \
+               test "x$$from" = xgit-import || from=$$from.0; \
+               spec=$$from..$$to; \
+         fi; \
+         $(top_srcdir)/build/missing --run git log --stat "$$spec") > $@.tmp \
+         && mv -f $@.tmp $@ \
+         || ($(RM) $@.tmp; \
+             echo Failed to generate $@, your $@ may be outdated >&2); \
        else \
-               echo A git checkout is required to generate a ChangeLog >&2; \
+         echo A git checkout is required to generate $@ >&2; \
        fi
 
-dist-hook: changelog
+.PHONY: changelogs ChangeLog $(srcdir)/ChangeLog
index a82a4c0..a9fde5a 100644 (file)
@@ -50,11 +50,13 @@ AC_PREREQ([2.59])
 AC_INIT([clutter],
         [clutter_version],
         [http://bugzilla.o-hand.com/enter_bug.cgi?product=Clutter])
-AC_CONFIG_MACRO_DIR([build/autotools])
+
 AC_CONFIG_SRCDIR([clutter/clutter.h])
-AM_CONFIG_HEADER([config.h])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_AUX_DIR([build])
+AC_CONFIG_MACRO_DIR([build/autotools])
 
-AM_INIT_AUTOMAKE([1.9])
+AM_INIT_AUTOMAKE([1.9.6 foreign])
 
 CLUTTER_MAJOR_VERSION=clutter_major_version
 CLUTTER_MINOR_VERSION=clutter_minor_version