s3 onefs: Add missing newlines to debug statements in the onefs module
[ira/wip.git] / source3 / m4 / aclocal.m4
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])
11 fi
12 ])
13
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,
17 [
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
45 ])
46
47 AC_DEFUN(SMB_SUBSYSTEM,
48 [
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])
54 ])
55
56
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],
62 [
63 m4_pushdef([LIBNAME], [lib$1])
64 m4_pushdef([LIBUC], [m4_toupper(LIBNAME)])
65 m4_pushdef([LIBLIBS], [-l$1])
66
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=
74
75 m4_if([$2], [], [LIBUC[_SOVER]=0], [LIBUC[_SOVER]=$2])
76
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])
85
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))])),
94 [
95 case "$withval" in
96         yes)
97                 build_lib=yes
98                 ;;
99         *)
100                 AC_MSG_RESULT(yes)
101                 build_lib=no
102                 ;;
103 esac
104 ],
105 [
106 # if unspecified, default is not to build
107 AC_MSG_RESULT(yes)
108 build_lib=no
109 ]
110 )
111 ],[
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)]),
116 [
117 case "$withval" in
118         no)
119                 AC_MSG_RESULT(no)
120                 build_lib=no
121                 ;;
122         *)
123                 build_lib=yes
124                 ;;
125 esac
126 ],
127 [
128 # if unspecified, default is to build it if possible.
129 build_lib=yes
130 ]
131 )
132 ])
133
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)
153 fi
154 if test $enable_static = yes; then
155         LIBUC[_STATIC]=[\$\(]LIBUC[_OBJ0\)]
156 fi
157
158 m4_popdef([LIBNAME])
159 m4_popdef([LIBUC])
160 m4_popdef([LIBLIBS])
161
162 ])
163
164
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.
170 dnl
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],
175 [
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       ])
230 ])
231
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 # ------------------------------------------------------
236 #
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.
241 #
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.
246 #
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.
250 #
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],
257 [
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
264
265 m4_ifval([$3],
266  [
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
289
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
305
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[).])])
311
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],
317 [
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
332
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.])])
338
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]
346 EOF
347 ])
348
349 dnl Add an #include
350 dnl AC_ADD_INCLUDE(VARIABLE)
351 define(AC_ADD_INCLUDE,
352 [cat >> confdefs.h <<\EOF
353 [#include] $1
354 EOF
355 ])
356
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])
366 ])
367
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
378 ])
379
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     -L/usr/lib64) ;;
390     -L/usr/lib64/) ;;
391     -Wl,-rpath,/usr/lib) l="";;
392     -Wl,-rpath,/usr/lib/) l="";;
393     -Wl,-rpath,/usr/lib64) l="";;
394     -Wl,-rpath,/usr/lib64/) l="";;
395     -Wl,-rpath) l=[$]i;;
396     -Wl,-rpath-Wl,/usr/lib) l="";;
397     -Wl,-rpath-Wl,/usr/lib/) l="";;
398     -Wl,-rpath-Wl,/usr/lib64) l="";;
399     -Wl,-rpath-Wl,/usr/lib64/) l="";;
400     *)
401         s=" "
402         if test x"[$]ac_new_flags" = x""; then
403             s="";
404         fi
405         if test x"[$]l" = x""; then
406             ac_new_flags="[$]ac_new_flags[$]s[$]i";
407         else
408             ac_new_flags="[$]ac_new_flags[$]s[$]l [$]i";
409         fi
410         l=""
411         ;;
412     esac
413   done
414   $1=[$]ac_new_flags
415 ])
416
417 dnl From Bruno Haible.
418
419 AC_DEFUN(jm_ICONV,
420 [
421   dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
422   dnl those with the standalone portable libiconv installed).
423   AC_MSG_CHECKING(for iconv in $1)
424     jm_cv_func_iconv="no"
425     jm_cv_lib_iconv=""
426     jm_cv_giconv=no
427     jm_save_LIBS="$LIBS"
428
429     dnl Check for include in funny place but no lib needed
430     if test "$jm_cv_func_iconv" != yes; then 
431       AC_TRY_LINK([#include <stdlib.h>
432 #include <giconv.h>],
433         [iconv_t cd = iconv_open("","");
434          iconv(cd,NULL,NULL,NULL,NULL);
435          iconv_close(cd);],
436          jm_cv_func_iconv=yes
437          jm_cv_include="giconv.h"
438          jm_cv_giconv="yes"
439          jm_cv_lib_iconv="")
440
441       dnl Standard iconv.h include, lib in glibc or libc ...
442       if test "$jm_cv_func_iconv" != yes; then
443         AC_TRY_LINK([#include <stdlib.h>
444 #include <iconv.h>],
445           [iconv_t cd = iconv_open("","");
446            iconv(cd,NULL,NULL,NULL,NULL);
447            iconv_close(cd);],
448            jm_cv_include="iconv.h"
449            jm_cv_func_iconv=yes
450            jm_cv_lib_iconv="")
451
452           if test "$jm_cv_lib_iconv" != yes; then
453             jm_save_LIBS="$LIBS"
454             LIBS="$LIBS -lgiconv"
455             AC_TRY_LINK([#include <stdlib.h>
456 #include <giconv.h>],
457               [iconv_t cd = iconv_open("","");
458                iconv(cd,NULL,NULL,NULL,NULL);
459                iconv_close(cd);],
460               jm_cv_lib_iconv=yes
461               jm_cv_func_iconv=yes
462               jm_cv_include="giconv.h"
463               jm_cv_giconv=yes
464               jm_cv_lib_iconv="giconv")
465
466            LIBS="$jm_save_LIBS"
467
468         if test "$jm_cv_func_iconv" != yes; then
469           jm_save_LIBS="$LIBS"
470           LIBS="$LIBS -liconv"
471           AC_TRY_LINK([#include <stdlib.h>
472 #include <iconv.h>],
473             [iconv_t cd = iconv_open("","");
474              iconv(cd,NULL,NULL,NULL,NULL);
475              iconv_close(cd);],
476             jm_cv_include="iconv.h"
477             jm_cv_func_iconv=yes
478             jm_cv_lib_iconv="iconv")
479           LIBS="$jm_save_LIBS"
480
481           if test "$jm_cv_lib_iconv" != yes; then
482             jm_save_LIBS="$LIBS"
483             LIBS="$LIBS -lbiconv"
484             AC_TRY_LINK([#include <stdlib.h>
485 #include <biconv.h>],
486               [iconv_t cd = iconv_open("","");
487                iconv(cd,NULL,NULL,NULL,NULL);
488                iconv_close(cd);],
489               jm_cv_lib_iconv=yes
490               jm_cv_func_iconv=yes
491               jm_cv_include="biconv.h"
492               jm_cv_biconv=yes
493               jm_cv_lib_iconv="biconv")
494
495             LIBS="$jm_save_LIBS"
496           fi
497         fi
498       fi
499     fi
500   fi
501   if test "$jm_cv_func_iconv" = yes; then
502     if test "$jm_cv_giconv" = yes; then
503       AC_DEFINE(HAVE_GICONV, 1, [What header to include for iconv() function: giconv.h])
504       AC_MSG_RESULT(yes)
505       ICONV_FOUND=yes
506     else
507       if test "$jm_cv_biconv" = yes; then
508         AC_DEFINE(HAVE_BICONV, 1, [What header to include for iconv() function: biconv.h])
509         AC_MSG_RESULT(yes)
510         ICONV_FOUND=yes
511       else 
512         AC_DEFINE(HAVE_ICONV, 1, [What header to include for iconv() function: iconv.h])
513         AC_MSG_RESULT(yes)
514         ICONV_FOUND=yes
515       fi
516     fi
517   else
518     AC_MSG_RESULT(no)
519   fi
520 ])
521
522 AC_DEFUN(rjs_CHARSET,[
523   dnl Find out if we can convert from $1 to UCS2-LE
524   AC_MSG_CHECKING([can we convert from $1 to UCS2-LE?])
525   AC_TRY_RUN([
526 #include <$jm_cv_include>
527 main(){
528     iconv_t cd = iconv_open("$1", "UCS-2LE");
529     if (cd == 0 || cd == (iconv_t)-1) {
530         return -1;
531     }
532     return 0;
533 }
534   ],ICONV_CHARSET=$1,ICONV_CHARSET=no,ICONV_CHARSET=cross)
535   AC_MSG_RESULT($ICONV_CHARSET)
536 ])
537
538 dnl AC_ENABLE_SHARED - implement the --enable-shared flag
539 dnl Usage: AC_ENABLE_SHARED[(DEFAULT)]
540 dnl   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
541 dnl   `yes'.
542 AC_DEFUN([AC_ENABLE_SHARED],
543 [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
544 AC_ARG_ENABLE(shared,
545 changequote(<<, >>)dnl
546 <<  --enable-shared[=PKGS]    build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
547 changequote([, ])dnl
548 [p=${PACKAGE-default}
549 case $enableval in
550 yes) enable_shared=yes ;;
551 no) enable_shared=no ;;
552 *)
553   enable_shared=no
554   # Look at the argument we got.  We use all the common list separators.
555   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
556   for pkg in $enableval; do
557     if test "X$pkg" = "X$p"; then
558       enable_shared=yes
559     fi
560
561   done
562   IFS="$ac_save_ifs"
563   ;;
564 esac],
565 enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
566 ])
567
568 dnl AC_ENABLE_STATIC - implement the --enable-static flag
569 dnl Usage: AC_ENABLE_STATIC[(DEFAULT)]
570 dnl   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
571 dnl   `yes'.
572 AC_DEFUN([AC_ENABLE_STATIC],
573 [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
574 AC_ARG_ENABLE(static,
575 changequote(<<, >>)dnl
576 <<  --enable-static[=PKGS]    build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
577 changequote([, ])dnl
578 [p=${PACKAGE-default}
579 case $enableval in
580 yes) enable_static=yes ;;
581 no) enable_static=no ;;
582 *)
583   enable_static=no
584   # Look at the argument we got.  We use all the common list separators.
585   IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
586   for pkg in $enableval; do
587     if test "X$pkg" = "X$p"; then
588       enable_static=yes
589     fi
590   done
591   IFS="$ac_save_ifs"
592   ;;
593 esac],
594 enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
595 ])
596
597 dnl AC_DISABLE_STATIC - set the default static flag to --disable-static
598 AC_DEFUN([AC_DISABLE_STATIC],
599 [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
600 AC_ENABLE_STATIC(no)])
601
602 dnl AC_TRY_RUN_STRICT(PROGRAM,CFLAGS,CPPFLAGS,LDFLAGS,
603 dnl             [ACTION-IF-TRUE],[ACTION-IF-FALSE],
604 dnl             [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR])
605 AC_DEFUN( [AC_TRY_RUN_STRICT],
606 [
607         old_CFLAGS="$CFLAGS";
608         CFLAGS="$2";
609         export CFLAGS;
610         old_CPPFLAGS="$CPPFLAGS";
611         CPPFLAGS="$3";
612         export CPPFLAGS;
613         old_LDFLAGS="$LDFLAGS";
614         LDFLAGS="$4";
615         export LDFLAGS;
616         AC_TRY_RUN([$1],[$5],[$6],[$7])
617         CFLAGS="$old_CFLAGS";
618         old_CFLAGS="";
619         export CFLAGS;
620         CPPFLAGS="$old_CPPFLAGS";
621         old_CPPFLAGS="";
622         export CPPFLAGS;
623         LDFLAGS="$old_LDFLAGS";
624         old_LDFLAGS="";
625         export LDFLAGS;
626 ])
627
628 dnl SMB_CHECK_SYSCONF(varname)
629 dnl Tests whether the sysconf(3) variable "varname" is available.
630 AC_DEFUN([SMB_CHECK_SYSCONF],
631 [
632     AC_CACHE_CHECK([for sysconf($1)],
633         samba_cv_SYSCONF$1,
634         [
635             AC_TRY_LINK([#include <unistd.h>],
636                 [ return sysconf($1) == -1 ? 1 : 0; ],
637                 [ samba_cv_SYSCONF$1=yes ],
638                 [ samba_cv_SYSCONF$1=no ])
639         ])
640
641     if test x"$samba_cv_SYSCONF$1" = x"yes" ; then
642         AC_DEFINE(SYSCONF$1, 1, [Whether sysconf($1) is available])
643     fi
644 ])
645
646 dnl SMB_IS_LIBPTHREAD_LINKED([actions if true], [actions if false])
647 dnl Test whether the current LIBS results in libpthread being present.
648 dnl Execute the corresponding user action list.
649 AC_DEFUN([SMB_IS_LIBPTHREAD_LINKED],
650 [
651     AC_MSG_CHECKING(if libpthread is linked)
652     AC_TRY_LINK([],
653         [return pthread_create(0, 0, 0, 0);],
654         [
655             AC_MSG_RESULT(yes)
656             $1
657         ],
658         [
659             AC_MSG_RESULT(no)
660             $2
661         ])
662 ])
663
664 dnl SMB_REMOVE_LIB(lib)
665 dnl Remove the given library from $LIBS
666 AC_DEFUN([SMB_REMOVE_LIB],
667 [
668     LIBS=`echo $LIBS | sed '-es/-l$1//g'`
669 ])
670
671 dnl SMB_CHECK_DMAPI([actions if true], [actions if false])
672 dnl Check whether DMAPI is available and is a version that we know
673 dnl how to deal with. The default truth action is to set samba_dmapi_libs
674 dnl to the list of necessary libraries, and to define USE_DMAPI.
675 AC_DEFUN([SMB_CHECK_DMAPI],
676 [
677     samba_dmapi_libs=""
678
679     if test x"$samba_dmapi_libs" = x"" ; then
680         AC_CHECK_LIB(dm, dm_get_eventlist,
681                 [ samba_dmapi_libs="-ldm"], [])
682     fi
683
684     if test x"$samba_dmapi_libs" = x"" ; then
685         AC_CHECK_LIB(jfsdm, dm_get_eventlist,
686                 [samba_dmapi_libs="-ljfsdm"], [])
687     fi
688
689     if test x"$samba_dmapi_libs" = x"" ; then
690         AC_CHECK_LIB(xdsm, dm_get_eventlist,
691                 [samba_dmapi_libs="-lxdsm"], [])
692     fi
693
694     if test x"$samba_dmapi_libs" = x"" ; then
695         AC_CHECK_LIB(dmapi, dm_get_eventlist,
696                 [samba_dmapi_libs="-ldmapi"], [])
697     fi
698
699
700     # Only bother to test ehaders if we have a candidate DMAPI library
701     if test x"$samba_dmapi_libs" != x"" ; then
702         AC_CHECK_HEADERS(sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h)
703     fi
704
705     if test x"$samba_dmapi_libs" != x"" ; then
706         samba_dmapi_save_LIBS="$LIBS"
707         LIBS="$LIBS $samba_dmapi_libs"
708         AC_TRY_LINK(
709                 [
710 #include <time.h>      /* needed by Tru64 */
711 #include <sys/types.h> /* needed by AIX */
712 #ifdef HAVE_XFS_DMAPI_H
713 #include <xfs/dmapi.h>
714 #elif defined(HAVE_SYS_DMI_H)
715 #include <sys/dmi.h>
716 #elif defined(HAVE_SYS_JFSDMAPI_H)
717 #include <sys/jfsdmapi.h>
718 #elif defined(HAVE_SYS_DMAPI_H)
719 #include <sys/dmapi.h>
720 #elif defined(HAVE_DMAPI_H)
721 #include <dmapi.h>
722 #endif
723                 ],
724                 [
725 /* This link test is designed to fail on IRI 6.4, but should
726  * succeed on Linux, IRIX 6.5 and AIX.
727  */
728         char * version;
729         dm_eventset_t events;
730         /* This doesn't take an argument on IRIX 6.4. */
731         dm_init_service(&version);
732         /* IRIX 6.4 expects events to be a pointer. */
733         DMEV_ISSET(DM_EVENT_READ, events);
734                 ],
735                 [
736                     true # DMAPI link test succeeded
737                 ],
738                 [
739                     # DMAPI link failure
740                     samba_dmapi_libs=
741                 ])
742         LIBS="$samba_dmapi_save_LIBS"
743     fi
744
745     if test x"$samba_dmapi_libs" = x"" ; then
746         # DMAPI detection failure actions begin
747         ifelse($2, [],
748             [
749                 AC_ERROR(Failed to detect a supported DMAPI implementation)
750             ],
751             [
752                 $2
753             ])
754         # DMAPI detection failure actions end
755     else
756         # DMAPI detection success actions start
757         ifelse($1, [],
758             [
759                 AC_DEFINE(USE_DMAPI, 1,
760                     [Whether we should build DMAPI integration components])
761                 AC_MSG_NOTICE(Found DMAPI support in $samba_dmapi_libs)
762             ],
763             [
764                 $1
765             ])
766         # DMAPI detection success actions end
767     fi
768
769 ])
770
771 dnl SMB_CHECK_CLOCK_ID(clockid)
772 dnl Test whether the specified clock_gettime clock ID is available. If it
773 dnl is, we define HAVE_clockid
774 AC_DEFUN([SMB_CHECK_CLOCK_ID],
775 [
776     AC_MSG_CHECKING(for $1)
777     AC_TRY_LINK([
778 #if TIME_WITH_SYS_TIME
779 # include <sys/time.h>
780 # include <time.h>
781 #else
782 # if HAVE_SYS_TIME_H
783 #  include <sys/time.h>
784 # else
785 #  include <time.h>
786 # endif
787 #endif
788     ],
789     [
790 clockid_t clk = $1;
791     ],
792     [
793         AC_MSG_RESULT(yes)
794         AC_DEFINE(HAVE_$1, 1,
795             [Whether the clock_gettime clock ID $1 is available])
796     ],
797     [
798         AC_MSG_RESULT(no)
799     ])
800 ])
801
802 dnl SMB_IF_RTSIGNAL_BUG([actions if true],
803 dnl                     [actions if false],
804 dnl                     [actions if cross compiling])
805 dnl Test whether we can call sigaction with RT_SIGNAL_NOTIFY and
806 dnl RT_SIGNAL_LEASE (also RT_SIGNAL_AIO for good measure, though
807 dnl I don't believe that triggers any bug.
808 dnl
809 dnl See the samba-technical thread titled "Failed to setup
810 dnl RT_SIGNAL_NOTIFY handler" for details on the bug in question.
811 AC_DEFUN([SMB_IF_RTSIGNAL_BUG],
812 [
813     rt_signal_notify_works=yes
814     rt_signal_lease_works=yes
815     rt_signal_aio_works=yes
816
817     AC_MSG_CHECKING(if sigaction works with realtime signals)
818     AC_TRY_RUN(
819         [
820 #include <sys/types.h>
821 #include <fcntl.h>
822 #include <signal.h>
823
824 /* from smbd/notify_kernel.c */
825 #ifndef RT_SIGNAL_NOTIFY
826 #define RT_SIGNAL_NOTIFY (SIGRTMIN+2)
827 #endif
828
829 /* from smbd/aio.c */
830 #ifndef RT_SIGNAL_AIO
831 #define RT_SIGNAL_AIO (SIGRTMIN+3)
832 #endif
833
834 /* from smbd/oplock_linux.c */
835 #ifndef RT_SIGNAL_LEASE
836 #define RT_SIGNAL_LEASE (SIGRTMIN+1)
837 #endif
838
839 static void signal_handler(int sig, siginfo_t *info, void *unused)
840 {
841     int do_nothing = 0;
842 }
843
844 int main(void)
845 {
846     int result = 0;
847     struct sigaction act = {0};
848
849     act.sa_sigaction = signal_handler;
850     act.sa_flags = SA_SIGINFO;
851     sigemptyset( &act.sa_mask );
852
853     if (sigaction(RT_SIGNAL_LEASE, &act, 0) != 0) {
854             /* Failed to setup RT_SIGNAL_LEASE handler */
855             result += 1;
856     }
857
858     if (sigaction(RT_SIGNAL_NOTIFY, &act, 0) != 0) {
859             /* Failed to setup RT_SIGNAL_NOTIFY handler */
860             result += 10;
861     }
862
863     if (sigaction(RT_SIGNAL_AIO, &act, 0) != 0) {
864             /* Failed to setup RT_SIGNAL_AIO handler */
865             result += 100;
866     }
867
868     /* zero on success */
869     return result;
870 }
871         ],
872         [
873             AC_MSG_RESULT(yes)
874             $2
875         ],
876         [
877             AC_MSG_RESULT(no)
878             case "$ac_status" in
879                 1|11|101|111)  rt_signal_lease_ok=no ;;
880             esac
881             case "$ac_status" in
882                 10|11|110|111)  rt_signal_notify_ok=no ;;
883             esac
884             case "$ac_status" in
885                 100|110|101|111)  rt_signal_aio_ok=no ;;
886             esac
887             $2
888         ],
889         [
890             AC_MSG_RESULT(cross)
891             $3
892         ])
893 ])
894
895 m4_include(../lib/replace/libreplace.m4)