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

Reply via email to