diff options
-rw-r--r-- | source3/aclocal.m4 | 91 | ||||
-rw-r--r-- | source3/configure.in | 25 | ||||
-rw-r--r-- | source3/smbd/dmapi.c | 6 |
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; } |