summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/aclocal.m491
-rw-r--r--source3/configure.in25
-rw-r--r--source3/smbd/dmapi.c6
3 files changed, 92 insertions, 30 deletions
diff --git a/source3/aclocal.m4 b/source3/aclocal.m4
index cc2543291f..8abecd216f 100644
--- a/source3/aclocal.m4
+++ b/source3/aclocal.m4
@@ -852,3 +852,94 @@ AC_DEFUN([SMB_REMOVELIB],
LIBS=`echo $LIBS | sed -es/-l$1//g`
])
+dnl SMB_CHECK_DMAPI([actions if true], [actions if false])
+dnl Check whether DMAPI is available and is a version that we know
+dnl how to deal with. The default truth action is to set samba_dmapi_libs
+dnl to the list of necessary libraries, and to define USE_DMAPI.
+AC_DEFUN([SMB_CHECK_DMAPI],
+[
+ samba_dmapi_libs=""
+
+ if test x"$samba_dmapi_libs" = x"" ; then
+ AC_CHECK_LIB(dm, dm_get_eventlist,
+ [ samba_dmapi_libs="-ldm"], [])
+ fi
+
+ if test x"$samba_dmapi_libs" = x"" ; then
+ AC_CHECK_LIB(jfsdm, dm_get_eventlist,
+ [samba_dmapi_libs="-ljfsdm"], [])
+ fi
+
+ if test x"$samba_dmapi_libs" = x"" ; then
+ AC_CHECK_LIB(xdsm, dm_get_eventlist,
+ [samba_dmapi_libs="-lxdsm"], [])
+ fi
+
+ # Only bother to test ehaders if we have a candidate DMAPI library
+ if test x"$samba_dmapi_libs" != x"" ; then
+ AC_CHECK_HEADERS(sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h)
+ fi
+
+ if test x"$samba_dmapi_libs" != x"" ; then
+ samba_dmapi_save_LIBS="$LIBS"
+ LIBS="$LIBS $samba_dmapi_libs"
+ AC_TRY_LINK(
+ [
+#ifdef HAVE_XFS_DMAPI_H
+#include <xfs/dmapi.h>
+#elif defined(HAVE_SYS_DMI_H)
+#include <sys/dmi.h>
+#elif defined(HAVE_SYS_JFSDMAPI_H)
+#include <sys/jfsdmapi.h>
+#elif defined(HAVE_SYS_DMAPI_H)
+#include <sys/dmapi.h>
+#endif
+ ],
+ [
+/* This link test is designed to fail on IRI 6.4, but should
+ * succeed on Linux, IRIX 6.5 and AIX.
+ */
+void main(void) {
+ char * version;
+ dm_eventset_t events;
+ /* This doesn't take an argument on IRIX 6.4. */
+ dm_init_service(&version);
+ /* IRIX 6.4 expects events to be a pointer. */
+ DMEV_ISSET(DM_EVENT_READ, events);
+}
+ ],
+ [
+ true # DMAPI link test succeeded
+ ],
+ [
+ # DMAPI link failure
+ samba_dmapi_libs=
+ ])
+ LIBS="$samba_dmapi_save_LIBS"
+ fi
+
+ if test x"$samba_dmapi_libs" = x"" ; then
+ # DMAPI detection failure actions begin
+ ifelse($2, [],
+ [
+ AC_ERROR(Failed to detect a supported DMAPI implementation)
+ ],
+ [
+ $2
+ ])
+ # DMAPI detection failure actions end
+ else
+ # DMAPI detection success actions start
+ ifelse($1, [],
+ [
+ AC_DEFINE(USE_DMAPI, 1,
+ [Whether we should build DMAPI integration components])
+ AC_MSG_NOTICE(Found DMAPI support in $samba_dmapi_libs)
+ ],
+ [
+ $1
+ ])
+ # DMAPI detection success actions end
+ fi
+
+])
diff --git a/source3/configure.in b/source3/configure.in
index 17ca07fc18..f8eba2349f 100644
--- a/source3/configure.in
+++ b/source3/configure.in
@@ -849,7 +849,6 @@ AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h s
AC_CHECK_HEADERS(sys/sysmacros.h security/_pam_macros.h dlfcn.h)
AC_CHECK_HEADERS(sys/syslog.h syslog.h)
AC_CHECK_HEADERS(langinfo.h locale.h)
-AC_CHECK_HEADERS(sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h)
AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
#if HAVE_RPC_RPC_H
@@ -2473,29 +2472,7 @@ fi
#################################################
# Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
-AC_CHECK_LIB(dm, dm_get_eventlist,
- [samba_cv_HAVE_LIBDM=yes; samba_dmapi_libs="-ldm"],
- [samba_cv_HAVE_LIBDM=no])
-
-if test x"$samba_cv_HAVE_LIBDM" = x"yes" ; then
- AC_DEFINE(HAVE_LIBDM, 1, [Whether dmapi libdm is available])
-fi
-
-AC_CHECK_LIB(jfsdm, dm_get_eventlist,
- [samba_cv_HAVE_LIBJFSDM=yes; samba_dmapi_libs="-ljfsdm"],
- [samba_cv_HAVE_LIBJFSDM=no])
-
-if test x"$samba_cv_HAVE_LIBJFSDM" = x"yes" ; then
- AC_DEFINE(HAVE_LIBJFSDM, 1, [Whether dmapi libjfsdm is available])
-fi
-
-AC_CHECK_LIB(xdsm, dm_get_eventlist,
- [samba_cv_HAVE_LIBXDSM=yes; samba_dmapi_libs="-lxdsm"],
- [samba_cv_HAVE_LIBXDSM=no])
-
-if test x"$samba_cv_HAVE_LIBXDSM" = x"yes" ; then
- AC_DEFINE(HAVE_LIBXDSM, 1, [Whether dmapi libxdsm is available])
-fi
+SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
AC_TRY_RUN([
diff --git a/source3/smbd/dmapi.c b/source3/smbd/dmapi.c
index 4a6cba293b..a9d83c782b 100644
--- a/source3/smbd/dmapi.c
+++ b/source3/smbd/dmapi.c
@@ -24,12 +24,6 @@
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_DMAPI
-#if defined(HAVE_LIBDM) || defined(HAVE_LIBJFSDM) || defined(HAVE_LIBXDSM)
-#if defined(HAVE_XFS_DMAPI_H) || defined(HAVE_SYS_DMI_H) || defined(HAVE_SYS_JFSDMAPI_H) || defined(HAVE_SYS_DMAPI_H)
-#define USE_DMAPI 1
-#endif
-#endif
-
#ifndef USE_DMAPI
int dmapi_init_session(void) { return -1; }