build: redo GR_GIT for portability
[debian/gnuradio] / gr-howto-write-a-block / config / gr_git.m4
1 dnl Copyright 2009,2010 Free Software Foundation, Inc.
2 dnl 
3 dnl This file is part of GNU Radio
4 dnl 
5 dnl GNU Radio is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 3, or (at your option)
8 dnl any later version.
9 dnl 
10 dnl GNU Radio is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 dnl GNU General Public License for more details.
14 dnl 
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with GNU Radio; see the file COPYING.  If not, write to
17 dnl the Free Software Foundation, Inc., 51 Franklin Street,
18 dnl Boston, MA 02110-1301, USA.
19
20
21 AC_DEFUN([GR_GIT],[
22   dnl Identify git binary
23   AC_PATH_PROG([GIT],[git])
24   
25   dnl If it exists, get either 'git describe' or fallback to current commit
26   if test x$GIT != x ; then
27     AC_MSG_CHECKING([existence of git version control directory])
28     if test -d $srcdir/.git ; then
29       AC_MSG_RESULT([ok])
30       AC_MSG_CHECKING([git description of current commit])
31       if (cd $srcdir && $GIT describe >/dev/null 2>&1); then
32         GIT_DESCRIBE=`cd $srcdir && $GIT describe --abbrev=8 --long`
33         # Release candidate tags create an extra -rcX field
34         case $GIT_DESCRIBE in
35           *-*-*-*)
36             GIT_TAG=`echo $GIT_DESCRIBE | cut -f -2 -d '-'`
37             GIT_SEQNO=`echo $GIT_DESCRIBE | cut -f 3 -d '-'`
38             GIT_COMMIT=`echo $GIT_DESCRIBE | cut -f 4 -d '-' | cut -f 2- -d 'g'`
39             ;;
40           *-*-*)
41             GIT_TAG=`echo $GIT_DESCRIBE | cut -f 1 -d '-'`
42             GIT_SEQNO=`echo $GIT_DESCRIBE | cut -f 2 -d '-'`
43             GIT_COMMIT=`echo $GIT_DESCRIBE | cut -f 3 -d '-' | cut -f 2- -d 'g'`
44             ;;
45         esac
46
47         AC_MSG_RESULT([$GIT_DESCRIBE])
48       else
49         AC_MSG_RESULT([no tag in history, using current commit])
50         GIT_TAG=''
51         GIT_SEQNO=''
52         GIT_COMMIT=`cd $srcdir && $GIT describe --always --abbrev=8`
53       fi
54     else
55       AC_MSG_RESULT([not found])
56     fi
57
58     AC_SUBST([GIT_DESCRIBE])
59     AC_SUBST([GIT_TAG])
60     AC_SUBST([GIT_SEQNO])
61     AC_SUBST([GIT_COMMIT])
62   fi
63 ])