m4/yat_svn_release.m4

Code
Comments
Other
Rev Date Author Line
2112 15 Nov 09 peter 1 ## $Id$
2112 15 Nov 09 peter 2
4333 16 Mar 23 peter 3 # serial 20 (yat 0.21)
2112 15 Nov 09 peter 4
2112 15 Nov 09 peter 5 # SYNOPSIS
2112 15 Nov 09 peter 6 #
2112 15 Nov 09 peter 7 #   YAT_SVN_RELEASE
2112 15 Nov 09 peter 8 #
2112 15 Nov 09 peter 9 # DESCRIPTION
2112 15 Nov 09 peter 10 #
2112 15 Nov 09 peter 11 #
2112 15 Nov 09 peter 12 # COPYLEFT
2678 21 Dec 11 peter 13 m4_define([yat_svn_release_copyright], [dnl
2112 15 Nov 09 peter 14 #
3855 02 Jan 20 peter 15 #   Copyright (C) 2009, 2010, 2011, 2012, 2014, 2019 Peter Johansson
2112 15 Nov 09 peter 16 #
2112 15 Nov 09 peter 17 #   This file is part of the yat library, http://dev.thep.lu.se/yat
2112 15 Nov 09 peter 18 #
2112 15 Nov 09 peter 19 #   The yat library is free software; you can redistribute it and/or
2112 15 Nov 09 peter 20 #   modify it under the terms of the GNU General Public License as
2112 15 Nov 09 peter 21 #   published by the Free Software Foundation; either version 3 of the
2112 15 Nov 09 peter 22 #   License, or (at your option) any later version.
2112 15 Nov 09 peter 23 #
2112 15 Nov 09 peter 24 #   The yat library is distributed in the hope that it will be useful,
2112 15 Nov 09 peter 25 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
2112 15 Nov 09 peter 26 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
2112 15 Nov 09 peter 27 #   General Public License for more details.
2112 15 Nov 09 peter 28 #
2112 15 Nov 09 peter 29 #   You should have received a copy of the GNU General Public License
2112 15 Nov 09 peter 30 #   along with yat. If not, see <http://www.gnu.org/licenses/>.
2112 15 Nov 09 peter 31 #
2114 15 Nov 09 peter 32 ])
2112 15 Nov 09 peter 33
3246 28 May 14 peter 34
3246 28 May 14 peter 35 # YAT_SVN_RELEASE(am-file, stable-version, upload-url, download-url, news-url)
3246 28 May 14 peter 36 # ============================================================================
2112 15 Nov 09 peter 37 AC_DEFUN([YAT_SVN_RELEASE],
2112 15 Nov 09 peter 38 [
3246 28 May 14 peter 39   m4_pushdef([YAT_OUTPUTFILE], [m4_default([$1], [maintainer.am])])
3246 28 May 14 peter 40
2678 21 Dec 11 peter 41   AC_REQUIRE([AC_PROG_SED])
2678 21 Dec 11 peter 42   AC_REQUIRE([AC_PROG_EGREP])
4321 21 Feb 23 peter 43   AC_REQUIRE([_YAT_PROG_SVN])
3246 28 May 14 peter 44   AC_CHECK_PROGS([MD5], [md5sum gmd5sum md5 md5deep], [false])
4333 16 Mar 23 peter 45   AC_ARG_VAR([MD5], [command to calculate md5 checksum])
3246 28 May 14 peter 46   AC_CHECK_PROG([SVNCOPYRIGHT], [svncopyright], [svncopyright], [false])
4333 16 Mar 23 peter 47   AC_ARG_VAR([SVNCOPYRIGHT], [svncopyright program])
3246 28 May 14 peter 48   AC_CHECK_PROG([SVNDIGEST_COPY_CACHE], [svndigest-copy-cache],
3246 28 May 14 peter 49                 [svndigest-copy-cache], [false])
4333 16 Mar 23 peter 50   AC_ARG_VAR([SVNDIGEST_COPY_CACHE], [svndigest-copy-cache program])
3246 28 May 14 peter 51   AC_CHECK_PROG([SCP], [scp], [scp], [false])
4333 16 Mar 23 peter 52   AC_ARG_VAR([SCP], [SCP program])
2112 15 Nov 09 peter 53
4326 12 Mar 23 peter 54   m4_ifdef([AM_PROG_LIBTOOL], [
4326 12 Mar 23 peter 55     m4_pushdef([write_LIBTOOL_VERSION_cmd],
4326 12 Mar 23 peter 56                [$(srcdir)/libtool --version | head -n 1 | $(SED) -e 's/.*(//' -e 's/)//' >> [$]@])
4326 12 Mar 23 peter 57   ], [
4326 12 Mar 23 peter 58     m4_pushdef([write_LIBTOOL_VERSION_cmd], [:])
4326 12 Mar 23 peter 59   ])
4326 12 Mar 23 peter 60   _YAT_AM_LOCAL_WRITE(YAT_OUTPUTFILE, [
3246 28 May 14 peter 61
3246 28 May 14 peter 62 STABLE_VERSION = $2
3246 28 May 14 peter 63 STABLE_BRANCH = ^/branches/$(STABLE_VERSION)-stable
3246 28 May 14 peter 64 UPLOAD_URL = $3
3246 28 May 14 peter 65 DOWNLOAD_URL = $4
3246 28 May 14 peter 66 NEWS_URL = $5
3313 25 Aug 14 peter 67 SVN_LIST_CC = `$(SVN) list -R $(srcdir) | $(EGREP) ".cc$$" | $(SED) 's,^,$(srcdir)/,'`
3246 28 May 14 peter 68
3246 28 May 14 peter 69 .PHONY: check-svn-diff check-news check-news-date check-version \
4326 12 Mar 23 peter 70         check-release-tools maintainer-check maintainer-check-local \
4326 12 Mar 23 peter 71         release-tag-upload release-tag-upload-local
2112 15 Nov 09 peter 72
3246 28 May 14 peter 73 # --------------------------------------------------------------------
3246 28 May 14 peter 74 # Tagging and uploading a release
3246 28 May 14 peter 75 #
3246 28 May 14 peter 76 # This is the main target used at release. It does several checks of
3246 28 May 14 peter 77 # the package, creates a tarball, an svn tag, and uploads the package
3246 28 May 14 peter 78 # to download page.
3246 28 May 14 peter 79 # --------------------------------------------------------------------
3246 28 May 14 peter 80 release-tag-upload:
4326 12 Mar 23 peter 81   $(MAKE) $(AM_MAKEFLAGS) release-tag-upload-local
3246 28 May 14 peter 82   $(MAKE) $(AM_MAKEFLAGS) check-release-tools
3246 28 May 14 peter 83   $(MAKE) $(AM_MAKEFLAGS) release-check
3246 28 May 14 peter 84   $(MAKE) $(AM_MAKEFLAGS) distcheck
3246 28 May 14 peter 85   $(MAKE) $(AM_MAKEFLAGS) maintainer-check
3246 28 May 14 peter 86   $(MAKE) $(AM_MAKEFLAGS) svn-tag
3299 18 Aug 14 peter 87   $(SVN) update $(srcdir)
3270 04 Jul 14 peter 88   $(MAKE) $(AM_MAKEFLAGS) dist
3270 04 Jul 14 peter 89   $(MAKE) $(AM_MAKEFLAGS) $(distdir).tar.gz.MD5
3246 28 May 14 peter 90   $(MAKE) $(AM_MAKEFLAGS) announce.txt
3246 28 May 14 peter 91   $(MAKE) $(AM_MAKEFLAGS) upload
4326 12 Mar 23 peter 92   $(MAKE) $(AM_MAKEFLAGS) release-tag-upload-hook
2112 15 Nov 09 peter 93
4326 12 Mar 23 peter 94 # This is run early in release-tag-upload. Add targets to
4326 12 Mar 23 peter 95 # $(RELEASE_LOCAL) such as checks that needed tools to make a release
4326 12 Mar 23 peter 96 # are available.
4326 12 Mar 23 peter 97 release-tag-upload-local: $(RELEASE_LOCAL)
4326 12 Mar 23 peter 98
4326 12 Mar 23 peter 99 # This is run late in release-tag-upload. Add targets to
4326 12 Mar 23 peter 100 # $(RELEASE_HOOK) if extra targets are desired.
4326 12 Mar 23 peter 101 release-tag-upload-hook: $(RELEASE_HOOK)
4326 12 Mar 23 peter 102
3269 04 Jul 14 peter 103 $(distdir).tar.gz.MD5: $(distdir).tar.gz
3269 04 Jul 14 peter 104   $(MD5) $(distdir).tar.gz > $(distdir).tar.gz.MD5
2112 15 Nov 09 peter 105
3246 28 May 14 peter 106 # Check that we have all tools needed to do a release
3246 28 May 14 peter 107 check-release-tools:
3246 28 May 14 peter 108   @test x"$(sf_user)" != x"" || \
3246 28 May 14 peter 109   { echo "make variable 'sf_user' is empty" >&2; exit 1; }
3246 28 May 14 peter 110   @test "x$(MD5)" != "xfalse" || \
3246 28 May 14 peter 111   { echo "no tool to calculate MD5 checksum available" 1>&2 && exit 1; }
3246 28 May 14 peter 112   @test "x$(SVN)" != "xfalse" || \
3246 28 May 14 peter 113   { echo "no subversion client available" 1>&2 && exit 1; }
3246 28 May 14 peter 114   @test "x$(SVNDIGEST_COPY_CACHE)" != "xfalse" || \
3246 28 May 14 peter 115   { echo "svndigest-copy-cache not available" 1>&2 && exit 1; }
3246 28 May 14 peter 116   @test "x$(SCP)" != "xfalse" || \
3246 28 May 14 peter 117   { echo "scp not available" 1>&2 && exit 1; }
3246 28 May 14 peter 118
3246 28 May 14 peter 119 # upload dist tarball to $(UPLOAD_URL)
3246 28 May 14 peter 120 upload: $(distdir).tar.gz $(distdir).tar.gz.MD5
3246 28 May 14 peter 121   $(SCP) $(distdir).tar.gz $(distdir).tar.gz.MD5 \
3246 28 May 14 peter 122   $(sf_user),$(UPLOAD_URL)
3246 28 May 14 peter 123
3246 28 May 14 peter 124
3246 28 May 14 peter 125 mc_exportdir = _exported
3246 28 May 14 peter 126 mc_builddir = _exported_build
3246 28 May 14 peter 127
3246 28 May 14 peter 128 # ---------------------------------------------------------------------
3246 28 May 14 peter 129 # Similar to automake generated distcheck rule
3246 28 May 14 peter 130 #
3246 28 May 14 peter 131 # This rule 'svn export' the local WC and tries to bootstrap, a VPATH
3246 28 May 14 peter 132 # configuration, and check that everything is there to make dist. The
3821 16 Jul 19 peter 133 # rule is hookable; if variable MAINTAINER_CHECK_LOCAL is non-empty it
3821 16 Jul 19 peter 134 # will be issued. A typical declaration would be
3246 28 May 14 peter 135 # MAINTAINER_CHECK_LOCAL = check
3246 28 May 14 peter 136 # ---------------------------------------------------------------------
3246 28 May 14 peter 137 maintainer-check:
3246 28 May 14 peter 138   $(MAKE) $(AM_MAKEFLAGS) syntax-check
3246 28 May 14 peter 139   rm -rf $(mc_exportdir)
3246 28 May 14 peter 140   rm -rf $(mc_builddir)
3246 28 May 14 peter 141   $(SVN) export $(srcdir) $(mc_exportdir)
3246 28 May 14 peter 142   mkdir $(mc_builddir)
3246 28 May 14 peter 143   @cd $(mc_exportdir) \
3246 28 May 14 peter 144   && echo "./bootstrap" \
3246 28 May 14 peter 145   && ./bootstrap \
3246 28 May 14 peter 146   && cd ../$(mc_builddir) \
4326 12 Mar 23 peter 147   && ../$(mc_exportdir)/configure $(DISTCHECK_CONFIGURE_FLAGS) \
4326 12 Mar 23 peter 148   && $(MAKE) $(AM_MAKEFLAGS) maintainer-check-local \
3246 28 May 14 peter 149   && $(MAKE) $(AM_MAKEFLAGS) dist || exit 1
3246 28 May 14 peter 150   rm -rf $(mc_builddir) $(mc_exportdir)
3246 28 May 14 peter 151
4326 12 Mar 23 peter 152 # This is run during maintainer-check. Add targets to
4326 12 Mar 23 peter 153 # $(MAINTAINER_CHECK_LOCAL), if extra targets such as 'check' is
4326 12 Mar 23 peter 154 # desired during maintainer-check.
4326 12 Mar 23 peter 155 maintainer-check-local: $(MAINTAINER_CHECK_LOCAL)
4326 12 Mar 23 peter 156
3246 28 May 14 peter 157 # -----------------------------------------
3246 28 May 14 peter 158 # Check that package is ready for release
3246 28 May 14 peter 159 # -----------------------------------------
3246 28 May 14 peter 160 release-check: check-news check-news-date check-svn-diff check-version
3246 28 May 14 peter 161
3246 28 May 14 peter 162 # Check that NEWS mention VERSION early on
2112 15 Nov 09 peter 163 check-news:
3269 04 Jul 14 peter 164   @case `sed 15q $(srcdir)/NEWS` in \
3246 28 May 14 peter 165   *"$(VERSION)"*);; \
3246 28 May 14 peter 166   *) \
3246 28 May 14 peter 167     echo "NEWS not updated" 1>&2; \
3246 28 May 14 peter 168     exit 1;; \
2112 15 Nov 09 peter 169   esac
2112 15 Nov 09 peter 170
3246 28 May 14 peter 171 # Check that NEWS mention today's date (in UTC)
2112 15 Nov 09 peter 172 check-news-date:
3269 04 Jul 14 peter 173   @today=`date -u "+%e %B %Y"`; \
3269 04 Jul 14 peter 174   case `sed 15q $(srcdir)/NEWS` in \
3246 28 May 14 peter 175   *"$$today"*);; \
3246 28 May 14 peter 176   *) \
3246 28 May 14 peter 177     echo "NEWS: release date incorrect; expected '$$today'" 1>&2;\
3246 28 May 14 peter 178     exit 1;; \
2112 15 Nov 09 peter 179   esac
2112 15 Nov 09 peter 180
3246 28 May 14 peter 181 # Check that VERSION is appropriate for release
2112 15 Nov 09 peter 182 check-version:
3246 28 May 14 peter 183   @echo $(VERSION) | $(EGREP) '^[0-9]+(\.[0-9]+)+$$' > /dev/null || \
3246 28 May 14 peter 184   { echo "invalid version string: $(VERSION)" 1>&2; exit 1; }
2112 15 Nov 09 peter 185
2112 15 Nov 09 peter 186
3246 28 May 14 peter 187 #------------------
3246 28 May 14 peter 188 # Subversion rules
3246 28 May 14 peter 189 #------------------
2112 15 Nov 09 peter 190
3246 28 May 14 peter 191 # Check that WC is in sync with repository
3246 28 May 14 peter 192 check-svn-diff:
3246 28 May 14 peter 193   @str=`$(SVN) diff -rHEAD $(srcdir)`; \
3268 04 Jul 14 peter 194   test -z "$$str" || { echo "$$str" 1>&2; exit 1; }
2112 15 Nov 09 peter 195
3246 28 May 14 peter 196 check-svn-wc-is-trunk:
3246 28 May 14 peter 197   @$(SVN) info $(srcdir) | $(GREP) -q '/trunk'
3246 28 May 14 peter 198
3246 28 May 14 peter 199
3246 28 May 14 peter 200 # create a tag from current stable branch; depends on check-version to
3246 28 May 14 peter 201 # ensure that version is macro.minor.micro (no pre suffix), that wc is
3246 28 May 14 peter 202 # pristine and updated.
3246 28 May 14 peter 203 svn-tag: check-version check-svn-diff
3246 28 May 14 peter 204   cd $(srcdir) && \
3246 28 May 14 peter 205   $(SVN) copy $(STABLE_BRANCH) ^/tags/$(VERSION) \
3246 28 May 14 peter 206   -m "tagging version $(VERSION)"
3246 28 May 14 peter 207
3246 28 May 14 peter 208 # create a stable-branch from trunk
3246 28 May 14 peter 209 svn-stable-branch: check-svn-diff check-svn-wc-is-trunk
3246 28 May 14 peter 210   cd $(srcdir) && \
3246 28 May 14 peter 211   $(SVN) copy ^/trunk $(STABLE_BRANCH) \
3246 28 May 14 peter 212   -m "New stable branch $(STABLE_VERSION)" \
3246 28 May 14 peter 213   && svn co $(STABLE_BRANCH) ../$(PACKAGE)-$(STABLE_VERSION).x \
3246 28 May 14 peter 214   && $(SVNDIGEST_COPY_CACHE) -v -r . -t ../$(PACKAGE)-$(STABLE_VERSION).x
3246 28 May 14 peter 215
3246 28 May 14 peter 216
3246 28 May 14 peter 217 # Update copyright statement
3246 28 May 14 peter 218 copyright:
3246 28 May 14 peter 219   $(SVNCOPYRIGHT) -v -r $(srcdir)
3246 28 May 14 peter 220
3246 28 May 14 peter 221 syntax-check: sc_config_h
3246 28 May 14 peter 222
3246 28 May 14 peter 223 sc_config_h:
3246 28 May 14 peter 224   @for f in $(SVN_LIST_CC); do \
3246 28 May 14 peter 225     $(GREP) '^#include' $$f | head -n 1 | $(GREP) -q '<config.h>' || \
3246 28 May 14 peter 226     { echo "missing '#include <config.h>' in $$f" >&2; exit 1; } \
3246 28 May 14 peter 227   done
3246 28 May 14 peter 228
3246 28 May 14 peter 229 # Generate an announcement
3246 28 May 14 peter 230 announce.txt: Makefile $(distdir).tar.gz.MD5
4326 12 Mar 23 peter 231   @echo "I'm happy to announce the release of $(PACKAGE_STRING)" > ]$[@
4326 12 Mar 23 peter 232   @echo >> ]$[@
4326 12 Mar 23 peter 233   @echo "<INSERT TEXT HERE>" >> ]$[@
4326 12 Mar 23 peter 234   @echo >> ]$[@
4326 12 Mar 23 peter 235   @echo "You can find the new release here:" >> ]$[@
4326 12 Mar 23 peter 236   @echo >> ]$[@
4326 12 Mar 23 peter 237   @echo "$(DOWNLOAD_URL)" >> ]$[@
4326 12 Mar 23 peter 238   @echo >> ]$[@
4326 12 Mar 23 peter 239   @echo "Here is the checksum" >> ]$[@
4326 12 Mar 23 peter 240   @echo >> ]$[@
4326 12 Mar 23 peter 241   @printf "MD5:    " >> ]$[@
4326 12 Mar 23 peter 242   @cat $(distdir).tar.gz.MD5 | $(SED) 's/ .*//' >> ]$[@
4326 12 Mar 23 peter 243   @echo >> ]$[@
4326 12 Mar 23 peter 244   @echo "Please report bugs by email to $(PACKAGE_BUGREPORT)" >> ]$[@
4326 12 Mar 23 peter 245   @echo >> ]$[@
4326 12 Mar 23 peter 246   @echo "This release was bootstrapped with the following tools:" >> ]$[@
4326 12 Mar 23 peter 247   @$(AUTOCONF) --version | head -n 1 | $(SED) -e 's/.*(//' -e 's/)//' >> ]$[@
4326 12 Mar 23 peter 248   @$(AUTOMAKE) --version | head -n 1 | $(SED) -e 's/.*(//' -e 's/)//' >> ]$[@
4327 12 Mar 23 peter 249   @]write_LIBTOOL_VERSION_cmd[
4326 12 Mar 23 peter 250   @echo >> ]$[@
4326 12 Mar 23 peter 251   @echo You can find the list of significant changes between $(VERSION)>> ]$[@
4326 12 Mar 23 peter 252   @echo and earlier versions at >> ]$[@
4326 12 Mar 23 peter 253   @echo >> ]$[@
4326 12 Mar 23 peter 254   @echo $(NEWS_URL) >> ]$[@
3246 28 May 14 peter 255
2112 15 Nov 09 peter 256 ])
3246 28 May 14 peter 257 m4_popdef([YAT_OUTPUTFILE])
4326 12 Mar 23 peter 258 m4_popdef([write_LIBTOOL_VERSION_cmd])
2112 15 Nov 09 peter 259 ]) # YAT_SVN_RELEASE
4326 12 Mar 23 peter 260
4326 12 Mar 23 peter 261 # See file 'yat_common.m4' for new macros
4326 12 Mar 23 peter 262 AU_ALIAS([YAT_AC_WRITE], [YAT_AC_WRITE_TO_FILE])
4326 12 Mar 23 peter 263 AU_ALIAS([YAT_AC_WRITE_APPEND], [YAT_AC_APPEND_TO_FILE])