[Oracleasm-commits] jlbec commits r320 - in trunk: . vendor/rhel4

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Mon Nov 21 19:44:11 CST 2005


Author: jlbec
Date: 2005-11-21 19:44:10 -0600 (Mon, 21 Nov 2005)
New Revision: 320

Added:
   trunk/vendor/rhel4/kernel.guess
Modified:
   trunk/configure.in
   trunk/mbvendor.m4
   trunk/vendor/rhel4/Makefile
   trunk/vendor/rhel4/oracleasm-2.6.9-EL.spec-generic.in
Log:

o Add MB_VENDOR_KERNEL() to mbvendor.m4.  This macro discovers
  kernel trees via vendor/VENDOR/kernel.guess.
o Add vendor kernel discovery to configure.in.
o Change configure.in to disable the module build if a valid kernel
  is not found.  Before, a kernel was required or an error occurred.
o Add vendor/rhel4/kernel.guess to discover/validate RHEL4 kernels.
o Modify vendor/rhel4/oracleasm-2.6.9-EL.spec-generic.in to use
  --with-vendor and --with-vendorkernel.



Modified: trunk/configure.in
===================================================================
--- trunk/configure.in	2005-11-21 22:12:27 UTC (rev 319)
+++ trunk/configure.in	2005-11-22 01:44:10 UTC (rev 320)
@@ -76,41 +76,47 @@
 AC_SUBST(M64)
 AC_SUBST(USERM64)
 
+AC_CHECK_SIZEOF(unsigned long)
+
 MB_VENDOR()
+MB_VENDOR_KERNEL(vendordir)
 
 if test "x$GCC" != "xyes"; then
   AC_MSG_ERROR(GCC is required)
 fi
 
