build: Only regenerate src/git-version.h when .git/logs/HEAD changes
authorKristian Høgsberg <krh@bitplanet.net>
Sat, 1 Feb 2014 00:33:48 +0000 (16:33 -0800)
committerKristian Høgsberg <krh@bitplanet.net>
Sat, 1 Feb 2014 09:05:35 +0000 (01:05 -0800)
We rely on .git/logs/HEAD to be a file that changes when we commit to HEAD.
The first idea is to make the makefile rule depend on .git/HEAD, but that's
a symbolic ref that points to the current ref in refs/heads.  However,
.git/logs/HEAD changes whenever we commit to HEAD, so we can use that in the
makefile rule.

Makefile.am
configure.ac

index e515736..b2c7a2c 100644 (file)
@@ -77,6 +77,12 @@ weston_SOURCES =                                     \
        shared/zalloc.h                                 \
        src/weston-egl-ext.h
 
+# Track this dependency explicitly instead of using BUILT_SOURCES.  We
+# add BUILT_SOURCES to CLEANFILES, but we want to keep git-version.h
+# in case we're building from tarballs.
+
+src/compositor.c : $(top_builddir)/src/git-version.h
+
 noinst_LTLIBRARIES +=                          \
        libsession-helper.la
 
@@ -99,10 +105,10 @@ libsession_helper_la_LIBADD += $(SYSTEMD_LOGIN_LIBS) $(DBUS_LIBS)
 endif
 endif
 
-src/git-version.h : .FORCE
-       $(AM_V_GEN)(echo "#define BUILD_ID \"$(shell git --git-dir=$(top_srcdir)/.git describe --always --dirty) $(shell git --git-dir=$(top_srcdir)/.git log -1 --format='%s (%ci)')\"" > $@-new; \
-       cmp -s $@ $@-new || cp $@-new $@; \
-       rm $@-new)
+if HAVE_GIT_REPO
+src/git-version.h : $(top_srcdir)/.git/logs/HEAD
+       $(AM_V_GEN)echo "#define BUILD_ID \"$(shell git --git-dir=$(top_srcdir)/.git describe --always --dirty) $(shell git --git-dir=$(top_srcdir)/.git log -1 --format='%s (%ci)')\"" > $@
+endif
 
 .FORCE :
 
@@ -339,8 +345,7 @@ BUILT_SOURCES +=                                    \
        src/workspaces-server-protocol.h                \
        src/workspaces-protocol.c                       \
        src/scaler-server-protocol.h                    \
-       src/scaler-protocol.c                           \
-       src/git-version.h
+       src/scaler-protocol.c
 
 if BUILD_CLIENTS
 
index d961ea4..3caaa59 100644 (file)
@@ -485,6 +485,9 @@ AC_SUBST([dtddir])
 AM_CONDITIONAL([HAVE_XMLLINT], [test "x$XMLLINT" != "x" -a "x$dtddir" != "x"])
 
 AC_CONFIG_FILES([Makefile src/version.h src/weston.pc])
+
+AM_CONDITIONAL([HAVE_GIT_REPO], [test -f $srcdir/.git/logs/HEAD])
+
 AC_OUTPUT
 
 AC_MSG_RESULT([