openafs/acinclude.m4

2134 lines
63 KiB
Plaintext
Raw Normal View History

dnl This file contains the common configuration code which would
dnl otherwise be duplicated between configure and configure-libafs.
dnl
dnl NB: Because this code is a macro, references to positional shell
dnl parameters must be done like $[]1 instead of $1
AC_DEFUN([OPENAFS_CONFIGURE_COMMON],[
AH_BOTTOM([
#undef HAVE_RES_SEARCH
#undef STRUCT_SOCKADDR_HAS_SA_LEN
#if !defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)
# if ENDIANESS_IN_SYS_PARAM_H
# ifndef KERNEL
# include <sys/types.h>
# include <sys/param.h>
# if BYTE_ORDER == BIG_ENDIAN
# define WORDS_BIGENDIAN 1
# endif
# else
# if defined(AUTOCONF_FOUND_BIGENDIAN)
# define WORDS_BIGENDIAN 1
# else
# undef WORDS_BIGENDIAN
# endif
# endif
# else
# if defined(AUTOCONF_FOUND_BIGENDIAN)
# define WORDS_BIGENDIAN 1
# else
# undef WORDS_BIGENDIAN
# endif
# endif
#else
# if defined(__BIG_ENDIAN__)
# define WORDS_BIGENDIAN 1
# else
# undef WORDS_BIGENDIAN
# endif
#endif
#ifdef UKERNEL
/*
* Always use 64-bit file offsets for UKERNEL code. Needed for UKERNEL stuff to
* play nice with some other interfaces like FUSE. We technically only would
* need to define this when building for such interfaces, but set it always to
* try and reduce potential confusion.
*/
# define _FILE_OFFSET_BITS 64
# define AFS_CACHE_VNODE_PATH
#endif
#undef AFS_NAMEI_ENV
#undef BITMAP_LATER
#undef FAST_RESTART
#undef DEFINED_FOR_EACH_PROCESS
#undef DEFINED_PREV_TASK
#undef EXPORTED_SYS_CALL_TABLE
#undef EXPORTED_IA32_SYS_CALL_TABLE
#undef IRIX_HAS_MEM_FUNCS
#undef RECALC_SIGPENDING_TAKES_VOID
#undef STRUCT_FS_HAS_FS_ROLLED
#undef ssize_t
/* glue for RedHat kernel bug */
#undef ENABLE_REDHAT_BUILDSYS
#if defined(ENABLE_REDHAT_BUILDSYS) && defined(KERNEL) && defined(REDHAT_FIX)
# include "redhat-fix.h"
#endif])
AC_CANONICAL_HOST
SRCDIR_PARENT=`pwd`
#BOZO_SAVE_CORES pam
dnl System identity.
AC_ARG_WITH([afs-sysname],
[AS_HELP_STRING([--with-afs-sysname=sys], [use sys for the afs sysname])
])
dnl General feature options.
AC_ARG_ENABLE([namei-fileserver],
[AS_HELP_STRING([--enable-namei-fileserver],
[force compilation of namei fileserver in preference to inode
fileserver])],
[],
[enable_namei_fileserver="default"])
AC_ARG_ENABLE([supergroups],
[AS_HELP_STRING([--enable-supergroups],
[enable support for nested pts groups])],
[],
[enable_supergroups="no"])
AC_ARG_ENABLE([bitmap-later],
[AS_HELP_STRING([--enable-bitmap-later],
[enable fast startup of file server by not reading bitmap till
needed])],
[AS_IF([test x"$withval" = xyes],
[AC_MSG_WARN([bitmap-later is only used by non-demand-attach
fileservers. Please migrate to demand-attach instead.])])],
[enable_bitmap_later="no"])
AC_ARG_ENABLE([unix-sockets],
[AS_HELP_STRING([--disable-unix-sockets],
[disable use of unix domain sockets for fssync (defaults to enabled)])],
[],
[enable_unix_sockets="yes"])
AC_ARG_ENABLE([tivoli-tsm],
[AS_HELP_STRING([--enable-tivoli-tsm],
[enable use of the Tivoli TSM API libraries for butc support])],
[],
[enable_tivoli_tsm="no"])
AC_ARG_ENABLE([pthreaded-ubik],
[AS_HELP_STRING([--disable-pthreaded-ubik],
[disable installation of pthreaded ubik applications (defaults to
enabled)])],
[],
[enable_pthreaded_ubik="yes"])
AC_ARG_ENABLE([ubik-read-while-write],
[AS_HELP_STRING([--enable-ubik-read-while-write],
[enable vlserver read from db cache during write locks (EXPERIMENTAL)])],
[],
[enable_ubik_read_while_write="no"])
dnl Kernel module build options.
AC_ARG_WITH([linux-kernel-headers],
[AS_HELP_STRING([--with-linux-kernel-headers=path],
[use the kernel headers found at path (optional, defaults to
/lib/modules/`uname -r`/build, then /lib/modules/`uname -r`/source,
then /usr/src/linux-2.4, and lastly /usr/src/linux)])
])
AC_ARG_WITH([linux-kernel-build],
[AS_HELP_STRING([--with-linux-kernel-build=path],
[use the kernel build found at path(optional, defaults to
kernel headers path)]
)])
AC_ARG_WITH([bsd-kernel-headers],
[AS_HELP_STRING([--with-bsd-kernel-headers=path],
[use the kernel headers found at path (optional, defaults to
/usr/src/sys)])
])
AC_ARG_WITH([bsd-kernel-build],
[AS_HELP_STRING([--with-bsd-kernel-build=path],
[use the kernel build found at path (optional, defaults to
KSRC/i386/compile/GENERIC)])
])
AC_ARG_WITH([linux-kernel-packaging],
[AS_HELP_STRING([--with-linux-kernel-packaging],
[use standard naming conventions to aid Linux kernel build packaging
(disables MPS, sets the kernel module name to openafs.ko, and
installs kernel modules into the standard Linux location)])],
[AC_SUBST([LINUX_KERNEL_PACKAGING], [yes])
AC_SUBST([LINUX_LIBAFS_NAME], [openafs])],
[AC_SUBST([LINUX_LIBAFS_NAME], [libafs])
])
AC_ARG_ENABLE([kernel-module],
[AS_HELP_STRING([--disable-kernel-module],
[disable compilation of the kernel module (defaults to enabled)])],
[],
[enable_kernel_module="yes"])
AC_ARG_ENABLE([redhat-buildsys],
[AS_HELP_STRING([--enable-redhat-buildsys],
[enable compilation of the redhat build system kernel (defaults to
disabled)])],
[],
[enable_redhat_buildsys="no"])
dnl Installation locations.
AC_ARG_ENABLE([transarc-paths],
[AS_HELP_STRING([--enable-transarc-paths],
[use Transarc style paths like /usr/afs and /usr/vice])],
[],
[enable_transarc_paths="no"])
dnl Deprecated crypto
AC_ARG_ENABLE([kauth],
[AS_HELP_STRING([--enable-kauth],
[install the deprecated kauth server, pam modules, and utilities
(defaults to disabled)])],
[enable_pam="yes"],
[enable_kauth="no"
enable_pam="no"])
dnl Optimization and debugging flags.
AC_ARG_ENABLE([strip-binaries],
[AS_HELP_STRING([--disable-strip-binaries],
[disable stripping of symbol information from binaries (defaults to
enabled)])],
[],
[enable_strip_binaries="maybe"])
AC_ARG_ENABLE([debug],
[AS_HELP_STRING([--enable-debug],
[enable compilation of the user space code with debugging information
(defaults to disabled)])],
[],
[enable_debug="no"])
AC_ARG_ENABLE([optimize],
[AS_HELP_STRING([--disable-optimize],
[disable optimization for compilation of the user space code (defaults
to enabled)])],
[],
[enable_optimize="yes"])
AC_ARG_ENABLE([warnings],
[AS_HELP_STRING([--enable-warnings],
[enable compilation warnings when building with gcc (defaults to
disabled)])],
[],
[enable_warnings="no"])
AC_ARG_ENABLE([checking],
[AS_HELP_STRING([--enable-checking],
[turn compilation warnings into errors when building with gcc (defaults
to disabled)])],
[enable_checking="$enableval"],
[enable_checking="no"])
AC_ARG_ENABLE([debug-locks],
[AS_HELP_STRING([--enable-debug-locks],
[turn on lock debugging assertions (defaults to disabled)])],
[enable_debug_locks="$enableval"],
[enable_debug_locks="no"])
AC_ARG_ENABLE([debug-kernel],
[AS_HELP_STRING([--enable-debug-kernel],
[enable compilation of the kernel module with debugging information
(defaults to disabled)])],
[],
[enable_debug_kernel="no"])
AC_ARG_ENABLE([optimize-kernel],
[AS_HELP_STRING([--disable-optimize-kernel],
[disable compilation of the kernel module with optimization (defaults
based on platform)])],
[],
[enable_optimize_kernel=""])
AC_ARG_ENABLE([debug-lwp],
[AS_HELP_STRING([--enable-debug-lwp],
[enable compilation of the LWP code with debugging information
(defaults to disabled)])],
[],
[enable_debug_lwp="no"])
AC_ARG_ENABLE([optimize-lwp],
[AS_HELP_STRING([--disable-optimize-lwp],
[disable optimization for compilation of the LWP code (defaults to
enabled)])],
[],
[enable_optimize_lwp="yes"])
AC_ARG_ENABLE([debug-pam],
[AS_HELP_STRING([--enable-debug-pam],
[enable compilation of the PAM code with debugging information
(defaults to disabled)])],
[],
[enable_debug_pam="no"])
AC_ARG_ENABLE([optimize-pam],
[AS_HELP_STRING([--disable-optimize-pam],
[disable optimization for compilation of the PAM code (defaults to
enabled)])],
[],
[enable_optimize_pam="yes"])
AC_ARG_ENABLE([linux-syscall-probing],
[AS_HELP_STRING([--enable-linux-syscall-probing],
[enable Linux syscall probing (defaults to autodetect)])],
[],
[enable_linux_syscall_probing="maybe"])
AC_ARG_ENABLE([linux-d_splice_alias-extra-iput],
[AS_HELP_STRING([--enable-linux-d_splice_alias-extra-iput],
[Linux kernels in the 3.17 series prior to 3.17.3 had a bug
wherein error returns from the d_splice_alias() function were
leaking a reference on the inode. The bug was fixed for the
3.17.3 kernel, and the possibility of an error return was only
introduced in kernel 3.17, so only the narrow range of kernels
is affected. Enable this option for builds on systems with
kernels affected by this bug, to manually release the reference
on error returns and correct the reference counting.
Linux commit 51486b900ee92856b977eacfc5bfbe6565028070 (or
equivalent) is the fix for the upstream bug, so if such a commit
is present, leave this option disabled. We apologize
that you are required to know this about your running kernel,
but luckily only a narrow range of versions is affected.])],
[],
[enable_linux_d_splice_alias_extra_iput="no"])
AC_ARG_WITH([crosstools-dir],
[AS_HELP_STRING([--with-crosstools-dir=path],
[use path for native versions of rxgen, compile_et and config])
])
AC_ARG_WITH([xslt-processor],
AS_HELP_STRING([--with-xslt-processor=ARG],
[which XSLT processor to use (possible choices are: libxslt, saxon, xalan-j, xsltproc)]),
[XSLTPROC="$withval"],
[AC_CHECK_PROGS([XSLTPROC], [libxslt saxon xalan-j xsltproc], [echo])])
AC_ARG_WITH([html-xsl],
AS_HELP_STRING([--with-html-xsl],
[build HTML documentation using this stylesheet (default is html/chunk.dsl; specify either html/chunk.xsl or html/docbook.xsl)]),
[HTML_XSL="$withval"],
[HTML_XSL="html/chunk.xsl"])
AC_ARG_WITH([docbook2pdf],
AS_HELP_STRING([--with-docbook2pdf=ARG],
[which Docbook to PDF utility to use (possible choices are: fop, dblatex, docbook2pdf)]),
[DOCBOOK2PDF="$withval"],
[AC_CHECK_PROGS([DOCBOOK2PDF], [fop dblatex docbook2pdf], [echo])])
AC_ARG_WITH([docbook-stylesheets],
AS_HELP_STRING([--with-docbook-stylesheets=ARG],
[location of DocBook stylesheets (default is to search a set of likely paths)]),
[DOCBOOK_STYLESHEETS="$withval"],
[OPENAFS_SEARCH_DIRLIST([DOCBOOK_STYLESHEETS],
[/usr/share/xml/docbook/stylesheet/nwalsh/current \
/usr/share/xml/docbook/stylesheet/nwalsh \
/usr/share/xml/docbook/xsl-stylesheets \
/usr/share/sgml/docbook/docbook-xsl-stylesheets \
/usr/share/sgml/docbook/xsl-stylesheets \
/usr/share/docbook-xsl \
/usr/share/sgml/docbkxsl \
/usr/local/share/xsl/docbook \
/sw/share/xml/xsl/docbook-xsl \
/opt/local/share/xsl/docbook-xsl],
[$HTML_XSL])
AS_IF([test "x$DOCBOOK_STYLESHEETS" = "x"],
[AC_WARN([Docbook stylesheets not found; some documentation can't be built])
])
])
AC_ARG_WITH([dot],
AS_HELP_STRING([--with-dot@<:@=PATH@:>@],
[use graphviz dot to generate dependency graphs with doxygen (defaults to autodetect)]),
[], [with_dot="maybe"])
enable_login="no"
dnl Check whether kindlegen exists. If not, we'll suppress that part of the
dnl documentation build.
AC_CHECK_PROGS([KINDLEGEN], [kindlegen])
AC_CHECK_PROGS([DOXYGEN], [doxygen])
dnl Optionally generate graphs with doxygen.
case "$with_dot" in
maybe)
AC_CHECK_PROGS([DOT], [dot])
AS_IF([test "x$DOT" = "x"], [HAVE_DOT="no"], [HAVE_DOT="yes"])
;;
yes)
HAVE_DOT="yes"
;;
no)
HAVE_DOT="no"
;;
*)
HAVE_DOT="yes"
DOT_PATH=$with_dot
esac
AC_SUBST(HAVE_DOT)
AC_SUBST(DOT_PATH)
dnl Checks for UNIX variants.
AC_ISC_POSIX
dnl Various compiler setup.
AC_TYPE_PID_T
AC_TYPE_SIZE_T
dnl Checks for programs.
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_RANLIB
AC_PROG_YACC
AM_PROG_LEX
dnl if we are flex, be lex-compatible
OPENAFS_LEX_IS_FLEX([AC_SUBST([LEX], ["$LEX -l"])])
OPENAFS_FORCE_ABS_INSTALL
OPENAFS_CHECK_BIGENDIAN
OPENAFS_PRINTF_TAKES_Z_LEN
AC_MSG_CHECKING(your OS)
system=$host
case $system in
*-linux*)
MKAFS_OSTYPE=LINUX
if test "x$enable_redhat_buildsys" = "xyes"; then
AC_DEFINE(ENABLE_REDHAT_BUILDSYS, 1, [define if you have redhat buildsystem])
fi
if test "x$enable_kernel_module" = "xyes"; then
if test "x$with_linux_kernel_headers" != "x"; then
LINUX_KERNEL_PATH="$with_linux_kernel_headers"
else
for utsdir in "/lib/modules/`uname -r`/build" \
"/lib/modules/`uname -r`/source" \
"/usr/src/linux-2.4" \
"/usr/src/linux"; do
LINUX_KERNEL_PATH="$utsdir"
for utsfile in "include/generated/utsrelease.h" \
"include/linux/utsrelease.h" \
"include/linux/version.h" \
"include/linux/version-up.h"; do
if grep "UTS_RELEASE" "$utsdir/$utsfile" >/dev/null 2>&1; then
break 2
fi
done
done
fi
if test "x$with_linux_kernel_build" != "x"; then
LINUX_KERNEL_BUILD="$with_linux_kernel_build"
else
LINUX_KERNEL_BUILD=$LINUX_KERNEL_PATH
fi
if test -f "$LINUX_KERNEL_BUILD/include/generated/utsrelease.h"; then
linux_kvers=`fgrep UTS_RELEASE $LINUX_KERNEL_BUILD/include/generated/utsrelease.h |awk 'BEGIN { FS="\"" } { print $[]2 }'|tail -n 1`
LINUX_VERSION="$linux_kvers"
else
if test -f "$LINUX_KERNEL_BUILD/include/linux/utsrelease.h"; then
linux_kvers=`fgrep UTS_RELEASE $LINUX_KERNEL_BUILD/include/linux/utsrelease.h |awk 'BEGIN { FS="\"" } { print $[]2 }'|tail -n 1`
LINUX_VERSION="$linux_kvers"
else
if test -f "$LINUX_KERNEL_BUILD/include/linux/version.h"; then
linux_kvers=`fgrep UTS_RELEASE $LINUX_KERNEL_BUILD/include/linux/version.h |awk 'BEGIN { FS="\"" } { print $[]2 }'|tail -n 1`
if test "x$linux_kvers" = "x"; then
if test -f "$LINUX_KERNEL_BUILD/include/linux/version-up.h"; then
linux_kvers=`fgrep UTS_RELEASE $LINUX_KERNEL_BUILD/include/linux/version-up.h |awk 'BEGIN { FS="\"" } { print $[]2 }'|tail -n 1`
if test "x$linux_kvers" = "x"; then
AC_MSG_ERROR(Linux headers lack version definition [2])
exit 1
else
LINUX_VERSION="$linux_kvers"
fi
else
AC_MSG_ERROR(Linux headers lack version definition)
exit 1
fi
else
LINUX_VERSION="$linux_kvers"
fi
else
enable_kernel_module="no"
fi
fi
fi
if test ! -f "$LINUX_KERNEL_BUILD/include/generated/autoconf.h" &&
test ! -f "$LINUX_KERNEL_BUILD/include/linux/autoconf.h"; then
enable_kernel_module="no"
fi
if test "x$enable_kernel_module" = "xno"; then
if test "x$with_linux_kernel_headers" != "x"; then
AC_MSG_ERROR(No usable linux headers found at $LINUX_KERNEL_PATH)
exit 1
else
AC_MSG_WARN(No usable linux headers found at $LINUX_KERNEL_PATH so disabling kernel module)
fi
fi
dnl do we need to determine SUBARCH from autoconf.h
SUBARCH=default
fi
AC_MSG_RESULT(linux)
GUESS_LINUX_VERSION=
if test "x$enable_kernel_module" = "xyes"; then
GUESS_LINUX_VERSION=${LINUX_VERSION}
else
GUESS_LINUX_VERSION=`uname -r`
fi
case "$GUESS_LINUX_VERSION" in
2.2.*) AFS_SYSKVERS=22 ;;
2.4.*) AFS_SYSKVERS=24 ;;
[2.6.* | [3-9]* | [1-2][0-9]*]) AFS_SYSKVERS=26 ;;
*) AC_MSG_ERROR(Couldn't guess your Linux version [2]) ;;
esac
;;
*-solaris*)
MKAFS_OSTYPE=SOLARIS
AC_MSG_RESULT(sun4)
SOLARIS_PATH_CC
SOLARIS_CC_TAKES_XVECTOR_NONE
AC_SUBST(SOLARIS_CC_KOPTS)
SOLARIS_UFSVFS_HAS_DQRWLOCK
SOLARIS_FS_HAS_FS_ROLLED
SOLARIS_SOLOOKUP_TAKES_SOCKPARAMS
SOLARIS_HAVE_VN_RENAMEPATH
;;
*-sunos*)
MKAFS_OSTYPE=SUNOS
enable_kernel_module=no
AC_MSG_RESULT(sun4)
;;
*-hpux*)
MKAFS_OSTYPE=HPUX
AC_MSG_RESULT(hp_ux)
if test -f "/usr/old/usr/include/ndir.h"; then
AC_DEFINE(HAVE_USR_OLD_USR_INCLUDE_NDIR_H, 1, [define if you have old ndir.h])
fi
;;
*-irix*)
if test -d /usr/include/sys/SN/SN1; then
IRIX_BUILD_IP35="IP35"
fi
MKAFS_OSTYPE=IRIX
AC_MSG_RESULT(sgi)
;;
*-aix*)
MKAFS_OSTYPE=AIX
AC_MSG_RESULT(rs_aix)
;;
arm-*-darwin*)
MKAFS_OSTYPE=DARWIN
AC_MSG_RESULT(arm_darwin)
;;
powerpc-*-darwin*)
MKAFS_OSTYPE=DARWIN
AC_MSG_RESULT(ppc_darwin)
;;
i386-*-darwin*)
MKAFS_OSTYPE=DARWIN
AC_MSG_RESULT(x86_darwin)
;;
x86_64-*-darwin*)
MKAFS_OSTYPE=DARWIN
AC_MSG_RESULT(x86_darwin)
;;
i386-*-freebsd*)
MKAFS_OSTYPE=FBSD
AC_MSG_RESULT(i386_fbsd)
;;
x86_64-*-freebsd*)
MKAFS_OSTYPE=FBSD
AC_MSG_RESULT(amd64_fbsd)
;;
*-netbsd*)
MKAFS_OSTYPE=NBSD
AC_MSG_RESULT(nbsd)
;;
x86_64-*-openbsd*)
MKAFS_OSTYPE=OBSD
AC_MSG_RESULT(amd64_obsd)
;;
i386-*-openbsd*)
MKAFS_OSTYPE=OBSD
AC_MSG_RESULT(i386_obsd)
;;
*-dragonfly*)
MKAFS_OSTYPE=DFBSD
AC_MSG_RESULT(i386_dfbsd)
;;
*)
AC_MSG_RESULT($system)
;;
esac
if test "x$with_afs_sysname" != "x"; then
AFS_SYSNAME="$with_afs_sysname"
else
AC_MSG_CHECKING(your AFS sysname)
case $host in
i?86-*-openbsd?.?)
v=${host#*openbsd}
vM=${v%.*}
vm=${v#*.}
AFS_SYSNAME="i386_obsd${vM}${vm}"
;;
sparc64-*-openbsd?.?)
v=${host#*openbsd}
vM=${v%.*}
vm=${v#*.}
AFS_SYSNAME="sparc64_obsd${vM}${vm}"
;;
x86_64-*-openbsd?.?)
v=${host#*openbsd}
vM=${v%.*}
vm=${v#*.}
AFS_SYSNAME="amd64_obsd${vM}${vm}"
;;
i?86-*-freebsd*.*)
v=${host#*freebsd}
vM=${v%.*}
vm=${v#*.}
AFS_SYSNAME="i386_fbsd_${vM}${vm}"
;;
x86_64-*-freebsd*.*)
v=${host#*freebsd}
vM=${v%.*}
vm=${v#*.}
AFS_SYSNAME="amd64_fbsd_${vM}${vm}"
;;
i386-*-dragonfly?.*)
v=${host#*dragonfly}
vM=${v%.*}
vm=${v#*.}
AFS_SYSNAME="i386_dfbsd_${vM}${vm}"
;;
i?86-*-netbsd*1.6[[M-Z]]*)
AFS_SYSNAME="i386_nbsd20"
;;
powerpc-*-netbsd*1.6[[M-Z]]*)
AFS_SYSNAME="ppc_nbsd20"
;;
*-*-netbsd*)
arch=${host%%-unknown*}
arch=$(echo $arch |sed -e 's/x86_64/amd64/g' \
-e 's/powerpc/ppc/g')
v=${host#*netbsd}
v=${v#*aout}
v=${v#*ecoff}
v=${v#*elf}
vM=${v%%.*}
vM=${vM%.*}
v=${v#*.}
vm=${v%%.*}
vm=${vm%.*}
vm=${vm%%[[_A-Z]]*}
if test $vm -eq 99 ; then
vM=$((vM+1))
fi
if test $vM -gt 1 ; then
vm=0
fi
AFS_SYSNAME="${arch}_nbsd${vM}${vm}"
;;
2003-03-10 20:02:35 +00:00
hppa*-hp-hpux11.0*)
AFS_SYSNAME="hp_ux110"
;;
2003-03-10 20:02:35 +00:00
hppa*-hp-hpux11.11)
AFS_SYSNAME="hp_ux11i"
;;
hppa*-hp-hpux11.23)
AFS_SYSNAME="hp_ux1123"
;;
ia64-hp-hpux11.22)
AFS_SYSNAME="ia64_hpux1122"
;;
ia64-hp-hpux*)
AFS_SYSNAME="ia64_hpux1123"
;;
hppa*-hp-hpux10*)
AFS_SYSNAME="hp_ux102"
;;
powerpc-apple-darwin7*)
AFS_SYSNAME="ppc_darwin_70"
OSXSDK="macosx10.3"
;;
powerpc-apple-darwin8.*)
AFS_SYSNAME="ppc_darwin_80"
OSXSDK="macosx10.4"
;;
i386-apple-darwin8.*)
AFS_SYSNAME="x86_darwin_80"
OSXSDK="macosx10.4"
;;
powerpc-apple-darwin9.*)
AFS_SYSNAME="ppc_darwin_90"
OSXSDK="macosx10.5"
;;
i386-apple-darwin9.*)
AFS_SYSNAME="x86_darwin_90"
OSXSDK="macosx10.5"
;;
i?86-apple-darwin10.*)
AFS_SYSNAME="x86_darwin_100"
OSXSDK="macosx10.6"
;;
x86_64-apple-darwin10.*)
AFS_SYSNAME="x86_darwin_100"
OSXSDK="macosx10.6"
;;
arm-apple-darwin10.*)
AFS_SYSNAME="arm_darwin_100"
OSXSDK="iphoneos4.0"
;;
x86_64-apple-darwin11.*)
AFS_SYSNAME="x86_darwin_110"
OSXSDK="macosx10.7"
;;
i?86-apple-darwin11.*)
AFS_SYSNAME="x86_darwin_110"
OSXSDK="macosx10.7"
;;
x86_64-apple-darwin12.*)
AFS_SYSNAME="x86_darwin_120"
OSXSDK="macosx10.8"
;;
i?86-apple-darwin12.*)
AFS_SYSNAME="x86_darwin_120"
OSXSDK="macosx10.8"
;;
x86_64-apple-darwin13.*)
AFS_SYSNAME="x86_darwin_130"
OSXSDK="macosx10.9"
;;
i?86-apple-darwin13.*)
AFS_SYSNAME="x86_darwin_130"
OSXSDK="macosx10.9"
;;
x86_64-apple-darwin14.*)
AFS_SYSNAME="x86_darwin_140"
OSXSDK="macosx10.10"
;;
i?86-apple-darwin14.*)
AFS_SYSNAME="x86_darwin_140"
OSXSDK="macosx10.10"
;;
x86_64-apple-darwin15.*)
AFS_SYSNAME="x86_darwin_150"
OSXSDK="macosx10.11"
;;
i?86-apple-darwin15.*)
AFS_SYSNAME="x86_darwin_150"
OSXSDK="macosx10.11"
;;
x86_64-apple-darwin16.*)
AFS_SYSNAME="x86_darwin_160"
OSXSDK="macosx10.12"
;;
i?86-apple-darwin16.*)
AFS_SYSNAME="x86_darwin_160"
OSXSDK="macosx10.12"
;;
x86_64-apple-darwin17.*)
AFS_SYSNAME="x86_darwin_170"
OSXSDK="macosx10.13"
;;
i?86-apple-darwin17.*)
AFS_SYSNAME="x86_darwin_170"
OSXSDK="macosx10.13"
;;
sparc-sun-solaris2.8)
AFS_SYSNAME="sun4x_58"
;;
sparc-sun-solaris2.9)
AFS_SYSNAME="sun4x_59"
;;
sparc-sun-solaris2.10)
AFS_SYSNAME="sun4x_510"
;;
sparc-sun-solaris2.11)
AFS_SYSNAME="sun4x_511"
;;
i386-pc-solaris2.8)
AFS_SYSNAME="sunx86_58"
;;
i386-pc-solaris2.9)
AFS_SYSNAME="sunx86_59"
;;
i386-pc-solaris2.10)
AFS_SYSNAME="sunx86_510"
;;
i386-pc-solaris2.11)
AFS_SYSNAME="sunx86_511"
;;
alpha*-dec-osf4.0*)
AFS_SYSNAME="alpha_dux40"
;;
alpha*-dec-osf5.0*)
AFS_SYSNAME="alpha_dux50"
;;
alpha*-dec-osf5.1*)
AFS_SYSNAME="alpha_dux51"
;;
mips-sgi-irix6.5)
AFS_SYSNAME="sgi_65"
enable_pam="no"
;;
ia64-*-linux*)
AFS_SYSNAME="ia64_linuxXX"
;;
powerpc-*-linux*)
AFS_SYSNAME="`/bin/arch`_linuxXX"
;;
powerpc64-*-linux*)
AFS_SYSNAME="ppc64_linuxXX"
;;
alpha*-linux*)
AFS_SYSNAME="alpha_linux_XX"
;;
s390-*-linux*)
AFS_SYSNAME="s390_linuxXX"
;;
s390x-*-linux*)
AFS_SYSNAME="s390x_linuxXX"
;;
sparc-*-linux*)
AFS_SYSNAME="`/bin/arch`_linuxXX"
;;
sparc64-*-linux*)
AFS_SYSNAME="sparc64_linuxXX"
;;
i?86-*-linux*)
AFS_SYSNAME="i386_linuxXX"
;;
arm*-linux*)
AFS_SYSNAME="arm_linuxXX"
;;
parisc-*-linux-gnu|hppa-*-linux-gnu)
AFS_SYSNAME="parisc_linuxXX"
enable_pam="no"
;;
power*-ibm-aix4.2*)
AFS_SYSNAME="rs_aix42"
enable_pam="no"
;;
power*-ibm-aix4.3*)
AFS_SYSNAME="rs_aix42"
enable_pam="no"
;;
power*-ibm-aix5.1*)
AFS_SYSNAME="rs_aix51"
enable_pam="no"
;;
power*-ibm-aix5.2*)
AFS_SYSNAME="rs_aix52"
enable_pam="no"
;;
2005-04-19 17:50:25 +01:00
power*-ibm-aix5.3*)
AFS_SYSNAME="rs_aix53"
enable_pam="no"
;;
power*-ibm-aix6.1*)
AFS_SYSNAME="rs_aix61"
enable_pam="no"
;;
x86_64-*-linux-gnu)
AFS_SYSNAME="amd64_linuxXX"
enable_pam="yes"
;;
*)
AC_MSG_ERROR(An AFS sysname is required)
exit 1
;;
esac
case $AFS_SYSNAME in
*_linux* | *_umlinux*)
if test "x${AFS_SYSKVERS}" = "x"; then
AC_MSG_ERROR(Couldn't guess your Linux version. Please use the --with-afs-sysname option to configure an AFS sysname.)
fi
if test "x${AFS_SYSKVERS}" = "x24" ||
test "x${AFS_SYSKVERS}" = "x22"; then
AC_MSG_ERROR([Linux 2.4.x and older are no longer supported by OpenAFS. Please use an OpenAFS 1.6.x release on those systems.])
fi
_AFS_SYSNAME=`echo $AFS_SYSNAME|sed s/XX\$/$AFS_SYSKVERS/`
AFS_SYSNAME="$_AFS_SYSNAME"
AC_TRY_KBUILD(
[],
[#ifndef CONFIG_USERMODE
#error not UML
#endif],
ac_cv_linux_is_uml=yes,)
if test "${ac_cv_linux_is_uml}" = yes; then
_AFS_SYSNAME=`echo $AFS_SYSNAME|sed s/linux/umlinux/`
fi
AFS_SYSNAME="$_AFS_SYSNAME"
;;
esac
AC_MSG_RESULT($AFS_SYSNAME)
fi
case $AFS_SYSNAME in
*_darwin*)
AC_CHECK_HEADERS(crt_externs.h)
DARWIN_PLIST=src/libafs/afs.${AFS_SYSNAME}.plist
DARWIN_INFOFILE=afs.${AFS_SYSNAME}.plist
AC_SUBST(OSXSDK)
;;
esac
dnl Some hosts have a separate common param file they should include. Figure
dnl out if we're on one of them now that we know the sysname.
case $AFS_SYSNAME in
*_nbsd15) AFS_PARAM_COMMON=param.nbsd15.h ;;
*_nbsd16) AFS_PARAM_COMMON=param.nbsd16.h ;;
*_nbsd20) AFS_PARAM_COMMON=param.nbsd20.h ;;
*_nbsd21) AFS_PARAM_COMMON=param.nbsd21.h ;;
*_nbsd30) AFS_PARAM_COMMON=param.nbsd30.h ;;
*_nbsd40) AFS_PARAM_COMMON=param.nbsd40.h ;;
*_nbsd50) AFS_PARAM_COMMON=param.nbsd50.h ;;
*_nbsd60) AFS_PARAM_COMMON=param.nbsd60.h ;;
*_nbsd70) AFS_PARAM_COMMON=param.nbsd70.h ;;
*_obsd31) AFS_PARAM_COMMON=param.obsd31.h ;;
*_obsd32) AFS_PARAM_COMMON=param.obsd32.h ;;
*_obsd33) AFS_PARAM_COMMON=param.obsd33.h ;;
*_obsd34) AFS_PARAM_COMMON=param.obsd34.h ;;
*_obsd35) AFS_PARAM_COMMON=param.obsd35.h ;;
*_obsd36) AFS_PARAM_COMMON=param.obsd36.h ;;
*_obsd37) AFS_PARAM_COMMON=param.obsd37.h ;;
*_obsd38) AFS_PARAM_COMMON=param.obsd38.h ;;
*_obsd39) AFS_PARAM_COMMON=param.obsd39.h ;;
*_obsd40) AFS_PARAM_COMMON=param.obsd40.h ;;
*_obsd41) AFS_PARAM_COMMON=param.obsd41.h ;;
*_obsd42) AFS_PARAM_COMMON=param.obsd42.h ;;
*_obsd43) AFS_PARAM_COMMON=param.obsd43.h ;;
*_obsd44) AFS_PARAM_COMMON=param.obsd44.h ;;
*_obsd45) AFS_PARAM_COMMON=param.obsd45.h ;;
*_obsd46) AFS_PARAM_COMMON=param.obsd46.h ;;
*_obsd47) AFS_PARAM_COMMON=param.obsd47.h ;;
*_obsd48) AFS_PARAM_COMMON=param.obsd48.h ;;
*_obsd49) AFS_PARAM_COMMON=param.obsd49.h ;;
*_obsd50) AFS_PARAM_COMMON=param.obsd50.h ;;
*_obsd51) AFS_PARAM_COMMON=param.obsd51.h ;;
*_obsd52) AFS_PARAM_COMMON=param.obsd52.h ;;
*_obsd53) AFS_PARAM_COMMON=param.obsd53.h ;;
*_obsd54) AFS_PARAM_COMMON=param.obsd54.h ;;
*_linux26) AFS_PARAM_COMMON=param.linux26.h ;;
# Linux alpha adds an extra underscore for no good reason.
*_linux_26) AFS_PARAM_COMMON=param.linux26.h ;;
*_fbsd_*) AFS_PARAM_COMMON=param.generic_fbsd.h ;;
esac
OPENAFS_OSCONF
case $AFS_SYSNAME in *_linux* | *_umlinux*)
# Add (sub-) architecture-specific paths needed by conftests
case $AFS_SYSNAME in
*_umlinux26)
UMLINUX26_FLAGS="-I$LINUX_KERNEL_PATH/arch/um/include"
UMLINUX26_FLAGS="$UMLINUX26_FLAGS -I$LINUX_KERNEL_PATH/arch/um/kernel/tt/include"
UMLINUX26_FLAGS="$UMLINUX26_FLAGS -I$LINUX_KERNEL_PATH/arch/um/kernel/skas/include"
CPPFLAGS="$CPPFLAGS $UMLINUX26_FLAGS"
esac
if test "x$enable_kernel_module" = "xyes"; then
if test "x$enable_debug_kernel" = "xno"; then
LINUX_GCC_KOPTS="$LINUX_GCC_KOPTS -fomit-frame-pointer"
fi
OPENAFS_GCC_SUPPORTS_MARCH
AC_SUBST(P5PLUS_KOPTS)
OPENAFS_GCC_NEEDS_NO_STRENGTH_REDUCE
OPENAFS_GCC_NEEDS_NO_STRICT_ALIASING
OPENAFS_GCC_SUPPORTS_NO_COMMON
OPENAFS_GCC_SUPPORTS_PIPE
AC_SUBST(LINUX_GCC_KOPTS)
dnl Setup the kernel build environment
LINUX_KBUILD_USES_EXTRA_CFLAGS
LINUX_KERNEL_COMPILE_WORKS
dnl Operation signature checks
AC_CHECK_LINUX_OPERATION([inode_operations], [follow_link], [no_nameidata],
[#include <linux/fs.h>],
[const char *],
[struct dentry *dentry, void **link_data])
AC_CHECK_LINUX_OPERATION([inode_operations], [put_link], [no_nameidata],
[#include <linux/fs.h>],
[void],
[struct inode *inode, void *link_data])
Linux 4.9: inode_operation rename now takes flags In Linux 3.15 commit 520c8b16505236fc82daa352e6c5e73cd9870cff, inode_operation rename2() was added. It takes the same arguments as rename(), with an added flags argument supporting the following values: RENAME_NOREPLACE: if "new" name exists, fail with -EEXIST. Without this flag, the default behavior is to replace the "new" existing file. RENAME_EXCHANGE: exchange source and target; both must exist. OpenAFS never implemented a .rename2() routine because it was optional when introduced at Linux v3.15. In Linux 4.9-rc1 the following commits remove the last in-tree uses of .rename() and converts .rename2() to .rename(). aadfa8019e81 vfs: add note about i_op->rename changes to porting 2773bf00aeb9 fs: rename "rename2" i_op to "rename" 18fc84dafaac vfs: remove unused i_op->rename 1cd66c93ba8c fs: make remaining filesystems use .rename2 e0e0be8a8355 libfs: support RENAME_NOREPLACE in simple_rename() f03b8ad8d386 fs: support RENAME_NOREPLACE for local filesystems With these changes, it is now mandatory for OpenAFS afs_linux_rename() to accept a 5th flag argument. Add an autoconfig test to determine the signature of .rename(). Use this information to implement afs_linux_rename() with the appropriate number of arguments. Implement "toleration support" for the flags option by treating a zero flag as a normal rename; if any flags are specified, return -EINVAL to indicate the OpenAFS filesystem does not yet support any flags. Change-Id: I165d2b7956942446d97beda8504ac1ed5185a036 Reviewed-on: https://gerrit.openafs.org/12391 Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
2016-09-17 00:01:19 +01:00
AC_CHECK_LINUX_OPERATION([inode_operations], [rename], [takes_flags],
[#include <linux/fs.h>],
[int],
[struct inode *oinode, struct dentry *odentry,
struct inode *ninode, struct dentry *ndentry,
unsigned int flags])
dnl Check for header files
AC_CHECK_LINUX_HEADER([cred.h])
AC_CHECK_LINUX_HEADER([config.h])
AC_CHECK_LINUX_HEADER([exportfs.h])
AC_CHECK_LINUX_HEADER([freezer.h])
AC_CHECK_LINUX_HEADER([key-type.h])
AC_CHECK_LINUX_HEADER([semaphore.h])
AC_CHECK_LINUX_HEADER([seq_file.h])
AC_CHECK_LINUX_HEADER([sched/signal.h])
AC_CHECK_LINUX_HEADER([uaccess.h])
dnl Type existence checks
AC_CHECK_LINUX_TYPE([struct vfs_path], [dcache.h])
AC_CHECK_LINUX_TYPE([kuid_t], [uidgid.h])
dnl Check for structure elements
AC_CHECK_LINUX_STRUCT([address_space], [backing_dev_info], [fs.h])
AC_CHECK_LINUX_STRUCT([address_space_operations],
[write_begin], [fs.h])
AC_CHECK_LINUX_STRUCT([backing_dev_info], [name],
[backing-dev.h])
AC_CHECK_LINUX_STRUCT([cred], [session_keyring], [cred.h])
AC_CHECK_LINUX_STRUCT([ctl_table], [ctl_name], [sysctl.h])
AC_CHECK_LINUX_STRUCT([dentry], [d_u.d_alias], [dcache.h])
Linux: Make dir dentry aliases act like symlinks Currently, we try to invalidate other dentries that exist for a particular dir inode when we look up a dentry. This is so we try to avoid duplicate dentries for a directory, which Linux does not like (you cannot have hardlinks to a dir). If we cannot invalidate the other aliases (because they are being used), right now we just return the alias. This can make it very easy to panic the client, due to the sanity checks Linux performs when dong things like 'rmdir'. If we do something like this: mkdir dir1 fs mkm dir1/mtpt vol mkdir dir1/mtpt/dir2 fs mkm dir1/mtpt/dir2/mtpt2 vol cd dir1/mtpt rmdir dir2/mtpt2 For the 'rmdir', we will lookup 'mtpt2'. Since 'mtpt' and 'mtpt2' are mountpoints for the same volume, their dentries point to the same directory inode. So when we lookup 'mtpt2', we will try to invalidate the other dentry, but we cannot do that since it is the cwd. So we return the alias dentry (for 'mtpt'). The Linux VFS layer then does a sanity check for the rmdir operation, checking that the child dentry's parent inode is the same as the inode we're performing the rmdir for. Since the dentry we returned was for 'mtpt', whose parent is 'dir1', and the actual dir we're performing the rmdir for is 'dir2', this sanity check fails and we BUG. To avoid this, make the dentry alias act like a symlink when we encounter an uninvalidateable dentry alias. That is, we allow multiple dentry aliases for a directory, however, when the dentry aliases are actually used, we redirect to a common dentry (via d_automount where possible, and follow_link elsewhere). This means that such mountpoints will behave similarly to symlinks, in that we 'point' to a specific mountpoint dentry. This means that if we have multiple different ways to get to the same volume, and all are accessed at the same time, all but one of those mountpoints will behave like symlinks, pointing to the same mountpoint. So, the '..' entries for each path will all point to the parent dir of one mountpoint, meaning that the '..' entry will be "wrong", but for most cases it will still be correct. In order to try to make the 'target', pointed-to directory consistent, we add a new field to struct vcache: target_link. This points to the dentry we should redirect to, whenever that vcache is referenced. To avoid (possibly not-feasibly-solvable) problems with refcounting, this pointer is not actually a reference to the target dentry, but just serves as a pointer to compare to. FIXES 130273 Change-Id: I990131ce95cefe8336e83c7ebfb48aed1d685109 Reviewed-on: http://gerrit.openafs.org/7741 Tested-by: BuildBot <buildbot@rampaginggeek.com> Tested-by: Andrew Deason <adeason@sinenomine.net> Reviewed-by: Derrick Brashear <shadow@dementix.org>
2012-07-06 22:37:39 +01:00
AC_CHECK_LINUX_STRUCT([dentry_operations], [d_automount], [dcache.h])
AC_CHECK_LINUX_STRUCT([group_info], [gid], [cred.h])
AC_CHECK_LINUX_STRUCT([inode], [i_alloc_sem], [fs.h])
AC_CHECK_LINUX_STRUCT([inode], [i_blkbits], [fs.h])
AC_CHECK_LINUX_STRUCT([inode], [i_blksize], [fs.h])
AC_CHECK_LINUX_STRUCT([inode], [i_mutex], [fs.h])
AC_CHECK_LINUX_STRUCT([inode], [i_security], [fs.h])
AC_CHECK_LINUX_STRUCT([file], [f_path], [fs.h])
AC_CHECK_LINUX_STRUCT([file_operations], [flock], [fs.h])
AC_CHECK_LINUX_STRUCT([file_operations], [iterate], [fs.h])
AC_CHECK_LINUX_STRUCT([file_operations], [read_iter], [fs.h])
AC_CHECK_LINUX_STRUCT([file_operations], [sendfile], [fs.h])
AC_CHECK_LINUX_STRUCT([file_system_type], [mount], [fs.h])
AC_CHECK_LINUX_STRUCT([inode_operations], [truncate], [fs.h])
AC_CHECK_LINUX_STRUCT([inode_operations], [get_link], [fs.h])
AC_CHECK_LINUX_STRUCT([key], [payload.value], [key.h])
AC_CHECK_LINUX_STRUCT([key_type], [instantiate_prep], [key-type.h])
LINUX: Avoid check for key_type.match existence Commit b5de4a9f removed our key_type 'match' function for kernels that do not have such a 'match' function pointer. However, this added a configure test where we are supposed to fail for the "new" behavior, which is discouraged. This causes an actual problem, because this test will fail on at least RHEL5, due to arguably unrelated reasons (the header file for the relevant struct is in key.h instead of key-type.h). And so, in that situation we avoid defining a 'match' function callback, meaning our 'match' function callback is NULL, which causes a panic when we try to actually look up keys for a PAG. To fix this, transform the 'match' config test into one where we succeed for the "new" behavior. We do this by testing for the existence of the new functionality that replaced the old 'match' function, which is the match_preparse function (specifically, the 'cmp' field in the structure accepted by match_preparse). This should cause unrelated compilation errors to cause us to revert to the "old" behavior instead of the "new" behavior. At worst, this should cause build issues if we get the config test wrong (since we will try to use the 'match' function definition that does not exist), instead of panicing at runtime. Note that while we test for key_type.match_preparse, we don't actually use that function, since our 'match' functionality is the same as the default behavior (according to b5de4a9f). So, we can avoid defining any such function for newer kernels. Thanks to Stephan Wiesand for bisecting this issue. Change-Id: If6f93d6b5340fa738a55adeb7778d26ff5dbacc1 Reviewed-on: http://gerrit.openafs.org/11589 Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com> Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
2014-11-05 16:22:00 +00:00
AC_CHECK_LINUX_STRUCT([key_type], [match_preparse], [key-type.h])
AC_CHECK_LINUX_STRUCT([key_type], [preparse], [key-type.h])
AC_CHECK_LINUX_STRUCT([msghdr], [msg_iter], [socket.h])
AC_CHECK_LINUX_STRUCT([nameidata], [path], [namei.h])
AC_CHECK_LINUX_STRUCT([proc_dir_entry], [owner], [proc_fs.h])
AC_CHECK_LINUX_STRUCT([super_block], [s_bdi], [fs.h])
AC_CHECK_LINUX_STRUCT([super_block], [s_d_op], [fs.h])
AC_CHECK_LINUX_STRUCT([super_operations], [alloc_inode],
[fs.h])
AC_CHECK_LINUX_STRUCT([super_operations], [evict_inode],
[fs.h])
AC_CHECK_LINUX_STRUCT([task_struct], [cred], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [exit_state], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [parent], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [real_parent], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [rlim], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [sig], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [sighand], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [sigmask_lock], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [tgid], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [thread_info], [sched.h])
AC_CHECK_LINUX_STRUCT([task_struct], [total_link_count], [sched.h])
LINUX_SCHED_STRUCT_TASK_STRUCT_HAS_SIGNAL_RLIM
dnl Check for typed structure elements
AC_CHECK_LINUX_TYPED_STRUCT([read_descriptor_t],
[buf], [fs.h])
dnl Function existence checks
AC_CHECK_LINUX_FUNC([__vfs_write],
[#include <linux/fs.h>],
[__vfs_write(NULL, NULL, 0, NULL);])
AC_CHECK_LINUX_FUNC([kernel_write],
[#include <linux/fs.h>],
[kernel_write(NULL, NULL, 0, NULL);])
AC_CHECK_LINUX_FUNC([bdi_init],
[#include <linux/backing-dev.h>],
[bdi_init(NULL);])
AC_CHECK_LINUX_FUNC([super_setup_bdi],
[#include <linux/backing-dev.h>],
[struct super_block *sb;
super_setup_bdi(sb);])
AC_CHECK_LINUX_FUNC([PageChecked],
[#include <linux/mm.h>
#include <linux/page-flags.h>],
[struct page *_page;
int bchecked = PageChecked(_page);])
AC_CHECK_LINUX_FUNC([PageFsMisc],
[#include <linux/mm.h>
#include <linux/page-flags.h>],
[struct page *_page;
int bchecked = PageFsMisc(_page);])
AC_CHECK_LINUX_FUNC([clear_inode],
[#include <linux/fs.h>],
[clear_inode(NULL);])
AC_CHECK_LINUX_FUNC([current_kernel_time],
[#include <linux/time.h>],
[struct timespec s;
s = current_kernel_time();])
AC_CHECK_LINUX_FUNC([d_alloc_anon],
[#include <linux/fs.h>],
[d_alloc_anon(NULL);])
AC_CHECK_LINUX_FUNC([d_count],
[#include <linux/dcache.h>],
[d_count(NULL);])
AC_CHECK_LINUX_FUNC([d_make_root],
[#include <linux/fs.h>],
[d_make_root(NULL);])
AC_CHECK_LINUX_FUNC([do_sync_read],
[#include <linux/fs.h>],
[do_sync_read(NULL, NULL, 0, NULL);])
AC_CHECK_LINUX_FUNC([file_dentry],
[#include <linux/fs.h>],
[struct file *f; file_dentry(f);])
AC_CHECK_LINUX_FUNC([find_task_by_pid],
[#include <linux/sched.h>],
[pid_t p; find_task_by_pid(p);])
AC_CHECK_LINUX_FUNC([generic_file_aio_read],
[#include <linux/fs.h>],
[generic_file_aio_read(NULL,NULL,0,0);])
AC_CHECK_LINUX_FUNC([grab_cache_page_write_begin],
[#include <linux/pagemap.h>],
[grab_cache_page_write_begin(NULL, 0, 0);])
AC_CHECK_LINUX_FUNC([hlist_unhashed],
[#include <linux/list.h>],
[hlist_unhashed(0);])
AC_CHECK_LINUX_FUNC([ihold],
[#include <linux/fs.h>],
[ihold(NULL);])
AC_CHECK_LINUX_FUNC([i_size_read],
[#include <linux/fs.h>],
[i_size_read(NULL);])
AC_CHECK_LINUX_FUNC([inode_setattr],
[#include <linux/fs.h>],
[inode_setattr(NULL, NULL);])
AC_CHECK_LINUX_FUNC([iter_file_splice_write],
[#include <linux/fs.h>],
[iter_file_splice_write(NULL,NULL,NULL,0,0);])
AC_CHECK_LINUX_FUNC([kernel_setsockopt],
[#include <linux/net.h>],
[kernel_setsockopt(NULL, 0, 0, NULL, 0);])
AC_CHECK_LINUX_FUNC([locks_lock_file_wait],
[#include <linux/fs.h>],
[locks_lock_file_wait(NULL, NULL);])
AC_CHECK_LINUX_FUNC([page_follow_link],
[#include <linux/fs.h>],
[page_follow_link(0,0);])
AC_CHECK_LINUX_FUNC([page_get_link],
[#include <linux/fs.h>],
[page_get_link(0,0,0);])
AC_CHECK_LINUX_FUNC([page_offset],
[#include <linux/pagemap.h>],
[page_offset(NULL);])
AC_CHECK_LINUX_FUNC([pagevec_lru_add_file],
[#include <linux/pagevec.h>],
[__pagevec_lru_add_file(NULL);])
AC_CHECK_LINUX_FUNC([path_lookup],
[#include <linux/fs.h>
#include <linux/namei.h>],
[path_lookup(NULL, 0, NULL);])
AC_CHECK_LINUX_FUNC([proc_create],
[#include <linux/proc_fs.h>],
[proc_create(NULL, 0, NULL, NULL);])
AC_CHECK_LINUX_FUNC([rcu_read_lock],
[#include <linux/rcupdate.h>],
[rcu_read_lock();])
AC_CHECK_LINUX_FUNC([set_nlink],
[#include <linux/fs.h>],
[set_nlink(NULL, 1);])
AC_CHECK_LINUX_FUNC([setattr_prepare],
[#include <linux/fs.h>],
[setattr_prepare(NULL, NULL);])
LINUX: Use sock_create_kern where available Currently, we use sock_create to create our Rx socket. This means that accesses to that socket (sendmsg, recvmsg) are subject to SELinux restrictions. For all recvmsg accesses and some sendmsg accesses, this doesn't matter, since the access will be performed by one of our kernel threads (running as kernel_t or something similar, which is unrestricted). Such as: the rx listener, a background daemon, the rx event thread, etc. However, sometimes we do run in the context of a normal user process. For some RPCs like FetchStatus, we tend to run the RPC in the accessing user thread, which can result in us sendmsg()ing the data packets with the initial arguments in the user thread. We can also send delayed ACKs via rx_EndCall, and possibly a variety of other scenarios. In any of these situations when we are sendmsg()ing from a user thread, SELinux can prevent us from sending to the socket, if the calling user thread context is not able to write to an afs_t udp_socket. This will result in packets not being sent immediately, but the packets will be resent later, so access will work, but appear very slow. This can easily happen for processes that are specifically constrained by SELinux; for example, webservers are often constrained, even if most of the rest of the system is not. This can be noticed by seeing the 'resends' and 'sendFailed' counters rising in 'rxdebug -rxstat', as well as noticing SELinux access failures if 'dontaudit' rules are ignored. To avoid this, use sock_create_kern to create the Rx socket, to indicate that this is a socket for use by kernel code, and not accessible by a user. This should cause us to bypass any LSM restrictions (SELinux, AppArmor, etc). Add a configure check for this, since this function has not always existed, according to <https://lists.openafs.org/pipermail/openafs-devel/2004-June/010651.html> Change-Id: I77e7f87e93be4d750d398e01dc1634efd80657bc Reviewed-on: http://gerrit.openafs.org/10594 Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Marc Dionne <marc.c.dionne@gmail.com> Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
2013-12-17 23:30:26 +00:00
AC_CHECK_LINUX_FUNC([sock_create_kern],
[#include <linux/net.h>],
[sock_create_kern(0, 0, 0, NULL);])
AC_CHECK_LINUX_FUNC([sock_create_kern_ns],
[#include <linux/net.h>],
[sock_create_kern(NULL, 0, 0, 0, NULL);])
AC_CHECK_LINUX_FUNC([splice_direct_to_actor],
[#include <linux/splice.h>],
[splice_direct_to_actor(NULL,NULL,NULL);])
AC_CHECK_LINUX_FUNC([default_file_splice_read],
[#include <linux/fs.h>],
[default_file_splice_read(NULL,NULL,NULL, 0, 0);])
AC_CHECK_LINUX_FUNC([svc_addr_in],
[#include <linux/sunrpc/svc.h>],
[svc_addr_in(NULL);])
AC_CHECK_LINUX_FUNC([zero_user_segments],
[#include <linux/highmem.h>],
[zero_user_segments(NULL, 0, 0, 0, 0);])
AC_CHECK_LINUX_FUNC([noop_fsync],
[#include <linux/fs.h>],
[void *address = &noop_fsync; printk("%p\n", address)];)
AC_CHECK_LINUX_FUNC([kthread_run],
[#include <linux/kernel.h>
#include <linux/kthread.h>],
[kthread_run(NULL, NULL, "test");])
AC_CHECK_LINUX_FUNC([inode_nohighmem],
[#include <linux/fs.h>],
[inode_nohighmem(NULL);])
AC_CHECK_LINUX_FUNC([inode_lock],
[#include <linux/fs.h>],
[inode_lock(NULL);])
dnl Consequences - things which get set as a result of the
dnl above tests
AS_IF([test "x$ac_cv_linux_func_d_alloc_anon" = "xno"],
[AC_DEFINE([AFS_NONFSTRANS], 1,
[define to disable the nfs translator])])
dnl Assorted more complex tests
LINUX_AIO_NONVECTOR
LINUX_EXPORTS_PROC_ROOT_FS
LINUX_KMEM_CACHE_INIT
LINUX_HAVE_KMEM_CACHE_T
LINUX_KMEM_CACHE_CREATE_TAKES_DTOR
LINUX_KMEM_CACHE_CREATE_CTOR_TAKES_VOID
2008-07-01 05:33:38 +01:00
LINUX_D_PATH_TAKES_STRUCT_PATH
LINUX_NEW_EXPORT_OPS
LINUX_INODE_SETATTR_RETURN_TYPE
LINUX_IOP_I_CREATE_TAKES_NAMEIDATA
LINUX_IOP_I_LOOKUP_TAKES_NAMEIDATA
LINUX_IOP_I_PERMISSION_TAKES_FLAGS
LINUX_IOP_I_PERMISSION_TAKES_NAMEIDATA
LINUX_IOP_I_PUT_LINK_TAKES_COOKIE
LINUX_DOP_D_DELETE_TAKES_CONST
LINUX_DOP_D_REVALIDATE_TAKES_NAMEIDATA
LINUX_FOP_F_FLUSH_TAKES_FL_OWNER_T
LINUX_FOP_F_FSYNC_TAKES_DENTRY
LINUX_FOP_F_FSYNC_TAKES_RANGE
LINUX_AOP_WRITEBACK_CONTROL
LINUX_FS_STRUCT_FOP_HAS_SPLICE
LINUX_KERNEL_POSIX_LOCK_FILE_WAIT_ARG
LINUX_KERNEL_PAGEVEC_INIT_COLD_ARG
LINUX_POSIX_TEST_LOCK_RETURNS_CONFLICT
LINUX_POSIX_TEST_LOCK_CONFLICT_ARG
LINUX_KERNEL_SOCK_CREATE
LINUX_EXPORTS_KEY_TYPE_KEYRING
LINUX_NEED_RHCONFIG
LINUX_RECALC_SIGPENDING_ARG_TYPE
LINUX_EXPORTS_TASKLIST_LOCK
LINUX_GET_SB_HAS_STRUCT_VFSMOUNT
LINUX_STATFS_TAKES_DENTRY
LINUX_REFRIGERATOR
LINUX_HAVE_TRY_TO_FREEZE
LINUX_LINUX_KEYRING_SUPPORT
LINUX_KEY_ALLOC_NEEDS_STRUCT_TASK
LINUX_KEY_ALLOC_NEEDS_CRED
LINUX_INIT_WORK_HAS_DATA
LINUX_REGISTER_SYSCTL_TABLE_NOFLAG
LINUX_HAVE_DCACHE_LOCK
LINUX_D_COUNT_IS_INT
Linux v4.11: getattr takes struct path With Linux commit a528d35e8bfcc521d7cb70aaf03e1bd296c8493f statx: Add a system call to make enhanced file info available The Linux getattr inode operation is altered to take two additional arguments: a u32 request_mask and an unsigned int flags that indicate the synchronisation mode. This change is propagated to the vfs_getattr*() function. - int (*getattr) (struct vfsmount *, struct dentry *, struct kstat *); + int (*getattr) (const struct path *, struct kstat *, + u32 request_mask, unsigned int sync_mode); The first argument, request_mask, indicates which fields of the statx structure are of interest to the userland call. The second argument, flags, currently may take the values defined in include/uapi/linux/fcntl.h and are optionally used for cache coherence: (1) AT_STATX_SYNC_AS_STAT tells statx() to behave as stat() does. (2) AT_STATX_FORCE_SYNC will require a network filesystem to synchronise its attributes with the server - which might require data writeback to occur to get the timestamps correct. (3) AT_STATX_DONT_SYNC will suppress synchronisation with the server in a network filesystem. The resulting values should be considered approximate. This patch provides a new autoconf test and conditional compilation to cope with the changes in our getattr implementation. Change-Id: Ie4206140ae249c00a8906331c57da359c4a372c4 Reviewed-on: https://gerrit.openafs.org/12572 Reviewed-by: Joe Gorse <jhgorse@gmail.com> Tested-by: Joe Gorse <jhgorse@gmail.com> Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Michael Meffie <mmeffie@sinenomine.net> Reviewed-by: Mark Vitale <mvitale@sinenomine.net> Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
2017-03-20 14:30:46 +00:00
LINUX_IOP_GETATTR_TAKES_PATH_STRUCT
LINUX_IOP_MKDIR_TAKES_UMODE_T
LINUX_IOP_CREATE_TAKES_UMODE_T
LINUX_EXPORT_OP_ENCODE_FH_TAKES_INODES
LINUX_KMAP_ATOMIC_TAKES_NO_KM_TYPE
LINUX_DENTRY_OPEN_TAKES_PATH
LINUX_D_ALIAS_IS_HLIST
LINUX_HLIST_ITERATOR_NO_NODE
LINUX_IOP_I_CREATE_TAKES_BOOL
LINUX_DOP_D_REVALIDATE_TAKES_UNSIGNED
LINUX_IOP_LOOKUP_TAKES_UNSIGNED
LINUX_D_INVALIDATE_IS_VOID
LINUX_KERNEL_READ_OFFSET_IS_LAST
dnl If we are guaranteed that keyrings will work - that is
dnl a) The kernel has keyrings enabled
dnl b) The code is new enough to give us a key_type_keyring
dnl then we just disable syscall probing unless we've been
dnl told otherwise
AS_IF([test "$enable_linux_syscall_probing" = "maybe"],
[AS_IF([test "$ac_cv_linux_keyring_support" = "yes" -a "$ac_cv_linux_exports_key_type_keyring" = "yes"],
[enable_linux_syscall_probing="no"],
[enable_linux_syscall_probing="yes"])
])
dnl Syscall probing needs a few tests of its own, and just
dnl won't work if the kernel doesn't export init_mm
AS_IF([test "$enable_linux_syscall_probing" = "yes"], [
LINUX_EXPORTS_INIT_MM
AS_IF([test "$ac_cv_linux_exports_init_mm" = "no"], [
AC_MSG_ERROR(
[Can't do syscall probing without exported init_mm])
])
LINUX_EXPORTS_SYS_CHDIR
LINUX_EXPORTS_SYS_OPEN
AC_DEFINE(ENABLE_LINUX_SYSCALL_PROBING, 1,
[define to enable syscall table probes])
])
dnl Packaging and SMP build
if test "x$with_linux_kernel_packaging" != "xyes" ; then
LINUX_WHICH_MODULES
else
AC_SUBST(MPS,'SP')
fi
dnl Syscall probing
if test "x$ac_cv_linux_config_modversions" = "xno" -o $AFS_SYSKVERS -ge 26; then
AS_IF([test "$enable_linux_syscall_probing" = "yes"], [
AC_MSG_WARN([Cannot determine sys_call_table status. assuming it isn't exported])
])
ac_cv_linux_exports_sys_call_table=no
if test -f "$LINUX_KERNEL_PATH/include/asm/ia32_unistd.h"; then
ac_cv_linux_exports_ia32_sys_call_table=yes
fi
else
LINUX_EXPORTS_KALLSYMS_ADDRESS
LINUX_EXPORTS_KALLSYMS_SYMBOL
LINUX_EXPORTS_SYS_CALL_TABLE
LINUX_EXPORTS_IA32_SYS_CALL_TABLE
if test "x$ac_cv_linux_exports_sys_call_table" = "xno"; then
linux_syscall_method=none
if test "x$ac_cv_linux_exports_init_mm" = "xyes"; then
linux_syscall_method=scan
if test "x$ac_cv_linux_exports_kallsyms_address" = "xyes"; then
linux_syscall_method=scan_with_kallsyms_address
fi
fi
if test "x$ac_cv_linux_exports_kallsyms_symbol" = "xyes"; then
linux_syscall_method=kallsyms_symbol
fi
if test "x$linux_syscall_method" = "xnone"; then
AC_MSG_WARN([no available sys_call_table access method -- guessing scan])
linux_syscall_method=scan
fi
fi
fi
if test -f "$LINUX_KERNEL_PATH/include/linux/in_systm.h"; then
AC_DEFINE(HAVE_IN_SYSTM_H, 1, [define if you have in_systm.h header file])
fi
if test -f "$LINUX_KERNEL_PATH/include/linux/mm_inline.h"; then
AC_DEFINE(HAVE_MM_INLINE_H, 1, [define if you have mm_inline.h header file])
fi
if test "x$ac_cv_linux_func_page_get_link" = "xyes" -o "x$ac_cv_linux_func_i_put_link_takes_cookie" = "xyes"; then
AC_DEFINE(USABLE_KERNEL_PAGE_SYMLINK_CACHE, 1, [define if your kernel has a usable symlink cache API])
else
AC_MSG_WARN([your kernel does not have a usable symlink cache API])
fi
if test "x$ac_cv_linux_func_page_get_link" != "xyes" -a "x$ac_cv_linux_struct_inode_operations_has_get_link" = "xyes"; then
AC_MSG_ERROR([Your kernel does not use follow_link - not supported without symlink cache API])
exit 1
fi
:
fi
if test "x$enable_linux_d_splice_alias_extra_iput" = xyes; then
AC_DEFINE(D_SPLICE_ALIAS_LEAK_ON_ERROR, 1, [for internal use])
fi
dnl Linux-only, but just enable always.
AC_DEFINE(AFS_CACHE_BYPASS, 1, [define to activate cache bypassing Unix client])
esac
AC_CACHE_CHECK([if compiler has __sync_add_and_fetch],
[ac_cv_sync_fetch_and_add],
[AC_TRY_LINK(, [int var; return __sync_add_and_fetch(&var, 1);],
[ac_cv_sync_fetch_and_add=yes],
[ac_cv_sync_fetch_and_add=no])
])
AS_IF([test "$ac_cv_sync_fetch_and_add" = "yes"],
[AC_DEFINE(HAVE_SYNC_FETCH_AND_ADD, 1,
[define if your C compiler has __sync_add_and_fetch])])
AC_CACHE_CHECK([if struct sockaddr has sa_len field],
[ac_cv_sockaddr_len],
[AC_TRY_COMPILE( [#include <sys/types.h>
#include <sys/socket.h>],
[struct sockaddr *a; a->sa_len=0;],
[ac_cv_sockaddr_len=yes],
[ac_cv_sockaddr_len=no])
])
AS_IF([test "$ac_cv_sockaddr_len" = "yes"],
[AC_DEFINE(STRUCT_SOCKADDR_HAS_SA_LEN, 1,
[define if you struct sockaddr sa_len])])
if test "x${MKAFS_OSTYPE}" = "xIRIX"; then
echo Skipping library tests because they confuse Irix.
else
AC_SEARCH_LIBS([socket], [socket inet])
AC_SEARCH_LIBS([connect], [nsl])
AC_SEARCH_LIBS([gethostbyname], [dns nsl resolv])
dnl darwin wants it, aix hates it
AC_MSG_CHECKING(for the useability of arpa/nameser_compat.h)
AC_TRY_COMPILE([
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <arpa/nameser.h>
#include <arpa/nameser_compat.h>
#include <resolv.h>
], [static int i; i = 0;],
[AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_ARPA_NAMESER_COMPAT_H, 1, [define if arpa/nameser_compat.h exists])],
[AC_MSG_RESULT(no)
])
openafs_save_libs="$LIBS"
AC_MSG_CHECKING([for res_search])
AC_FUNC_RES_SEARCH
if test "$ac_cv_func_res_search" = no; then
for lib in dns nsl resolv; do
if test "$ac_cv_func_res_search" != yes; then
LIBS="-l$lib $LIBS"
AC_FUNC_RES_SEARCH
LIBS="$openafs_save_libs"
fi
done
if test "$ac_cv_func_res_search" = yes; then
LIB_AFSDB="-l$lib"
AC_DEFINE(HAVE_RES_SEARCH, 1, [])
AC_MSG_RESULT([yes, in lib$lib])
else
AC_MSG_RESULT(no)
fi
else
AC_DEFINE(HAVE_RES_SEARCH, 1, [])
AC_MSG_RESULT(yes)
fi
fi
XLIBS="$LIB_AFSDB $XLIBS"
AC_CHECK_RESOLV_RETRANS
AC_CACHE_CHECK([for setsockopt(, SOL_IP, IP_RECVERR)],
[ac_cv_setsockopt_iprecverr],
[AC_TRY_COMPILE( [
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>],
[int on=1;
setsockopt(0, SOL_IP, IP_RECVERR, &on, sizeof(on));],
[ac_cv_setsockopt_iprecverr=yes],
[ac_cv_setsockopt_iprecverr=no])])
AS_IF([test "$ac_cv_setsockopt_iprecverr" = "yes"],
[AC_DEFINE([HAVE_SETSOCKOPT_IP_RECVERR], [1],
[define if we can receive socket errors via IP_RECVERR])])
PTHREAD_LIBS=error
if test "x$MKAFS_OSTYPE" = OBSD; then
PTHREAD_LIBS="-pthread"
fi
if test "x$MKAFS_OSTYPE" = xDFBSD; then
PTHREAD_LIBS="-pthread"
fi
if test "x$PTHREAD_LIBS" = xerror; then
AC_CHECK_LIB(pthread, pthread_attr_init,
PTHREAD_LIBS="-lpthread")
fi
if test "x$PTHREAD_LIBS" = xerror; then
AC_CHECK_LIB(pthreads, pthread_attr_init,
PTHREAD_LIBS="-lpthreads")
fi
if test "x$PTHREAD_LIBS" = xerror; then
AC_CHECK_LIB(c_r, pthread_attr_init,
PTHREAD_LIBS="-lc_r")
fi
if test "x$PTHREAD_LIBS" = xerror; then
AC_CHECK_FUNC(pthread_attr_init, PTHREAD_LIBS="")
fi
if test "x$PTHREAD_LIBS" = xerror; then
# pthread_attr_init is a macro under HPUX 11.0 and 11.11
AC_CHECK_LIB(pthread, pthread_attr_destroy,
PTHREAD_LIBS="-lpthread")
fi
if test "x$PTHREAD_LIBS" = xerror; then
AC_MSG_WARN(*** Unable to locate working posix thread library ***)
fi
AC_SUBST(PTHREAD_LIBS)
HOST_CPU="$host_cpu"
if test "x$with_bsd_kernel_headers" != "x"; then
BSD_KERNEL_PATH="$with_bsd_kernel_headers"
else
BSD_KERNEL_PATH="/usr/src/sys"
fi
if test "x$with_bsd_kernel_build" != "x"; then
BSD_KERNEL_BUILD="$with_bsd_kernel_build"
else
case $AFS_SYSNAME in
*_fbsd_*)
BSD_KERNEL_BUILD="${BSD_KERNEL_PATH}/${HOST_CPU}/compile/GENERIC"
;;
*_nbsd*)
BSD_KERNEL_BUILD="${BSD_KERNEL_PATH}/arch/${HOST_CPU}/compile/GENERIC"
esac
fi
# Fast restart
if test "$enable_supergroups" = "yes"; then
AC_DEFINE(SUPERGROUPS, 1, [define if you want to have support for nested pts groups])
fi
if test "$enable_bitmap_later" = "yes"; then
AC_DEFINE(BITMAP_LATER, 1, [define if you want to salvager to check bitmasks later])
fi
if test "$enable_unix_sockets" = "yes"; then
AC_DEFINE(USE_UNIX_SOCKETS, 1, [define if you want to use UNIX sockets for fssync.])
USE_UNIX_SOCKETS="yes"
else
USE_UNIX_SOCKETS="no"
fi
AC_SUBST(USE_UNIX_SOCKETS)
if test "$enable_ubik_read_while_write" = "yes"; then
AC_DEFINE(UBIK_READ_WHILE_WRITE, 1, [define if you want to enable ubik read while write])
fi
if test "$enable_namei_fileserver" = "yes"; then
AC_DEFINE(AFS_NAMEI_ENV, 1, [define if you want to want namei fileserver])
VFSCK=""
else
if test "$enable_namei_fileserver" = "default"; then
case $host in
*-solaris2.10*)
AC_MSG_WARN(Some Solaris 10 versions are not safe with the inode fileserver. Forcing namei. Override with --disable-namei-fileserver)
AC_DEFINE(AFS_NAMEI_ENV, 1, [define if you want to want namei fileserver])
VFSCK=""
;;
*-solaris2.11*)
AC_MSG_WARN(Solaris 11 versions are not safe with the inode fileserver. Forcing namei. Override with --disable-namei-fileserver)
AC_DEFINE(AFS_NAMEI_ENV, 1, [define if you want to want namei fileserver])
VFSCK=""
;;
*)
VFSCK="vfsck"
;;
esac
else
VFSCK="vfsck"
fi
fi
dnl check for tivoli
AC_MSG_CHECKING(for tivoli tsm butc support)
XBSA_CFLAGS=""
if test "$enable_tivoli_tsm" = "yes"; then
XBSADIR1=/usr/tivoli/tsm/client/api/bin/xopen
XBSADIR2=/opt/tivoli/tsm/client/api/bin/xopen
XBSADIR3=/usr/tivoli/tsm/client/api/bin/sample
XBSADIR4=/opt/tivoli/tsm/client/api/bin/sample
XBSADIR5=/usr/tivoli/tsm/client/api/bin64/sample
XBSADIR6=/opt/tivoli/tsm/client/api/bin64/sample
if test -r "$XBSADIR3/dsmapifp.h"; then
XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR3"
XBSA_XLIBS="-ldl"
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR4/dsmapifp.h"; then
XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR4"
XBSA_XLIBS="-ldl"
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR5/dsmapifp.h"; then
XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR5"
XBSA_XLIBS="-ldl"
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR6/dsmapifp.h"; then
XBSA_CFLAGS="-Dxbsa -DNEW_XBSA -I$XBSADIR6"
XBSA_XLIBS="-ldl"
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR1/xbsa.h"; then
XBSA_CFLAGS="-Dxbsa -I$XBSADIR1"
XBSA_XLIBS=""
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
elif test -r "$XBSADIR2/xbsa.h"; then
XBSA_CFLAGS="-Dxbsa -I$XBSADIR2"
XBSA_XLIBS=""
AC_MSG_RESULT([yes, $XBSA_CFLAGS])
else
AC_MSG_RESULT([no, missing xbsa.h and dsmapifp.h header files])
fi
else
AC_MSG_RESULT([no])
fi
AC_SUBST(XBSA_CFLAGS)
AC_SUBST(XBSA_XLIBS)
XLIBS="$XBSA_XLIBS $XLIBS"
dnl checks for header files.
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_HEADER_DIRENT
AC_CHECK_HEADERS([ \
arpa/inet.h \
arpa/nameser.h \
curses.h\
direct.h \
errno.h \
fcntl.h \
grp.h \
math.h \
mntent.h \
ncurses.h \
ncurses/ncurses.h \
netdb.h \
netinet/in.h \
pthread_np.h \
pwd.h \
regex.h \
security/pam_appl.h \
signal.h \
stdint.h \
stdio_ext.h \
stdlib.h \
string.h \
strings.h \
sys/bitypes.h \
sys/bswap.h \
sys/dk.h \
sys/fcntl.h \
sys/file.h \
sys/fs_types.h \
sys/fstyp.h \
sys/ioctl.h \
sys/ipc.h \
sys/lockf.h \
sys/map.h \
sys/mount.h \
sys/mntent.h \
sys/mnttab.h \
sys/pag.h \
sys/param.h \
sys/resource.h \
sys/select.h \
sys/statfs.h \
sys/statvfs.h \
sys/socket.h \
sys/sysctl.h \
sys/time.h \
sys/types.h \
sys/uio.h \
sys/un.h \
sys/vfs.h \
syslog.h \
termios.h \
time.h \
ucontext.h \
unistd.h \
windows.h \
])
AC_CHECK_HEADERS([resolv.h], [], [], [AC_INCLUDES_DEFAULT
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif])
AC_CHECK_HEADERS([net/if.h],[],[],[AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif])
AC_CHECK_HEADERS([netinet/if_ether.h],[],[],[AC_INCLUDES_DEFAULT
#ifdef HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
#ifdef HAVE_NETINET_IN_H
# include <netinet/in.h>
#endif
#ifdef HAVE_NET_IF_H
# include <net/if.h>
#endif])
AC_CHECK_HEADERS([security/pam_modules.h],[],[],[AC_INCLUDES_DEFAULT
#ifdef HAVE_SECURITY_PAM_APPL_H
# include <security/pam_appl.h>
#endif])
AC_CHECK_HEADERS(linux/errqueue.h,,,[#include <linux/types.h>])
AC_CHECK_TYPES([fsblkcnt_t],,,[
#include <sys/types.h>
#ifdef HAVE_SYS_BITYPES_H
#include <sys/bitypes.h>
#endif
#ifdef HAVE_SYS_STATFS_H
#include <sys/statfs.h>
#endif
#ifdef HAVE_SYS_STATVFS_H
#include <sys/statvfs.h>
#endif
])
dnl see what struct stat has for timestamps
AC_CHECK_MEMBERS([struct stat.st_ctimespec, struct stat.st_ctimensec])
OPENAFS_TEST_PACKAGE(libintl,[#include <libintl.h>],[-lintl],,,INTL)
if test "$enable_debug_locks" = yes; then
AC_DEFINE(OPR_DEBUG_LOCKS, 1, [turn on lock debugging in opr])
fi
if test "$ac_cv_header_security_pam_modules_h" = yes -a "$enable_pam" = yes; then
HAVE_PAM="yes"
else
HAVE_PAM="no"
fi
AC_SUBST(HAVE_PAM)
if test "$enable_login" = yes; then
BUILD_LOGIN="yes"
else
BUILD_LOGIN="no"
fi
AC_SUBST(BUILD_LOGIN)
if test "$enable_kauth" = yes; then
INSTALL_KAUTH="yes"
else
INSTALL_KAUTH="no"
fi
AC_SUBST(INSTALL_KAUTH)
AC_CHECK_FUNCS([ \
arc4random \
closelog \
fcntl \
fseeko64 \
ftello64 \
getcwd \
getegid \
geteuid \
getgid \
getuid \
getrlimit \
issetugid \
mkstemp \
openlog \
poll \
pread \
preadv \
preadv64 \
pwrite \
pwritev \
pwritev64 \
regcomp \
regerror \
regexec \
setitimer \
setvbuf \
sigaction \
strcasestr \
strerror \
sysconf \
sysctl \
syslog \
tdestroy \
timegm \
])
OPENAFS_ROKEN()
OPENAFS_HCRYPTO()
OPENAFS_CURSES()
OPENAFS_C_ATTRIBUTE()
OPENAFS_C_PRAGMA()
dnl Functions that Heimdal's libroken provides, but that we
dnl haven't found a need for yet, and so haven't imported
AC_CHECK_FUNCS([ \
chown \
fchown \
gethostname \
lstat \
inet_aton \
putenv \
readv \
setenv \
strdup \
strftime \
strndup \
strsep \
unsetenv \
])
dnl Functions that are in objects that we always build from libroken
AC_CHECK_FUNCS([ \
asprintf \
asnprintf \
vasprintf \
vasnprintf \
vsnprintf \
snprintf \
])
dnl Functions that we're going to try and get from libroken
AC_REPLACE_FUNCS([ \
daemon \
ecalloc \
emalloc \
erealloc \
err \
errx \
flock \
freeaddrinfo \
gai_strerror \
getaddrinfo \
getdtablesize \
getnameinfo \
getopt \
getprogname \
gettimeofday \
inet_ntop \
inet_pton \
localtime_r \
mkstemp \
setenv \
setprogname \
strcasecmp \
strlcat \
strnlen \
strlcpy \
strsep \
tdelete \
tfind \
tsearch \
twalk \
unsetenv \
verr \
verrx \
vsyslog \
vwarn \
vwarnx \
warn \
warnx \
])
dnl Headers that we're going to try and get from libroken
AC_CHECK_HEADERS([ \
err.h \
search.h \
])
AC_CHECK_DECLS([h_errno], [], [], [
#include <sys/types.h>
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
])
AC_HEADER_TIME
ROKEN_HEADERS=
AS_IF([test "$ac_cv_header_err_h" != "yes" ],
[ROKEN_HEADERS="$ROKEN_HEADERS \$(TOP_INCDIR)/err.h"],
[])
AC_SUBST(ROKEN_HEADERS)
dnl Stuff that's harder ...
AC_MSG_CHECKING([for bswap16])
AC_LINK_IFELSE([AC_LANG_PROGRAM([
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_BSWAP_H
#include <sys/bswap.h>
#endif
],
[short a, b; b = bswap16(a); ])],
[AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_BSWAP16, 1, [Define to 1 if you have the bswap16 function])
],
[AC_MSG_RESULT(no)])
AC_MSG_CHECKING([for bswap32])
AC_LINK_IFELSE([AC_LANG_PROGRAM([#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_SYS_BSWAP_H
#include <sys/bswap.h>
#endif
],
[int a, b; b = bswap32(a); ])],
[AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_BSWAP32, 1, [Define to 1 if you have the bswap32 function])
],
[AC_MSG_RESULT(no)])
case $AFS_SYSNAME in
*hp_ux* | *hpux*)
AC_MSG_WARN([Some versions of HP-UX have a buggy positional I/O implementation. Forcing no positional I/O.])
;;
*)
AC_MSG_CHECKING([for positional I/O])
if test "$ac_cv_func_pread" = "yes" && \
test "$ac_cv_func_pwrite" = "yes"; then
AC_DEFINE(HAVE_PIO, 1, [define if you have pread() and pwrite()])
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
AC_MSG_CHECKING([for vectored positional I/O])
AS_IF([test "$ac_cv_func_preadv" = "yes" -a \
"$ac_cv_func_pwritev" = "yes" -a \
"$ac_cv_func_preadv64" = "yes" -a \
"$ac_cv_func_pwritev64" = "yes"],
[AC_DEFINE(HAVE_PIOV, 1, [define if you have preadv() and pwritev()])
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])
;;
esac
AC_MSG_CHECKING([for POSIX regex library])
if test "$ac_cv_header_regex_h" = "yes" && \
test "$ac_cv_func_regcomp" = "yes" && \
test "$ac_cv_func_regexec" = "yes" && \
test "$ac_cv_func_regerror" = "yes"; then
AC_DEFINE(HAVE_POSIX_REGEX, 1, [define if you have POSIX regex library])
AC_MSG_RESULT(yes)
else
AC_MSG_RESULT(no)
fi
dnl Look for "non-portable" pthreads functions.
save_LIBS="$LIBS"
LIBS="$LIBS $PTHREAD_LIBS"
AC_CHECK_FUNCS([ \
pthread_set_name_np \
pthread_setname_np \
])
dnl Sadly, there are three different versions of pthread_setname_np.
dnl Try to cater for all of them.
if test "$ac_cv_func_pthread_setname_np" = "yes" ; then
AC_MSG_CHECKING([for signature of pthread_setname_np])
AC_TRY_COMPILE([
#include <pthread.h>
#ifdef HAVE_PTHREAD_NP_H
#include <pthread_np.h>
#endif
], [pthread_setname_np(pthread_self(), "test", (void *)0)], [
AC_MSG_RESULT([three arguments])
pthread_setname_np_args=3], [
AC_TRY_COMPILE([
#include <pthread.h>
#ifdef HAVE_PTHREAD_NP_H
#include <pthread_np.h>
#endif
], [pthread_setname_np(pthread_self(), "test")], [
AC_MSG_RESULT([two arguments])
pthread_setname_np_args=2], [
AC_TRY_COMPILE([
#include <pthread.h>
#ifdef HAVE_PTHREAD_NP_H
#include <pthread_np.h>
#endif
], [pthread_setname_np("test")], [
AC_MSG_RESULT([one argument])
pthread_setname_np_args=1], [pthread_setname_np_args=0])
])
])
AC_DEFINE_UNQUOTED([PTHREAD_SETNAME_NP_ARGS], $pthread_setname_np_args, [Number of arguments required by pthread_setname_np() function])
fi
LIBS="$save_LIBS"
openafs_cv_saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $XCFLAGS_NOCHECKING"
AC_TYPE_SIGNAL
OPENAFS_RETSIGTYPE
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(unsigned long long)
AC_CHECK_SIZEOF(unsigned long)
AC_CHECK_SIZEOF(unsigned int)
AC_TYPE_INTPTR_T
AC_TYPE_UINTPTR_T
AC_TYPE_SSIZE_T
AC_CHECK_TYPE([sig_atomic_t],[],
[AC_DEFINE([sig_atomic_t], [int],
[Define to int if <signal.h> does not define.])],
[#include <sys/types.h>
#include <signal.h>])
AC_CHECK_TYPE([socklen_t],[],
[AC_DEFINE([socklen_t], [int],
[Define to int if <sys/socket.h> does not define.])],
[#include <sys/types.h>
#include <sys/socket.h>])
AC_CHECK_TYPES(off64_t)
AC_CHECK_TYPES([ssize_t], [], [], [#include <unistd.h>])
AC_CHECK_TYPES([struct winsize], [], [], [
#ifdef HAVE_TERMIOS_H
# include <termios.h>
#else
# include <sys/termios.h>
#endif
#include <sys/ioctl.h>])
AC_CHECK_TYPES([sa_family_t, socklen_t, struct sockaddr,
struct sockaddr_storage],
[], [], [
#include <sys/types.h>
#include <sys/socket.h>
])
AC_CHECK_TYPES([sa_family_t], [], [], [
#include <sys/types.h>
#include <sys/socket.h>
])
AC_CHECK_TYPES([struct addrinfo], [], [], [
#include <sys/types.h>
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif
])
AC_CHECK_TYPES([long long], [], [], [])
AC_SIZEOF_TYPE(long)
CFLAGS="$openafs_cv_saved_CFLAGS"
RRA_HEADER_PAM_CONST
dnl Directory PATH handling
if test "x$enable_transarc_paths" = "xyes" ; then
afsconfdir=${afsconfdir=/usr/afs/etc}
viceetcdir=${viceetcdir=/usr/vice/etc}
afskerneldir=${afskerneldir=${viceetcdir}}
afssrvbindir=${afssrvbindir=/usr/afs/bin}
afssrvsbindir=${afssrvsbindir=/usr/afs/bin}
afssrvlibexecdir=${afssrvlibexecdir=/usr/afs/bin}
afsdbdir=${afsdbdir=/usr/afs/db}
afslogsdir=${afslogsdir=/usr/afs/logs}
afslocaldir=${afslocaldir=/usr/afs/local}
afsbackupdir=${afsbackupdir=/usr/afs/backup}
afsbosconfigdir=${afsbosconfigdir=/usr/afs/local}
afsdatadir=${afsdatadir=/usr/vice/etc}
else
afsconfdir=${afsconfdir='${sysconfdir}/openafs/server'}
viceetcdir=${viceetcdir='${sysconfdir}/openafs'}
afskerneldir=${afskerneldir='${libdir}/openafs'}
afssrvbindir=${afssrvbindir='${bindir}'}
afssrvsbindir=${afssrvsbindir='${sbindir}'}
afssrvlibexecdir=${afssrvlibexecdir='${libexecdir}/openafs'}
afsdbdir=${afsdbdir='${localstatedir}/openafs/db'}
afslogsdir=${afslogsdir='${localstatedir}/openafs/logs'}
afslocaldir=${afslocaldir='${localstatedir}/openafs'}
afsbackupdir=${afsbackupdir='${localstatedir}/openafs/backup'}
afsbosconfigdir=${afsbosconfigdir='${sysconfdir}/openafs'}
afsdatadir=${afsdatadir='${datadir}/openafs'}
fi
AC_SUBST(afsconfdir)
AC_SUBST(viceetcdir)
AC_SUBST(afskerneldir)
AC_SUBST(afssrvbindir)
AC_SUBST(afssrvsbindir)
AC_SUBST(afssrvlibexecdir)
AC_SUBST(afsdbdir)
AC_SUBST(afslogsdir)
AC_SUBST(afslocaldir)
AC_SUBST(afsbackupdir)
AC_SUBST(afsbosconfigdir)
AC_SUBST(afsdatadir)
if test "x$enable_kernel_module" = "xyes"; then
ENABLE_KERNEL_MODULE=libafs
fi
if test "x$enable_pthreaded_ubik" = "xyes"; then
ENABLE_PTHREADED_UBIK=yes
fi
AC_SUBST(VFSCK)
AC_SUBST(AFS_SYSNAME)
AC_SUBST(AFS_PARAM_COMMON)
AC_SUBST(ENABLE_KERNEL_MODULE)
AC_SUBST(ENABLE_PTHREADED_UBIK)
AC_SUBST(LIB_AFSDB)
AC_SUBST(LINUX_KERNEL_PATH)
AC_SUBST(LINUX_KERNEL_BUILD)
AC_SUBST(HOST_CPU)
AC_SUBST(BSD_KERNEL_PATH)
AC_SUBST(BSD_KERNEL_BUILD)
AC_SUBST(LINUX_VERSION)
AC_SUBST(MKAFS_OSTYPE)
AC_SUBST(TOP_OBJDIR)
AC_SUBST(TOP_SRCDIR)
AC_SUBST(TOP_INCDIR)
AC_SUBST(TOP_LIBDIR)
AC_SUBST(DEST)
AC_SUBST(DARWIN_INFOFILE)
AC_SUBST(IRIX_BUILD_IP35)
AC_SUBST(HTML_XSL)
AC_SUBST(XSLTPROC)
AC_SUBST(DOCBOOK2PDF)
AC_SUBST(DOCBOOK_STYLESHEETS)
OPENAFS_FUSE
OPENAFS_SWIG
TOP_SRCDIR="${srcdir}/src"
dnl
dnl If we're using ./configure, need a more reasonable TOP_SRCDIR, since relative links don't work everywhere
dnl
case $TOP_SRCDIR in
/*)
;;
*)
TOP_SRCDIR=`cd $TOP_SRCDIR; pwd`
;;
esac
TOP_OBJDIR="${SRCDIR_PARENT}"
TOP_INCDIR="${SRCDIR_PARENT}/include"
TOP_LIBDIR="${SRCDIR_PARENT}/lib"
if test "${DEST}x" = "x"; then
DEST="${SRCDIR_PARENT}/${AFS_SYSNAME}/dest"
fi
if test "x$with_crosstools_dir" != "x"; then
if test -f "$with_crosstools_dir/rxgen" -a -f "$with_crosstools_dir/compile_et" -a -f "$with_crosstools_dir/config"; then
COMPILE_ET_PATH=$with_crosstools_dir/compile_et
CONFIGTOOL_PATH=$with_crosstools_dir/config
RXGEN_PATH=$with_crosstools_dir/rxgen
else
AC_MSG_ERROR(Tools not found in $with_crosstools_dir)
exit 1
fi
else
COMPILE_ET_PATH="${SRCDIR_PARENT}/src/comerr/compile_et"
CONFIGTOOL_PATH="${SRCDIR_PARENT}/src/config/config"
RXGEN_PATH="${SRCDIR_PARENT}/src/rxgen/rxgen"
fi
AC_SUBST(COMPILE_ET_PATH)
AC_SUBST(CONFIGTOOL_PATH)
AC_SUBST(RXGEN_PATH)
HELPER_SPLINT="${TOP_SRCDIR}/helper-splint.sh"
HELPER_SPLINTCFG="${TOP_SRCDIR}/splint.cfg"
AC_SUBST(HELPER_SPLINT)
AC_SUBST(HELPER_SPLINTCFG)
mkdir -p ${TOP_OBJDIR}/src/JAVA/libjafs
dnl Check to see if crypt lives in a different library
AC_CHECK_LIB(crypt, crypt, LIB_crypt="-lcrypt")
AC_SUBST(LIB_crypt)
dnl Check to see if the compiler support labels in structs
AC_MSG_CHECKING(for label support in structs)
AC_TRY_COMPILE([], [
extern void osi_UFSOpen(void);
struct labeltest {
void (*open) (void);
};
struct labeltest struct_labeltest = {
.open = osi_UFSOpen,
}
],
[AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_STRUCT_LABEL_SUPPORT, 1, [Define to 1 if your compiler supports labels in structs.])
],
[AC_MSG_RESULT(no)
])
AC_MSG_CHECKING([checking for dirfd])
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif
]],
[[DIR *d = 0; dirfd(d);]])],
[ac_rk_have_dirfd=yes], [ac_rk_have_dirfd=no])
if test "$ac_rk_have_dirfd" = "yes" ; then
AC_DEFINE_UNQUOTED(HAVE_DIRFD, 1, [have a dirfd function/macro])
fi
AC_MSG_RESULT($ac_rk_have_dirfd)
OPENAFS_HAVE_STRUCT_FIELD(DIR, dd_fd, [#include <sys/types.h>
#ifdef HAVE_DIRENT_H
#include <dirent.h>
#endif])
OPENAFS_HAVE_STRUCT_FIELD(struct rusage, ru_idrss,
[#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif])
dnl Check for UUID library
AC_CHECK_HEADERS([uuid/uuid.h])
AC_CHECK_LIB(uuid, uuid_generate, LIBS_uuid="-luuid")
AC_CHECK_FUNCS([uuid_generate])
])