[Ocfs2-test-devel] [PATCH 02/11] ocfs2-test: Add mbvendor.m4 pythondev.m4 and svnrev.guess files.

Marcos Matsunaga Marcos.Matsunaga at oracle.com
Thu Oct 30 12:32:41 PDT 2008


Signed-off-by: Marcos Matsunaga <Marcos.Matsunaga at oracle.com>
---
 mbvendor.m4  |   73 +++++++++++++++++++++++++++++
 pythondev.m4 |   27 +++++++++++
 svnrev.guess |  144 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 244 insertions(+), 0 deletions(-)
 create mode 100644 mbvendor.m4
 create mode 100644 pythondev.m4
 create mode 100755 svnrev.guess

diff --git a/mbvendor.m4 b/mbvendor.m4
new file mode 100644
index 0000000..4a3a35b
--- /dev/null
+++ b/mbvendor.m4
@@ -0,0 +1,73 @@
+# MB_VENDOR([VARIABLE])
+# ---------------------
+AC_DEFUN([MB_VENDOR],
+  [AC_MSG_CHECKING([for vendor])
+   AC_ARG_WITH(vendor, [  --with-vendor=VENDOR    Vendor to tailor build defaults and packages to [common]],[
+     mb_vendor="$withval"
+     if test -x "vendor/${mb_vendor}/vendor.guess"; then
+       if "vendor/${mb_vendor}/vendor.guess" >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
+         AC_MSG_RESULT([$mb_vendor])
+       else
+         AC_MSG_RESULT([not found])
+         AC_MSG_ERROR([Vendor $mb_vendor not detected])
+       fi
+     else
+       AC_MSG_RESULT([not supported])
+       AC_MSG_ERROR([Vendor $mb_vendor not supported])
+     fi
+  ], [
+    mb_vendor=`./vendor.guess 2>&AS_MESSAGE_LOG_FD`
+    if test -z "$mb_vendor"; then
+       AC_MSG_RESULT([not found])
+    else
+       AC_MSG_RESULT([$mb_vendor])
+    fi
+  ])
+  dnl Use 2.13 safe ifelse()
+  ifelse([$1], [], [], [
+           $1="$mb_vendor"
+           AC_SUBST($1)
+         ])
+])  # MB_VENDOR
+
+# MB_VENDOR_KERNEL([VARIABLE])
+# ---------------------
+AC_DEFUN([MB_VENDOR_KERNEL],
+  [AC_MSG_CHECKING([for vendor kernel])
+   AC_ARG_WITH(vendorkernel, [  --with-vendorkernel=KERNELVERSION  Vendor kernel version to compile against [detected]], [
+     mb_vendorkernel="$withval"
+     if test -z "$mb_vendor"; then
+       AC_MSG_RESULT([no vendor])
+       AC_MSG_ERROR([No vendor specified or discovered])
+     fi
+     if test -x "vendor/${mb_vendor}/kernel.guess"; then
+       mb_vkinclude="`vendor/${mb_vendor}/kernel.guess build ${mb_vendorkernel} 2>&AS_MESSAGE_LOG_FD`"
+       if test -z "$mb_vkinclude"; then
+         AC_MSG_RESULT([not found])
+         AC_MSG_ERROR([Vendor kernel $mb_vendorkernel not detected])
+       else
+         AC_MSG_RESULT([$mb_vkinclude])
+       fi
+     else
+       AC_MSG_RESULT([not supported])
+       AC_MSG_ERROR([Vendor $mb_vendor does not support kernel detection])
+     fi
+   ], [
+     if test -x "vendor/${mb_vendor}/kernel.guess"; then
+       mb_vkinclude="`vendor/${mb_vendor}/kernel.guess build 2>&AS_MESSAGE_LOG_FD`"
+       if test -z "$mb_vkinclude"; then
+         AC_MSG_RESULT([not found])
+       else
+         AC_MSG_RESULT([$mb_vkinclude])
+       fi
+     else
+       mb_vkinclude=
+       AC_MSG_RESULT([not supported])
+     fi
+  ])
+  dnl Use 2.13 safe ifelse()
+  ifelse([$1], [], [], [
+           $1="$mb_vkinclude"
+           AC_SUBST($1)
+         ])
+])  # MB_VENDOR_KERNEL
diff --git a/pythondev.m4 b/pythondev.m4
new file mode 100644
index 0000000..532f418
--- /dev/null
+++ b/pythondev.m4
@@ -0,0 +1,27 @@
+## Find the install dirs for the python installation.
+##  By James Henstridge
+
+dnl a macro to check for ability to create python extensions
+dnl  AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_INCLUDES
+AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for headers required to compile python extensions)
+dnl deduce PYTHON_INCLUDES
+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+if test "$py_prefix" != "$py_exec_prefix"; then
+  PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+fi
+AC_SUBST(PYTHON_INCLUDES)
+dnl check if the headers exist:
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+AC_TRY_CPP([#include <Python.h>],dnl
+[AC_MSG_RESULT(found)
+$1],dnl
+[AC_MSG_RESULT(not found)
+$2])
+CPPFLAGS="$save_CPPFLAGS"
+])
diff --git a/svnrev.guess b/svnrev.guess
new file mode 100755
index 0000000..2c23afc
--- /dev/null
+++ b/svnrev.guess
@@ -0,0 +1,144 @@
+#!/bin/sh
+
+#
+# This script creates a package version for packages.  The package
+# version is the "release" or other version attached by the packaging
+# software (eg, RPM or Dpkg) after the upstream software version.
+#
+# This software must be invoked like so:
+#
+#     svnrev.guess <packagename>
+#
+# and it expects that release tags are of the form:
+#
+#     /tags/<packagename>-<version>
+#
+# Note that release tag versioning expects a working connection to
+# the repository (for SVN log), but all other branches don't require it.
+#
+# If there is no .svn directory or it cannot discover the repository
+# version, the script sets a version of 0.local.
+#
+
+if [ $# -lt 1 ]
+then
+    echo "Usage: svnrev.guess <packagename>" >&2
+    exit 1
+fi
+PACKAGE="$1"
+
+getstat()
+{
+    if [ ! -d .svn ]
+    then
+        return
+    fi
+    svn stat -v | awk 'BEGIN{modified = "false";lastrev = 0}
+                       /Status against/{next}
+                       /^\?/{next} 
+                       {
+                         col1=substr($0, 0, 1);
+                         if (col1 != " ") {modified = "true"}
+                         sub(/^......../, "");
+                         if ($1 > lastrev) { lastrev=$1 }
+                       }
+                       END{print modified,lastrev}'
+}
+
+#
+# Branches that are not releases get a work-in-progress package version.
+# This is 0.<svn_revision>[m].  The 0. ensures that an upcoming real
+# release, with an package version of 1, will supercede this package.
+# The "m" is added if the working tree has modifications to distinguish
+# it from a committed revision.
+#
+# If there is no repository or there is a problem getting the revision,
+# the package version is 0.local.
+#
+workingrev()
+{
+    STATINFO="$(getstat)"
+    MODIFIED=$(echo "$STATINFO" | cut -f1 -d" ")
+    LASTREV=$(echo "$STATINFO" | cut -f2 -d" ")
+
+    if [ -z "$LASTREV" ]
+    then
+        PKG_VERSION=0.local
+    else
+        PKG_VERSION=0.${LASTREV}
+        if [ "$MODIFIED" = "true" ]
+        then
+            PKG_VERSION="${PKG_VERSION}m"
+        fi
+    fi
+    echo "$PKG_VERSION"
+}
+
+#
+# If the branch is a tag (tags/project-x.y), it needs a release-based
+# package version (-1, -2, etc).  Generally, it will be the tip of the
+# branch (package version 1).  However, if there is a slight release
+# fixup, that warrants bumping the package version.
+#
+# The logic is pretty simple.  Walk the history looking for the
+# creation of the tag (A /tags/project-x.y).  For each revsion later
+# than the creation of the tag, bump the package version.
+# 
+releaserev()
+{
+    BRANCH="$1"
+    BRANCH_SEARCH="`echo "$BRANCH" | sed -e 's/\//\\\\\//g'`"
+    svn log -v 2>&1 |
+        awk 'BEGIN{rev=0}
+             /^r[0-9]+ \|/{rev += 1}
+             /^ +A \/'"$BRANCH_SEARCH"'$/{exit}
+             /^ +A \/'"$BRANCH_SEARCH"' (.*)$/{exit}
+             END{print rev}'
+}
+
+
+# 
+# Tag branches are releases, and need a release-style package version.
+# All other branches are non-release, and get an obviously
+# work-in-progress package version.
+#
+# guessbranch() expects the standard Subversion layout of
+#     /trunk
+#     /branches/<branchname>
+#     /tags/<tagname>
+#
+guessbranch()
+{
+    if [ ! -d .svn ]
+    then
+        return
+    fi
+    svn info | awk '/URL: .*\/trunk\/?$/{print "trunk"; exit 0}
+                    /URL: .*\/branches\/[^/]+\/?/{
+                                                   gsub(/\/$/, "", $2);
+                                                   sub(/^.*\/branches\//, "", $2);
+                                                   print "branches/"$2;
+                                                   exit 0;
+                                                 }
+                    /URL: .*\/tags\/[^/]+\/?/{
+                                                   gsub(/\/$/, "", $2);
+                                                   sub(/^.*\/tags\//, "", $2);
+                                                   print "tags/"$2;
+                                                   exit 0;
+                                                 }'
+}
+
+if ! which svn 1>/dev/null 2>&1
+then
+    echo "0.local"
+else
+    BRANCH=$(guessbranch)
+    case "$BRANCH" in
+    tags/${PACKAGE}*)
+        releaserev "$BRANCH"
+        ;;
+    *)
+        workingrev
+        ;;
+    esac
+fi
-- 
1.5.6.3




More information about the Ocfs2-test-devel mailing list