Try two-level immediate-plus-deferred assigment of WEAVE_VERSION.
diff --git a/Makefile.am b/Makefile.am
index 094138c..5728963 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -123,7 +123,9 @@
 # flapping as VERSION_FILE changes.
 #
 
-WEAVE_VERSION                     ?= $(if $(filter 0,$(MAKELEVEL)),$(shell cat $(VERSION_FILE) 2> /dev/null),$(WEAVE_VERSION))
+export MAYBE_WEAVE_VERSION        := $(if $(filter 0,$(MAKELEVEL)),$(shell cat $(VERSION_FILE) 2> /dev/null),$(MAYBE_WEAVE_VERSION))
+
+WEAVE_VERSION                     ?= $(MAYBE_WEAVE_VERSION)
 
 PACKAGE_VERSION                    = $(WEAVE_VERSION)
 VERSION                            = $(PACKAGE_VERSION)
@@ -135,10 +137,12 @@
 $(warning origin VERSION_FILE is $(origin VERSION_FILE))
 $(warning origin VERSION is $(origin VERSION))
 $(warning origin PACKAGE_VERSION is $(origin PACKAGE_VERSION))
+$(warning origin MAYBE_WEAVE_VERSION is $(origin MAYBE_WEAVE_VERSION))
 $(warning origin WEAVE_VERSION is $(origin WEAVE_VERSION))
 $(warning VERSION_FILE is $(VERSION_FILE))
 $(warning VERSION is $(VERSION))
 $(warning PACKAGE_VERSION is $(PACKAGE_VERSION))
+$(warning MAYBE_WEAVE_VERSION is $(MAYBE_WEAVE_VERSION))
 $(warning WEAVE_VERSION is $(WEAVE_VERSION))
 $(warning LOCAL_VERSION file is $(if $(wildcard $(builddir)/.local-version),$(builddir)/.local-version))
 $(warning DIST_VERSION file is $(if $(wildcard $(srcdir)/.dist-version),$(srcdir)/.dist-version))
diff --git a/Makefile.in b/Makefile.in
index e9a6f26..0423a50 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -259,7 +259,11 @@
   echo "origin of VERSION is $(origin VERSION)"; \
   echo "origin of distdir is $(origin distdir)"; \
   echo "origin of VERSION_FILE is $(origin VERSION_FILE)"; \
-  echo "VERSION_FILE is $(VERSION_FILE)"
+  echo "VERSION_FILE is $(VERSION_FILE)"; \
+  echo "origin of MAYBE_WEAVE_VERSION is $(origin MAYBE_WEAVE_VERSION)"; \
+  echo "MAYBE_WEAVE_VERSION is $(MAYBE_WEAVE_VERSION)"; \
+  echo "origin of WEAVE_VERSION is $(origin WEAVE_VERSION)"; \
+  echo "WEAVE_VERSION is $(WEAVE_VERSION)"
 am__post_remove_distdir = $(am__remove_distdir)
 am__relativize = \
   dir0=`pwd`; \
@@ -905,6 +909,8 @@
 	@echo "origin of distdir is $(origin distdir)"
 	@echo "origin VERSION_FILE is $(origin VERSION_FILE)"
 	@echo "origin PACKAGE_VERSION is $(origin PACKAGE_VERSION)"
+	@echo "origin of MAYBE_WEAVE_VERSION is $(origin MAYBE_WEAVE_VERSION)"
+	@echo "MAYBE_WEAVE_VERSION is $(MAYBE_WEAVE_VERSION)"
 	@echo "origin WEAVE_VERSION is $(origin WEAVE_VERSION)"
 	@echo "VERSION_FILE is $(VERSION_FILE)"
 	@echo "VERSION is $(VERSION)"
@@ -972,6 +978,8 @@
 	@echo "origin of distdir is $(origin distdir)"
 	@echo "origin VERSION_FILE is $(origin VERSION_FILE)"
 	@echo "origin PACKAGE_VERSION is $(origin PACKAGE_VERSION)"
+	@echo "origin of MAYBE_WEAVE_VERSION is $(origin MAYBE_WEAVE_VERSION)"
+	@echo "MAYBE_WEAVE_VERSION is $(MAYBE_WEAVE_VERSION)"
 	@echo "origin WEAVE_VERSION is $(origin WEAVE_VERSION)"
 	@echo "VERSION_FILE is $(VERSION_FILE)"
 	@echo "VERSION is $(VERSION)"
@@ -1223,7 +1231,9 @@
 # flapping as VERSION_FILE changes.
 #
 
-WEAVE_VERSION                     ?= $(if $(filter 0,$(MAKELEVEL)),$(shell cat $(VERSION_FILE) 2> /dev/null),$(WEAVE_VERSION))
+export MAYBE_WEAVE_VERSION        := $(if $(filter 0,$(MAKELEVEL)),$(shell cat $(VERSION_FILE) 2> /dev/null),$(MAYBE_WEAVE_VERSION))
+
+WEAVE_VERSION                     ?= $(MAYBE_WEAVE_VERSION)
 
 $(warning origin of MAKECMDGOALS is $(origin MAKECMDGOALS))
 $(warning MAKECMDGOALS is $(MAKECMDGOALS))
@@ -1232,10 +1242,12 @@
 $(warning origin VERSION_FILE is $(origin VERSION_FILE))
 $(warning origin VERSION is $(origin VERSION))
 $(warning origin PACKAGE_VERSION is $(origin PACKAGE_VERSION))
+$(warning origin MAYBE_WEAVE_VERSION is $(origin MAYBE_WEAVE_VERSION))
 $(warning origin WEAVE_VERSION is $(origin WEAVE_VERSION))
 $(warning VERSION_FILE is $(VERSION_FILE))
 $(warning VERSION is $(VERSION))
 $(warning PACKAGE_VERSION is $(PACKAGE_VERSION))
+$(warning MAYBE_WEAVE_VERSION is $(MAYBE_WEAVE_VERSION))
 $(warning WEAVE_VERSION is $(WEAVE_VERSION))
 $(warning LOCAL_VERSION file is $(if $(wildcard $(builddir)/.local-version),$(builddir)/.local-version))
 $(warning DIST_VERSION file is $(if $(wildcard $(srcdir)/.dist-version),$(srcdir)/.dist-version))