1 dnl test whether dirent has a d_off member
2 AC_DEFUN(AC_DIRENT_D_OFF,
3 [AC_CACHE_CHECK([for d_off in dirent], ac_cv_dirent_d_off,
7 #include <dirent.h>], [struct dirent d; d.d_off;],
8 ac_cv_dirent_d_off=yes, ac_cv_dirent_d_off=no)])
9 if test $ac_cv_dirent_d_off = yes; then
10 AC_DEFINE(HAVE_DIRENT_D_OFF,1,[Whether dirent has a d_off member])
14 dnl Mark specified module as shared
15 dnl SMB_MODULE(name,static_files,shared_files,subsystem,whatif-static,whatif-shared)
18 AC_MSG_CHECKING([how to build $1])
19 if test "$[MODULE_][$1]"; then
21 elif test "$[MODULE_]translit([$4], [A-Z], [a-z])" -a "$[MODULE_DEFAULT_][$1]"; then
22 DEST=$[MODULE_]translit([$4], [A-Z], [a-z])
24 DEST=$[MODULE_DEFAULT_][$1]
27 if test x"$DEST" = xSHARED; then
28 AC_DEFINE([$1][_init], [init_module], [Whether to build $1 as shared module])
29 $4_MODULES="$$4_MODULES $3"
30 AC_MSG_RESULT([shared])
32 string_shared_modules="$string_shared_modules $1"
33 elif test x"$DEST" = xSTATIC; then
34 [init_static_modules_]translit([$4], [A-Z], [a-z])="$[init_static_modules_]translit([$4], [A-Z], [a-z]) $1_init();"
35 [decl_static_modules_]translit([$4], [A-Z], [a-z])="$[decl_static_modules_]translit([$4], [A-Z], [a-z]) extern NTSTATUS $1_init(void);"
36 string_static_modules="$string_static_modules $1"
37 $4_STATIC="$$4_STATIC $2"
40 AC_MSG_RESULT([static])
42 string_ignored_modules="$string_ignored_modules $1"
47 AC_DEFUN(SMB_SUBSYSTEM,
51 AC_DEFINE_UNQUOTED([static_init_]translit([$1], [A-Z], [a-z]), [{$init_static_modules_]translit([$1], [A-Z], [a-z])[}], [Static init functions])
52 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])
53 ifelse([$2], , :, [rm -f $2])
56 dnl AC_LIBTESTFUNC(lib, function, [actions if found], [actions if not found])
57 dnl Check for a function in a library, but don't keep adding the same library
58 dnl to the LIBS variable. Check whether the function is available in the
59 dnl current LIBS before adding the library which prevents us spuriously
60 dnl adding libraries for symbols that are in libc.
62 dnl On success, the default actions ensure that HAVE_FOO is defined. The lib
63 dnl is always added to $LIBS if it was found to be necessary. The caller
64 dnl can use SMB_REMOVE_LIB to strp this if necessary.
65 AC_DEFUN([AC_LIBTESTFUNC],
69 # $2 was found in libc or existing $LIBS
75 AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
76 [Whether $2 is available])
80 # $2 was not found, try adding lib$1
88 # $2 was not found and we already had lib$1
89 # nothing to do here by default
94 # $2 was not found, try adding lib$1
103 AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
104 [Whether $2 is available])
113 # $2 was not found in lib$1
114 # nothing to do here by default
123 # AC_CHECK_LIB_EXT(LIBRARY, [EXT_LIBS], [FUNCTION],
124 # [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
125 # [ADD-ACTION-IF-FOUND],[OTHER-LIBRARIES])
126 # ------------------------------------------------------
128 # Use a cache variable name containing both the library and function name,
129 # because the test really is for library $1 defining function $3, not
130 # just for library $1. Separate tests with the same $1 and different $3s
131 # may have different results.
133 # Note that using directly AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$3])
134 # is asking for trouble, since AC_CHECK_LIB($lib, fun) would give
135 # ac_cv_lib_$lib_fun, which is definitely not what was meant. Hence
136 # the AS_LITERAL_IF indirection.
138 # FIXME: This macro is extremely suspicious. It DEFINEs unconditionally,
139 # whatever the FUNCTION, in addition to not being a *S macro. Note
140 # that the cache does depend upon the function we are looking for.
142 # It is on purpose we used `ac_check_lib_ext_save_LIBS' and not just
143 # `ac_save_LIBS': there are many macros which don't want to see `LIBS'
144 # changed but still want to use AC_CHECK_LIB_EXT, so they save `LIBS'.
145 # And ``ac_save_LIBS' is too tempting a name, so let's leave them some
147 AC_DEFUN([AC_CHECK_LIB_EXT],
149 AH_CHECK_LIB_EXT([$1])
150 ac_check_lib_ext_save_LIBS=$LIBS
151 LIBS="-l$1 $$2 $7 $LIBS"
153 [AS_VAR_PUSHDEF([ac_Lib_ext], [ac_cv_lib_ext_$1])],
154 [AS_VAR_PUSHDEF([ac_Lib_ext], [ac_cv_lib_ext_$1''])])dnl
158 AH_CHECK_FUNC_EXT([$3])
160 [AS_VAR_PUSHDEF([ac_Lib_func], [ac_cv_lib_ext_$1_$3])],
161 [AS_VAR_PUSHDEF([ac_Lib_func], [ac_cv_lib_ext_$1''_$3])])dnl
162 AC_CACHE_CHECK([for $3 in -l$1], ac_Lib_func,
163 [AC_TRY_LINK_FUNC($3,
164 [AS_VAR_SET(ac_Lib_func, yes);
165 AS_VAR_SET(ac_Lib_ext, yes)],
166 [AS_VAR_SET(ac_Lib_func, no);
167 AS_VAR_SET(ac_Lib_ext, no)])
169 AS_IF([test AS_VAR_GET(ac_Lib_func) = yes],
170 [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$3))])dnl
171 AS_VAR_POPDEF([ac_Lib_func])dnl
173 AC_CACHE_CHECK([for -l$1], ac_Lib_ext,
174 [AC_TRY_LINK_FUNC([main],
175 [AS_VAR_SET(ac_Lib_ext, yes)],
176 [AS_VAR_SET(ac_Lib_ext, no)])
179 LIBS=$ac_check_lib_ext_save_LIBS
181 AS_IF([test AS_VAR_GET(ac_Lib_ext) = yes],
183 [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_LIB$1))
194 AS_VAR_POPDEF([ac_Lib_ext])dnl
197 # AH_CHECK_LIB_EXT(LIBNAME)
198 # ---------------------
199 m4_define([AH_CHECK_LIB_EXT],
200 [AH_TEMPLATE(AS_TR_CPP(HAVE_LIB$1),
201 [Define to 1 if you have the `]$1[' library (-l]$1[).])])
203 # AC_CHECK_FUNCS_EXT(FUNCTION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
204 # -----------------------------------------------------------------
205 dnl check for a function in a $LIBS and $OTHER_LIBS libraries variable.
206 dnl AC_CHECK_FUNC_EXT(func,OTHER_LIBS,IF-TRUE,IF-FALSE)
207 AC_DEFUN([AC_CHECK_FUNC_EXT],
209 AH_CHECK_FUNC_EXT($1)
210 ac_check_func_ext_save_LIBS=$LIBS
212 AS_VAR_PUSHDEF([ac_var], [ac_cv_func_ext_$1])dnl
213 AC_CACHE_CHECK([for $1], ac_var,
214 [AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY([$1])],
215 [AS_VAR_SET(ac_var, yes)],
216 [AS_VAR_SET(ac_var, no)])])
217 LIBS=$ac_check_func_ext_save_LIBS
218 AS_IF([test AS_VAR_GET(ac_var) = yes],
219 [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1])) $3],
221 AS_VAR_POPDEF([ac_var])dnl
224 # AH_CHECK_FUNC_EXT(FUNCNAME)
225 # ---------------------
226 m4_define([AH_CHECK_FUNC_EXT],
227 [AH_TEMPLATE(AS_TR_CPP(HAVE_$1),
228 [Define to 1 if you have the `]$1[' function.])])
230 dnl Define an AC_DEFINE with ifndef guard.
231 dnl AC_N_DEFINE(VARIABLE [, VALUE])
233 [cat >> confdefs.h <<\EOF
235 [#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1)
241 dnl AC_ADD_INCLUDE(VARIABLE)
242 define(AC_ADD_INCLUDE,
243 [cat >> confdefs.h <<\EOF
248 dnl Copied from libtool.m4
249 AC_DEFUN(AC_PROG_LD_GNU,
250 [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
251 [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
252 if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
253 ac_cv_prog_gnu_ld=yes
259 dnl Removes -I/usr/include/? from given variable
260 AC_DEFUN(CFLAGS_REMOVE_USR_INCLUDE,[
264 -I/usr/include|-I/usr/include/) ;;
265 *) ac_new_flags="[$]ac_new_flags [$]i" ;;
271 dnl Removes '-L/usr/lib[/]', '-Wl,-rpath,/usr/lib[/]'
272 dnl and '-Wl,-rpath -Wl,/usr/lib[/]' from given variable
273 AC_DEFUN(LIB_REMOVE_USR_LIB,[
280 -Wl,-rpath,/usr/lib) ;;
281 -Wl,-rpath,/usr/lib/) ;;
283 -Wl,-rpath-Wl,/usr/lib) l="";;
284 -Wl,-rpath-Wl,/usr/lib/) l="";;
287 if test x"[$]ac_new_flags" = x""; then
290 if test x"[$]l" = x""; then
291 ac_new_flags="[$]ac_new_flags[$]s[$]i";
293 ac_new_flags="[$]ac_new_flags[$]s[$]l [$]i";
302 dnl From Bruno Haible.
306 dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
307 dnl those with the standalone portable libiconv installed).
308 AC_MSG_CHECKING(for iconv in $1)
309 jm_cv_func_iconv="no"
314 dnl Check for include in funny place but no lib needed
315 if test "$jm_cv_func_iconv" != yes; then
316 AC_TRY_LINK([#include <stdlib.h>
317 #include <giconv.h>],
318 [iconv_t cd = iconv_open("","");
319 iconv(cd,NULL,NULL,NULL,NULL);
322 jm_cv_include="giconv.h"
326 dnl Standard iconv.h include, lib in glibc or libc ...
327 if test "$jm_cv_func_iconv" != yes; then
328 AC_TRY_LINK([#include <stdlib.h>
330 [iconv_t cd = iconv_open("","");
331 iconv(cd,NULL,NULL,NULL,NULL);
333 jm_cv_include="iconv.h"
337 if test "$jm_cv_lib_iconv" != yes; then
339 LIBS="$LIBS -lgiconv"
340 AC_TRY_LINK([#include <stdlib.h>
341 #include <giconv.h>],
342 [iconv_t cd = iconv_open("","");
343 iconv(cd,NULL,NULL,NULL,NULL);
347 jm_cv_include="giconv.h"
349 jm_cv_lib_iconv="giconv")
353 if test "$jm_cv_func_iconv" != yes; then
356 AC_TRY_LINK([#include <stdlib.h>
358 [iconv_t cd = iconv_open("","");
359 iconv(cd,NULL,NULL,NULL,NULL);
361 jm_cv_include="iconv.h"
363 jm_cv_lib_iconv="iconv")
366 if test "$jm_cv_lib_iconv" != yes; then
368 LIBS="$LIBS -lbiconv"
369 AC_TRY_LINK([#include <stdlib.h>
370 #include <biconv.h>],
371 [iconv_t cd = iconv_open("","");
372 iconv(cd,NULL,NULL,NULL,NULL);
376 jm_cv_include="biconv.h"
378 jm_cv_lib_iconv="biconv")
386 if test "$jm_cv_func_iconv" = yes; then
387 if test "$jm_cv_giconv" = yes; then
388 AC_DEFINE(HAVE_GICONV, 1, [What header to include for iconv() function: giconv.h])
392 if test "$jm_cv_biconv" = yes; then
393 AC_DEFINE(HAVE_BICONV, 1, [What header to include for iconv() function: biconv.h])
397 AC_DEFINE(HAVE_ICONV, 1, [What header to include for iconv() function: iconv.h])
407 AC_DEFUN(rjs_CHARSET,[
408 dnl Find out if we can convert from $1 to UCS2-LE
409 AC_MSG_CHECKING([can we convert from $1 to UCS2-LE?])
411 #include <$jm_cv_include>
413 iconv_t cd = iconv_open("$1", "UCS-2LE");
414 if (cd == 0 || cd == (iconv_t)-1) {
419 ],ICONV_CHARSET=$1,ICONV_CHARSET=no,ICONV_CHARSET=cross)
420 AC_MSG_RESULT($ICONV_CHARSET)
423 dnl CFLAGS_ADD_DIR(CFLAGS, $INCDIR)
424 dnl This function doesn't add -I/usr/include into CFLAGS
425 AC_DEFUN(CFLAGS_ADD_DIR,[
426 if test "$2" != "/usr/include" ; then
431 dnl LIB_ADD_DIR(LDFLAGS, $LIBDIR)
432 dnl This function doesn't add -L/usr/lib into LDFLAGS
433 AC_DEFUN(LIB_ADD_DIR,[
434 if test "$2" != "/usr/lib" ; then
439 dnl AC_ENABLE_SHARED - implement the --enable-shared flag
440 dnl Usage: AC_ENABLE_SHARED[(DEFAULT)]
441 dnl Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
443 AC_DEFUN([AC_ENABLE_SHARED],
444 [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
445 AC_ARG_ENABLE(shared,
446 changequote(<<, >>)dnl
447 << --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
449 [p=${PACKAGE-default}
451 yes) enable_shared=yes ;;
452 no) enable_shared=no ;;
455 # Look at the argument we got. We use all the common list separators.
456 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
457 for pkg in $enableval; do
458 if test "X$pkg" = "X$p"; then
466 enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
469 dnl AC_ENABLE_STATIC - implement the --enable-static flag
470 dnl Usage: AC_ENABLE_STATIC[(DEFAULT)]
471 dnl Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
473 AC_DEFUN([AC_ENABLE_STATIC],
474 [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
475 AC_ARG_ENABLE(static,
476 changequote(<<, >>)dnl
477 << --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
479 [p=${PACKAGE-default}
481 yes) enable_static=yes ;;
482 no) enable_static=no ;;
485 # Look at the argument we got. We use all the common list separators.
486 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
487 for pkg in $enableval; do
488 if test "X$pkg" = "X$p"; then
495 enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
498 dnl AC_DISABLE_STATIC - set the default static flag to --disable-static
499 AC_DEFUN([AC_DISABLE_STATIC],
500 [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
501 AC_ENABLE_STATIC(no)])
503 dnl AC_TRY_RUN_STRICT(PROGRAM,CFLAGS,CPPFLAGS,LDFLAGS,
504 dnl [ACTION-IF-TRUE],[ACTION-IF-FALSE],
505 dnl [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR])
506 AC_DEFUN( [AC_TRY_RUN_STRICT],
508 old_CFLAGS="$CFLAGS";
511 old_CPPFLAGS="$CPPFLAGS";
514 old_LDFLAGS="$LDFLAGS";
517 AC_TRY_RUN([$1],[$5],[$6],[$7])
518 CFLAGS="$old_CFLAGS";
521 CPPFLAGS="$old_CPPFLAGS";
524 LDFLAGS="$old_LDFLAGS";
529 dnl SMB_CHECK_SYSCONF(varname)
530 dnl Tests whether the sysconf(3) variable "varname" is available.
531 AC_DEFUN([SMB_CHECK_SYSCONF],
533 AC_CACHE_CHECK([for sysconf($1)],
536 AC_TRY_LINK([#include <unistd.h>],
537 [ return sysconf($1) == -1 ? 1 : 0; ],
538 [ samba_cv_SYSCONF$1=yes ],
539 [ samba_cv_SYSCONF$1=no ])
542 if test x"$samba_cv_SYSCONF$1" = x"yes" ; then
543 AC_DEFINE(SYSCONF$1, 1, [Whether sysconf($1) is available])
547 dnl SMB_IS_LIBPTHREAD_LINKED([actions if true], [actions if false])
548 dnl Test whether the current LIBS results in libpthread being present.
549 dnl Execute the corresponding user action list.
550 AC_DEFUN([SMB_IS_LIBPTHREAD_LINKED],
552 AC_MSG_CHECKING(if libpthread is linked)
554 [return pthread_create(0, 0, 0, 0);],
565 dnl SMB_REMOVE_LIB(lib)
566 dnl Remove the given library from $LIBS
567 AC_DEFUN([SMB_REMOVE_LIB],
569 LIBS=`echo $LIBS | sed '-es/-l$1//g'`
572 dnl SMB_CHECK_DMAPI([actions if true], [actions if false])
573 dnl Check whether DMAPI is available and is a version that we know
574 dnl how to deal with. The default truth action is to set samba_dmapi_libs
575 dnl to the list of necessary libraries, and to define USE_DMAPI.
576 AC_DEFUN([SMB_CHECK_DMAPI],
580 if test x"$samba_dmapi_libs" = x"" ; then
581 AC_CHECK_LIB(dm, dm_get_eventlist,
582 [ samba_dmapi_libs="-ldm"], [])
585 if test x"$samba_dmapi_libs" = x"" ; then
586 AC_CHECK_LIB(jfsdm, dm_get_eventlist,
587 [samba_dmapi_libs="-ljfsdm"], [])
590 if test x"$samba_dmapi_libs" = x"" ; then
591 AC_CHECK_LIB(xdsm, dm_get_eventlist,
592 [samba_dmapi_libs="-lxdsm"], [])
595 if test x"$samba_dmapi_libs" = x"" ; then
596 AC_CHECK_LIB(dmapi, dm_get_eventlist,
597 [samba_dmapi_libs="-ldmapi"], [])
601 # Only bother to test ehaders if we have a candidate DMAPI library
602 if test x"$samba_dmapi_libs" != x"" ; then
603 AC_CHECK_HEADERS(sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h)
606 if test x"$samba_dmapi_libs" != x"" ; then
607 samba_dmapi_save_LIBS="$LIBS"
608 LIBS="$LIBS $samba_dmapi_libs"
611 #include <time.h> /* needed by Tru64 */
612 #include <sys/types.h> /* needed by AIX */
613 #ifdef HAVE_XFS_DMAPI_H
614 #include <xfs/dmapi.h>
615 #elif defined(HAVE_SYS_DMI_H)
617 #elif defined(HAVE_SYS_JFSDMAPI_H)
618 #include <sys/jfsdmapi.h>
619 #elif defined(HAVE_SYS_DMAPI_H)
620 #include <sys/dmapi.h>
621 #elif defined(HAVE_DMAPI_H)
626 /* This link test is designed to fail on IRI 6.4, but should
627 * succeed on Linux, IRIX 6.5 and AIX.
630 dm_eventset_t events;
631 /* This doesn't take an argument on IRIX 6.4. */
632 dm_init_service(&version);
633 /* IRIX 6.4 expects events to be a pointer. */
634 DMEV_ISSET(DM_EVENT_READ, events);
637 true # DMAPI link test succeeded
643 LIBS="$samba_dmapi_save_LIBS"
646 if test x"$samba_dmapi_libs" = x"" ; then
647 # DMAPI detection failure actions begin
650 AC_ERROR(Failed to detect a supported DMAPI implementation)
655 # DMAPI detection failure actions end
657 # DMAPI detection success actions start
660 AC_DEFINE(USE_DMAPI, 1,
661 [Whether we should build DMAPI integration components])
662 AC_MSG_NOTICE(Found DMAPI support in $samba_dmapi_libs)
667 # DMAPI detection success actions end
672 dnl SMB_CHECK_CLOCK_ID(clockid)
673 dnl Test whether the specified clock_gettime clock ID is available. If it
674 dnl is, we define HAVE_clockid
675 AC_DEFUN([SMB_CHECK_CLOCK_ID],
677 AC_MSG_CHECKING(for $1)
679 #if TIME_WITH_SYS_TIME
680 # include <sys/time.h>
684 # include <sys/time.h>
695 AC_DEFINE(HAVE_$1, 1,
696 [Whether the clock_gettime clock ID $1 is available])
703 dnl SMB_IF_RTSIGNAL_BUG([actions if true],
704 dnl [actions if false],
705 dnl [actions if cross compiling])
706 dnl Test whether we can call sigaction with RT_SIGNAL_NOTIFY and
707 dnl RT_SIGNAL_LEASE (also RT_SIGNAL_AIO for good measure, though
708 dnl I don't believe that triggers any bug.
710 dnl See the samba-technical thread titled "Failed to setup
711 dnl RT_SIGNAL_NOTIFY handler" for details on the bug in question.
712 AC_DEFUN([SMB_IF_RTSIGNAL_BUG],
714 rt_signal_notify_works=yes
715 rt_signal_lease_works=yes
716 rt_signal_aio_works=yes
718 AC_MSG_CHECKING(if sigaction works with realtime signals)
721 #include <sys/types.h>
725 /* from smbd/notify_kernel.c */
726 #ifndef RT_SIGNAL_NOTIFY
727 #define RT_SIGNAL_NOTIFY (SIGRTMIN+2)
730 /* from smbd/aio.c */
731 #ifndef RT_SIGNAL_AIO
732 #define RT_SIGNAL_AIO (SIGRTMIN+3)
735 /* from smbd/oplock_linux.c */
736 #ifndef RT_SIGNAL_LEASE
737 #define RT_SIGNAL_LEASE (SIGRTMIN+1)
740 static void signal_handler(int sig, siginfo_t *info, void *unused)
748 struct sigaction act = {0};
750 act.sa_sigaction = signal_handler;
751 act.sa_flags = SA_SIGINFO;
752 sigemptyset( &act.sa_mask );
754 if (sigaction(RT_SIGNAL_LEASE, &act, 0) != 0) {
755 /* Failed to setup RT_SIGNAL_LEASE handler */
759 if (sigaction(RT_SIGNAL_NOTIFY, &act, 0) != 0) {
760 /* Failed to setup RT_SIGNAL_NOTIFY handler */
764 if (sigaction(RT_SIGNAL_AIO, &act, 0) != 0) {
765 /* Failed to setup RT_SIGNAL_AIO handler */
769 /* zero on success */
780 1|11|101|111) rt_signal_lease_ok=no ;;
783 10|11|110|111) rt_signal_notify_ok=no ;;
786 100|110|101|111) rt_signal_aio_ok=no ;;
796 m4_include(lib/replace/libreplace.m4)