-AC_MSG_CHECKING(for directory with kernel source)
-AC_ARG_WITH(kernel, [  --with-kernel=dir       Path to the kernel source tree [/usr/src/linux]], kerneldir="$withval", [
-  if test -d "/lib/modules/`uname -r`/build" -o -L "/lib/modules/`uname -r`/build"; then
+AC_MSG_CHECKING(for directory with kernel build tree)
+AC_ARG_WITH(kernel, [  --with-kernel=dir       Path to the kernel build tree [/usr/src/linux]], kerneldir="$withval", [
+  if test -n "$vendordir"; then
+    kerneldir="$vendordir"
+  elif test -d "/lib/modules/`uname -r`/build" -o -L "/lib/modules/`uname -r`/build"; then
     kerneldir="/lib/modules/`uname -r`/build"
   else
     kerneldir="/usr/src/linux"
   fi
 ])
-AC_MSG_RESULT($kerneldir)
 
-KERNELDIR=$kerneldir
-AC_SUBST(KERNELDIR)
+if test ! -f "${kerneldir}/include/linux/autoconf.h"; then
+  AC_MSG_RESULT([not found])
+  KERNELDIR=
+else
+  AC_MSG_RESULT($kerneldir)
+  KERNELDIR="$kerneldir"
+  AC_SUBST(KERNELDIR)
+fi
 
-KERNELINC="$kerneldir/include"
+AC_MSG_CHECKING(for kernel version)
+if test -n "$KERNELDIR"; then
+  kernelinc="${KERNELDIR}/include"
 
-saved_CPPFLAGS="$CPPFLAGS"
-CPPFLAGS="-I$KERNELINC $CPPFLAGS"
-saved_CFLAGS="$CFLAGS"
-CFLAGS="$CFLAGS $M64"
+  saved_CPPFLAGS="$CPPFLAGS"
+  CPPFLAGS="-I${kernelinc} $CPPFLAGS"
+  saved_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $M64"
 
-AC_CHECK_SIZEOF(unsigned long)
 
-if test ! -f "$KERNELINC/linux/autoconf.h"; then
-  AC_MSG_ERROR(No configured kernel include tree found)
-fi
-
-AC_MSG_CHECKING(for kernel version)
-rm -f conf.kvertest
-AC_TRY_RUN([
+  rm -f conf.kvertest
+  AC_TRY_RUN([
 #include <stdio.h>
 #include <linux/version.h>
 
@@ -129,8 +135,14 @@
   return 1;
 #endif
 }],kversion=`cat conf.kvertest`, kversion="none")
-rm -f conf.kvertest
+  rm -f conf.kvertest
 
+  CPPFLAGS="$saved_CPPFLAGS"
+  CFLAGS="$saved_CFLAGS"
+else
+  kversion="none"
+fi
+
 BUILD_DRIVER=
 case "$kversion" in
   2.6.*)
@@ -142,7 +154,7 @@
     ;;
   *)
     AC_MSG_RESULT([This module only supports kernel version 2.6.x, disabling driver build])
-    ;;
+  ;;
 esac
 AC_SUBST(BUILD_DRIVER)
 
@@ -150,10 +162,7 @@
 AC_SUBST(KERNELVER)
 
 
-CPPFLAGS="$saved_CPPFLAGS"
-CFLAGS="$saved_CFLAGS"
 
-
 AC_OUTPUT([Config.make
 include/linux/asm_module_version.h
 vendor/common/oracleasm-support.spec-generic

Modified: trunk/mbvendor.m4
===================================================================
--- trunk/mbvendor.m4	2005-11-21 22:12:27 UTC (rev 319)
+++ trunk/mbvendor.m4	2005-11-22 01:44:10 UTC (rev 320)
@@ -1,3 +1,5 @@
+# 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]],[
@@ -21,4 +23,51 @@
        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

Modified: trunk/vendor/rhel4/Makefile
===================================================================
--- trunk/vendor/rhel4/Makefile	2005-11-21 22:12:27 UTC (rev 319)
+++ trunk/vendor/rhel4/Makefile	2005-11-22 01:44:10 UTC (rev 320)
@@ -4,6 +4,7 @@
 
 DIST_FILES = 					\
 	oracleasm-2.6.9-EL.spec-generic.in	\
+	kernel.guess				\
 	rpmarch.guess				\
 	Vendor.make				\
 	vendor.guess

Added: trunk/vendor/rhel4/kernel.guess
===================================================================
--- trunk/vendor/rhel4/kernel.guess	2005-11-21 22:12:27 UTC (rev 319)
+++ trunk/vendor/rhel4/kernel.guess	2005-11-22 01:44:10 UTC (rev 320)
@@ -0,0 +1,137 @@
+#!/bin/sh
+
+
+RHEL4_KERNEL_BASE="/usr/src/kernels"
+
+
+guess_rhel4_arch()
+{
+    # This appears to DTRT (i686 on x86, ppc64 on pSeries).
+    uname -m
+}
+
+guess_rhel4_type()
+{
+    case "$1" in
+    *smp)
+        echo "smp"
+        ;;
+    *hugemem)
+        echo "hugemem"
+        ;;
+    *hugeproc)
+        echo "hugeproc"
+        ;;
+    *)
+        echo ""
+        ;;
+    esac
+}
+
+guess_rhel4_dir()
+{
+    KVER="$1"
+
+    DIRTYPE=`guess_rhel4_type "$KVER"`
+    ARCH=`guess_rhel4_arch`
+
+    if [ -z "$DIRTYPE" ]
+    then
+        echo "${1%${DIRTYPE}}-${ARCH}"
+    else
+        echo "${1%${DIRTYPE}}-${DIRTYPE}-${ARCH}"
+    fi
+}
+
+verfromdir()
+{
+    TESTDIR="$1"
+    if [ -r "${TESTDIR}/include/linux/version.h" ]
+    then
+        awk '/UTS_RELEASE/{gsub(/"/,"",$3); print $3}' "${TESTDIR}/include/linux/version.h"
+    fi
+}
+
+validate_dir()
+{
+    KVER="$1"
+    DIR="$2"
+
+    if [ ! -d "${RHEL4_KERNEL_BASE}/${DIR}" ]
+    then
+        return 1
+    elif [ ! -f "${RHEL4_KERNEL_BASE}/${DIR}/include/linux/autoconf.h" ]
+    then
+        return 1
+    elif [ ! -f "${RHEL4_KERNEL_BASE}/${DIR}/include/linux/version.h" ]
+    then
+        return 1
+    fi
+
+    if [ "$KVER" != "`verfromdir "${RHEL4_KERNEL_BASE}/${DIR}"`" ]
+    then
+        return 1
+    fi
+
+    return 0
+}
+
+# Takes a `uname -r` and returns "ver type", where ver
+# is 2.6.9-NN.EL and type is "smp" or the like.
+validate_version()
+{
+    KVER="$1"
+
+    dir=`guess_rhel4_dir "$KVER"`
+    if validate_dir "$KVER" "$dir"
+    then
+        echo "${RHEL4_KERNEL_BASE}/${dir}"
+    fi
+}
+
+find_version()
+{
+    # Find the most recent valid kernel
+    ls -1 -t "$RHEL4_KERNEL_BASE" | while read kdir
+    do
+        KVER="`verfromdir "${RHEL4_KERNEL_BASE}/${kdir}"`"
+        if validate_dir "$KVER" "$kdir"
+        then
+            echo "${RHEL4_KERNEL_BASE}/${kdir}"
+            break
+        fi
+    done
+}
+
+case "$1" in
+include|build)
+    if [ -n "$2" ]
+    then
+        KPATH="`validate_version "$2"`"
+    else
+        KVER="`uname -r`"
+        KPATH="`validate_version "$KVER"`"
+        if [ -z "$KPATH" ]
+        then
+            KPATH="`find_version`"
+        fi
+    fi
+    if [ -n "$KPATH" ]
+    then
+        if [ "$1" = "include" ]
+        then
+            KPATH="${KPATH}/include"
+        fi
+        echo "${KPATH}"
+    fi
+    ;;
+targets)
+    ;;
+"")
+    echo "Missing operation" >&2
+    ;;
+*)
+    echo "Invalid operation: $1" >&2
+    exit 1
+    ;;
+esac


