From 0f2eb10f830fa623ca563909c45c91325234267c Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Sun, 8 Jun 2014 01:00:30 -0400 Subject: [PATCH 1/4] Version string now dynamically generated This was motivated by Git itself, which uses `git describe` output to generate the version number relative to the last tag. The format of it fits fairly cleanly into the existing ease.js versioning scheme, but the m4 macro had to modified slightly to handle additional dashes. --- configure.ac | 15 ++++++++++++--- tools/vergen | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 3 deletions(-) create mode 100755 tools/vergen diff --git a/configure.ac b/configure.ac index 22f96f1..d7ae922 100644 --- a/configure.ac +++ b/configure.ac @@ -18,12 +18,21 @@ # along with this program. If not, see . ## -AC_INIT([easejs], [0.2.2], [bugs@easejs.org]) +# version string is dynamically generated +m4_define([ver], m4_esyscmd(./tools/vergen)) +m4_if(ver, [], [m4_exit(1)]) + +AC_INIT([easejs], [ver], [bugs@easejs.org]) AC_CONFIG_AUX_DIR([tools]) AM_INIT_AUTOMAKE([foreign]) -# provide more granular version numbers based on the above AC_INIT line -m4_define([ver_split], m4_split(m4_translit(AC_PACKAGE_VERSION, [-], [.]), [\.])) +# provide more granular version numbers based on the version string, using +# the format MAJOR.MINOR.REV[-SUFFIX], where SUFFIX can itself contain +# dashes (and often will) +m4_define([ver_split], + m4_split( + patsubst(AC_PACKAGE_VERSION, [^\([^-]+\)-], [\1.]), + [\.])) AC_SUBST(MAJOR, m4_argn(1, ver_split)) AC_SUBST(MINOR, m4_argn(2, ver_split)) AC_SUBST(REV, m4_argn(3, ver_split)) diff --git a/tools/vergen b/tools/vergen new file mode 100755 index 0000000..6e22885 --- /dev/null +++ b/tools/vergen @@ -0,0 +1,37 @@ +#!/bin/sh +# Generates version string +# +# Copyright (C) 2014 Free Software Foundation, Inc. +# +# This file is part of GNU ease.js. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +## + +# for distributions +if [ -f version ]; then + cat version + exit +fi + +git rev-parse --show-toplevel >/dev/null 2>&1 || { + echo 'fatal: git repository is not available' +} + +version="$( git describe --match='[0-9]\.*' --abbrev=7 HEAD 2>/dev/null )" +git update-index -q --refresh +test -z "$( git diff-index --name-only HEAD)" || version="$version-dirty" + +echo -n "$version" + From 869e0cbfc5475533f9d2eb149c5b1a74fefdf13d Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Sun, 8 Jun 2014 01:57:25 -0400 Subject: [PATCH 2/4] Makefile will now write version file on dist --- Makefile.am | 16 ++++++++++------ tools/vergen | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Makefile.am b/Makefile.am index 3a4f291..4d004cf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -44,7 +44,7 @@ MKDIR_P = @MKDIR_P@ # see README SUBDIRS = doc EXTRA_DIST = AUTHORS NEWS ChangeLog README.md README.hacking README.traits \ - lib test index.js package.json \ + lib test index.js package.json version \ $(path_combine_output) $(path_combine_output_full) \ $(path_browser_test) $(path_combine_output_min) \ $(path_combine_output_full_min) \ @@ -52,7 +52,7 @@ EXTRA_DIST = AUTHORS NEWS ChangeLog README.md README.hacking README.traits \ tools/signchk tools/browser-test.html tools/combine-order.js \ tools/combine-test.tpl tools/combine.tpl tools/externs-global.js \ tools/externs.js tools/license-min.tpl tools/license.tpl \ - tools/linechk-ignores + tools/linechk-ignores tools/vergen .PHONY: mkbuild combine min doc check test test-suite perf FORCE @@ -140,19 +140,23 @@ else endif # generate the familiar files that automake normally checks for -dist-hook: AUTHORS NEWS ChangeLog +dist-hook: AUTHORS NEWS ChangeLog version cp $? $(distdir) AUTHORS: FORCE - $(path_tools)/gitlog-to-authors > AUTHORS + $(path_tools)/gitlog-to-authors > $@ NEWS: FORCE - $(path_tools)/gitlog-to-news $(path_tools)/news-ignore > NEWS + $(path_tools)/gitlog-to-news $(path_tools)/news-ignore > $@ ChangeLog: FORCE $(path_tools)/gitlog-to-changelog \ --strip-cherry-pick \ --format=%s \ -- \ --no-merges \ - > ChangeLog + > $@ +# we *only* want this in a distribution, otherwise the version number will +# never change! +version: + $(path_tools)/vergen > $@ clean-local: -rm -rf "$(path_build)" diff --git a/tools/vergen b/tools/vergen index 6e22885..54dead9 100755 --- a/tools/vergen +++ b/tools/vergen @@ -20,7 +20,7 @@ ## # for distributions -if [ -f version ]; then +if [ -s version ]; then cat version exit fi From 013da59d7f198dd4d5f3c341f33202db085276d2 Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Wed, 11 Jun 2014 21:55:53 -0400 Subject: [PATCH 3/4] AC_INIT e-mail changed to bug-easejs@gnu.org --- configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index d7ae922..1c909f9 100644 --- a/configure.ac +++ b/configure.ac @@ -22,7 +22,7 @@ m4_define([ver], m4_esyscmd(./tools/vergen)) m4_if(ver, [], [m4_exit(1)]) -AC_INIT([easejs], [ver], [bugs@easejs.org]) +AC_INIT([easejs], [ver], [bug-easejs@gnu.org]) AC_CONFIG_AUX_DIR([tools]) AM_INIT_AUTOMAKE([foreign]) From 8558d90596e86e17bd6613c4dbf221351f07c809 Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Wed, 11 Jun 2014 22:19:53 -0400 Subject: [PATCH 4/4] Forcing version regen on combine if in git repo This will re-run `autoconf` if it is detected that the user is within the git repository, which will force `configure` to be regenerated; this is necessary, since `configure.ac` contains the version macros. --- Makefile.am | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile.am b/Makefile.am index 4d004cf..af12c85 100644 --- a/Makefile.am +++ b/Makefile.am @@ -65,7 +65,11 @@ $(path_build): $(MKDIR_P) "$(path_build)" -combine: $(path_combine_output) $(path_build)/browser-test.html +combine: reconf $(path_combine_output) $(path_build)/browser-test.html + +# will force a reconfigure (for version data) if in the git repo +reconf: + test -d .git && autoconf && ./configure # combine all modules into easily redistributable ease.js file (intended for # browser) @@ -155,7 +159,7 @@ ChangeLog: FORCE > $@ # we *only* want this in a distribution, otherwise the version number will # never change! -version: +version: FORCE $(path_tools)/vergen > $@ clean-local: