Whamcloud - gitweb
Use the newer libsysio tags.
[fs/lustre-release.git] / lustre / portals / archdep.m4
index e955c33..2f1d563 100644 (file)
+# -------- we can't build modules unless srcdir = builddir
+if test x$enable_modules != xno ; then
+       AC_CHECK_FILE([autoMakefile.am],[],
+               [AC_MSG_ERROR([At this time, Lustre does not support building kernel modules with srcdir != buildir.])])
+fi
 
 # -------- in kernel compilation? (2.5 only) -------------
-AC_ARG_ENABLE(inkernel, [ --enable-inkernel set up 2.5 kernel makefiles])
+AC_MSG_CHECKING([if inkernel build support is requested])
+AC_ARG_ENABLE([inkernel],
+       AC_HELP_STRING([--enable-inkernel],
+                      [set up 2.5 kernel makefiles]),
+       [],[enable_inkernel=no])
+AC_MSG_RESULT([$enable_inkernel])
 AM_CONDITIONAL(INKERNEL, test x$enable_inkernel = xyes)
-echo "Makefile for in kernel build: $INKERNEL"
-
-# -------- liblustre compilation --------------
-AC_ARG_WITH(lib, [  --with-lib compile lustre library], host_cpu="lib")
-
-# -------- set linuxdir ------------
 
-AC_ARG_WITH(linux, [  --with-linux=[path] set path to Linux source (default=/usr/src/linux)],LINUX=$with_linux,LINUX=/usr/src/linux)
-AC_SUBST(LINUX)
-if test x$enable_inkernel = xyes ; then
-        echo ln -s `pwd` $LINUX/fs/lustre
-        rm $LINUX/fs/lustre
-        ln -s `pwd` $LINUX/fs/lustre
+# -------- are we building against an external portals? -------
+AC_MSG_CHECKING([for Cray portals])
+AC_ARG_WITH([cray-portals],
+       AC_HELP_STRING([--with-cray-portals=path],
+                      [path to cray portals]),
+       [
+               if test "$with_cray_portals" != no; then
+                       CRAY_PORTALS_PATH=$with_cray_portals
+                       CRAY_PORTALS_INCLUDES="$with_cray_portals/include"
+                       CRAY_PORTALS_LIBS="$with_cray_portals"
+                fi
+       ],[with_cray_portals=no])
+AC_SUBST(CRAY_PORTALS_PATH)
+AC_MSG_RESULT([$CRAY_PORTALS_PATH])
+
+AC_MSG_CHECKING([for Cray portals includes])
+AC_ARG_WITH([cray-portals-includes],
+       AC_HELP_STRING([--with-cray-portals-includes=path],
+                      [path to cray portals includes]),
+       [
+               if test "$with_cray_portals_includes" != no; then
+                       CRAY_PORTALS_INCLUDES="$with_cray_portals_includes"
+                fi
+       ])
+AC_SUBST(CRAY_PORTALS_INCLUDES)
+AC_MSG_RESULT([$CRAY_PORTALS_INCLUDES])
+
+AC_MSG_CHECKING([for Cray portals libs])
+AC_ARG_WITH([cray-portals-libs],
+       AC_HELP_STRING([--with-cray-portals-libs=path],
+                      [path to cray portals libs]),
+       [
+               if test "$with_cray_portals_libs" != no; then
+                       CRAY_PORTALS_LIBS="$with_cray_portals_libs"
+                fi
+       ])
+AC_SUBST(CRAY_PORTALS_LIBS)
+AC_MSG_RESULT([$CRAY_PORTALS_LIBS])
+
+if test x$CRAY_PORTALS_INCLUDES != x ; then
+       if test ! -r $CRAY_PORTALS_INCLUDES/portals/api.h ; then
+               AC_MSG_ERROR([Cray portals headers were not found in $CRAY_PORTALS_INCLUDES.  Please check the paths passed to --with-cray-portals or --with-cray-portals-includes.])
+       fi
 fi
