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" +