From d11343532d813cf9b16e5c1ac92c0f0bc56e8850 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Wed, 18 Nov 2009 14:21:08 +0000 Subject: [PATCH] build: Generate per-cycle ChangeLog files 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 | 5 -- Makefile.am | 3 +- build/autotools/Makefile.am.changelog | 89 ++++++++++++++++++++++----- configure.ac | 10 +-- 4 files changed, 82 insertions(+), 25 deletions(-) delete mode 100644 ChangeLog diff --git a/ChangeLog b/ChangeLog deleted file mode 100644 index afcea3808..000000000 --- a/ChangeLog +++ /dev/null @@ -1,5 +0,0 @@ -2008-12-08 Emmanuele Bassi - - * *: 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. diff --git a/Makefile.am b/Makefile.am index 63841f292..37250d4d3 100644 --- a/Makefile.am +++ b/Makefile.am @@ -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 diff --git a/build/autotools/Makefile.am.changelog b/build/autotools/Makefile.am.changelog index 34a8f650a..8f6f5450f 100644 --- a/build/autotools/Makefile.am.changelog +++ b/build/autotools/Makefile.am.changelog @@ -1,19 +1,78 @@ -PREV_RELEASE=git-import +# Taken from Cairo - build/Makefile.am.changelog +# Modified to fit the Clutter build environment -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 ); \ +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 \ - echo A git checkout is required to generate a ChangeLog >&2; \ + test -f $@ || \ + (echo A git checkout is required to generate $@ >&2 && \ + echo A git checkout is required to generate this file >> $@); \ fi -dist-hook: changelog +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 $@ >&2; \ + fi + +.PHONY: changelogs ChangeLog $(srcdir)/ChangeLog diff --git a/configure.ac b/configure.ac index a82a4c007..a9fde5a54 100644 --- a/configure.ac +++ b/configure.ac @@ -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]) -AM_INIT_AUTOMAKE([1.9]) +AC_CONFIG_SRCDIR([clutter/clutter.h]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_AUX_DIR([build]) +AC_CONFIG_MACRO_DIR([build/autotools]) + +AM_INIT_AUTOMAKE([1.9.6 foreign]) CLUTTER_MAJOR_VERSION=clutter_major_version CLUTTER_MINOR_VERSION=clutter_minor_version