-
-#  --------------------
-AC_MSG_CHECKING(if you are running user mode linux for $host_cpu ...)
-if test $host_cpu = "lib" ; then 
-        host_cpu="lib"
-       AC_MSG_RESULT(no building Lustre library)
-else
-  if test -e $LINUX/include/asm-um ; then
-    if test  X`ls -id $LINUX/include/asm/ | awk '{print $1}'` = X`ls -id $LINUX/include/asm-um | awk '{print $1}'` ; then
-       host_cpu="um";
-       AC_MSG_RESULT(yes)
-    else
-       AC_MSG_RESULT(no (asm doesn't point at asm-um))
-    fi
-
-  else 
-        AC_MSG_RESULT(no (asm-um missing))
-  fi
+if test x$CRAY_PORTALS_LIBS != x ; then
+       if test ! -r $CRAY_PORTALS_LIBS/libportals.a ; then
+               AC_MSG_ERROR([Cray portals libraries were not found in $CRAY_PORTALS_LIBS.  Please check the paths passed to --with-cray-portals or --with-cray-portals-libs.])
+       fi
 fi
 
-# --------- Linux 25 ------------------
-
-AC_MSG_CHECKING(if you are running linux 2.5)
-if test -e $LINUX/include/linux/namei.h ; then
-        linux25="yes"
-        AC_MSG_RESULT(yes)
+AC_MSG_CHECKING([whether to use Cray portals])
+if test x$CRAY_PORTALS_INCLUDES != x -a x$CRAY_PORTALS_LIBS != x ; then
+       with_cray_portals=yes
+       AC_DEFINE(CRAY_PORTALS, 1, [Building with Cray Portals])
+       CRAY_PORTALS_INCLUDES="-I$CRAY_PORTALS_INCLUDES"
 else
-        linux25="no"
-        AC_MSG_RESULT(no)
+       with_cray_portals=no
 fi
-AM_CONDITIONAL(LINUX25, test x$linux25 = xyes)
-echo "Makefiles for in linux 2.5 build: $LINUX25"
-
-# -------  Makeflags ------------------
-
-AC_MSG_CHECKING(setting make flags system architecture: )
-case ${host_cpu} in
-       lib )
-       AC_MSG_RESULT($host_cpu)
-       KCFLAGS='-g -Wall '
-       KCPPFLAGS='-D__arch_lib__ '
-       libdir='${exec_prefix}/lib/lustre'
-        MOD_LINK=elf_i386
-;;
-       um )
-       AC_MSG_RESULT($host_cpu)
-       KCFLAGS='-g -Wall -pipe -Wno-trigraphs -Wstrict-prototypes -fno-strict-aliasing -fno-common '
-        case ${linux25} in
-                yes )
-                KCPPFLAGS='-D__KERNEL__ -U__i386__ -Ui386 -DUM_FASTCALL -D__arch_um__ -DSUBARCH="i386" -DNESTING=0 -D_LARGEFILE64_SOURCE  -Derrno=kernel_errno -DPATCHLEVEL=4 -DMODULE -I$(LINUX)/arch/um/include -I$(LINUX)/arch/um/kernel/tt/include -I$(LINUX)/arch/um/kernel/skas/include -O2 -nostdinc -iwithprefix include -DKBUILD_BASENAME=$(MODULE) -DKBUILD_MODNAME=$(MODULE) '
-        ;;
-                * )
-                KCPPFLAGS='-D__KERNEL__ -U__i386__ -Ui386 -DUM_FASTCALL -D__arch_um__ -DSUBARCH="i386" -DNESTING=0 -D_LARGEFILE64_SOURCE  -Derrno=kernel_errno -DPATCHLEVEL=4 -DMODULE -I$(LINUX)/arch/um/kernel/tt/include -I$(LINUX)/arch/um/include '
-        ;;
-        esac
-
-        MOD_LINK=elf_i386
-;;
-       i*86 )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-g -O2 -Wall -Wstrict-prototypes -pipe'
-        case ${linux25} in
-                yes )
-                KCPPFLAGS='-D__KERNEL__ -DMODULE -march=i686 -I$(LINUX)/include/asm-i386/mach-default -nostdinc -iwithprefix include '
-        ;;
-                * )
-                KCPPFLAGS='-D__KERNEL__ -DMODULE '
-        ;;
-        esac
-        MOD_LINK=elf_i386
-;;
-
-       alphaev6 )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-g -O2  -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mno-fp-regs -ffixed-8 -mcpu=ev5 -Wa,-mev6'
-        KCPPFLAGS='-D__KERNEL__ -DMODULE '
-        MOD_LINK=elf64alpha
-;;
-
-       alphaev67 )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-g -O2  -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mno-fp-regs -ffixed-8 -mcpu=ev5 -Wa,-mev6'
-        KCPPFLAGS='-D__KERNEL__ -DMODULE '
-        MOD_LINK=elf64alpha
-;;
-
-       alpha* )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-g -O2  -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -pipe -mno-fp-regs -ffixed-8 -mcpu=ev5 -Wa,-mev5'
-        KCPPFLAGS='-D__KERNEL__ -DMODULE '
-        MOD_LINK=elf64alpha
-;;
-
-       ia64 )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-g -O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -pipe -ffixed-r13 -mfixed-range=f10-f15,f32-f127 -falign-functions=32 -mb-step'
-       KCPPFLAGS='-D__KERNEL__ -DMODULE'
-        MOD_LINK=elf64_ia64
-;;
-
-       x86_64 )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-g -O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fomit-frame-pointer -mno-red-zone -mcmodel=kernel -pipe -fno-reorder-blocks -finline-limit=2000 -fno-strength-reduce -fno-asynchronous-unwind-tables'
-       KCPPFLAGS='-D__KERNEL__ -DMODULE'
-        MOD_LINK=elf_x86_64
-;;
-
-       sparc64 )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -Wno-unused -m64 -pipe -mno-fpu -mcpu=ultrasparc -mcmodel=medlow -ffixed-g4 -fcall-used-g5 -fcall-used-g7 -Wno-sign-compare -Wa,--undeclared-regs'
-        KCPPFLAGS='-D__KERNEL__'
-        MOD_LINK=elf64_sparc
-
-;;
-
-       powerpc )
-       AC_MSG_RESULT($host_cpu)
-        KCFLAGS='-O2 -Wall -Wstrict-prototypes -Wno-trigraphs -fomit-frame-pointer -fno-strict-aliasing -fno-common -D__powerpc__ -fsigned-char -msoft-float -pipe -ffixed-r2 -Wno-uninitialized -mmultiple -mstring'
-        KCPPFLAGS='-D__KERNEL__'
-        MOD_LINK=elf32ppclinux
-;;
-
-        *)
-       AC_ERROR("Unknown Linux Platform: $host_cpu")
-;;
-esac
-
-# ----------- make dep run? ------------------
-
-if test $host_cpu != "lib" ; then 
-  AC_MSG_CHECKING(if make dep has been run in kernel source (host $host_cpu) )
-  if test -f $LINUX/include/linux/config.h ; then
-  AC_MSG_RESULT(yes)
- else
-  AC_MSG_ERROR(** cannot find $LINUX/include/linux/config.h. Run make dep in $LINUX.)
-  fi
+AC_MSG_RESULT([$with_cray_portals])
+AM_CONDITIONAL(CRAY_PORTALS, test x$with_cray_portals != xno)
+
+# ----------------------------------------
+# some tests for catamount-like systems
+# ----------------------------------------
+AC_ARG_ENABLE([sysio_init],
+       AC_HELP_STRING([--disable-sysio-init],
+               [call sysio init functions when initializing liblustre]),
+       [],[enable_sysio_init=yes])
+AC_MSG_CHECKING([whether to initialize libsysio])
+AC_MSG_RESULT([$enable_sysio_init])
+if test x$enable_sysio_init != xno ; then
+       AC_DEFINE([INIT_SYSIO], 1, [call sysio init functions])
 fi
 
