Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Ralf Wildenhues (Ralf.Wildenhues_at_[hidden])
Date: 2006-01-18 13:22:16


Hello there,

Proposed below is a patch to remove the redundant instance of the
version algorithm, together with some cleanup (for unification of
the two algorithms, which have diverged a little) and a micro bit
more efficiency.

One could add a rebuilding rule to config/Makefile.am, if you think it's
useful, just as Automake adds them for 'configure' and Makefiles.

If you apply this, you should add config/ompi_get_version.m4sh to svn,
and remove config/ompi_get_version.sh, as it's now a generated file.
The latter should still be distributed so users don't need autom4te
(done in patch below).

In case ompi_get_version.sh may be used in other configure.ac files than
the toplevel one, the script should be generated before autoconf is run
there.

Cheers,
Ralf

* config/ompi_get_version.m4sh: New (distributed) file, acts as input to
ompi_get_version.sh. Common functionality factored in
ompi_get_version.m4, generation done by autom4te in autogen.

--- /dev/null 1970-01-01 12:00:00.000000000 +0000
+++ config/ompi_get_version.m4sh 2006-01-18 20:57:14.000000000 +0100
@@ -0,0 +1,98 @@
+m4_define([_m4_divert(SCRIPT)], 100)
+m4_divert_push([SCRIPT])dnl
+#!/bin/sh
+#
+# ompi_get_version is created from ompi_get_version.m4 and ompi_get_version.m4sh.
+#
+# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
+# University Research and Technology
+# Corporation. All rights reserved.
+# Copyright (c) 2004-2005 The University of Tennessee and The University
+# of Tennessee Research Foundation. All rights
+# reserved.
+# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
+# University of Stuttgart. All rights reserved.
+# Copyright (c) 2004-2005 The Regents of the University of California.
+# All rights reserved.
+# $COPYRIGHT$
+#
+# Additional copyrights may follow
+#
+# $HEADER$
+#
+
+m4_include([ompi_get_version.m4])
+
+srcfile="$1"
+option="$2"
+
+case "$option" in
+ # svnversion can take a while to run. If we don't need it, don't run it.
+ --major|--minor|--release|--greek|--base|--help)
+ gv_need_svn=0
+ ;;
+ *)
+ gv_need_svn=1
+esac
+
+
+if test -z "$srcfile"; then
+ option="--help"
+else
+ OMPI_GET_VERSION([$srcfile],[OMPI])
+
+ if test "$option" = ""; then
+ option="--full"
+ fi
+fi
+
+case "$option" in
+ --full|-v|--version)
+ echo $OMPI_VERSION
+ ;;
+ --major)
+ echo $OMPI_MAJOR_VERSION
+ ;;
+ --minor)
+ echo $OMPI_MINOR_VERSION
+ ;;
+ --release)
+ echo $OMPI_RELEASE_VERSION
+ ;;
+ --greek)
+ echo $OMPI_GREEK_VERSION
+ ;;
+ --svn)
+ echo $OMPI_SVN_R
+ ;;
+ --base)
+ echo $OMPI_BASE_VERSION
+ ;;
+ --all)
+ echo ${OMPI_VERSION} ${OMPI_MAJOR_VERSION} ${OMPI_MINOR_VERSION} ${OMPI_RELEASE_VERSION} ${OMPI_GREEK_VERSION} ${OMPI_SVN_R}
+ ;;
+ -h|--help)
+ cat <<EOF
+$0 <srcfile> [<option>]
+
+<srcfile> - Text version file
+<option> - One of:
+ --full - Full version number
+ --major - Major version number
+ --minor - Minor version number
+ --release - Release version number
+ --greek - Greek (alpha, beta, etc) version number
+ --svn - Subversion repository number
+ --all - Show all version numbers, separated by :
+ --base - Show base version number (no svn number)
+ --help - This message
+EOF
+ ;;
+ *)
+ echo "Unrecognized option $option. Run $0 --help for options"
+ ;;
+esac
+
+# All done
+
+exit 0
Index: config/ompi_get_version.m4
===================================================================
--- config/ompi_get_version.m4 (revision 8727)
+++ config/ompi_get_version.m4 (working copy)
@@ -18,32 +18,30 @@
 dnl
 
 dnl
