howto: implement dynamic versioning
authorJohnathan Corgan <jcorgan@corganenterprises.com>
Tue, 3 Nov 2009 16:53:10 +0000 (08:53 -0800)
committerJohnathan Corgan <jcorgan@corganenterprises.com>
Tue, 3 Nov 2009 17:13:09 +0000 (09:13 -0800)
gr-howto-write-a-block/Makefile.am
gr-howto-write-a-block/config/Makefile.am
gr-howto-write-a-block/config/gr_git.m4 [new file with mode: 0644]
gr-howto-write-a-block/config/gr_standalone.m4
gr-howto-write-a-block/config/gr_version.m4 [new file with mode: 0644]
gr-howto-write-a-block/configure.ac
gr-howto-write-a-block/version.sh [new file with mode: 0644]

index 56307aada053766671445349e8256bbd2c8620d6..30d23fed3256f334529e206eb41ffddd641dc292 100644 (file)
@@ -23,11 +23,18 @@ ACLOCAL_AMFLAGS = -I config
 
 include $(top_srcdir)/Makefile.common
 
-EXTRA_DIST = bootstrap configure config.h.in \
-       Makefile.swig Makefile.swig.gen.t
+EXTRA_DIST = \
+       bootstrap \
+       configure \
+       config.h.in \
+       Makefile.swig \
+       Makefile.swig.gen.t \
+       version.sh
 
 SUBDIRS = config src
 DIST_SUBDIRS = config src doc
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA =
+
+DISTCLEANFILES = gr-howto-write-a-block*.tar.gz
index 5858d2219b3b8567b02ff29e20c3896563c91a99..23f4a4b16e68fa10ea6cb394bd92d91f9285b242 100644 (file)
@@ -49,6 +49,7 @@ m4macros = \
        gr_check_usrp.m4 \
        gr_doxygen.m4 \
        gr_fortran.m4 \
+       gr_git.m4 \
        gr_gprof.m4 \
        gr_lib64.m4 \
        gr_libgnuradio_core_extra_ldflags.m4 \
@@ -63,6 +64,7 @@ m4macros = \
        gr_subversion.m4 \
        gr_swig.m4 \
        gr_sysv_shm.m4 \
+       gr_version.m4 \
        lf_cc.m4 \
        lf_cxx.m4 \
        lf_warnings.m4 \