-# ------------ include paths ------------------
-
-if test $host_cpu != "lib" ; then 
-    KINCFLAGS="-I\$(top_srcdir)/include -I\$(top_srcdir)/portals/include -I$LINUX/include"
-else
-    KINCFLAGS='-I$(top_srcdir)/include -I$(top_srcdir)/portals/include'
-fi
-CPPFLAGS="$KINCFLAGS $ARCHCPPFLAGS"
-
-if test $host_cpu != "lib" ; then 
-# ------------ autoconf.h ------------------
-  AC_MSG_CHECKING(if autoconf.h is in kernel source)
-  if test -f $LINUX/include/linux/autoconf.h ; then
-      AC_MSG_RESULT(yes)
-  else
-      AC_MSG_ERROR(** cannot find $LINUX/include/linux/autoconf.h. Run make config in $LINUX.)
-  fi
-
-# ------------ LINUXRELEASE and moduledir ------------------
-  AC_MSG_CHECKING(for Linux release)
-  
-  dnl We need to rid ourselves of the nasty [ ] quotes.
-  changequote(, )
-  dnl Get release from version.h
-  LINUXRELEASE="`sed -ne 's/.*UTS_RELEASE[ \"]*\([0-9.a-zA-Z_-]*\).*/\1/p' $LINUX/include/linux/version.h`"
-  changequote([, ])
-  
-  moduledir='$(libdir)/modules/'$LINUXRELEASE/kernel
-  AC_SUBST(moduledir)
-  
-  modulefsdir='$(moduledir)/fs/$(PACKAGE)'
-  AC_SUBST(modulefsdir)
-  
-  AC_MSG_RESULT($LINUXRELEASE)
-  AC_SUBST(LINUXRELEASE)
-
-# ------------ RELEASE --------------------------------
-  AC_MSG_CHECKING(lustre release)
-  
-  dnl We need to rid ourselves of the nasty [ ] quotes.
-  changequote(, )
-  dnl Get release from version.h
-  RELEASE="`sed -ne 's/-/_/g' -e 's/.*UTS_RELEASE[ \"]*\([0-9.a-zA-Z_]*\).*/\1/p' $LINUX/include/linux/version.h`_`date +%Y%m%d%H%M`"
-  changequote([, ])
-
-  AC_MSG_RESULT($RELEASE)
-  AC_SUBST(RELEASE)
-
-# ---------- modversions? --------------------
-  AC_MSG_CHECKING(for MODVERSIONS)
-  if egrep -e 'MODVERSIONS.*1' $LINUX/include/linux/autoconf.h >/dev/null 2>&1;
-  then
-        MFLAGS="-DMODULE -DMODVERSIONS -include $LINUX/include/linux/modversions.h -DEXPORT_SYMTAB"
-        AC_MSG_RESULT(yes)
-  else
-        MFLAGS=
-        AC_MSG_RESULT(no)
-  fi
+AC_ARG_ENABLE([urandom],
+       AC_HELP_STRING([--disable-urandom],
+               [disable use of /dev/urandom for liblustre]),
+       [],[enable_urandom=yes])
+AC_MSG_CHECKING([whether to use /dev/urandom for liblustre])
+AC_MSG_RESULT([$enable_urandom])
+if test x$enable_urandom != xno ; then
+       AC_DEFINE([LIBLUSTRE_USE_URANDOM], 1, [use /dev/urandom for random data])
 fi
 
-# ---------- Portals flags --------------------
-
-#AC_PREFIX_DEFAULT([])
-#if test "x$prefix" = xNONE || test "x$prefix" = x; then
-#  usrprefix=/usr
-#else
-#  usrprefix='${prefix}'
-#fi
-#AC_SUBST(usrprefix)
-
-AC_MSG_CHECKING(if kernel has CPU affinity support)
-SET_CPUS_ALLOW="`grep -c set_cpus_allowed $LINUX/kernel/softirq.c`"
-if test "$SET_CPUS_ALLOW" != 0 ; then
-  enable_affinity_temp="-DCPU_AFFINITY=1"
-  AC_MSG_RESULT(yes)
-else
-  enable_affinity_temp=""
-  AC_MSG_RESULT(no)
+# -------- check for -lcap and -lpthread ----
+if test x$enable_liblustre = xyes ; then
+       AC_CHECK_LIB([cap], [cap_get_proc],
+               [
+                       CAP_LIBS="-lcap"
+                       AC_DEFINE([HAVE_LIBCAP], 1, [use libcap])
+               ],
+               [CAP_LIBS=""])
+       AC_SUBST(CAP_LIBS)
+       AC_CHECK_LIB([pthread], [pthread_create],
+               [
+                       PTHREAD_LIBS="-lpthread"
+                       AC_DEFINE([HAVE_LIBPTHREAD], 1, [use libpthread])
+               ],
+               [PTHREAD_LIBS=""])
+       AC_SUBST(PTHREAD_LIBS)
 fi
 
