From: Jim Meyering Date: Wed, 15 Jul 2009 07:54:26 +0000 (+0200) Subject: build: submodule machinery now works also when no tag is reachable X-Git-Tag: v0.7.0~170 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f84fef2ebe0d957c30ed162a76ef605d2a11518;p=thirdparty%2Flibvirt.git build: submodule machinery now works also when no tag is reachable The code in cfg.mk to detect when the git submodule was out of date worked most of the time, but not when checked out in a certain way. * cfg.mk: Extract submodule hash from command output and file, and compare only that, since the format of the full line may vary. Reported by Mike Burns, with some diagnosis by Daniel P Berrange. --- diff --git a/cfg.mk b/cfg.mk index 0bf935d51a..64bd26e0ff 100644 --- a/cfg.mk +++ b/cfg.mk @@ -242,9 +242,17 @@ prev_version_file = /dev/null ifeq (0,$(MAKELEVEL)) _curr_status = .git-module-status - _update_required := \ - $(shell t=$$(git submodule status); \ - test "$$t" = "$$(cat $(_curr_status) 2>/dev/null)"; echo $$?) + # The sed filter accommodates those who check out on a commit from which + # no tag is reachable. In that case, git submodule status prints a "-" + # in column 1 and does not print a "git describe"-style string after the + # submodule name. Contrast these: + # -b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib + # b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib (v0.0-2286-gb653eda) + _submodule_hash = sed 's/.//;s/ .*//' + _update_required := $(shell \ + actual=$$(git submodule status | $(_submodule_hash)); \ + stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)"; \ + test "$$stamp" = "$$actual"; echo $$?) ifeq (1,$(_update_required)) $(error gnulib update required; run ./autogen.sh first) endif