From: jacob Date: Thu, 9 Dec 2004 19:34:54 +0000 (+0000) Subject: Split up configure thusly: X-Git-Tag: v1_7_100~1769 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=8663ba2dd34c8198798892d3cace181199b04eb4 Split up configure thusly: - 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 --- diff --git a/build/autoconf/configure.ac b/build/autoconf/configure.ac new file mode 100644 index 0000000..addd8456 --- /dev/null +++ b/build/autoconf/configure.ac @@ -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 index 0000000..15c3a9d --- /dev/null +++ b/build/autoconf/lustre-build-darwin.m4 @@ -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 index 0000000..2904dfd --- /dev/null +++ b/build/autoconf/lustre-build-linux.m4 @@ -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 ],[ +#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 +],[ + 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 +],[ + 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 +],[ + 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 +],[ + 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 +],[],[ + 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 +],[ + 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 +],[ + 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 +],[ + #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 + #include +],[ + #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 index 0000000..6132eb6 --- /dev/null +++ b/build/autoconf/lustre-build.m4 @@ -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 +])