2228
Comment: better make rule (thanks to Teemu Murtola)
|
2298
Fix typos
|
Deletions are marked like this. | Additions are marked like this. |
Line 15: | Line 15: |
Make rebuilds targets only if one of the dependencies is newer. That means even if the version has changed, due to a change somewhere, files using HGVERSION will not be rebuild automatically. To overcome this add new dependency in the Makefile to updated these files: | Make rebuilds targets only if one of the dependencies is newer. That means even if the version has changed, due to a change somewhere, files using HGVERSION will not be rebuilt automatically. To overcome this, add a new dependency in the Makefile to update these files: |
Line 19: | Line 19: |
hgstamp: dummy | .PHONY: hgstamp hgstamp: |
Line 22: | Line 23: |
dummy: ; |
|
Line 26: | Line 25: |
To make sure the hgstamp rule will be executed every time, it depends on a dummy rule, which does nothing. | To make sure the hgstamp rule will be executed every time, hgstamp is a phony target (see [[http://www.gnu.org/software/make/manual/html_node/Phony-Targets.html|make manual]]). |
Line 29: | Line 28: |
If you are using automake add the following lines to your Makefile.am | If you are using automake add the following lines to your Makefile.am: |
Line 36: | Line 35: |
hgstamp: dummy | .PHONY: hgstamp hgstamp: |
Line 39: | Line 39: |
dummy: ; |
|
Line 44: | Line 42: |
* hg parents, the -R option is added to prevent hg to search in lower directories in the case we don't have a repository | * hg parents, the -R option is added to prevent hg from searching in lower directories in case we don't have a repository |
Line 49: | Line 47: |
Just a add the following lines to your Makefile | Just add the following lines to your Makefile |
Line 53: | Line 51: |
hgid.tex: dummy | .PHONY: hgstamp hgid.tex: |
Line 56: | Line 55: |
dummy: ; |
|
Line 59: | Line 56: |
and this lines to your main tex file | and this lines to your main tex file: |
Line 65: | Line 62: |
now one can use the command \hgid to get the version everywhere. | Now one can use the command \hgid to get the version everywhere. |
Simple
Add the following line to your Makefile
HGVERSION:= $(shell hg parents --template 'hgid: {node|short}')
and
-DHGVERSION="\"${HGVERSION}\""
to your CPPFLAGS. Now one can use the define HGVERSION inside the code.
Rebuild files using HGVERSION
Make rebuilds targets only if one of the dependencies is newer. That means even if the version has changed, due to a change somewhere, files using HGVERSION will not be rebuilt automatically. To overcome this, add a new dependency in the Makefile to update these files:
version.o: hgstamp .PHONY: hgstamp hgstamp: [ -f $@ ] || touch $@ echo $(HGVERSION) | cmp -s $@ - || echo $(HGVERSION) > $@
In this example version.o has the extra dependency hgstamp. The hgstamp rule updates hgstamp if and only if the version has really changed. To make sure the hgstamp rule will be executed every time, hgstamp is a phony target (see make manual).
Autotools
If you are using automake add the following lines to your Makefile.am:
HGVERSION:= $(shell hg -R $(top_srcdir) parents --template 'hgid: {node|short}' 2> /dev/null || grep node $(top_srcdir)/.hg_archival.txt 2> /dev/null || true ) AM_CPPFLAGS = -DHGVERSION="\"${HGVERSION}\"" version.o: hgstamp .PHONY: hgstamp hgstamp: [ -f $@ ] || touch $@ echo $(HGVERSION) | cmp -s $@ - || echo $(HGVERSION) > $@
The definition of HGVERSION is more robust here. It tries to get the version in the following order
- hg parents, the -R option is added to prevent hg from searching in lower directories in case we don't have a repository
- grabbing it from .hg_archival.txt, in case we are using a tarball made by hg archive
- undefined
LaTeX
Just add the following lines to your Makefile
HGID:=$(shell hg parents -R . --template "{node|short}" | sed 's/.*/\\renewcommand{\\hgid}{&}/') .PHONY: hgstamp hgid.tex: [ -f $@ ] || touch $@ echo '$(HGID)' | cmp -s $@ - || echo '$(HGID)' > $@
and this lines to your main tex file:
\newcommand{\hgid}{null} \input{hgid}
Now one can use the command \hgid to get the version everywhere.