r16945: Sync trunk -> 3.0 for 3.0.24 code. Still need
[vlendec/samba-autobuild/.git] / source3 / aclocal.m4
index a6aa1bb1de3998ba908b6adce1d1aa0b1984b16f..1f2120c68b3f538edd05b9a051376d0a3045ff8e 100644 (file)
@@ -54,14 +54,17 @@ AC_DEFUN(SMB_MODULE,
                $4_MODULES="$$4_MODULES $3"
                AC_MSG_RESULT([shared])
                [$6]
+               string_shared_modules="$string_shared_modules $1"
        elif test x"$DEST" = xSTATIC; then
-               [init_static_modules_]translit([$4], [A-Z], [a-z])="$[init_static_modules_]translit([$4], [A-Z], [a-z]) $1_init();"
+               [init_static_modules_]translit([$4], [A-Z], [a-z])="$[init_static_modules_]translit([$4], [A-Z], [a-z])  $1_init();"
+               [decl_static_modules_]translit([$4], [A-Z], [a-z])="$[decl_static_modules_]translit([$4], [A-Z], [a-z]) extern NTSTATUS $1_init(void);"
                string_static_modules="$string_static_modules $1"
                $4_STATIC="$$4_STATIC $2"
                AC_SUBST($4_STATIC)
                [$5]
                AC_MSG_RESULT([static])
        else
+           string_ignored_modules="$string_ignored_modules $1"
                AC_MSG_RESULT([not])
        fi
 ])
@@ -71,7 +74,8 @@ AC_DEFUN(SMB_SUBSYSTEM,
        AC_SUBST($1_STATIC)
        AC_SUBST($1_MODULES)
        AC_DEFINE_UNQUOTED([static_init_]translit([$1], [A-Z], [a-z]), [{$init_static_modules_]translit([$1], [A-Z], [a-z])[}], [Static init functions])
-       ifelse([$2], , :, [touch $2])
+       AC_DEFINE_UNQUOTED([static_decl_]translit([$1], [A-Z], [a-z]), [$decl_static_modules_]translit([$1], [A-Z], [a-z]), [Decl of Static init functions])
+       ifelse([$2], , :, [rm -f $2])
 ])
 
 dnl AC_PROG_CC_FLAG(flag)
@@ -100,16 +104,67 @@ AC_DEFUN(AC_HAVE_DECL,
 ])
 
 
-dnl check for a function in a library, but don't
-dnl keep adding the same library to the LIBS variable.
-dnl AC_LIBTESTFUNC(lib,func)
-AC_DEFUN(AC_LIBTESTFUNC,
-[case "$LIBS" in
-  *-l$1*) AC_CHECK_FUNCS($2) ;;
-  *) AC_CHECK_LIB($1, $2) 
-     AC_CHECK_FUNCS($2)
-  ;;
-  esac
+dnl AC_LIBTESTFUNC(lib, function, [actions if found], [actions if not found])
+dnl Check for a function in a library, but don't keep adding the same library
+dnl to the LIBS variable.  Check whether the function is available in the
+dnl current LIBS before adding the library which prevents us spuriously
+dnl adding libraries for symbols that are in libc.
+dnl
+dnl On success, the default actions ensure that HAVE_FOO is defined. The lib
+dnl is always added to $LIBS if it was found to be necessary. The caller
+dnl can use SMB_LIB_REMOVE to strp this if necessary.
+AC_DEFUN([AC_LIBTESTFUNC],
+[
+  AC_CHECK_FUNCS($2,
+      [
+        # $2 was found in libc or existing $LIBS
+       ifelse($3, [],
+           [
+               AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
+                   [Whether $2 is available])
+           ],
+           [
+               $3
+           ])
+      ],
+      [
+        # $2 was not found, try adding lib$1
+       case " $LIBS " in
+          *\ -l$1\ *)
+           ifelse($4, [],
+               [
+                   # $2 was not found and we already had lib$1
+                   # nothing to do here by default
+                   true
+               ],
+               [ $4 ])
+           ;;
+          *)
+           # $2 was not found, try adding lib$1
+           AC_CHECK_LIB($1, $2,
+             [
+               LIBS="-l$1 $LIBS"
+               ifelse($3, [],
+                   [
+                       AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
+                           [Whether $2 is available])
+                   ],
+                   [
+                       $3
+                   ])
+             ],
+             [
+               ifelse($4, [],
+                   [
+                       # $2 was not found in lib$1
+                       # nothing to do here by default
+                       true
+                   ],
+                   [ $4 ])
+             ])
+         ;;
+        esac
+      ])
 ])
 
 # AC_CHECK_LIB_EXT(LIBRARY, [EXT_LIBS], [FUNCTION],
