source: trunk/samba/source/m4/aclocal.m4@ 79

Last change on this file since 79 was 79, checked in by Paul Smedley, 18 years ago

Add more files introduced in 3.2.0pre1

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