$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
])
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)
])
-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],
# 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.
#
*-l$1*)
;;
*)
- $2="$$2 -l$1"
+ $2="-l$1 $$2"
;;
esac])
[$6]
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=""
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>],
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>],
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"
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"
[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
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,[
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;
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
+ ])
+])
+