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