@@ -123,11 +178,11 @@ AC_DEFUN(AC_LIBTESTFUNC,
 # may have different results.
 #
 # Note that using directly AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$3])
-# is asking for troubles, since AC_CHECK_LIB($lib, fun) would give
+# is asking for trouble, since AC_CHECK_LIB($lib, fun) would give
 # ac_cv_lib_$lib_fun, which is definitely not what was meant.  Hence
 # the AS_LITERAL_IF indirection.
 #
-# FIXME: This macro is extremely suspicious.  It DEFINEs unconditionnally,
+# FIXME: This macro is extremely suspicious.  It DEFINEs unconditionally,
 # whatever the FUNCTION, in addition to not being a *S macro.  Note
 # that the cache does depend upon the function we are looking for.
 #
@@ -177,7 +232,7 @@ AS_IF([test AS_VAR_GET(ac_Lib_ext) = yes],
                    *-l$1*)
                        ;;
                    *)
-                       $2="$$2 -l$1"
+                       $2="-l$1 $$2"
                        ;;
                esac])
                [$6]
@@ -482,6 +537,51 @@ AC_ARG_WITH(mysql-exec-prefix,[  --with-mysql-exec-prefix=PFX Exec prefix where
   AC_SUBST(MYSQL_LIBS)
 ])
 
