netapi: add NetUserSetGroups to public header.
[Samba/gbeck.git] / source3 / m4 / aclocal.m4
blob9a4213d9767cb72e9d1e2e5b04d2282c8124dd03
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,
4 [AC_TRY_COMPILE([
5 #include <unistd.h>
6 #include <sys/types.h>
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)
16 AC_DEFUN(SMB_MODULE,
18         AC_MSG_CHECKING([how to build $1])
19         if test "$[MODULE_][$1]"; then
20                 DEST=$[MODULE_][$1]
21         elif test "$[MODULE_]translit([$4], [A-Z], [a-z])" -a "$[MODULE_DEFAULT_][$1]"; then
22                 DEST=$[MODULE_]translit([$4], [A-Z], [a-z])
23         else
24                 DEST=$[MODULE_DEFAULT_][$1]
25         fi
26         
27         if test x"$DEST" = xSHARED; then
28                 AC_DEFINE([$1][_init], [init_samba_module], [Whether to build $1 as shared module])
29                 $4_MODULES="$$4_MODULES $3"
30                 AC_MSG_RESULT([shared])
31                 [$6]
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"
38                 AC_SUBST($4_STATIC)
39                 [$5]
40                 AC_MSG_RESULT([static])
41         else
42             string_ignored_modules="$string_ignored_modules $1"
43                 AC_MSG_RESULT([not])
44         fi
47 AC_DEFUN(SMB_SUBSYSTEM,
49         AC_SUBST($1_STATIC)
50         AC_SUBST($1_MODULES)
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])
57 dnl SMB_LIBRARY(name, version, default, reason)
58 dnl
59 dnl configure build and use of an (internal) shared library
60 dnl
61 AC_DEFUN([SMB_LIBRARY],
63 m4_pushdef([LIBNAME], [lib$1])
64 m4_pushdef([LIBUC], [m4_toupper(LIBNAME)])
65 m4_pushdef([LIBLIBS], [-l$1])
67 LIBUC[_SHARED_TARGET]=bin/LIBNAME.$SHLIBEXT
68 LIBUC[_STATIC_TARGET]=bin/LIBNAME.a
69 LIBUC[_SHARED]=
70 LIBUC[_STATIC]=
71 LIBUC[_LIBS]=
72 [INSTALL_]LIBUC=
73 [UNINSTALL_]LIBUC=
75 m4_if([$2], [], [LIBUC[_SOVER]=0], [LIBUC[_SOVER]=$2])
77 AC_SUBST(LIBUC[_SHARED_TARGET])
78 AC_SUBST(LIBUC[_STATIC_TARGET])
79 AC_SUBST(LIBUC[_SHARED])
80 AC_SUBST(LIBUC[_STATIC])
81 AC_SUBST(LIBUC[_LIBS])
82 AC_SUBST([INSTALL_]LIBUC)
83 AC_SUBST([UNINSTALL_]LIBUC)
84 AC_SUBST(LIBUC[_SOVER])
86 AC_MSG_CHECKING([whether to build the LIBNAME shared library])
87 m4_if([$3], [no], [
88 dnl set the default to not build the shared lib
89 AC_ARG_WITH(LIBNAME,
90 AS_HELP_STRING([--with-]LIBNAME,
91         m4_if([$4], [],
92                 [Build the LIBNAME shared library (default=no)],
93                 [Build the LIBNAME shared library (default=no ($4))])),
95 case "$withval" in
96         yes)
97                 build_lib=yes
98                 ;;
99         *)
100                 AC_MSG_RESULT(yes)
101                 build_lib=no
102                 ;;
103 esac
106 # if unspecified, default is not to build
107 AC_MSG_RESULT(yes)
108 build_lib=no
112 dnl by default, try to build the shared lib
113 AC_ARG_WITH(LIBNAME,
114 AS_HELP_STRING([--with-]LIBNAME,
115         [Build the LIBNAME shared library (default=yes if shared libs supported)]),
117 case "$withval" in
118         no)
119                 AC_MSG_RESULT(no)
120                 build_lib=no
121                 ;;
122         *)
123                 build_lib=yes
124                 ;;
125 esac
128 # if unspecified, default is to build it if possible.
129 build_lib=yes
134 if eval test x"$build_lib" = "xyes" ; then
135         # only set the install targets if the user chose the library
136         [INSTALL_]LIBUC=[install]LIBNAME
137         [UNINSTALL_]LIBUC=[uninstall]LIBNAME
138         if eval $BLDSHARED = true; then
139                 LIBUC[_SHARED]=$LIBUC[_SHARED_TARGET]
140                 AC_MSG_RESULT(yes)
141                 if test x"$USESHARED" != x"true" -o x"$[LINK_]LIBUC" = "xSTATIC" ; then
142                         enable_static=yes
143                 else
144                         LIBUC[_LIBS]=LIBLIBS
145                 fi
146         else
147                 enable_static=yes
148                 AC_MSG_RESULT(no shared library support -- will supply static library)
149         fi
150 else
151         enable_static=yes
152         AC_MSG_RESULT(shared library not selected, but will supply static library)
154 if test $enable_static = yes; then
155         LIBUC[_STATIC]=[\$\(]LIBUC[_OBJ0\)]
158 m4_popdef([LIBNAME])
159 m4_popdef([LIBUC])
160 m4_popdef([LIBLIBS])
165 dnl AC_LIBTESTFUNC(lib, function, [actions if found], [actions if not found])
166 dnl Check for a function in a library, but don't keep adding the same library
167 dnl to the LIBS variable.  Check whether the function is available in the
168 dnl current LIBS before adding the library which prevents us spuriously
169 dnl adding libraries for symbols that are in libc.
171 dnl On success, the default actions ensure that HAVE_FOO is defined. The lib
172 dnl is always added to $LIBS if it was found to be necessary. The caller
173 dnl can use SMB_REMOVE_LIB to strp this if necessary.
174 AC_DEFUN([AC_LIBTESTFUNC],
176   AC_CHECK_FUNCS($2,
177       [
178         # $2 was found in libc or existing $LIBS
179         m4_ifval([$3],
180             [
181                 $3
182             ],
183             [
184                 AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
185                     [Whether $2 is available])
186             ])
187       ],
188       [
189         # $2 was not found, try adding lib$1
190         case " $LIBS " in
191           *\ -l$1\ *)
192             m4_ifval([$4],
193                 [
194                     $4
195                 ],
196                 [
197                     # $2 was not found and we already had lib$1
198                     # nothing to do here by default
199                     true
200                 ])
201             ;;
202           *)
203             # $2 was not found, try adding lib$1
204             AC_CHECK_LIB($1, $2,
205               [
206                 LIBS="-l$1 $LIBS"
207                 m4_ifval([$3],
208                     [
209                         $3
210                     ],
211                     [
212                         AC_DEFINE(translit([HAVE_$2], [a-z], [A-Z]), 1,
213                             [Whether $2 is available])
214                     ])
215               ],
216               [
217                 m4_ifval([$4],
218                     [
219                         $4
220                     ],
221                     [
222                         # $2 was not found in lib$1
223                         # nothing to do here by default
224                         true
225                     ])
226               ])
227           ;;
228         esac
229       ])
232 # AC_CHECK_LIB_EXT(LIBRARY, [EXT_LIBS], [FUNCTION],
233 #              [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND],
234 #              [ADD-ACTION-IF-FOUND],[OTHER-LIBRARIES])
235 # ------------------------------------------------------
237 # Use a cache variable name containing both the library and function name,
238 # because the test really is for library $1 defining function $3, not
239 # just for library $1.  Separate tests with the same $1 and different $3s
240 # may have different results.
242 # Note that using directly AS_VAR_PUSHDEF([ac_Lib], [ac_cv_lib_$1_$3])
243 # is asking for trouble, since AC_CHECK_LIB($lib, fun) would give
244 # ac_cv_lib_$lib_fun, which is definitely not what was meant.  Hence
245 # the AS_LITERAL_IF indirection.
247 # FIXME: This macro is extremely suspicious.  It DEFINEs unconditionally,
248 # whatever the FUNCTION, in addition to not being a *S macro.  Note
249 # that the cache does depend upon the function we are looking for.
251 # It is on purpose we used `ac_check_lib_ext_save_LIBS' and not just
252 # `ac_save_LIBS': there are many macros which don't want to see `LIBS'
253 # changed but still want to use AC_CHECK_LIB_EXT, so they save `LIBS'.
254 # And ``ac_save_LIBS' is too tempting a name, so let's leave them some
255 # freedom.
256 AC_DEFUN([AC_CHECK_LIB_EXT],
258 AH_CHECK_LIB_EXT([$1])
259 ac_check_lib_ext_save_LIBS=$LIBS
260 LIBS="-l$1 $$2 $7 $LIBS"
261 AS_LITERAL_IF([$1],
262       [AS_VAR_PUSHDEF([ac_Lib_ext], [ac_cv_lib_ext_$1])],
263       [AS_VAR_PUSHDEF([ac_Lib_ext], [ac_cv_lib_ext_$1''])])dnl
265 m4_ifval([$3],
267     AH_CHECK_FUNC_EXT([$3])
268     AS_LITERAL_IF([$1],
269               [AS_VAR_PUSHDEF([ac_Lib_func], [ac_cv_lib_ext_$1_$3])],
270               [AS_VAR_PUSHDEF([ac_Lib_func], [ac_cv_lib_ext_$1''_$3])])dnl
271     AC_CACHE_CHECK([for $3 in -l$1], ac_Lib_func,
272         [AC_TRY_LINK_FUNC($3,
273                  [AS_VAR_SET(ac_Lib_func, yes);
274                   AS_VAR_SET(ac_Lib_ext, yes)],
275                  [AS_VAR_SET(ac_Lib_func, no);
276                   AS_VAR_SET(ac_Lib_ext, no)])
277         ])
278     AS_IF([test AS_VAR_GET(ac_Lib_func) = yes],
279         [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_$3))])dnl
280     AS_VAR_POPDEF([ac_Lib_func])dnl
281  ],[
282     AC_CACHE_CHECK([for -l$1], ac_Lib_ext,
283         [AC_TRY_LINK_FUNC([main],
284                  [AS_VAR_SET(ac_Lib_ext, yes)],
285                  [AS_VAR_SET(ac_Lib_ext, no)])
286         ])
287  ])
288 LIBS=$ac_check_lib_ext_save_LIBS
290 AS_IF([test AS_VAR_GET(ac_Lib_ext) = yes],
291     [m4_default([$4], 
292         [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_LIB$1))
293                 case "$$2" in
294                     *-l$1*)
295                         ;;
296                     *)
297                         $2="-l$1 $$2"
298                         ;;
299                 esac])
300                 [$6]
301             ],
302             [$5])dnl
303 AS_VAR_POPDEF([ac_Lib_ext])dnl
304 ])# AC_CHECK_LIB_EXT
306 # AH_CHECK_LIB_EXT(LIBNAME)
307 # ---------------------
308 m4_define([AH_CHECK_LIB_EXT],
309 [AH_TEMPLATE(AS_TR_CPP(HAVE_LIB$1),
310              [Define to 1 if you have the `]$1[' library (-l]$1[).])])
312 # AC_CHECK_FUNCS_EXT(FUNCTION, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
313 # -----------------------------------------------------------------
314 dnl check for a function in a $LIBS and $OTHER_LIBS libraries variable.
315 dnl AC_CHECK_FUNC_EXT(func,OTHER_LIBS,IF-TRUE,IF-FALSE)
316 AC_DEFUN([AC_CHECK_FUNC_EXT],
318     AH_CHECK_FUNC_EXT($1)       
319     ac_check_func_ext_save_LIBS=$LIBS
320     LIBS="$2 $LIBS"
321     AS_VAR_PUSHDEF([ac_var], [ac_cv_func_ext_$1])dnl
322     AC_CACHE_CHECK([for $1], ac_var,
323         [AC_LINK_IFELSE([AC_LANG_FUNC_LINK_TRY([$1])],
324                 [AS_VAR_SET(ac_var, yes)],
325                 [AS_VAR_SET(ac_var, no)])])
326     LIBS=$ac_check_func_ext_save_LIBS
327     AS_IF([test AS_VAR_GET(ac_var) = yes], 
328             [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_$1])) $3], 
329             [$4])dnl
330 AS_VAR_POPDEF([ac_var])dnl
331 ])# AC_CHECK_FUNC
333 # AH_CHECK_FUNC_EXT(FUNCNAME)
334 # ---------------------
335 m4_define([AH_CHECK_FUNC_EXT],
336 [AH_TEMPLATE(AS_TR_CPP(HAVE_$1),
337              [Define to 1 if you have the `]$1[' function.])])
339 dnl Define an AC_DEFINE with ifndef guard.
340 dnl AC_N_DEFINE(VARIABLE [, VALUE])
341 define(AC_N_DEFINE,
342 [cat >> confdefs.h <<\EOF
343 [#ifndef] $1
344 [#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1)
345 [#endif]
349 dnl Add an #include
350 dnl AC_ADD_INCLUDE(VARIABLE)
351 define(AC_ADD_INCLUDE,
352 [cat >> confdefs.h <<\EOF
353 [#include] $1
357 dnl Copied from libtool.m4
358 AC_DEFUN(AC_PROG_LD_GNU,
359 [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
360 [# I'd rather use --version here, but apparently some GNU ld's only accept -v.
361 if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
362   ac_cv_prog_gnu_ld=yes
363 else
364   ac_cv_prog_gnu_ld=no
365 fi])
368 dnl Removes -I/usr/include/? from given variable
369 AC_DEFUN(CFLAGS_REMOVE_USR_INCLUDE,[
370   ac_new_flags=""
371   for i in [$]$1; do
372     case [$]i in
373     -I/usr/include|-I/usr/include/) ;;
374     *) ac_new_flags="[$]ac_new_flags [$]i" ;;
375     esac
376   done
377   $1=[$]ac_new_flags
380 dnl Removes '-L/usr/lib[/]', '-Wl,-rpath,/usr/lib[/]'
381 dnl and '-Wl,-rpath -Wl,/usr/lib[/]' from given variable
382 AC_DEFUN(LIB_REMOVE_USR_LIB,[
383   ac_new_flags=""
384   l=""
385   for i in [$]$1; do
386     case [$]l[$]i in
387     -L/usr/lib) ;;
388     -L/usr/lib/) ;;
389     -Wl,-rpath,/usr/lib) ;;
390     -Wl,-rpath,/usr/lib/) ;;
391     -Wl,-rpath) l=[$]i;;
392     -Wl,-rpath-Wl,/usr/lib) l="";;
393     -Wl,-rpath-Wl,/usr/lib/) l="";;
394     *)
395         s=" "
396         if test x"[$]ac_new_flags" = x""; then
397             s="";
398         fi
399         if test x"[$]l" = x""; then
400             ac_new_flags="[$]ac_new_flags[$]s[$]i";
401         else
402             ac_new_flags="[$]ac_new_flags[$]s[$]l [$]i";
403         fi
404         l=""
405         ;;
406     esac
407   done
408   $1=[$]ac_new_flags
411 dnl From Bruno Haible.
413 AC_DEFUN(jm_ICONV,
415   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
416   dnl those with the standalone portable libiconv installed).
417   AC_MSG_CHECKING(for iconv in $1)
418     jm_cv_func_iconv="no"
419     jm_cv_lib_iconv=""
420     jm_cv_giconv=no
421     jm_save_LIBS="$LIBS"
423     dnl Check for include in funny place but no lib needed
424     if test "$jm_cv_func_iconv" != yes; then 
425       AC_TRY_LINK([#include <stdlib.h>
426 #include <giconv.h>],
427         [iconv_t cd = iconv_open("","");
428          iconv(cd,NULL,NULL,NULL,NULL);
429          iconv_close(cd);],
430          jm_cv_func_iconv=yes
431          jm_cv_include="giconv.h"
432          jm_cv_giconv="yes"
433          jm_cv_lib_iconv="")
435       dnl Standard iconv.h include, lib in glibc or libc ...
436       if test "$jm_cv_func_iconv" != yes; then
437         AC_TRY_LINK([#include <stdlib.h>
438 #include <iconv.h>],
439           [iconv_t cd = iconv_open("","");
440            iconv(cd,NULL,NULL,NULL,NULL);
441            iconv_close(cd);],
442            jm_cv_include="iconv.h"
443            jm_cv_func_iconv=yes
444            jm_cv_lib_iconv="")
446           if test "$jm_cv_lib_iconv" != yes; then
447             jm_save_LIBS="$LIBS"
448             LIBS="$LIBS -lgiconv"
449             AC_TRY_LINK([#include <stdlib.h>
450 #include <giconv.h>],
451               [iconv_t cd = iconv_open("","");
452                iconv(cd,NULL,NULL,NULL,NULL);
453                iconv_close(cd);],
454               jm_cv_lib_iconv=yes
455               jm_cv_func_iconv=yes
456               jm_cv_include="giconv.h"
457               jm_cv_giconv=yes
458               jm_cv_lib_iconv="giconv")
460            LIBS="$jm_save_LIBS"
462         if test "$jm_cv_func_iconv" != yes; then
463           jm_save_LIBS="$LIBS"
464           LIBS="$LIBS -liconv"
465           AC_TRY_LINK([#include <stdlib.h>
466 #include <iconv.h>],
467             [iconv_t cd = iconv_open("","");
468              iconv(cd,NULL,NULL,NULL,NULL);
469              iconv_close(cd);],
470             jm_cv_include="iconv.h"
471             jm_cv_func_iconv=yes
472             jm_cv_lib_iconv="iconv")
473           LIBS="$jm_save_LIBS"
475           if test "$jm_cv_lib_iconv" != yes; then
476             jm_save_LIBS="$LIBS"
477             LIBS="$LIBS -lbiconv"
478             AC_TRY_LINK([#include <stdlib.h>
479 #include <biconv.h>],
480               [iconv_t cd = iconv_open("","");
481                iconv(cd,NULL,NULL,NULL,NULL);
482                iconv_close(cd);],
483               jm_cv_lib_iconv=yes
484               jm_cv_func_iconv=yes
485               jm_cv_include="biconv.h"
486               jm_cv_biconv=yes
487               jm_cv_lib_iconv="biconv")
489             LIBS="$jm_save_LIBS"
490           fi
491         fi
492       fi
493     fi
494   fi
495   if test "$jm_cv_func_iconv" = yes; then
496     if test "$jm_cv_giconv" = yes; then
497       AC_DEFINE(HAVE_GICONV, 1, [What header to include for iconv() function: giconv.h])
498       AC_MSG_RESULT(yes)
499       ICONV_FOUND=yes
500     else
501       if test "$jm_cv_biconv" = yes; then
502         AC_DEFINE(HAVE_BICONV, 1, [What header to include for iconv() function: biconv.h])
503         AC_MSG_RESULT(yes)
504         ICONV_FOUND=yes
505       else 
506         AC_DEFINE(HAVE_ICONV, 1, [What header to include for iconv() function: iconv.h])
507         AC_MSG_RESULT(yes)
508         ICONV_FOUND=yes
509       fi
510     fi
511   else
512     AC_MSG_RESULT(no)
513   fi
516 AC_DEFUN(rjs_CHARSET,[
517   dnl Find out if we can convert from $1 to UCS2-LE
518   AC_MSG_CHECKING([can we convert from $1 to UCS2-LE?])
519   AC_TRY_RUN([
520 #include <$jm_cv_include>
521 main(){
522     iconv_t cd = iconv_open("$1", "UCS-2LE");
523     if (cd == 0 || cd == (iconv_t)-1) {
524         return -1;
525     }
526     return 0;
528   ],ICONV_CHARSET=$1,ICONV_CHARSET=no,ICONV_CHARSET=cross)
529   AC_MSG_RESULT($ICONV_CHARSET)
532 dnl AC_ENABLE_SHARED - implement the --enable-shared flag
533 dnl Usage: AC_ENABLE_SHARED[(DEFAULT)]
534 dnl   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
535 dnl   `yes'.
536 AC_DEFUN([AC_ENABLE_SHARED],
537 [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
538 AC_ARG_ENABLE(shared,
539 changequote(<<, >>)dnl
540 <<  --enable-shared[=PKGS]    build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
541 changequote([, ])dnl
542 [p=${PACKAGE-default}
543 case $enableval in
544 yes) enable_shared=yes ;;
545 no) enable_shared=no ;;
547   enable_shared=no
548   # Look at the argument we got.  We use all the common list separators.
549   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
550   for pkg in $enableval; do
551     if test "X$pkg" = "X$p"; then
552       enable_shared=yes
553     fi
555   done
556   IFS="$ac_save_ifs"
557   ;;
558 esac],
559 enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
562 dnl AC_ENABLE_STATIC - implement the --enable-static flag
563 dnl Usage: AC_ENABLE_STATIC[(DEFAULT)]
564 dnl   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
565 dnl   `yes'.
566 AC_DEFUN([AC_ENABLE_STATIC],
567 [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
568 AC_ARG_ENABLE(static,
569 changequote(<<, >>)dnl
570 <<  --enable-static[=PKGS]    build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
571 changequote([, ])dnl
572 [p=${PACKAGE-default}
573 case $enableval in
574 yes) enable_static=yes ;;
575 no) enable_static=no ;;
577   enable_static=no
578   # Look at the argument we got.  We use all the common list separators.
579   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
580   for pkg in $enableval; do
581     if test "X$pkg" = "X$p"; then
582       enable_static=yes
583     fi
584   done
585   IFS="$ac_save_ifs"
586   ;;
587 esac],
588 enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
591 dnl AC_DISABLE_STATIC - set the default static flag to --disable-static
592 AC_DEFUN([AC_DISABLE_STATIC],
593 [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
594 AC_ENABLE_STATIC(no)])
596 dnl AC_TRY_RUN_STRICT(PROGRAM,CFLAGS,CPPFLAGS,LDFLAGS,
597 dnl             [ACTION-IF-TRUE],[ACTION-IF-FALSE],
598 dnl             [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR])
599 AC_DEFUN( [AC_TRY_RUN_STRICT],
601         old_CFLAGS="$CFLAGS";
602         CFLAGS="$2";
603         export CFLAGS;
604         old_CPPFLAGS="$CPPFLAGS";
605         CPPFLAGS="$3";
606         export CPPFLAGS;
607         old_LDFLAGS="$LDFLAGS";
608         LDFLAGS="$4";
609         export LDFLAGS;
610         AC_TRY_RUN([$1],[$5],[$6],[$7])
611         CFLAGS="$old_CFLAGS";
612         old_CFLAGS="";
613         export CFLAGS;
614         CPPFLAGS="$old_CPPFLAGS";
615         old_CPPFLAGS="";
616         export CPPFLAGS;
617         LDFLAGS="$old_LDFLAGS";
618         old_LDFLAGS="";
619         export LDFLAGS;
622 dnl SMB_CHECK_SYSCONF(varname)
623 dnl Tests whether the sysconf(3) variable "varname" is available.
624 AC_DEFUN([SMB_CHECK_SYSCONF],
626     AC_CACHE_CHECK([for sysconf($1)],
627         samba_cv_SYSCONF$1,
628         [
629             AC_TRY_LINK([#include <unistd.h>],
630                 [ return sysconf($1) == -1 ? 1 : 0; ],
631                 [ samba_cv_SYSCONF$1=yes ],
632                 [ samba_cv_SYSCONF$1=no ])
633         ])
635     if test x"$samba_cv_SYSCONF$1" = x"yes" ; then
636         AC_DEFINE(SYSCONF$1, 1, [Whether sysconf($1) is available])
637     fi
640 dnl SMB_IS_LIBPTHREAD_LINKED([actions if true], [actions if false])
641 dnl Test whether the current LIBS results in libpthread being present.
642 dnl Execute the corresponding user action list.
643 AC_DEFUN([SMB_IS_LIBPTHREAD_LINKED],
645     AC_MSG_CHECKING(if libpthread is linked)
646     AC_TRY_LINK([],
647         [return pthread_create(0, 0, 0, 0);],
648         [
649             AC_MSG_RESULT(yes)
650             $1
651         ],
652         [
653             AC_MSG_RESULT(no)
654             $2
655         ])
658 dnl SMB_REMOVE_LIB(lib)
659 dnl Remove the given library from $LIBS
660 AC_DEFUN([SMB_REMOVE_LIB],
662     LIBS=`echo $LIBS | sed '-es/-l$1//g'`
665 dnl SMB_CHECK_DMAPI([actions if true], [actions if false])
666 dnl Check whether DMAPI is available and is a version that we know
667 dnl how to deal with. The default truth action is to set samba_dmapi_libs
668 dnl to the list of necessary libraries, and to define USE_DMAPI.
669 AC_DEFUN([SMB_CHECK_DMAPI],
671     samba_dmapi_libs=""
673     if test x"$samba_dmapi_libs" = x"" ; then
674         AC_CHECK_LIB(dm, dm_get_eventlist,
675                 [ samba_dmapi_libs="-ldm"], [])
676     fi
678     if test x"$samba_dmapi_libs" = x"" ; then
679         AC_CHECK_LIB(jfsdm, dm_get_eventlist,
680                 [samba_dmapi_libs="-ljfsdm"], [])
681     fi
683     if test x"$samba_dmapi_libs" = x"" ; then
684         AC_CHECK_LIB(xdsm, dm_get_eventlist,
685                 [samba_dmapi_libs="-lxdsm"], [])
686     fi
688     if test x"$samba_dmapi_libs" = x"" ; then
689         AC_CHECK_LIB(dmapi, dm_get_eventlist,
690                 [samba_dmapi_libs="-ldmapi"], [])
691     fi
694     # Only bother to test ehaders if we have a candidate DMAPI library
695     if test x"$samba_dmapi_libs" != x"" ; then
696         AC_CHECK_HEADERS(sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h)
697     fi
699     if test x"$samba_dmapi_libs" != x"" ; then
700         samba_dmapi_save_LIBS="$LIBS"
701         LIBS="$LIBS $samba_dmapi_libs"
702         AC_TRY_LINK(
703                 [
704 #include <time.h>      /* needed by Tru64 */
705 #include <sys/types.h> /* needed by AIX */
706 #ifdef HAVE_XFS_DMAPI_H
707 #include <xfs/dmapi.h>
708 #elif defined(HAVE_SYS_DMI_H)
709 #include <sys/dmi.h>
710 #elif defined(HAVE_SYS_JFSDMAPI_H)
711 #include <sys/jfsdmapi.h>
712 #elif defined(HAVE_SYS_DMAPI_H)
713 #include <sys/dmapi.h>
714 #elif defined(HAVE_DMAPI_H)
715 #include <dmapi.h>
716 #endif
717                 ],
718                 [
719 /* This link test is designed to fail on IRI 6.4, but should
720  * succeed on Linux, IRIX 6.5 and AIX.
721  */
722         char * version;
723         dm_eventset_t events;
724         /* This doesn't take an argument on IRIX 6.4. */
725         dm_init_service(&version);
726         /* IRIX 6.4 expects events to be a pointer. */
727         DMEV_ISSET(DM_EVENT_READ, events);
728                 ],
729                 [
730                     true # DMAPI link test succeeded
731                 ],
732                 [
733                     # DMAPI link failure
734                     samba_dmapi_libs=
735                 ])
736         LIBS="$samba_dmapi_save_LIBS"
737     fi
739     if test x"$samba_dmapi_libs" = x"" ; then
740         # DMAPI detection failure actions begin
741         ifelse($2, [],
742             [
743                 AC_ERROR(Failed to detect a supported DMAPI implementation)
744             ],
745             [
746                 $2
747             ])
748         # DMAPI detection failure actions end
749     else
750         # DMAPI detection success actions start
751         ifelse($1, [],
752             [
753                 AC_DEFINE(USE_DMAPI, 1,
754                     [Whether we should build DMAPI integration components])
755                 AC_MSG_NOTICE(Found DMAPI support in $samba_dmapi_libs)
756             ],
757             [
758                 $1
759             ])
760         # DMAPI detection success actions end
761     fi
765 dnl SMB_CHECK_CLOCK_ID(clockid)
766 dnl Test whether the specified clock_gettime clock ID is available. If it
767 dnl is, we define HAVE_clockid
768 AC_DEFUN([SMB_CHECK_CLOCK_ID],
770     AC_MSG_CHECKING(for $1)
771     AC_TRY_LINK([
772 #if TIME_WITH_SYS_TIME
773 # include <sys/time.h>
774 # include <time.h>
775 #else
776 # if HAVE_SYS_TIME_H
777 #  include <sys/time.h>
778 # else
779 #  include <time.h>
780 # endif
781 #endif
782     ],
783     [
784 clockid_t clk = $1;
785     ],
786     [
787         AC_MSG_RESULT(yes)
788         AC_DEFINE(HAVE_$1, 1,
789             [Whether the clock_gettime clock ID $1 is available])
790     ],
791     [
792         AC_MSG_RESULT(no)
793     ])
796 dnl SMB_IF_RTSIGNAL_BUG([actions if true],
797 dnl                     [actions if false],
798 dnl                     [actions if cross compiling])
799 dnl Test whether we can call sigaction with RT_SIGNAL_NOTIFY and
800 dnl RT_SIGNAL_LEASE (also RT_SIGNAL_AIO for good measure, though
801 dnl I don't believe that triggers any bug.
803 dnl See the samba-technical thread titled "Failed to setup
804 dnl RT_SIGNAL_NOTIFY handler" for details on the bug in question.
805 AC_DEFUN([SMB_IF_RTSIGNAL_BUG],
807     rt_signal_notify_works=yes
808     rt_signal_lease_works=yes
809     rt_signal_aio_works=yes
811     AC_MSG_CHECKING(if sigaction works with realtime signals)
812     AC_TRY_RUN(
813         [
814 #include <sys/types.h>
815 #include <fcntl.h>
816 #include <signal.h>
818 /* from smbd/notify_kernel.c */
819 #ifndef RT_SIGNAL_NOTIFY
820 #define RT_SIGNAL_NOTIFY (SIGRTMIN+2)
821 #endif
823 /* from smbd/aio.c */
824 #ifndef RT_SIGNAL_AIO
825 #define RT_SIGNAL_AIO (SIGRTMIN+3)
826 #endif
828 /* from smbd/oplock_linux.c */
829 #ifndef RT_SIGNAL_LEASE
830 #define RT_SIGNAL_LEASE (SIGRTMIN+1)
831 #endif
833 static void signal_handler(int sig, siginfo_t *info, void *unused)
835     int do_nothing = 0;
838 int main(void)
840     int result = 0;
841     struct sigaction act = {0};
843     act.sa_sigaction = signal_handler;
844     act.sa_flags = SA_SIGINFO;
845     sigemptyset( &act.sa_mask );
847     if (sigaction(RT_SIGNAL_LEASE, &act, 0) != 0) {
848             /* Failed to setup RT_SIGNAL_LEASE handler */
849             result += 1;
850     }
852     if (sigaction(RT_SIGNAL_NOTIFY, &act, 0) != 0) {
853             /* Failed to setup RT_SIGNAL_NOTIFY handler */
854             result += 10;
855     }
857     if (sigaction(RT_SIGNAL_AIO, &act, 0) != 0) {
858             /* Failed to setup RT_SIGNAL_AIO handler */
859             result += 100;
860     }
862     /* zero on success */
863     return result;
865         ],
866         [
867             AC_MSG_RESULT(yes)
868             $2
869         ],
870         [
871             AC_MSG_RESULT(no)
872             case "$ac_status" in
873                 1|11|101|111)  rt_signal_lease_ok=no ;;
874             esac
875             case "$ac_status" in
876                 10|11|110|111)  rt_signal_notify_ok=no ;;
877             esac
878             case "$ac_status" in
879                 100|110|101|111)  rt_signal_aio_ok=no ;;
880             esac
881             $2
882         ],
883         [
884             AC_MSG_RESULT(cross)
885             $3
886         ])
889 m4_include(lib/replace/libreplace.m4)