Whamcloud - gitweb
build: explicitly declare AC_KERBEROS_V5 be a valid macro.
[fs/lustre-release.git] / build / autoconf / lustre-build-linux.m4
index f668e19..680a082 100644 (file)
@@ -1,10 +1,12 @@
+m4_pattern_allow(AC_KERBEROS_V5)
+
 #
 # LB_LINUX_VERSION
 #
 # Set things accordingly for a 2.5 kernel
 #
 AC_DEFUN([LB_LINUX_VERSION],
-[AC_CHECK_FILE([$LINUX/include/linux/namei.h],
+[LB_CHECK_FILE([$LINUX/include/linux/namei.h],
        [
                linux25="yes"
                KMODEXT=".ko"
@@ -26,11 +28,17 @@ if test $linux25 = "yes" ; then
                [
                        AC_MSG_RESULT([no])
                ],[
-                       AC_MSG_RESULT([yes])
                        makerule="_module_$makerule"
                        MODULE_TARGET="M"
+                       LB_LINUX_TRY_MAKE([],[],
+                               [$makerule LUSTRE_KERNEL_TEST=conftest.i],
+                               [test -s build/conftest.i],
+                               [
+                                       AC_MSG_RESULT([yes])
+                               ],[
+                                       AC_MSG_ERROR([unknown; check config.log for details])
+                               ])
                ])
-
 else
        makerule="_dir_$PWD/build"
 fi
@@ -49,8 +57,13 @@ AC_DEFUN([LB_LINUX_RELEASE],
 [LINUXRELEASE=
 rm -f build/conftest.i
 AC_MSG_CHECKING([for Linux release])
+if test -s $LINUX_OBJ/include/linux/utsrelease.h ; then
+       LINUXRELEASEHEADER=utsrelease.h
+else
+       LINUXRELEASEHEADER=version.h
+fi
 LB_LINUX_TRY_MAKE([
-       #include <linux/version.h>
+       #include <linux/$LINUXRELEASEHEADER>
 ],[
        char *LINUXRELEASE;
        LINUXRELEASE=UTS_RELEASE;
@@ -104,6 +117,10 @@ AC_ARG_WITH([linux],
 AC_MSG_RESULT([$LINUX])
 AC_SUBST(LINUX)
 
+# -------- check for linux --------
+LB_CHECK_FILE([$LINUX],[],
+       [AC_MSG_ERROR([Kernel source $LINUX could not be found.])])
+
 # -------- linux objects (for 2.6) --
 AC_MSG_CHECKING([for Linux objects dir])
 AC_ARG_WITH([linux-obj],
@@ -114,7 +131,7 @@ AC_ARG_WITH([linux-obj],
 AC_MSG_RESULT([$LINUX_OBJ])
 AC_SUBST(LINUX_OBJ)
 
-# -------- check for .confg --------
+# -------- check for .config --------
 AC_ARG_WITH([linux-config],
        [AC_HELP_STRING([--with-linux-config=path],
                        [set path to Linux .conf (default=$LINUX_OBJ/.config)])],
@@ -122,9 +139,9 @@ AC_ARG_WITH([linux-config],
        [LINUX_CONFIG=$LINUX_OBJ/.config])
 AC_SUBST(LINUX_CONFIG)
 
-AC_CHECK_FILE([/boot/kernel.h],
+LB_CHECK_FILE([/boot/kernel.h],
        [KERNEL_SOURCE_HEADER='/boot/kernel.h'],
-       [AC_CHECK_FILE([/var/adm/running-kernel.h],
+       [LB_CHECK_FILE([/var/adm/running-kernel.h],
                [KERNEL_SOURCE_HEADER='/var/adm/running-kernel.h'])])
 
 AC_ARG_WITH([kernel-source-header],
@@ -133,11 +150,11 @@ AC_ARG_WITH([kernel-source-header],
        [KERNEL_SOURCE_HEADER=$with_kernel_source_header])
 
 # ------------ .config exists ----------------
-AC_CHECK_FILE([$LINUX_CONFIG],[],
+LB_CHECK_FILE([$LINUX_CONFIG],[],
        [AC_MSG_ERROR([Kernel config could not be found.  If you are building from a kernel-source rpm consult build/README.kernel-source])])
 
 # ----------- make dep run? ------------------
-AC_CHECK_FILES([$LINUX_OBJ/include/linux/autoconf.h
+LB_CHECK_FILES([$LINUX_OBJ/include/linux/autoconf.h
                $LINUX_OBJ/include/linux/version.h
                $LINUX/include/linux/config.h],[],
        [AC_MSG_ERROR([Run make config in $LINUX.])])
@@ -153,7 +170,7 @@ if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
        # This is a clean kernel-source tree, we need to
        # enable extensive workarounds to get this to build
        # modules
-       AC_CHECK_FILE([$KERNEL_SOURCE_HEADER],
+       LB_CHECK_FILE([$KERNEL_SOURCE_HEADER],
                [if test $KERNEL_SOURCE_HEADER = '/boot/kernel.h' ; then
                        AC_MSG_WARN([Using /boot/kernel.h from RUNNING kernel.])
                        AC_MSG_WARN([If this is not what you want, use --with-kernel-source-header.])
@@ -164,6 +181,7 @@ if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
 fi
 
 # this is needed before we can build modules
+LB_LINUX_UML
 LB_LINUX_VERSION
 
 # --- check that we can build modules at all
@@ -174,7 +192,7 @@ LB_LINUX_TRY_COMPILE([],[],[
        AC_MSG_RESULT([no])
        AC_MSG_WARN([Consult config.log for details.])
        AC_MSG_WARN([If you are trying to build with a kernel-source rpm, consult build/README.kernel-source])
-       AC_MSG_ERROR([Kernel modules could not be built.])
+       AC_MSG_ERROR([Kernel modules cannot be build.])
 ])
 
 LB_LINUX_RELEASE
@@ -268,6 +286,26 @@ $3
 ])
 
 #
+# LB_LINUX_CONFIG_IM
+#
+# check if a given config option is builtin or as module
+#
+AC_DEFUN([LB_LINUX_CONFIG_IM],
+[AC_MSG_CHECKING([if Linux was built with CONFIG_$1 in or as module])
+LB_LINUX_TRY_COMPILE([#include <linux/config.h>],[
+#if !(defined(CONFIG_$1) || defined(CONFIG_$1_MODULE))
+#error CONFIG_$1 and CONFIG_$1_MODULE not #defined
+#endif
+],[
+AC_MSG_RESULT([yes])
+$2
+],[
+AC_MSG_RESULT([no])
+$3
+])
+])
+
+#
 # LB_LINUX_TRY_MAKE
 #
 # like LB_LINUX_TRY_COMPILE, but with different arguments
@@ -276,13 +314,33 @@ AC_DEFUN([LB_LINUX_TRY_MAKE],
 [LB_LINUX_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4], [$5], [$6])])
 
 #
+# LB_LINUX_CONFIG_BIG_STACK
+#
+# check for big stack patch
+#
+AC_DEFUN([LB_LINUX_CONFIG_BIG_STACK],
+[if test "x$ARCH_UM" = "x" -a "x$linux25" = "xno" ; then
+       case $target_cpu in
+               i?86 | x86_64)
+                       LB_LINUX_CONFIG([STACK_SIZE_16KB],[],[
+                               LB_LINUX_CONFIG([STACK_SIZE_32KB],[],[
+                                       LB_LINUX_CONFIG([STACK_SIZE_64KB],[],[
+                                               AC_MSG_ERROR([Lustre requires that Linux is configured with at least a 16KB stack.])
+                                       ])
+                               ])
+                       ])
+                       ;;
+       esac
+fi
+])
+
+#
 # LB_PROG_LINUX
 #
 # linux tests
 #
 AC_DEFUN([LB_PROG_LINUX],
 [LB_LINUX_PATH
-LB_LINUX_UML
 
 LB_LINUX_CONFIG([MODULES],[],[
        AC_MSG_ERROR([module support is required to build Lustre kernel modules.])
@@ -300,11 +358,39 @@ if test "x$ARCH_UM" = "x" ; then
 fi
 ])
 
-# Portals tests
-LP_PROG_LINUX
+LB_LINUX_CONFIG([KMOD],[],[
+       AC_MSG_WARN([])
+       AC_MSG_WARN([Kernel module loading support is highly recommended.])
+       AC_MSG_WARN([])
+])
+
+#
+# following CRYPTO related are required by capability
+#
+LB_LINUX_CONFIG_IM([CRYPTO],[],[
+       AC_MSG_ERROR([Lustre require that CONFIG_CRYPTO is enabled in your kernel.])
+])
+
+LB_LINUX_CONFIG_IM([CRYPTO_HMAC],[],[
+       AC_MSG_ERROR([Lustre require that CONFIG_CRYPTO_HMAC is enabled in your kernel.])
+])
+
+LB_LINUX_CONFIG_IM([CRYPTO_SHA1],[],[
+       AC_MSG_ERROR([Lustre require that CONFIG_CRYPTO_SHA1 is enabled in your kernel.])
+])
+
+#LB_LINUX_CONFIG_BIG_STACK
+
+# LNet tests
+LN_PROG_LINUX
 
 # Lustre tests
 LC_PROG_LINUX
+
+# Portals tests
+if test "$PORTALS" ; then
+       LP_PROG_LINUX
+fi
 ])
 
 #
@@ -313,6 +399,55 @@ LC_PROG_LINUX
 # AM_CONDITIONALS for linux
 #
 AC_DEFUN([LB_LINUX_CONDITIONALS],
-[AM_CONDITIONAL(INKERNEL, test x$enable_inkernel = xyes)
-AM_CONDITIONAL(LINUX25, test x$linux25 = xyes)
+[AM_CONDITIONAL(LINUX25, test x$linux25 = xyes)
+AM_CONDITIONAL(GSS, test x$enable_gss = xyes)
 ])
+
+#
+# LC_LINUX_CONFIG_GSS
+#
+# Build gss and related tools of Lustre. Currently both kernel and user space
+# parts are depend on linux platform.
+#
+AC_DEFUN([LC_LINUX_CONFIG_GSS],
+[AC_MSG_CHECKING([whether to enable gss/krb5 support])
+AC_ARG_ENABLE([gss], 
+       AC_HELP_STRING([--enable-gss], [enable gss/krb5 support]),
+       [],[enable_gss='no'])
+AC_MSG_RESULT([$enable_gss])
+
+if test x$enable_gss == xyes; then
+       LB_LINUX_CONFIG_IM([SUNRPC],[],[
+               AC_MSG_ERROR([GSS require that CONFIG_SUNRPC is enabled in your kernel.])
+       ])
+       LB_LINUX_CONFIG_IM([CRYPTO_DES],[],[
+               AC_MSG_WARN([DES support is recommended by using GSS.])
+       ])
+       LB_LINUX_CONFIG_IM([CRYPTO_MD5],[],[
+               AC_MSG_WARN([MD5 support is recommended by using GSS.])
+       ])
+       LB_LINUX_CONFIG_IM([CRYPTO_SHA256],[],[
+               AC_MSG_WARN([SHA256 support is recommended by using GSS.])
+       ])
+       LB_LINUX_CONFIG_IM([CRYPTO_SHA512],[],[
+               AC_MSG_WARN([SHA512 support is recommended by using GSS.])
+       ])
+       LB_LINUX_CONFIG_IM([CRYPTO_ARC4],[],[
+               AC_MSG_WARN([ARC4 support is recommended by using GSS.])
+       ])
+       #
+       # unfortunately AES symbol is depend (optimized) on arch
+       #
+
+       AC_CHECK_LIB(gssapi, gss_init_sec_context, [
+               GSSAPI_LIBS="$GSSAPI_LDFLAGS -lgssapi"
+               ], [
+               AC_MSG_ERROR([libgssapi is not found, consider --disable-gss.])
+               ], 
+       )
+
+       AC_SUBST(GSSAPI_LIBS)
+       AC_KERBEROS_V5
+fi
+])
+