Whamcloud - gitweb
Split up configure thusly:
authorjacob <jacob>
Thu, 9 Dec 2004 19:34:54 +0000 (19:34 +0000)
committerjacob <jacob>
Thu, 9 Dec 2004 19:34:54 +0000 (19:34 +0000)
 - build/autoconf/configure.ac: main skel
 - build/autoconf/lustre-build.m4: non-arch macros
 - build/autoconf/lustre-build-linux.m4: linux-specific macros
 - build/autoconf/lustre-build-darwin.m4: darwin-specific macros
 - portals/autoconf/lustre-portals.m4: portals checks
 - lustre/autoconf/lustre-core.m4: lustre checks
 - lustre/autoconf/lustre-version.ac: the canonical lustre version

build/autoconf/configure.ac [new file with mode: 0644]
build/autoconf/lustre-build-darwin.m4 [new file with mode: 0644]
build/autoconf/lustre-build-linux.m4 [new file with mode: 0644]
build/autoconf/lustre-build.m4 [new file with mode: 0644]

diff --git a/build/autoconf/configure.ac b/build/autoconf/configure.ac
new file mode 100644 (file)
index 0000000..addd845
--- /dev/null
@@ -0,0 +1,50 @@
+sinclude(lustre/autoconf/version.ac)
+
+AC_INIT([Lustre], [LUSTRE_VERSION], [https://bugzilla.lustre.org/], [lustre])
+
+LB_CHECK_VERSION
+
+LC_CONFIG_SRCDIR
+
+AC_CANONICAL_SYSTEM
+
+AM_INIT_AUTOMAKE
+# AM_MAINTAINER_MODE
+
+LB_INCLUDE_RULES
+
+LB_PATH_DEFAULTS
+
+LB_PROG_CC
+
+LB_PATH_LIBSYSIO
+LB_PATH_CRAY_PORTALS
+
+LB_CONFIG_DOCS
+LB_CONFIG_UTILS
+LB_CONFIG_TESTS
+
+LB_CONFIG_MODULES
+
+LB_CONFIG_LIBLUSTRE
+
+LB_CONDITIONALS
+LB_CONFIG_HEADERS
+
+LB_CONFIG_FILES
+
+AC_OUTPUT([
+Makefile
+autoMakefile
+])
+
+cat <<_ACEOF
+
+CPPFLAGS: $CPPFLAGS
+LLCPPFLAGS: $LLCPPFLAGS
+CFLAGS: $CFLAGS
+EXTRA_KCFLAGS: $EXTRA_KCFLAGS
+LLCFLAGS: $LLCFLAGS
+
+Type 'make' to build Lustre.
+_ACEOF
diff --git a/build/autoconf/lustre-build-darwin.m4 b/build/autoconf/lustre-build-darwin.m4
new file mode 100644 (file)
index 0000000..15c3a9d
--- /dev/null
@@ -0,0 +1,8 @@
+#
+# LB_PROG_DARWIN
+#
+# darwin tests
+#
+AC_DEFUN([LB_PROG_DARWIN],
+[
+])
diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
new file mode 100644 (file)
index 0000000..2904dfd
--- /dev/null
@@ -0,0 +1,561 @@
+#
+# LB_LINUX_INKERNEL
+#
+# in kernel compilation? (2.5 only)
+#
+AC_DEFUN([LB_LINUX_INKERNEL],
+[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])
+
+if test x$enable_inkernel = xyes ; then
+        echo ln -s `pwd` $LINUX/fs/lustre
+        rm $LINUX/fs/lustre
+               ln -s `pwd` $LINUX/fs/lustre
+       find portals lustre -name Makefile.mk | sed 's/.mk$//' | xargs -n 1 \
+               sh -e -x -c '(cp -f $0.mk $0.in)'
+fi
+])
+
+
+#
+# LB_LINUX_VERSION
+#
+# Set things accordingly for a 2.5 kernel
+#
+AC_DEFUN([LB_LINUX_VERSION],
+[AC_CHECK_FILE([$LINUX/include/linux/namei.h],
+       [
+               linux25="yes"
+               KMODEXT=".ko"
+       ],[
+               KMODEXT=".o"
+               linux25="no"
+       ])
+AC_MSG_CHECKING([if you are using Linux 2.6])
+AC_MSG_RESULT([$linux25])
+
+MODULE_TARGET="SUBDIRS"
+if test $linux25 = "yes" ; then
+       LB_CONFIG_INKERNEL
+
+       makerule="$PWD/build"
+       AC_MSG_CHECKING([for external module build support])
+       rm -f build/conftest.i
+       LB_LINUX_TRY_MAKE([],[],
+               [$makerule LUSTRE_KERNEL_TEST=conftest.i],
+               [test -s build/conftest.i],
+               [
+                       AC_MSG_RESULT([no])
+               ],[
+                       AC_MSG_RESULT([yes])
+                       makerule="_module_$makerule"
+                       MODULE_TARGET="M"
+               ])
+
+else
+       makerule="_dir_$PWD/build"
+fi
+
+AC_SUBST(MODULE_TARGET)
+AC_SUBST(LINUX25)
+AC_SUBST(KMODEXT)
+])
+
+#
+# LB_LINUX_PATH
+#
+# Find paths for linux, handling kernel-source rpms
+#
+AC_DEFUN([LB_LINUX_PATH],
+[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)
+
+# -------- 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])
+
+# ------------ .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
+
+# this is needed before we can build modules
+LB_LINUX_VERSION
+
+# --- check that we can build modules at all
+AC_MSG_CHECKING([that modules can be built at all])
+LB_LINUX_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.])
+])
+])
+
+#
+# LB_LINUX_UML
+#
+# check for a uml kernel
+#
+AC_DEFUN([LB_LINUX_UML],
+[ARCH_UM=
+UML_CFLAGS=
+
+AC_MSG_CHECKING([if you are running user mode linux for $target_cpu])
+if test -e $LINUX/include/asm-um ; then
+       if test  X`ls -id $LINUX/include/asm/ 2>/dev/null | awk '{print [$]1}'` = X`ls -id $LINUX/include/asm-um 2>/dev/null | 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)
+])
+
+# these are like AC_TRY_COMPILE, but try to build modules against the
+# kernel, inside the build directory
+
+#
+# LB_LINUX_CONFTEST
+#
+# create a conftest.c file
+#
+AC_DEFUN([LB_LINUX_CONFTEST],
+[cat >conftest.c <<_ACEOF
+$1
+_ACEOF
+])
+
+#
+# LB_LINUX_COMPILE_IFELSE
+#
+# like AC_COMPILE_IFELSE
+#
+AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
+[m4_ifvaln([$1], [LB_LINUX_CONFTEST([$1])])dnl
+rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
+AS_IF([AC_TRY_COMMAND(cp conftest.c build && make [$2] CC="$CC" -f $PWD/build/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/build) >/dev/null && AC_TRY_COMMAND([$3])],
+       [$4],
+       [_AC_MSG_LOG_CONFTEST
+m4_ifvaln([$5],[$5])dnl])dnl
+rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.ko m4_ifval([$1], [build/conftest.c conftest.c])[]dnl
+])
+
+#
+# LB_LINUX_TRY_COMPILE
+#
+# like AC_TRY_COMPILE
+#
+AC_DEFUN([LB_LINUX_TRY_COMPILE],
+[LB_LINUX_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[$1]], [[$2]])],
+       [modules],
+       [test -s build/conftest.o],
+       [$3], [$4])])
+
+#
+# LB_LINUX_CONFIG
+#
+# check if a given config option is defined
+#
+AC_DEFUN([LB_LINUX_CONFIG],
+[AC_MSG_CHECKING([if Linux was built with CONFIG_$1])
+LB_LINUX_TRY_COMPILE([#include <linux/config.h>],[
+#ifndef CONFIG_$1
+#error CONFIG_$1 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
+#
+AC_DEFUN([LB_LINUX_TRY_MAKE],
+[LB_LINUX_COMPILE_IFELSE([AC_LANG_PROGRAM([[$1]], [[$2]])], [$3], [$4], [$5], [$6])])
+
+#
+# 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.])
+])
+
+LB_LINUX_CONFIG([MODVERSIONS])
+
+LB_LINUX_CONFIG([PREEMPT],[
+       AC_MSG_ERROR([Lustre does not support kernels with preempt enabled.])
+])
+
+LB_LINUX_CONFIG([KALLSYMS],[],[
+if test "x$ARCH_UM" = "x" ; then
+       AC_MSG_ERROR([Lustre requires that CONFIG_KALLSYMS is enabled in your kernel.])
+fi
+])
+
+# Portals tests
+LP_PROG_LINUX
+
+# Lustre tests
+LC_PROG_LINUX
+])
+
+#
+# LB_LINUX_STRUCT_PAGE_LIST
+#
+# 2.6.4 no longer has page->list
+#
+AC_DEFUN([LB_LINUX_STRUCT_PAGE_LIST],
+[AC_MSG_CHECKING([if struct page has a list field])
+LB_LINUX_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])
+])
+])
+
+#
+# LB_LINUX_STRUCT_SIGHAND
+#
+# red hat 2.4 adds sighand to struct task_struct
+#
+AC_DEFUN([LB_LINUX_STRUCT_SIGHAND],
+[AC_MSG_CHECKING([if task_struct has a sighand field])
+LB_LINUX_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])
+])
+])
+
+#
+# LB_LINUX_FUNC_CPU_ONLINE
+#
+# cpu_online is different in rh 2.4, vanilla 2.4, and 2.6
+#
+AC_DEFUN([LB_LINUX_FUNC_CPU_ONLINE],
+[AC_MSG_CHECKING([if kernel defines cpu_online()])
+LB_LINUX_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])
+])
+])
+
+#
+# LB_LINUX_TYPE_CPUMASK_T
+#
+# same goes for cpumask_t
+#
+AC_DEFUN([LB_LINUX_TYPE_CPUMASK_T],
+[AC_MSG_CHECKING([if kernel defines cpumask_t])
+LB_LINUX_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])
+])
+])
+
+#
+# LB_LINUX_FUNC_SHOW_TASK
+#
+# we export show_task(), but not all kernels have it (yet)
+#
+AC_DEFUN([LB_LINUX_FUNC_SHOW_TASK],
+[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
+])
+
+#
+# LB_LINUX_CONFIG_EXT3
+#
+# that ext3 is enabled in the kernel
+#
+AC_DEFUN([LB_LINUX_CONFIG_EXT3],
+[LB_LINUX_CONFIG([EXT3_FS],[],[
+       LB_LINUX_CONFIG([EXT3_FS_MODULE],[],[$2])
+])
+LB_LINUX_CONFIG([EXT3_FS_XATTR],[$1],[$3])
+])
+
+#
+# LB_LINUX_FSHOOKS
+#
+# If we have (and can build) fshooks.h
+#
+AC_DEFUN([LB_LINUX_FSHOOKS],
+[AC_MSG_CHECKING([if this compiler can build a SuSE 2.6 kernel])
+# an excerpt from fshooks.h, which doesn't build with fedora's gcc 3.4
+LB_LINUX_TRY_COMPILE([
+       /* for the lack of a kernel-wide definition */
+       typedef enum {
+               false,
+               true
+       } boolean_t __attribute__((__mode__(__QI__)));
+],[],[
+       AC_MSG_RESULT([yes])
+],[
+       AC_MSG_RESULT([no])
+       AC_MSG_WARN([We suggest trying gcc 3.3.x.])
+       AC_MSG_WARN([You can set CC=gcc33 before running configure.])
+       AC_MSG_ERROR([Your compiler cannot build a SuSE 2.6 kernel.])
+])
+AC_MSG_CHECKING([if fshooks are present])
+LB_LINUX_TRY_COMPILE([
+       #include <linux/fshooks.h>
+],[],[
+       AC_MSG_RESULT([yes])
+$1
+],[
+       AC_MSG_RESULT([no])
+$2
+])
+])
+
+#
+# LB_LINUX_STRUCT_KIOBUF
+#
+# rh 2.4.18 has iobuf->dovary, but other kernels do not
+#
+AC_DEFUN([LB_LINUX_STRUCT_KIOBUF],
+[AC_MSG_CHECKING([if struct kiobuf has a dovary field])
+LB_LINUX_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])
+])
+])
+
+#
+# LB_LINUX_FUNC_COND_RESCHED
+#
+# cond_resched() was introduced in 2.4.20
+#
+AC_DEFUN([LB_LINUX_FUNC_COND_RESCHED],
+[AC_MSG_CHECKING([if kernel offers cond_resched])
+LB_LINUX_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])
+])
+])
+
+#
+# LB_LINUX_FUNC_ZAP_PAGE_RANGE
+#
+# if zap_page_range() taks a vma arg
+#
+AC_DEFUN([LB_LINUX_FUNC_ZAP_PAGE_RANGE],
+[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
+])
+
+#
+# LB_LINUX_FUNC_PDE
+#
+# if proc_fs.h defines PDE()
+#
+AC_DEFUN([LB_LINUX_FUNC_PDE],
+[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
+])
+
+#
+# LB_LINUX_FUNC_DIRECT_IO
+#
+# if direct_IO takes a struct file argument
+#
+AC_DEFUN([LB_LINUX_FUNC_DIRECT_IO],
+[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
+])
+
+#
+# LB_LINUX_HEADER_MM_INLINE
+#
+# RHEL kernels define page_count in mm_inline.h
+#
+AC_DEFUN([LB_LINUX_HEADER_MM_INLINE],
+[AC_MSG_CHECKING([if kernel has mm_inline.h header])
+LB_LINUX_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])
+])
+])
+
+#
+# LB_LINUX_STRUCT_INODE
+#
+# if inode->i_alloc_sem exists
+#
+AC_DEFUN([LB_LINUX_STRUCT_INODE],
+[AC_MSG_CHECKING([if struct inode has i_alloc_sem])
+LB_LINUX_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])
+])
+])
diff --git a/build/autoconf/lustre-build.m4 b/build/autoconf/lustre-build.m4
new file mode 100644 (file)
index 0000000..6132eb6
--- /dev/null
@@ -0,0 +1,361 @@
+#
+# LB_CHECK_VERSION
+#
+# Verify that LUSTRE_VERSION was defined properly
+#
+AC_DEFUN([LB_CHECK_VERSION],
+[if test "LUSTRE_VERSION" = "LUSTRE""_VERSION" ; then
+       AC_MSG_ERROR([This script was not built with a version number.])
+fi
+])
+
+#
+# LB_PATH_LIBSYSIO
+#
+# Handle internal/external libsysio
+#
+AC_DEFUN([LB_PATH_LIBSYSIO],
+[AC_ARG_WITH([sysio],
+       AC_HELP_STRING([--with-sysio=path],
+                       [set path to libsysio source (default is included libsysio)]),
+       [],[with_sysio='yes'])
+AC_MSG_CHECKING([location of libsysio])
+case x$with_sysio in
+       xyes)
+               AC_MSG_RESULT([internal])
+               AC_CHECK_FILE([$srcdir/libsysio/src/rmdir.c],[],[
+                       AC_MSG_ERROR([A complete internal libsysio was not found.])
+               ])
+               AC_CONFIG_SUBDIRS(libsysio)
+               LIBSYSIO_SUBDIR="libsysio"
+               SYSIO='$(top_srcdir)/libsysio'
+               ;;
+       xno)
+               AC_MSG_RESULT([disabled])
+               ;;
+       *)
+               AC_MSG_RESULT([$with_sysio])
+               AC_CHECK_FILE([$with_sysio/src/libsysio.a],[],[
+                       AC_MSG_ERROR([A complete (built) external libsysio was not found.])
+               ])
+               SYSIO=$with_sysio
+               ;;
+esac
+AC_SUBST(LIBSYSIO_SUBDIR)
+AC_SUBST(SYSIO)
+])
+
+#
+# LB_PATH_CRAY_PORTALS
+#
+# Support for external Cray portals
+#
+AC_DEFUN([LB_PATH_CRAY_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
+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
+
+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])
+       CPPFLAGS="-I$CRAY_PORTALS_INCLUDES $CPPFLAGS"
+       EXTRA_KCFLAGS="-I-I$CRAY_PORTALS_INCLUDES $EXTRA_KCFLAGS"
+else
+       with_cray_portals=no
+fi
+AC_MSG_RESULT([$with_cray_portals])
+])
+
+#
+# LB_CONFIG_MODULES
+#
+# Build kernel modules?
+#
+AC_DEFUN([LB_CONFIG_MODULES],
+[AC_MSG_CHECKING([whether to build kernel modules])
+AC_ARG_ENABLE([modules],
+       AC_HELP_STRING([--disable-modules],
+                       [disable building of Lustre kernel modules]),
+       [],[
+               case $target_os in
+                       linux* | darwin)
+                               enable_modules='yes'
+                               ;;
+                       *)
+                               enable_modules='no'
+                               ;;
+               esac
+       ])
+AC_MSG_RESULT([$enable_modules ($target_os)])
+
+if test x$enable_modules = xyes ; then
+       case $target_os in
+               linux*)
+                       LB_PROG_LINUX
+                       ;;
+               darwin)
+                       LB_PROG_DARWIN
+                       ;;
+               *)
+                       AC_MSG_ERROR([Modules are not supported on $target_os])
+                       ;;
+       esac
+fi
+])
+
+#
+# LB_CONFIG_UTILS
+#
+# Build utils?
+#
+AC_DEFUN([LB_CONFIG_UTILS],
+[AC_MSG_CHECKING([whether to build utilities])
+AC_ARG_ENABLE([utils],
+       AC_HELP_STRING([--disable-utils],
+                       [disable building of Lustre utility programs])
+       [],[enable_utils='yes'])
+if test x$with_cray_portals = xyes ; then
+       enable_utils='no'
+fi
+AC_MSG_RESULT([$enable_utils])
+])
+
+#
+# LB_CONFIG_TESTS
+#
+# Build tests?
+#
+AC_DEFUN([LB_CONFIG_TESTS],
+[AC_MSG_CHECKING([whether to build Lustre tests])
+AC_ARG_ENABLE([tests],
+       AC_HELP_STRING([--disable-tests],
+                       [disable building of Lustre tests]),
+       [],[enable_tests='yes'])
+if test x$with_cray_portals = xyes ; then
+       enable_tests='no'
+fi
+AC_MSG_RESULT([$enable_tests])
+])
+
+#
+# LB_CONFIG_DOCS
+#
+# Build docs?
+#
+AC_DEFUN([LB_CONFIG_DOCS],
+[AC_MSG_CHECKING([whether to build docs])
+AC_ARG_ENABLE(doc,
+       AC_HELP_STRING([--disable-doc],
+                       [skip creation of pdf documentation]),
+       [
+               if test x$enable_doc = xyes ; then
+                   ENABLE_DOC=1           
+               else
+                   ENABLE_DOC=0
+               fi
+       ],[
+               ENABLE_DOC=0
+               enable_doc='no'
+       ])
+AC_MSG_RESULT([$enable_doc])
+AC_SUBST(ENABLE_DOC)
+])
+
+#
+# LB_CONFIG_INIT_SCRIPTS
+#
+# our init scripts only work on red hat linux
+#
+AC_DEFUN([LB_CONFIG_INIT_SCRIPTS],
+[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
+AC_SUBST(ENABLE_INIT_SCRIPTS)
+])
+
+#
+# LB_CONFIG_HEADERS
+#
+# add -include config.h
+#
+AC_DEFUN([LB_CONFIG_HEADERS],
+[AC_CONFIG_HEADERS([config.h])
+CPPFLAGS="-include \$(top_builddir)/config.h $CPPFLAGS"
+EXTRA_KCFLAGS="-include $PWD/config.h $EXTRA_KCFLAGS"
+AC_SUBST(EXTRA_KCFLAGS)
+])
+
+#
+# LB_INCLUDE_RULES
+#
+# defines for including the toplevel Rules
+#
+AC_DEFUN([LB_INCLUDE_RULES],
+[INCLUDE_RULES="include $PWD/build/Rules"
+AC_SUBST(INCLUDE_RULES)
+])
+
+#
+# LB_PATH_DEFAULTS
+#
+# 'fixup' default paths
+#
+AC_DEFUN([LB_PATH_DEFAULTS],
+[# directories for binaries
+AC_PREFIX_DEFAULT([/usr])
+
+sysconfdir='/etc'
+AC_SUBST(sysconfdir)
+
+# Directories for documentation and demos.
+docdir='${datadir}/doc/$(PACKAGE)'
+AC_SUBST(docdir)
+])
+
+#
+# LB_PROG_CC
+#
+# checks on the C compiler
+#
+AC_DEFUN([LB_PROG_CC],
+[AC_PROG_RANLIB
+AC_PROG_CC
+AC_MSG_CHECKING([for buggy compiler])
+CC_VERSION=`$CC -v 2>&1 | grep "^gcc version"`
+bad_cc() {
+       AC_MSG_RESULT([buggy compiler found!])
+       echo
+       echo "   '$CC_VERSION'"
+       echo "  has been known to generate bad code, "
+       echo "  please get an updated compiler."
+       AC_MSG_ERROR([sorry])
+}
+case "$CC_VERSION" in
+       "gcc version 2.95"*)
+               bad_cc
+               ;;
+       # ost_pack_niobuf putting 64bit NTOH temporaries on the stack
+       # without "sub    $0xc,%esp" to protect the stack from being
+       # stomped on by interrupts (bug 606)
+       "gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98)")
+               bad_cc
+               ;;
+       # mandrake's similar sub 0xc compiler bug
+       # http://marc.theaimsgroup.com/?l=linux-kernel&m=104748366226348&w=2
+       "gcc version 2.96 20000731 (Mandrake Linux 8.1 2.96-0.62mdk)")
+               bad_cc
+               ;;
+       *)
+               AC_MSG_RESULT([no known problems])
+               ;;
+esac
+
+# ---------  unsigned long long sane? -------
+AC_CHECK_SIZEOF(unsigned long long, 0)
+echo "---> size SIZEOF $SIZEOF_unsigned_long_long"
+echo "---> size SIZEOF $ac_cv_sizeof_unsigned_long_long"
+if test $ac_cv_sizeof_unsigned_long_long != 8 ; then
+        AC_MSG_ERROR([** we assume that sizeof(long long) == 8.  Tell phil@clusterfs.com])
+fi
+
+CPPFLAGS="-I\$(top_srcdir)/lustre/include -I\$(top_srcdir)/portals/include $CPPFLAGS"
+
+LLCPPFLAGS="-D__arch_lib__ -D_LARGEFILE64_SOURCE=1"
+AC_SUBST(LLCPPFLAGS)
+
+LLCFLAGS="-g -Wall -fPIC"
+AC_SUBST(LLCFLAGS)
+
+# everyone builds against portals and lustre
+EXTRA_KCFLAGS="-g -I$PWD/portals/include -I$PWD/lustre/include"
+AC_SUBST(EXTRA_KCFLAGS)
+])
+
+#
+# LB_CONTITIONALS
+#
+# AM_CONDITIONAL instances for everything
+# (so that portals/lustre can disable some if needed)
+AC_DEFUN([LB_CONDITIONALS],
+[AM_CONDITIONAL(MODULES, test x$enable_modules = xyes)
+AM_CONDITIONAL(UTILS, test x$enable_utils = xyes)
+AM_CONDITIONAL(TESTS, test x$enable_tests = xyes)
+AM_CONDITIONAL(DOC, test x$ENABLE_DOC = x1)
+AM_CONDITIONAL(INKERNEL, test x$enable_inkernel = xyes)
+AM_CONDITIONAL(LINUX25, test x$linux25 = xyes)
+AM_CONDITIONAL(CRAY_PORTALS, test x$with_cray_portals != xno)
+AM_CONDITIONAL(INIT_SCRIPTS, test x$ENABLE_INIT_SCRIPTS = "x1")
+
+LP_CONDITIONALS
+LC_CONDITIONALS
+])
+
+#
+# LB_CONFIG_FILES
+#
+# files that should be generated with AC_OUTPUT
+#
+AC_DEFUN([LB_CONFIG_FILES],
+[AC_CONFIG_FILES([
+build/autoMakefile
+build/Rules
+build/lustre.spec
+])
+
+LP_CONFIG_FILES
+LC_CONFIG_FILES
+])