-dnl This file is almost identical in functionality to
-dnl ompi_get_version.sh. It is unfortunate that we have to duplicate code,
-dnl but it is really the only what that I can think to do it. :-( Hence,
-dnl if you change the logic here for determining version numbers, YOU MUST
-dnl ALSO CHANGE IT IN ompi_get_version.sh!!
-dnl
+dnl This file is also used as input to ompi_get_version.sh.
+dnl
 
-AC_DEFUN([OMPI_GET_VERSION],[
+m4_define([OMPI_GET_VERSION],[
 gv_ver_file="$1"
 gv_prefix="$2"
+: ${gv_need_svn=0}
+: ${srcdir=.}
 
 dnl quote eval to suppress macro expansion with non-GNU m4
 
-gv_run() {
- str="${gv_prefix}_${2}=\$gv_${1}"
- [eval] $str
-}
-
-if test -n "$gv_ver_file" -a -f "$gv_ver_file"; then
- gv_major_version="`egrep '^major=' $gv_ver_file | cut -d= -f2`"
- gv_minor_version="`egrep '^minor=' $gv_ver_file | cut -d= -f2`"
- gv_release_version="`egrep '^release=' $gv_ver_file | cut -d= -f2`"
- gv_greek_version="`egrep '^greek=' $gv_ver_file | cut -d= -f2`"
- gv_want_svn="`egrep '^want_svn=' $gv_ver_file | cut -d= -f2`"
- gv_svn_r="`egrep '^svn_r=' $gv_ver_file | cut -d= -f2`"
-
+if test -n "$gv_ver_file" && test -f "$gv_ver_file"; then
+ [eval] "`sed -n \"\
+ t clear
+ : clear
+ s/^major/gv_&_version/
+ s/^minor/gv_&_version/
+ s/^release/gv_&_version/
+ s/^greek/gv_&_version/
+ s/^want_svn/gv_&/
+ s/^svn_r/gv_&/
+ T
+ p\" < \"\$gv_ver_file\"`"
+
     if test -n "$gv_release_version" -a "$gv_release_version" != "0"; then
         gv_full_version="$gv_major_version.$gv_minor_version.$gv_release_version"
     else
@@ -52,12 +50,14 @@
 
     gv_full_version="${gv_full_version}${gv_greek_version}"
 
- if test "$gv_want_svn" = "1"; then
- if test "$gv_svn_r" = "-1"; then
+ gv_base_version=$gv_full_version
+
+ if test "$gv_want_svn" = 1 && test "$gv_need_svn" = 1; then
+ if test "$gv_svn_r" = -1; then
             if test -d "$srcdir/.svn"; then
                 ver=r`svnversion "$srcdir"`
                 # make sure svnversion worked
- if test "$?" != "0" ; then
+ if test "$?" != 0 ; then
                     ver=svn`date '+%m%d%Y'`
                 fi
             else
@@ -69,14 +69,14 @@
     fi
 
     # Set the values
-
- gv_run full_version VERSION
- gv_run major_version MAJOR_VERSION
- gv_run minor_version MINOR_VERSION
- gv_run release_version RELEASE_VERSION
- gv_run greek_version GREEK_VERSION
- gv_run want_svn WANT_SVN
- gv_run svn_r SVN_R
+ [eval] "${gv_prefix}_VERSION=\$gv_full_version
+ ${gv_prefix}_BASE_VERSION=\$gv_base_version
+ ${gv_prefix}_MAJOR_VERSION=\$gv_major_version
+ ${gv_prefix}_MINOR_VERSION=\$gv_minor_version
+ ${gv_prefix}_RELEASE_VERSION=\$gv_release_version
+ ${gv_prefix}_GREEK_VERSION=\$gv_greek_version
+ ${gv_prefix}_WANT_SVN=\$gv_want_svn
+ ${gv_prefix}_SVN_R=\$gv_svn_r"
 fi
 
 # Clean up
Index: config/Makefile.am
===================================================================
--- config/Makefile.am (revision 8727)
+++ config/Makefile.am (working copy)
@@ -49,6 +49,7 @@
         ompi_configure_options.m4 \
         ompi_functions.m4 \
         ompi_get_version.m4 \
+ ompi_get_version.m4sh \
         ompi_get_version.sh \
         ompi_make_stripped_flags.m4 \
         ompi_mca.m4 \
Index: autogen.sh
===================================================================
--- autogen.sh (revision 8727)
+++ autogen.sh (working copy)
@@ -40,6 +40,10 @@
 if test ! -z "$AUTOCONF"; then
     ompi_autoconf_search="$AUTOCONF"
 fi
+ompi_autom4te_search="autom4te"
+if test ! -z "$AUTOM4TE"; then
+ ompi_autom4te_search="$AUTOM4TE"
+fi
 ompi_libtoolize_search="libtoolize;glibtoolize"
 if test ! -z "$LIBTOOLIZE"; then
     ompi_libtoolize_search="$LIBTOOLIZE"
@@ -375,6 +379,12 @@
 
     echo "*** Running GNU tools"
 
+ if test -f include/mpi.h.in; then
+ cd config
+ run_and_check $ompi_autom4te --language=m4sh ompi_get_version.m4sh -o ompi_get_version.sh
+ cd ..
+ fi
+
     run_and_check $ompi_aclocal
     if test "`grep AC_CONFIG_HEADER $file`" != "" -o \
         "`grep AM_CONFIG_HEADER $file`" != ""; then
@@ -1088,6 +1098,7 @@
 fi
 
 # find all the apps we are going to run
+find_app "autom4te"
 find_app "aclocal"
 find_app "autoheader"
 find_app "autoconf"