+# =========================================================================
+# AM_PATH_PGSQL : pgSQL library
+
+dnl AM_PATH_PGSQL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
+dnl Test for PGSQL, and define PGSQL_CFLAGS and PGSQL_LIBS
+dnl
+AC_DEFUN(AM_PATH_PGSQL,
+[dnl
+dnl Get the cflags and libraries from the pg_config script
+dnl
+AC_ARG_WITH(pgsql-prefix,[  --with-pgsql-prefix=PFX   Prefix where PostgreSQL is installed (optional)],
+            pgsql_prefix="$withval", pgsql_prefix="")
+AC_ARG_WITH(pgsql-exec-prefix,[  --with-pgsql-exec-prefix=PFX Exec prefix where PostgreSQL is installed (optional)],
+            pgsql_exec_prefix="$withval", pgsql_exec_prefix="")
+
+  if test x$pgsql_exec_prefix != x ; then
+     if test x${PGSQL_CONFIG+set} != xset ; then
+        PGSQL_CONFIG=$pgsql_exec_prefix/bin/pg_config
+     fi
+  fi
+  if test x$pgsql_prefix != x ; then
+     if test x${PGSQL_CONFIG+set} != xset ; then
+        PGSQL_CONFIG=$pgsql_prefix/bin/pg_config
+     fi
+  fi
+
+  AC_REQUIRE([AC_CANONICAL_TARGET])
+  AC_PATH_PROG(PGSQL_CONFIG, pg_config, no, [$PATH:/usr/lib/postgresql/bin])
+  AC_MSG_CHECKING(for PGSQL)
+  no_pgsql=""
+  if test "$PGSQL_CONFIG" = "no" ; then
+    PGSQL_CFLAGS=""
+    PGSQL_LIBS=""
+    AC_MSG_RESULT(no)
+     ifelse([$2], , :, [$2])
+  else
+    PGSQL_CFLAGS=-I`$PGSQL_CONFIG --includedir`
+    PGSQL_LIBS="-lpq -L`$PGSQL_CONFIG --libdir`"
+    AC_MSG_RESULT(yes)
+    ifelse([$1], , :, [$1])
+  fi
+  AC_SUBST(PGSQL_CFLAGS)
+  AC_SUBST(PGSQL_LIBS)
+])
+
 dnl Removes -I/usr/include/? from given variable
 AC_DEFUN(CFLAGS_REMOVE_USR_INCLUDE,[
   ac_new_flags=""
@@ -514,21 +614,11 @@ AC_DEFUN(jm_ICONV,
   dnl those with the standalone portable libiconv installed).
   AC_MSG_CHECKING(for iconv in $1)
     jm_cv_func_iconv="no"
-    jm_cv_lib_iconv=no
+    jm_cv_lib_iconv=""
     jm_cv_giconv=no
     jm_save_LIBS="$LIBS"
-    LIBS="$LIBS -lbiconv"
-    AC_TRY_LINK([#include <stdlib.h>
-#include <biconv.h>],
-        [iconv_t cd = iconv_open("","");
-         iconv(cd,NULL,NULL,NULL,NULL);
-         iconv_close(cd);],
-      jm_cv_func_iconv=yes
-      jm_cv_biconv=yes
-      jm_cv_include="biconv.h"
-      jm_cv_lib_iconv="yes")
-      LIBS="$jm_save_LIBS"
 
+    dnl Check for include in funny place but no lib needed
     if test "$jm_cv_func_iconv" != yes; then 
       AC_TRY_LINK([#include <stdlib.h>
 #include <giconv.h>],
@@ -537,8 +627,10 @@ AC_DEFUN(jm_ICONV,
          iconv_close(cd);],
          jm_cv_func_iconv=yes
          jm_cv_include="giconv.h"
-         jm_cv_giconv="yes")
+         jm_cv_giconv="yes"
+         jm_cv_lib_iconv="")
 
+      dnl Standard iconv.h include, lib in glibc or libc ...
       if test "$jm_cv_func_iconv" != yes; then
         AC_TRY_LINK([#include <stdlib.h>
 #include <iconv.h>],
@@ -546,7 +638,8 @@ AC_DEFUN(jm_ICONV,
            iconv(cd,NULL,NULL,NULL,NULL);
            iconv_close(cd);],
            jm_cv_include="iconv.h"
-           jm_cv_func_iconv=yes)
+           jm_cv_func_iconv=yes
+           jm_cv_lib_iconv="")
 
           if test "$jm_cv_lib_iconv" != yes; then
             jm_save_LIBS="$LIBS"
@@ -559,8 +652,10 @@ AC_DEFUN(jm_ICONV,
               jm_cv_lib_iconv=yes
               jm_cv_func_iconv=yes
               jm_cv_include="giconv.h"
-              jm_cv_giconv=yes)
-            LIBS="$jm_save_LIBS"
+              jm_cv_giconv=yes
+              jm_cv_lib_iconv="giconv")
+
+           LIBS="$jm_save_LIBS"
 
         if test "$jm_cv_func_iconv" != yes; then
           jm_save_LIBS="$LIBS"
@@ -570,9 +665,9 @@ AC_DEFUN(jm_ICONV,
             [iconv_t cd = iconv_open("","");
              iconv(cd,NULL,NULL,NULL,NULL);
              iconv_close(cd);],
-            jm_cv_lib_iconv=yes
             jm_cv_include="iconv.h"
-            jm_cv_func_iconv=yes)
+            jm_cv_func_iconv=yes
+            jm_cv_lib_iconv="iconv")
           LIBS="$jm_save_LIBS"
         fi
       fi
@@ -597,17 +692,6 @@ AC_DEFUN(jm_ICONV,
   else
     AC_MSG_RESULT(no)
   fi
-  if test "$jm_cv_lib_iconv" = yes; then
-    if test "$jm_cv_giconv" = yes; then
-      LIBS="$LIBS -lgiconv"
-    else
-      if test "$jm_cv_biconv" = yes; then
-        LIBS="$LIBS -lbiconv"
-      else
-        LIBS="$LIBS -liconv"
-      fi
-    fi
-  fi
 ])
 
 AC_DEFUN(rjs_CHARSET,[
@@ -720,7 +804,7 @@ AC_DEFUN( [AC_TRY_RUN_STRICT],
        old_LDFLAGS="$LDFLAGS";
        LDFLAGS="$4";
        export LDFLAGS;
-       AC_TRY_RUN([$1],[$5],[$6],[$7]);
+       AC_TRY_RUN([$1],[$5],[$6],[$7])
        CFLAGS="$old_CFLAGS";
        old_CFLAGS="";
        export CFLAGS;
@@ -731,3 +815,263 @@ AC_DEFUN( [AC_TRY_RUN_STRICT],
        old_LDFLAGS="";
        export LDFLAGS;
 ])
+
+dnl SMB_CHECK_SYSCONF(varname)
+dnl Tests whether the sysconf(3) variable "varname" is available.
+AC_DEFUN([SMB_CHECK_SYSCONF],
+[
+    AC_CACHE_CHECK([for sysconf($1)],
+       samba_cv_SYSCONF$1,
+       [
+           AC_TRY_LINK([#include <unistd.h>],
+               [ return sysconf($1) == -1 ? 1 : 0; ],
+               [ samba_cv_SYSCONF$1=yes ],
+               [ samba_cv_SYSCONF$1=no ])
+       ])
+
+    if test x"$samba_cv_SYSCONF$1" = x"yes" ; then
+       AC_DEFINE(SYSCONF$1, 1, [Whether sysconf($1) is available])
+    fi
+])
+
+dnl SMB_IS_LIBPTHREAD_LINKED([actions if true], [actions if false])
+dnl Test whether the current LIBS results in libpthread being present.
+dnl Execute the corresponding user action list.
+AC_DEFUN([SMB_IS_LIBPTHREAD_LINKED],
+[
+    AC_MSG_CHECKING(if libpthread is linked)
+    AC_TRY_LINK([],
+       [return pthread_create(0, 0, 0, 0);],
+       [
+           AC_MSG_RESULT(yes)
+           $1
+       ],
+       [
+           AC_MSG_RESULT(no)
+           $2
+       ])
+])
+
+dnl SMB_REMOVE_LIB(lib)
+dnl Remove the given library from $LIBS
+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(
+               [
+#include <time.h>      /* needed by Tru64 */
+#include <sys/types.h> /* needed by AIX */
+#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.
+ */
+       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
+
+])
+
+dnl SMB_CHECK_CLOCK_ID(clockid)
+dnl Test whether the specified clock_gettime clock ID is available. If it
+dnl is, we define HAVE_clockid
+AC_DEFUN([SMB_CHECK_CLOCK_ID],
+[
+    AC_MSG_CHECKING(for $1)
+    AC_TRY_LINK([
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+    ],
+    [
+clockid_t clk = $1;
+    ],
+    [
+       AC_MSG_RESULT(yes)
+       AC_DEFINE(HAVE_$1, 1,
+           [Whether the clock_gettime clock ID $1 is available])
+    ],
+    [
+       AC_MSG_RESULT(no)
+    ])
+])
+
+dnl SMB_IF_RTSIGNAL_BUG([actions if true],
+dnl                    [actions if false],
+dnl                    [actions if cross compiling])
+dnl Test whether we can call sigaction with RT_SIGNAL_NOTIFY and
+dnl RT_SIGNAL_LEASE (also RT_SIGNAL_AIO for good measure, though
+dnl I don't believe that triggers any bug.
+dnl
+dnl See the samba-technical thread titled "Failed to setup
+dnl RT_SIGNAL_NOTIFY handler" for details on the bug in question.
+AC_DEFUN([SMB_IF_RTSIGNAL_BUG],
+[
+    rt_signal_notify_works=yes
+    rt_signal_lease_works=yes
+    rt_signal_aio_works=yes
+
+    AC_MSG_CHECKING(if sigaction works with realtime signals)
+    AC_TRY_RUN(
+       [
+#include <sys/types.h>
+#include <fcntl.h>
+#include <signal.h>
+
+/* from smbd/notify_kernel.c */
+#ifndef RT_SIGNAL_NOTIFY
+#define RT_SIGNAL_NOTIFY (SIGRTMIN+2)
+#endif
+
+/* from smbd/aio.c */
+#ifndef RT_SIGNAL_AIO
+#define RT_SIGNAL_AIO (SIGRTMIN+3)
+#endif
+
+/* from smbd/oplock_linux.c */
+#ifndef RT_SIGNAL_LEASE
+#define RT_SIGNAL_LEASE (SIGRTMIN+1)
+#endif
+
+static void signal_handler(int sig, siginfo_t *info, void *unused)
+{
+    int do_nothing = 0;
+}
+
+int main(void)
+{
+    int result = 0;
+    struct sigaction act = {0};
+
+    act.sa_sigaction = signal_handler;
+    act.sa_flags = SA_SIGINFO;
+    sigemptyset( &act.sa_mask );
+
+    if (sigaction(RT_SIGNAL_LEASE, &act, 0) != 0) {
+           /* Failed to setup RT_SIGNAL_LEASE handler */
+           result += 1;
+    }
+
+    if (sigaction(RT_SIGNAL_NOTIFY, &act, 0) != 0) {
+           /* Failed to setup RT_SIGNAL_NOTIFY handler */
+           result += 10;
+    }
+
+    if (sigaction(RT_SIGNAL_AIO, &act, 0) != 0) {
+           /* Failed to setup RT_SIGNAL_AIO handler */
+           result += 100;
+    }
+
+    /* zero on success */
+    return result;
+}
+       ],
+       [
+           AC_MSG_RESULT(yes)
+           $2
+       ],
+       [
+           AC_MSG_RESULT(no)
+           case "$ac_status" in
+               1|11|101|111)  rt_signal_lease_ok=no ;;
+           esac
+           case "$ac_status" in
+               10|11|110|111)  rt_signal_notify_ok=no ;;
+           esac
+           case "$ac_status" in
+               100|110|101|111)  rt_signal_aio_ok=no ;;
+           esac
+           $2
+       ],
+       [
+           AC_MSG_RESULT(cross)
+           $3
+       ])
+])
+