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