On 2015-01-29 14:38, Thiago Macieira wrote:
On Thursday 29 January 2015 15:30:43 Lubomir I. Ivanov wrote:
this is what i would do:
-----------------
all: main.exe
.PHONY: persist
version.h: persist
cat $@ 2> /dev/null || git rev-parse HEAD > $@
git rev-parse HEAD > $@.tmp
git diff --quiet $@ $@.tmp || cp $@.tmp $@
rm -f $@.tmp
main.o: main.c version.h
gcc -c main.c -o main.o
main.exe: main.o
gcc main.o -o main.exe
-------------------
what it does is, it writes the output of "git rev-parse" to a TMP file
and if that TMP file differs to the previous version.h file it updates
version.h
but since version.h may not change, main is not recompiled.
The way I read this, persist is phony, so it will always be found to be
out-
of-date. Therefore, version.h is always out of date, so is main.o and
therefore main.exe will too.
Are you saying that if the version.h command doesn't actually touch
version.h,
then Make does not find it to be out of date?
For libdivecomputer, I use a very similar construct:
FORCE:
$(top_srcdir)/revision: FORCE
@if (test -d $(top_srcdir)/.git && cd $(top_srcdir) \
&& git rev-parse --verify HEAD) > revision-t 2>/dev/null \
&& ! cmp -s revision-t $@; then \
mv -f revision-t $@; \
else \
rm -f revision-t; \
if ! test -f $@; then touch $@; fi; \
fi
revision.h: $(top_srcdir)/revision Makefile.am
$(AM_V_GEN) echo "#define DC_VERSION_REVISION \""`cat
$(top_srcdir)/revision`"\"" > $@
BUILT_SOURCES = revision.h
EXTRA_DIST = $(top_srcdir)/revision
CLEANFILES = revision.h revision-t
The main difference is that the "revision" file is also included in the
tarballs. That way, the build (including the git based version string)
still works if you're building from a tarball. This systems works very
well for me. It only re-builds when the version changes. Exactly what I
needed.
(I asked the the automake guys for advice on this stuff a few years ago,
and the above system is what they suggested.)
Jef
_______________________________________________
subsurface mailing list
subsurface@subsurface-divelog.org
http://lists.subsurface-divelog.org/cgi-bin/mailman/listinfo/subsurface