diff --git a/gr-howto-write-a-block/config/gr_git.m4 b/gr-howto-write-a-block/config/gr_git.m4
new file mode 100644 (file)
index 0000000..5fe4248
--- /dev/null
@@ -0,0 +1,35 @@
+dnl Copyright 2009 Free Software Foundation, Inc.
+dnl 
+dnl This file is part of GNU Radio
+dnl 
+dnl GNU Radio is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl 
+dnl GNU Radio is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl 
+dnl You should have received a copy of the GNU General Public License
+dnl along with GNU Radio; see the file COPYING.  If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street,
+dnl Boston, MA 02110-1301, USA.
+
+
+AC_DEFUN([GR_GIT],[
+  dnl Identify git binary
+  AC_PATH_PROG([GIT],[git])
+  
+  dnl If it exists, get either 'git describe' or fallback to current commit
+  if test x$GIT != x ; then
+    if (cd $srcdir && $GIT describe >/dev/null 2>&1); then
+      GIT_VERSION=`cd $srcdir && $GIT describe --abbrev=8 | cut -f 2- -d '-'`
+    else
+      if (cd $srcdir && $GIT describe --always --abbrev=8 >/dev/null 2>&1); then
+        GIT_VERSION=`cd $srcdir && $GIT describe --always --abbrev=8`
+      fi
+    fi
+  fi
+])
index 2f8851676d1def6f0c138eb7c6aa808b5df17379..593583e2dde56f23f64f047113af335285d84bfb 100644 (file)
@@ -31,12 +31,6 @@ m4_define([GR_STANDALONE],
   AC_CONFIG_SRCDIR([config/gr_standalone.m4])
   AM_CONFIG_HEADER(config.h)
 
-  AC_CANONICAL_BUILD
-  AC_CANONICAL_HOST
-  AC_CANONICAL_TARGET
-
-  AM_INIT_AUTOMAKE
-
   dnl Remember if the user explicity set CXXFLAGS
   if test -n "${CXXFLAGS}"; then
     user_set_cxxflags=yes
diff --git a/gr-howto-write-a-block/config/gr_version.m4 b/gr-howto-write-a-block/config/gr_version.m4
new file mode 100644 (file)
index 0000000..3360b7d
--- /dev/null
@@ -0,0 +1,74 @@
+dnl Copyright 2009 Free Software Foundation, Inc.
+dnl 
+dnl This file is part of GNU Radio
+dnl 
+dnl GNU Radio is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 3, or (at your option)
+dnl any later version.
+dnl 
+dnl GNU Radio is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl 
+dnl You should have received a copy of the GNU General Public License
+dnl along with GNU Radio; see the file COPYING.  If not, write to
+dnl the Free Software Foundation, Inc., 51 Franklin Street,
+dnl Boston, MA 02110-1301, USA.
+
+AC_DEFUN([GR_VERSION],[
+  dnl Computed version based on version.sh
+  dnl Does not force recompile on rev change
+  dnl
+  dnl Source the variables describing the release version
+  dnl 
+  dnl MAJOR_VERSION          Major release generation (2.x, 3.x, etc.)
+  dnl API_COMPAT             API compatibility version (3.2.x, 3.3.x, etc.)
+  dnl MINOR_VERSION          Minor release version
+  dnl MAINT_VERSION          Pure bugfix additions to make maintenance release
+  dnl
+  dnl The last two fields can have 'git' instead of a number to indicate
+  dnl that this branch is between versions.
+  . $srcdir/version.sh
+  RELEASE=$MAJOR_VERSION.$API_COMPAT
+  
+  dnl Get git version if available
+  GR_GIT
+
+  dnl Test if we should use git version
+  if test "$MINOR_VERSION" == "git"; then
+    dnl 3.3git-xxx-gxxxxxxxx
+    RELEASE=$RELEASE$MINOR_VERSION
+    DOCVER=$RELEASE
+    if test "$GIT_VERSION" != "" ; then
+      RELEASE=$RELEASE-$GIT_VERSION
+    fi
+  else
+    if test "$MAINT_VERSION" == "git" ; then
+      dnl 3.3.1git-xxx-gxxxxxxxx
+      RELEASE=$RELEASE.$MINOR_VERSION$MAINT_VERSION
+      DOCVER=$RELEASE
+      if test "$GIT_VERSION" != "" ; then
+        RELEASE=$RELEASE-$GIT_VERSION
+      fi
+    else
+      dnl This is a numbered reelase.
+      dnl Test if minor version is 0, which we don't encode, unless it is also
+      dnl a maintenance release
+      if test "$MINOR_VERSION" != "0" -o "$MAINT_VERSION" != "0"; then
+        dnl 3.3.1
+        RELEASE=$RELEASE.$MINOR_VERSION                          
+        if test "$MAINT_VERSION" != "0"; then
+          dnl 3.3.0.1, 3.3.1.1
+          RELEASE=$RELEASE.$MAINT_VERSION
+        fi
+       DOCVER=$RELEASE
+      fi
+    fi
+  fi
+
+  AC_MSG_NOTICE([GNU Radio Release $RELEASE])
+  AC_SUBST(RELEASE)
+  AC_SUBST(DOCVER)
+])
index bfb431526ba722199c094ef41f2e62f6111d27ec..241a7a34fa93c26014b7cab1f19354fa14226b2c 100644 (file)
@@ -19,10 +19,20 @@ dnl  the Free Software Foundation, Inc., 51 Franklin Street,
 dnl  Boston, MA 02110-1301, USA.
 dnl 
 
-AC_INIT(gr-howto-write-a-block,3.3svn)
+
+AC_INIT
 AC_PREREQ(2.57)
 AC_CONFIG_AUX_DIR([.]) 
 
+AC_CANONICAL_BUILD
+AC_CANONICAL_HOST
+AC_CANONICAL_TARGET
+
+GR_VERSION
+dnl ustar required to have pathnames > 99 chars
+_AM_SET_OPTION([tar-ustar])
+AM_INIT_AUTOMAKE(gr-howto-write-a-block,$RELEASE)
+
 dnl This is kind of non-standard, but it sure shortens up this file :-)
 m4_include([config/gr_standalone.m4])
 GR_STANDALONE
@@ -73,3 +83,5 @@ dnl run_tests is created from run_tests.in.  Make it executable.
 AC_CONFIG_COMMANDS([run_tests], [chmod +x src/python/run_tests])
 
 AC_OUTPUT
+
+echo Configured gr-howto-write-a-block release $RELEASE for build.
diff --git a/gr-howto-write-a-block/version.sh b/gr-howto-write-a-block/version.sh
new file mode 100644 (file)
index 0000000..b2cad87
--- /dev/null
@@ -0,0 +1,4 @@
+MAJOR_VERSION=3
+API_COMPAT=3
+MINOR_VERSION=git
+MAINT_VERSION=