changeset 21976:f6e119d0bdfd

avoid tagging HG-ID as .PHONY * build-aux/mk-hg-id.sh: New script. * Makefile.am: Use make variable and shell script to generate HG-ID.
author John W. Eaton <jwe@octave.org>
date Fri, 24 Jun 2016 14:46:04 -0400
parents 562eb526d0e9
children b5e75ce299d8
files Makefile.am build-aux/mk-hg-id.sh
diffstat 2 files changed, 65 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile.am	Fri Jun 24 10:44:35 2016 -0400
+++ b/Makefile.am	Fri Jun 24 14:46:04 2016 -0400
@@ -379,35 +379,16 @@
 	$(AM_V_GEN)$(changelog-from-hg-log)
 .PHONY: ChangeLog
 
+## The mk-hg-id.sh script will be executed each time Make runs.  It will
+## update the HG-ID file in the build tree if it is out of date.
+
 if AMCOND_ENABLE_HG_ID
-HG-ID:
-## Store hg ID in binaries so that we can identify botched installations
-## that are using incorrect or mismatched libraries.
-	$(AM_V_GEN)rm -f $@-t && \
-	if [ -d $(srcdir)/.hg ]; then \
-	  ( cd $(srcdir) && hg identify --id || echo "unknown" ) > $@-t && \
-	  $(simple_move_if_change_rule); \
-	elif [ ! -f $(srcdir)/HG-ID ]; then \
-	  echo "WARNING: $(srcdir)/HG-ID is missing!" 1>&2; \
-	  echo "unknown" > $@-t && mv $@-t $@; \
-	else \
-	  echo "preserving existing HG-ID file" 1>&2; \
-	  $(cp_update_rule); \
-	  if [ "`cat $@`" = "hg-id-disabled" ]; then \
-	    echo "WARNING: HG-ID is 'hg-id-disabled'" 1>&2; \
-	  fi \
-	fi
+HG_ID_VAR := \
+  $(shell $(SHELL) $(top_srcdir)/build-aux/mk-hg-id.sh "$(srcdir)")
 else
-## Avoid unnecessary building just because HG-ID changes (for example,
-## editing a .m file will cause "+" to be appended to the hg ID and that
-## will trigger compiling the build-info.cc files, relinking libraries
-## and .oct files).
-HG-ID:
-	$(AM_V_GEN)rm -f $@-t && \
-	echo "hg-id-disabled" > $@-t && \
-	$(simple_move_if_change_rule)
+HG_ID_VAR := \
+  $(shell $(SHELL) $(top_srcdir)/build-aux/mk-hg-id.sh "$(srcdir)" --disable)
 endif
-.PHONY: HG-ID
 
 octetc_DATA += \
   CITATION \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/build-aux/mk-hg-id.sh	Fri Jun 24 14:46:04 2016 -0400
@@ -0,0 +1,58 @@
+#! /bin/sh
+#
+# Copyright (C) 2016 John W. Eaton
+#
+# This file is part of Octave.
+#
+# Octave 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.
+#
+# Octave 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 Octave; see the file COPYING.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+# Generate a header file that provides the public symbols from Octave's
+# autoconf-generated config.h file.  See the notes at the top of the
+# generated octave-config.h file for more details.
+
+set -e
+
+if [ $# -ne 1 ] && [ $# -ne 2 ]; then
+  echo "usage: mk-hg-id.sh SRCDIR [--disable]" 1>&2
+  exit 1
+fi
+
+srcdir="$1"
+
+hg_id=HG-ID
+move_if_change="$srcdir/build-aux/move-if-change"
+
+if [ $# -eq 2 ] && [ x"$2" = x--disable ]; then
+  echo "hg-id-disabled" > ${hg_id}-t
+  ${move_if_change} ${hg_id}-t ${hg_id}
+elif [ -d $srcdir/.hg ]; then
+  ( cd $srcdir && hg identify --id || echo "unknown" ) > ${hg_id}-t
+  ${move_if_change} ${hg_id}-t ${hg_id}
+elif [ ! -f $srcdir/${hg_id} ]; then
+  echo "WARNING: $srcdir/HG-ID is missing!" 1>&2
+  echo "unknown" > ${hg_id}-t && mv ${hg_id}-t ${hg_id}
+else
+  echo "preserving existing HG-ID file" 1>&2
+  if [ "x$srcdir" != "x." ] && [ -f $srcdir/${hg_id} ] && [ ! -f ${hg_id} ]; then
+    cp ${srcdir}/${hg_id} ${hg_id}
+    touch -r ${srcdir}/${hg_id} ${hg_id}
+  fi
+fi
+
+if [ "`cat ${hg_id}`" = "hg-id-disabled" ]; then
+  echo "WARNING: HG-ID is 'hg-id-disabled'" 1>&2
+fi
+
+cat ${hg_id}