Property changes on: trunk/vendor/rhel4/kernel.guess
___________________________________________________________________
Name: svn:executable
   + *

Modified: trunk/vendor/rhel4/oracleasm-2.6.9-EL.spec-generic.in
===================================================================
--- trunk/vendor/rhel4/oracleasm-2.6.9-EL.spec-generic.in	2005-11-21 22:12:27 UTC (rev 319)
+++ trunk/vendor/rhel4/oracleasm-2.6.9-EL.spec-generic.in	2005-11-22 01:44:10 UTC (rev 320)
@@ -134,12 +134,12 @@
 		--sharedstatedir=%{_sharedstatedir}	\
 		--mandir=%{_mandir}			\
 		--infodir=%{_infodir}			\
-		--with-kernel="$1"
+		--with-vendor=rhel4			\
+		--with-vendorkernel="$1"
 }
 
 %if %{buildup}
-KPATH="/usr/src/kernels/%{kver}-%{karch}"
-local_configure "${KPATH}"
+local_configure "%{kver}"
 
 make QUIET=1
 make DESTDIR="$RPM_BUILD_ROOT" INSTALL_MOD_PATH='$(DESTDIR)' install 
@@ -154,8 +154,7 @@
 %endif
 
 %if %{buildsmp}
-KPATH="/usr/src/kernels/%{kver}-smp-%{karch}"
-local_configure "${KPATH}"
+local_configure "%{kver}smp"
 
 make QUIET=1
 make DESTDIR="$RPM_BUILD_ROOT" INSTALL_MOD_PATH='$(DESTDIR)' install 
@@ -170,8 +169,7 @@
 %endif
 
 %if %{buildhugemem}
-KPATH="/usr/src/kernels/%{kver}-hugemem-%{karch}"
-local_configure "${KPATH}"
+local_configure "%{kver}hugemem"
 
 make QUIET=1
 make DESTDIR="$RPM_BUILD_ROOT" INSTALL_MOD_PATH='$(DESTDIR)' install 



More information about the Oracleasm-commits mailing list