diff --git a/Makefile.am b/Makefile.am
index 39b9640..9447442 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
@@ -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)
@@ -141,19 +145,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: FORCE
+ $(path_tools)/vergen > $@
clean-local:
-rm -rf "$(path_build)"
diff --git a/configure.ac b/configure.ac
index 22f96f1..1c909f9 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], [bug-easejs@gnu.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..54dead9
--- /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 [ -s 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"
+