902
Comment:
|
2268
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
Add the following line to your Makefile | |
Line 3: | Line 4: |
Add the following line to your Makefile | |
Line 5: | Line 5: |
HGVERSION:= $(shell hg parents --template 'hgid: {node|short}' | HGVERSION:= $(shell hg parents --template 'hgid: {node|short}') |
Line 8: | Line 8: |
Line 14: | Line 15: |
Make rebuilds targets only if one of the dependencies is never. That means even if the version has changed, due to a change somewhere, files using HGVERSION will not be rebuild. To overcome this add new dependency in the Makefile to to 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 rebuild automatically. To overcome this add new dependency in the Makefile to updated these files: |
Line 16: | Line 18: |
version.cc: hgstamp | version.c: hgstamp |
Line 22: | Line 24: |
In this example version.cc depend has the extra dependency hgstamp, which is updated by the rule 'update_hgstamp', if and only if the version has ''realy'' has changed. |
In this example version.c depend has the extra dependency hgstamp, which is generated by the rule 'update_hgstamp'. This rule updates hgstamp if and only if the version has ''really'' changed. |
Line 25: | Line 26: |
= 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.c: hgstamp hgstamp: update_hgstamp update_hgstamp: [ -f hgstamp ] || touch hgstamp echo $(HGVERSION) | cmp -s hgstamp - || echo $(HGVERSION) > hgstamp }}} 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 to search in lower directories in the 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 a add the following lines to your Makefile {{{ HGID:=$(shell hg parents -R . --template "{node|short}" | sed 's/.*/\\renewcommand{\\hgid}{&}/') hgid.tex: update_hgid update_hgid: [ -f hgid.tex ] || touch hgid.tex echo '$(HGID)' | cmp -s hgid.tex - || echo '$(HGID)' > hgid.tex }}} 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. ---- CategoryHowTo |
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 rebuild automatically. To overcome this add new dependency in the Makefile to updated these files:
version.c: hgstamp hgstamp: update_hgstamp update_hgstamp: [ -f hgstamp ] || touch hgstamp echo $(HGVERSION) | cmp -s hgstamp - || echo $(HGVERSION) > hgstamp
In this example version.c depend has the extra dependency hgstamp, which is generated by the rule 'update_hgstamp'. This rule updates hgstamp if and only if the version has really changed.
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.c: hgstamp hgstamp: update_hgstamp update_hgstamp: [ -f hgstamp ] || touch hgstamp echo $(HGVERSION) | cmp -s hgstamp - || echo $(HGVERSION) > hgstamp
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 to search in lower directories in the 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 a add the following lines to your Makefile
HGID:=$(shell hg parents -R . --template "{node|short}" | sed 's/.*/\\renewcommand{\\hgid}{&}/') hgid.tex: update_hgid update_hgid: [ -f hgid.tex ] || touch hgid.tex echo '$(HGID)' | cmp -s hgid.tex - || echo '$(HGID)' > hgid.tex
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.