-AC_MSG_CHECKING(if kernel has zero-copy TCP support)
-ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`"
-if test "$ZCCD" != 0 ; then
-  enable_zerocopy_temp="-DSOCKNAL_ZC=1"
-  AC_MSG_RESULT(yes)
-else
-  enable_zerocopy_temp=""
-  AC_MSG_RESULT(no)
+# -------- enable tests and utils? -------
+if test x$enable_tests = xno ; then
+       AC_MSG_NOTICE([disabling tests])
+       enable_tests=no
 fi
-
-AC_ARG_ENABLE(zerocopy, [  --disable-zerocopy disable socknal zerocopy],enable_zerocopy="", enable_zerocopy=$enable_zerocopy_temp)
-
-AC_ARG_ENABLE(affinity, [  --disable-affinity disable process/irq affinity],enable_affinity="", enable_affinity=$enable_affinity_temp)
-#####################################
-
-AC_MSG_CHECKING(if quadrics kernel headers are present)
-if test -d $LINUX/drivers/net/qsnet ; then
-  AC_MSG_RESULT(yes)
-  QSWNAL="qswnal"
-  AC_MSG_CHECKING(for multirail EKC)
-  if test -f $LINUX/include/elan/epcomms.h; then
-       AC_MSG_RESULT(supported)
-       with_quadrics="-DMULTIRAIL_EKC=1"
-  else
-       AC_MSG_RESULT(not supported)
-       with_quadrics="-I$LINUX/drivers/net/qsnet/include"
-  fi
-  :
-else
-  AC_MSG_RESULT(no)
-  QSWNAL=""
-  with_quadrics=""
-  :
+if test x$enable_utils = xno ; then
+       AC_MSG_NOTICE([disabling utilities])
+       enable_utils=no
 fi
-AC_SUBST(with_quadrics)
-AC_SUBST(QSWNAL)
-
-# R. Read 5/02
-GMNAL=""
-echo "checking with-gm=" ${with_gm}
-if test "${with_gm+set}" = set; then
-  if test "${with_gm}" = yes; then
-    with_gm="-I/usr/local/gm/include"
-  else
-    with_gm="-I$with_gm/include -I$with_gm/drivers -I$with_gm/drivers/linux/gm"
-  fi
-  GMNAL="gmnal"
-else
-# default case - no GM
-  with_gm=""
-fi
-AC_SUBST(with_gm)
-AC_SUBST(GMNAL)
-
 
-#fixme: where are the default IB includes?
-default_ib_include_dir=/usr/local/ib/include
-an_ib_include_file=vapi.h
-
-AC_ARG_WITH(ib, [ --with-ib=[yes/no/path] Path to IB includes], with_ib=$withval, with_ib=$default_ib)
-AC_MSG_CHECKING(if IB headers are present)
-if test "$with_ib" = yes; then
-    with_ib=$default_ib_include_dir
+if test x$enable_modules != xno ; then
+       # -------- set linuxdir ------------
+       AC_MSG_CHECKING([for Linux sources])
+       AC_ARG_WITH([linux],
+               AC_HELP_STRING([--with-linux=path],
+                              [set path to Linux source (default=/usr/src/linux)]),
+               [LINUX=$with_linux],
+               [LINUX=/usr/src/linux])
+       AC_MSG_RESULT([$LINUX])
+       AC_SUBST(LINUX)
+       if test x$enable_inkernel = xyes ; then
+               echo ln -s `pwd` $LINUX/fs/lustre
+               rm $LINUX/fs/lustre
+               ln -s `pwd` $LINUX/fs/lustre
+       fi
+
+       # -------- linux objects (for 2.6) --
+       AC_MSG_CHECKING([for Linux objects dir])
+       AC_ARG_WITH([linux-obj],
+               AC_HELP_STRING([--with-linux-obj=path],
+                               [set path to Linux objects dir (default=\$LINUX)]),
+               [LINUX_OBJ=$with_linux_obj],
+               [LINUX_OBJ=$LINUX])
+       AC_MSG_RESULT([$LINUX_OBJ])
+       AC_SUBST(LINUX_OBJ)
+
+       # -------- check for .confg --------
+       AC_ARG_WITH([linux-config],
+               [AC_HELP_STRING([--with-linux-config=path],
+                               [set path to Linux .conf (default=\$LINUX_OBJ/.config)])],
+               [LINUX_CONFIG=$with_linux_config],
+               [LINUX_CONFIG=$LINUX_OBJ/.config])
+       AC_SUBST(LINUX_CONFIG)
+
+       AC_CHECK_FILE([/boot/kernel.h],
+               [KERNEL_SOURCE_HEADER='/boot/kernel.h'],
+               [AC_CHECK_FILE([/var/adm/running-kernel.h]),
+                       [KERNEL_SOURCE_HEADER='/var/adm/running-kernel.h']])
+
+       AC_ARG_WITH([kernel-source-header],
+               AC_HELP_STRING([--with-kernel-source-header=path],
+                               [Use a different kernel version header.  Consult README.kernel-source for details.]),
+               [KERNEL_SOURCE_HEADER=$with_kernel_source_header])
+
+       #  --------------------
+       ARCH_UM=
+       UML_CFLAGS=
+
+       AC_MSG_CHECKING([if you are running user mode linux for $host_cpu])
+       if test -e $LINUX/include/asm-um ; then
+               if test  X`ls -id $LINUX/include/asm/ | awk '{print $1}'` = X`ls -id $LINUX/include/asm-um | awk '{print $1}'` ; then
+                       ARCH_UM='ARCH=um'
+                       # see notes in Rules.in
+                       UML_CFLAGS='-O0'
+                       AC_MSG_RESULT(yes)
+               else
+                       AC_MSG_RESULT([no (asm doesn't point at asm-um)])
+               fi
+       else
+               AC_MSG_RESULT([no (asm-um missing)])
+       fi
+
+       AC_SUBST(ARCH_UM)
+       AC_SUBST(UML_CFLAGS)
+
+       # --------- Linux 25 ------------------
+       AC_CHECK_FILE([$LINUX/include/linux/namei.h],
+               [
+                       linux25="yes"
+                       KMODEXT=".ko"
+                       enable_ldiskfs="yes"
+                       BACKINGFS="ldiskfs"
+               ],[
+                       KMODEXT=".o"
+                       linux25="no"
+               ])
+       AC_MSG_CHECKING([if you are using Linux 2.6])
+       AC_MSG_RESULT([$linux25])
+
+       AC_SUBST(LINUX25)
+       AC_SUBST(KMODEXT)
+
+       AC_PATH_PROG(PATCH, patch, [no])
+       AC_PATH_PROG(QUILT, quilt, [no])
+
+       if test x$enable_ldiskfs$PATCH$QUILT = xyesnono ; then
+               AC_MSG_ERROR([Quilt or patch are needed to build the ldiskfs module (for Linux 2.6)])
+       fi
 fi
-if test "$with_ib" != no -a -f ${with_ib}/${an_ib_include_file}; then
-    AC_MSG_RESULT(yes)
-    IBNAL="ibnal"
-    with_ib="-I${with_ib}"
-else
-    AC_MSG_RESULT(no)
-    IBNAL=""
-    with_ib=""
-fi
-AC_SUBST(IBNAL)
-AC_SUBST(with_ib)
-
+AM_CONDITIONAL(LINUX25, test x$linux25 = xyes)
+AM_CONDITIONAL(USE_QUILT, test x$QUILT != xno)
 
-def_scamac=/opt/scali/include
-AC_ARG_WITH(scamac, [  --with-scamac=[yes/no/path] Path to ScaMAC includes (default=/opt/scali/include)], with_scamac=$withval, with_scamac=$def_scamac)
-AC_MSG_CHECKING(if ScaMAC headers are present)
-if test "$with_scamac" = yes; then
-  with_scamac=$def_scamac
-fi
-if test "$with_scamac" != no -a -f ${with_scamac}/scamac.h; then
-  AC_MSG_RESULT(yes)
-  SCIMACNAL="scimacnal"
-  with_scamac="-I${with_scamac} -I${with_scamac}/icm"
-else
-  AC_MSG_RESULT(no)
-  SCIMACNAL=""
-  with_scamac=""
-fi
+# -------  Makeflags ------------------
 
-AC_SUBST(with_scamac)
-AC_SUBST(SCIMACNAL)
+CPPFLAGS="$CPPFLAGS $CRAY_PORTALS_INCLUDES -I\$(top_srcdir)/include -I\$(top_srcdir)/portals/include"
 
-CFLAGS="$KCFLAGS"
-CPPFLAGS="$KINCFLAGS $KCPPFLAGS $MFLAGS $enable_zerocopy $enable_affinity $with_quadrics $with_gm $with_scamac $with_ib"
+# liblustre are all the same
+LLCPPFLAGS="-D__arch_lib__ -D_LARGEFILE64_SOURCE=1"
+AC_SUBST(LLCPPFLAGS)
 
-AC_SUBST(MOD_LINK)
-AC_SUBST(LINUX25)
-AM_CONDITIONAL(LIBLUSTRE, test x$host_cpu = xlib)
+LLCFLAGS="-g -Wall -fPIC"
+AC_SUBST(LLCFLAGS)
 
-# ---------- Red Hat 2.4.20 backports some 2.5 bits --------
-# This needs to run after we've defined the KCPPFLAGS
+# everyone builds against portals and lustre
 
-AC_MSG_CHECKING(for kernel version)
-AC_TRY_COMPILE([#define __KERNEL__
-             #include <linux/sched.h>],
-            [struct task_struct p;
-             p.sighand = NULL;],
-            [RH_2_4_20=1],
-            [RH_2_4_20=0])
+if test x$enable_ldiskfs = xyes ; then
+       AC_DEFINE(CONFIG_LDISKFS_FS_MODULE, 1, [build ldiskfs as a module])
+       AC_DEFINE(CONFIG_LDISKFS_FS_XATTR, 1, [enable extended attributes for ldiskfs])
+       AC_DEFINE(CONFIG_LDISKFS_FS_POSIX_ACL, 1, [enable posix acls])
+       AC_DEFINE(CONFIG_LDISKFS_FS_SECURITY, 1, [enable fs security])
+fi
 
-if test $RH_2_4_20 = 1; then
-       AC_MSG_RESULT(redhat-2.4.20)
-       CPPFLAGS="$CPPFLAGS -DCONFIG_RH_2_4_20"
-else
-       AC_MSG_RESULT($LINUXRELEASE)
-fi 
+EXTRA_KCFLAGS="-g $CRAY_PORTALS_INCLUDES -I$PWD/portals/include -I$PWD/include"
+
+# these are like AC_TRY_COMPILE, but try to build modules against the
+# kernel, inside the kernel-tests directory
+
+AC_DEFUN([LUSTRE_MODULE_CONFTEST],
+[cat >conftest.c <<_ACEOF
+$1
+_ACEOF
+])
+
+AC_DEFUN([LUSTRE_MODULE_COMPILE_IFELSE],
+[m4_ifvaln([$1], [LUSTRE_MODULE_CONFTEST([$1])])dnl
+rm -f kernel-tests/conftest.o kernel-tests/conftest.mod.c kernel-tests/conftest.ko
+AS_IF([AC_TRY_COMMAND(cp conftest.c kernel-tests && make [$2] CC="$CC" -f $PWD/kernel-tests/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM $MODULE_TARGET=$PWD/kernel-tests) >/dev/null && AC_TRY_COMMAND([$3])],
+       [$4],
+       [_AC_MSG_LOG_CONFTEST
+m4_ifvaln([$5],[$5])dnl])dnl
+rm -f kernel-tests/conftest.o kernel-tests/conftest.mod.c kernel-tests/conftest.mod.o kernel-tests/conftest.ko m4_ifval([$1], [kernel-tests/conftest.c conftest.c])[]dnl
+])
+
+AC_DEFUN([LUSTRE_MODULE_TRY_COMPILE],
+[LUSTRE_MODULE_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[$1]], [[$2]])],
+       [modules],
+       [test -s kernel-tests/conftest.o],
+       [$3], [$4])])
+
+AC_DEFUN([LUSTRE_MODULE_TRY_MAKE],
+[LUSTRE_MODULE_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4], [$5], [$6])])
 
-# ---------- Red Hat 2.4.21 backports some more 2.5 bits --------
+# ------------ include paths ------------------
 
-AC_MSG_CHECKING(if kernel defines PDE)
-HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`"
-if test "$HAVE_PDE" != 0 ; then
-  CPPFLAGS="$CPPFLAGS -DHAVE_PDE"
-  AC_MSG_RESULT(yes)
-else
-  AC_MSG_RESULT(no)
+if test x$enable_modules != xno ; then
+       # ------------ .config exists ----------------
+       AC_CHECK_FILE([$LINUX_CONFIG],[],
+               [AC_MSG_ERROR([Kernel config could not be found.  If you are building from a kernel-source rpm consult README.kernel-source])])
+
+       # ----------- make dep run? ------------------
+       AC_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.])])
+
+       # ------------ rhconfig.h includes runtime-generated bits --
+       # red hat kernel-source checks
+
+       # we know this exists after the check above.  if the user
+       # tarred up the tree and ran make dep etc. in it, then
+       # version.h gets overwritten with a standard linux one.
+
+       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],
+                       [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.])
+                               AC_MSG_WARN([Consult README.kernel-source for details.])
+                       fi],
+                       [AC_MSG_ERROR([$KERNEL_SOURCE_HEADER not found.  Consult README.kernel-source for details.])])
+               EXTRA_KCFLAGS="-include $KERNEL_SOURCE_HEADER $EXTRA_KCFLAGS"
+       fi
+
+       # ------------ external module support ---------------------
+       MODULE_TARGET="SUBDIRS"
+       if test $linux25 = 'yes' ; then
+               makerule="$PWD/kernel-tests"
+               AC_MSG_CHECKING([for external module build support])
+               rm -f kernel-tests/conftest.i
+               LUSTRE_MODULE_TRY_MAKE([],[],
+                       [$makerule LUSTRE_KERNEL_TEST=conftest.i],
+                       [test -s kernel-tests/conftest.i],
+                       [
+                               AC_MSG_RESULT([no])
+                       ],[
+                               AC_MSG_RESULT([yes])
+                               makerule="_module_$makerule"
+                               MODULE_TARGET="M"
+                       ])
+       else
+               makerule="_dir_$PWD/kernel-tests"
+       fi
+       AC_SUBST(MODULE_TARGET)
+
+       # --- check that we can build modules at all
+       AC_MSG_CHECKING([that modules can be built])
+       LUSTRE_MODULE_TRY_COMPILE([],[],
+               [
+                       AC_MSG_RESULT([yes])
+               ],[
+                       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 README.kernel-source])
+                       AC_MSG_ERROR([Kernel modules could not be built.])
+               ])
+
+       # ------------ LINUXRELEASE and moduledir ------------------
+       LINUXRELEASE=
+       rm -f kernel-tests/conftest.i
+       AC_MSG_CHECKING([for Linux release])
+       LUSTRE_MODULE_TRY_MAKE(
+               [#include <linux/version.h>],
+               [char *LINUXRELEASE;
+                LINUXRELEASE=UTS_RELEASE;],
+               [$makerule LUSTRE_KERNEL_TEST=conftest.i],
+               [test -s kernel-tests/conftest.i],
+               [
+                       # LINUXRELEASE="UTS_RELEASE"
+                       eval $(grep "LINUXRELEASE=" kernel-tests/conftest.i)
+               ],[
+                       AC_MSG_RESULT([unknown])
+                       AC_MSG_ERROR([Could not preprocess test program.  Consult config.log for details.])
+               ])
+       rm -f kernel-tests/conftest.i
+       if test x$LINUXRELEASE = x ; then
+               AC_MSG_RESULT([unknown])
+               AC_MSG_ERROR([Could not determine Linux release version from linux/version.h.])
+       fi
+       AC_MSG_RESULT([$LINUXRELEASE])
+       AC_SUBST(LINUXRELEASE)
+
+       moduledir='/lib/modules/'$LINUXRELEASE/kernel
+       modulefsdir='$(moduledir)/fs/$(PACKAGE)'
+       modulenetdir='$(moduledir)/net/$(PACKAGE)'
+
+       AC_SUBST(moduledir)
+       AC_SUBST(modulefsdir)
+       AC_SUBST(modulenetdir)
+
+       # ------------ RELEASE --------------------------------
+       AC_MSG_CHECKING([for Lustre release])
+       RELEASE="`echo ${LINUXRELEASE} | tr '-' '_'`_`date +%Y%m%d%H%M`"
+       AC_MSG_RESULT($RELEASE)
+       AC_SUBST(RELEASE)
+
+       # ---------- Portals flags --------------------
+
+       AC_MSG_CHECKING([for zero-copy TCP support])
+       AC_ARG_ENABLE([zerocopy],
+               AC_HELP_STRING([--disable-zerocopy],
+                              [disable socknal zerocopy]),
+               [],[enable_zerocopy='yes'])
+       if test x$enable_zerocopy = xno ; then
+               AC_MSG_RESULT([no (by request)])
+       else
+               ZCCD="`grep -c zccd $LINUX/include/linux/skbuff.h`"
+               if test "$ZCCD" != 0 ; then
+                       AC_DEFINE(SOCKNAL_ZC, 1, [use zero-copy TCP])
+                       AC_MSG_RESULT(yes)
+               else
+                       AC_MSG_RESULT([no (no kernel support)])
+               fi
+       fi
+
+       AC_ARG_ENABLE([affinity],
+               AC_HELP_STRING([--disable-affinity],
+                              [disable process/irq affinity]),
+               [],[enable_affinity='yes'])
+
+       AC_MSG_CHECKING([for CPU affinity support])
+       if test x$enable_affinity = xno ; then
+               AC_MSG_RESULT([no (by request)])
+       else
+               LUSTRE_MODULE_TRY_COMPILE(
+                       [
+                               #include <linux/sched.h>
+                       ],[
+                               struct task_struct t;
+                               #ifdef CPU_ARRAY_SIZE
+                               cpumask_t m;
+                               #else
+                               unsigned long m;
+                               #endif
+                               set_cpus_allowed(&t, m);
+                       ],[
+                               AC_DEFINE(CPU_AFFINITY, 1, [kernel has cpu affinity support])
+                               AC_MSG_RESULT([yes])
+                       ],[
+                               AC_MSG_RESULT([no (no kernel support)])
+                       ])
+       fi
+
+       #####################################
+
+       AC_MSG_CHECKING([if quadrics kernel headers are present])
+       if test -d $LINUX/drivers/net/qsnet ; then
+               AC_MSG_RESULT([yes])
+               QSWNAL="qswnal"
+               AC_MSG_CHECKING([for multirail EKC])
+               if test -f $LINUX/include/elan/epcomms.h; then
+                       AC_MSG_RESULT([supported])
+                       QSWCPPFLAGS="-DMULTIRAIL_EKC=1"
+               else
+                       AC_MSG_RESULT([not supported])
+                       if test -d $LINUX/drivers/net/qsnet/include; then
+                               QSWCPPFLAGS="-I$LINUX/drivers/net/qsnet/include"
+                       else
+                               QSWCPPFLAGS="-I$LINUX/include/linux"
+                       fi
+               fi
+       else
+               AC_MSG_RESULT([no])
+               QSWNAL=""
+               QSWCPPFLAGS=""
+       fi
+       AC_SUBST(QSWCPPFLAGS)
+       AC_SUBST(QSWNAL)
+
+       AC_MSG_CHECKING([if gm support was requested])
+       AC_ARG_WITH([gm],
+               AC_HELP_STRING([--with-gm=path],
+                              [build gmnal against path]),
+               [
+                       case $with_gm in 
+                               yes)
+                                       AC_MSG_RESULT([yes])
+                                       GMCPPFLAGS="-I/usr/local/gm/include"
+                                       GMNAL="gmnal"
+                                       ;;
+                               no)
+                                       AC_MSG_RESULT([no])
+                                       GMCPPFLAGS=""
+                                       GMNAL=""
+                                       ;;
+                               *)
+                                       AC_MSG_RESULT([yes])
+                                       GMCPPFLAGS="-I$with_gm/include -I$with_gm/drivers -I$with_gm/drivers/linux/gm"
+                                       GMNAL="gmnal"
+                                       ;;
+                       esac
+               ],[
+                       AC_MSG_RESULT([no])
+                       GMCPPFLAGS=""
+                       GMNAL=""
+               ])
+       AC_SUBST(GMCPPFLAGS)
+       AC_SUBST(GMNAL)
+
+       if test $linux25 = 'no' ; then
+       #### OpenIB 
+       AC_MSG_CHECKING([if OpenIB kernel headers are present])
+       OPENIBCPPFLAGS="-I$LINUX/drivers/infiniband/include -DIN_TREE_BUILD"
+       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $OPENIBCPPFLAGS"
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <ts_ib_core.h>
+               ],[
+                       struct ib_device_properties props;
+                       return 0;
+               ],[
+                       AC_MSG_RESULT([yes])
+                       OPENIBNAL="openibnal"
+               ],[
+                       AC_MSG_RESULT([no])
+                       OPENIBNAL=""
+                       OPENIBCPPFLAGS=""
+               ])
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+       AC_SUBST(OPENIBCPPFLAGS)
+       AC_SUBST(OPENIBNAL)
+       fi
+
+       #### Infinicon IB
+       AC_MSG_CHECKING([if Infinicon IB kernel headers are present])
+       # for how the only infinicon ib build has headers in /usr/include/iba
+       IIBCPPFLAGS="-I/usr/include -DIN_TREE_BUILD"
+       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $IIBCPPFLAGS"
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/iba/ibt.h>
+               ],[
+                       IBT_INTERFACE_UNION interfaces;
+                       FSTATUS             rc;
+
+                       rc = IbtGetInterfaceByVersion(IBT_INTERFACE_VERSION_2,
+                                                     &interfaces);
+
+                       return rc == FSUCCESS ? 0 : 1;
+               ],[
+                       AC_MSG_RESULT([yes])
+                       IIBNAL="iibnal"
+               ],[
+                       AC_MSG_RESULT([no])
+                       IIBNAL=""
+                       IIBCPPFLAGS=""
+               ])
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+       AC_SUBST(IIBCPPFLAGS)
+       AC_SUBST(IIBNAL)
+
+       #### Rapid Array
+       AC_MSG_CHECKING([if RapidArray kernel headers are present])
+       # placeholder
+       RACPPFLAGS="-I/tmp"
+       EXTRA_KCFLAGS_save="$EXTRA_KCFLAGS"
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS $RACPPFLAGS"
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/types.h>
+                       #include <rapl.h>
+               ],[
+                       RAP_RETURN          rc;
+                       RAP_PVOID           dev_handle;
+
+                       rc = RapkGetDeviceByIndex(0, NULL, &dev_handle);
+
+                       return rc == RAP_SUCCESS ? 0 : 1;
+               ],[
+                       AC_MSG_RESULT([yes])
+                       RANAL="ranal"
+               ],[
+                       AC_MSG_RESULT([no])
+                       RANAL=""
+                       RACPPFLAGS=""
+               ])
+       EXTRA_KCFLAGS="$EXTRA_KCFLAGS_save"
+       AC_SUBST(RACPPFLAGS)
+       AC_SUBST(RANAL)
+
+       # ---------- Red Hat 2.4.18 has iobuf->dovary --------------
+       # But other kernels don't
+
+       AC_MSG_CHECKING([if struct kiobuf has a dovary field])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/iobuf.h>
+               ],[
+                       struct kiobuf iobuf;
+                       iobuf.dovary = 1;
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE(HAVE_KIOBUF_DOVARY, 1, [struct kiobuf has a dovary field])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])      
+
+       # ----------- 2.6.4 no longer has page->list ---------------
+       AC_MSG_CHECKING([if struct page has a list field])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/mm.h>
+               ],[
+                       struct page page;
+                       &page.list;
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE(HAVE_PAGE_LIST, 1, [struct page has a list field])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+       # ---------- Red Hat 2.4.20 backports some 2.5 bits --------
+       # This needs to run after we've defined the KCPPFLAGS
+
+       AC_MSG_CHECKING([if task_struct has a sighand field])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/sched.h>
+               ],[
+                       struct task_struct p;
+                       p.sighand = NULL;
+               ],[
+                       AC_DEFINE(CONFIG_RH_2_4_20, 1, [this kernel contains Red Hat 2.4.20 patches])
+                       AC_MSG_RESULT([yes])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+       # ---------- 2.4.20 introduced cond_resched --------------
+
+       AC_MSG_CHECKING([if kernel offers cond_resched])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/sched.h>
+               ],[
+                       cond_resched();
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE(HAVE_COND_RESCHED, 1, [cond_resched found])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+       # --------- zap_page_range(vma) --------------------------------
+       AC_MSG_CHECKING([if zap_pag_range with vma parameter])
+       ZAP_PAGE_RANGE_VMA="`grep -c 'zap_page_range.*struct vm_area_struct' $LINUX/include/linux/mm.h`"
+       if test "$ZAP_PAGE_RANGE_VMA" != 0 ; then
+               AC_DEFINE(ZAP_PAGE_RANGE_VMA, 1, [zap_page_range with vma parameter])
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+       fi
+
+       # ---------- Red Hat 2.4.21 backports some more 2.5 bits --------
+
+       AC_MSG_CHECKING([if kernel defines PDE])
+       HAVE_PDE="`grep -c 'proc_dir_entry..PDE' $LINUX/include/linux/proc_fs.h`"
+       if test "$HAVE_PDE" != 0 ; then
+               AC_DEFINE(HAVE_PDE, 1, [the kernel defines PDE])
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+       fi
+
+       AC_MSG_CHECKING([if kernel passes struct file to direct_IO])
+       HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`"
+       if test "$HAVE_DIO_FILE" != 0 ; then
+               AC_DEFINE(HAVE_DIO_FILE, 1, [the kernel passes struct file to direct_IO])
+               AC_MSG_RESULT(yes)
+       else
+               AC_MSG_RESULT(no)
+       fi
+
+       AC_MSG_CHECKING([if kernel defines cpu_online()])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/sched.h>
+               ],[
+                       cpu_online(0);
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE(HAVE_CPU_ONLINE, 1, [cpu_online found])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+       AC_MSG_CHECKING([if kernel defines cpumask_t])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/sched.h>
+               ],[
+                       return sizeof (cpumask_t);
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE(HAVE_CPUMASK_T, 1, [cpumask_t found])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+       # ---------- RHEL kernels define page_count in mm_inline.h
+       AC_MSG_CHECKING([if kernel has mm_inline.h header])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/mm_inline.h>
+               ],[
+                       #ifndef page_count
+                       #error mm_inline.h does not define page_count
+                       #endif
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE(HAVE_MM_INLINE, 1, [mm_inline found])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+       # ---------- inode->i_alloc_sem --------------
+       AC_MSG_CHECKING([if struct inode has i_alloc_sem])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/fs.h>
+                       #include <linux/version.h>
+               ],[
+                       #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,24))
+                       #error "down_read_trylock broken before 2.4.24"
+                       #endif
+                       struct inode i;
+                       return (char *)&i.i_alloc_sem - (char *)&i;
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_DEFINE(HAVE_I_ALLOC_SEM, 1, [struct inode has i_alloc_sem])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+
+       # ---------- modules? ------------------------
+       AC_MSG_CHECKING([for module support])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/config.h>
+               ],[
+                       #ifndef CONFIG_MODULES
+                       #error CONFIG_MODULES not #defined
+                       #endif
+               ],[
+                       AC_MSG_RESULT([yes])
+               ],[
+                       AC_MSG_RESULT([no])
+                       AC_MSG_ERROR([module support is required to build Lustre kernel modules.])
+               ])
+
+       # ---------- modversions? --------------------
+       AC_MSG_CHECKING([for MODVERSIONS])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/config.h>
+               ],[
+                       #ifndef CONFIG_MODVERSIONS
+                       #error CONFIG_MODVERSIONS not #defined
+                       #endif
+               ],[
+                       AC_MSG_RESULT([yes])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+       # ------------ preempt -----------------------
+       AC_MSG_CHECKING([if preempt is enabled])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/config.h>
+               ],[
+                       #ifndef CONFIG_PREEMPT
+                       #error CONFIG_PREEMPT is not #defined
+                       #endif
+               ],[
+                       AC_MSG_RESULT([yes])
+                       AC_MSG_ERROR([Lustre does not support kernels with preempt enabled.])
+               ],[
+                       AC_MSG_RESULT([no])
+               ])
+
+       # ------------ kallsyms (so software watchdogs produce useful stacks)
+       AC_MSG_CHECKING([if kallsyms is enabled])
+       LUSTRE_MODULE_TRY_COMPILE(
+               [
+                       #include <linux/config.h>
+               ],[
+                       #ifndef CONFIG_KALLSYMS
+                       #error CONFIG_KALLSYMS is not #defined
+                       #endif
+               ],[
+                       AC_MSG_RESULT([yes])
+               ],[
+                       AC_MSG_RESULT([no])
+                       if test "x$ARCH_UM" = "x" ; then
+                               AC_MSG_ERROR([Lustre requires that CONFIG_KALLSYMS is enabled in your kernel.])
+                       fi
+               ])
+
+       # ------------ check for our show_task patch
+       AC_MSG_CHECKING([if kernel exports show_task])
+       have_show_task=0
+       for file in ksyms sched ; do
+               if grep -q "EXPORT_SYMBOL(show_task)" \
+                        "$LINUX/kernel/$file.c" 2>/dev/null ; then
+                       have_show_task=1
+                       break
+               fi
+       done
+       if test x$have_show_task = x1 ; then
+               AC_DEFINE(HAVE_SHOW_TASK, 1, [show_task is exported])
+               AC_MSG_RESULT(yes)
+       else
+               AC_MSG_RESULT(no)
+       fi
+
+       case $BACKINGFS in
+               ext3)
+                       # --- Check that ext3 and ext3 xattr are enabled in the kernel
+                       AC_MSG_CHECKING([that ext3 is enabled in the kernel])
+                       LUSTRE_MODULE_TRY_COMPILE(
+                               [
+                                       #include <linux/config.h>
+                               ],[
+                                       #ifndef CONFIG_EXT3_FS
+                                       #ifndef CONFIG_EXT3_FS_MODULE
+                                       #error CONFIG_EXT3_FS not #defined
+                                       #endif
+                                       #endif
+                               ],[
+                                       AC_MSG_RESULT([yes])
+                               ],[
+                                       AC_MSG_RESULT([no])
+                                       AC_MSG_ERROR([Lustre requires that ext3 is enabled in the kernel (CONFIG_EXT3_FS)])
+                               ])
+       
+                       AC_MSG_CHECKING([that extended attributes for ext3 are enabled in the kernel])
+                       LUSTRE_MODULE_TRY_COMPILE(
+                               [
+                                       #include <linux/config.h>
+                               ],[
+                                       #ifndef CONFIG_EXT3_FS_XATTR
+                                       #error CONFIG_EXT3_FS_XATTR not #defined
+                                       #endif
+                               ],[
+                                       AC_MSG_RESULT([yes])
+                               ],[
+                                       AC_MSG_RESULT([no])
+                                       AC_MSG_WARN([Lustre requires that extended attributes for ext3 are enabled in the kernel (CONFIG_EXT3_FS_XATTR.)])
+                                       AC_MSG_WARN([This build may fail.])
+                               ])
+                       ;;
+               ldiskfs)
+                       AC_MSG_CHECKING([if fshooks are present])
+                       LUSTRE_MODULE_TRY_COMPILE(
+                               [
+                                       #include <linux/fshooks.h>
+                               ],[],[
+                                       AC_MSG_RESULT([yes])
+                                       LDISKFS_SERIES="2.6-suse.series"
+                               ],[
+                                       AC_MSG_RESULT([no])
+                                       LDISKFS_SERIES="2.6-vanilla.series"
+                               ])
+                       AC_SUBST(LDISKFS_SERIES)
+                       # --- check which ldiskfs series we should use
+                       ;;
+       esac # $BACKINGFS
 fi
 
-AC_MSG_CHECKING(if kernel passes struct file to direct_IO)
-HAVE_DIO_FILE="`grep -c 'direct_IO.*struct file' $LINUX/include/linux/fs.h`"
-if test "$HAVE_DIO_FILE" != 0 ; then
-  CPPFLAGS="$CPPFLAGS -DHAVE_DIO_FILE"
-  AC_MSG_RESULT(yes)
-else
-  AC_MSG_RESULT(no)
+AM_CONDITIONAL(BUILD_QSWNAL, test x$QSWNAL = "xqswnal")
+AM_CONDITIONAL(BUILD_GMNAL, test x$GMNAL = "xgmnal")
+AM_CONDITIONAL(BUILD_OPENIBNAL, test x$OPENIBNAL = "xopenibnal")
+AM_CONDITIONAL(BUILD_IIBNAL, test x$IIBNAL = "xiibnal")
+AM_CONDITIONAL(BUILD_RANAL, test x$RANAL = "xranal")
+
+# portals/utils/portals.c
+AC_CHECK_HEADERS([netdb.h netinet/tcp.h asm/types.h])
+AC_CHECK_FUNCS([gethostbyname socket connect])
+
+# portals/utils/debug.c
+AC_CHECK_HEADERS([linux/version.h])
+
+# include/liblustre.h
+AC_CHECK_HEADERS([asm/page.h sys/user.h stdint.h])
+
+# liblustre/llite_lib.h
+AC_CHECK_HEADERS([xtio.h file.h])
+
+# liblustre/dir.c
+AC_CHECK_HEADERS([linux/types.h sys/types.h linux/unistd.h unistd.h])
+
+# liblustre/lutil.c
+AC_CHECK_HEADERS([netinet/in.h arpa/inet.h catamount/data.h])
+AC_CHECK_FUNCS([inet_ntoa])
+
+CPPFLAGS="-include \$(top_builddir)/include/config.h $CPPFLAGS"
+EXTRA_KCFLAGS="-include $PWD/include/config.h $EXTRA_KCFLAGS"
+AC_SUBST(EXTRA_KCFLAGS)
+
+echo "CPPFLAGS: $CPPFLAGS"
+echo "LLCPPFLAGS: $LLCPPFLAGS"
+echo "CFLAGS: $CFLAGS"
+echo "EXTRA_KCFLAGS: $EXTRA_KCFLAGS"
+echo "LLCFLAGS: $LLCFLAGS"
+
+ENABLE_INIT_SCRIPTS=0
+if test x$enable_utils = xyes ; then
+        AC_MSG_CHECKING([whether to install init scripts])
+        # our scripts only work on red hat systems
+        if test -f /etc/init.d/functions -a -f /etc/sysconfig/network ; then
+                ENABLE_INIT_SCRIPTS=1
+                AC_MSG_RESULT([yes])
+        else
+                AC_MSG_RESULT([no])
+        fi
 fi
+AM_CONDITIONAL(INIT_SCRIPTS, test x$ENABLE_INIT_SCRIPTS = "x1")
+AC_SUBST(ENABLE_INIT_SCRIPTS)