source: trunk/samba-3.0.25pre1/source/aclocal.m4@ 3

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

Initial code import

File size: 20.9 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 CFLAGS_ADD_DIR(CFLAGS, $INCDIR)
424dnl This function doesn't add -I/usr/include into CFLAGS
425AC_DEFUN(CFLAGS_ADD_DIR,[
426if test "$2" != "/usr/include" ; then
427 $1="$$1 -I$2"
428fi
429])
430
431dnl LIB_ADD_DIR(LDFLAGS, $LIBDIR)
432dnl This function doesn't add -L/usr/lib into LDFLAGS
433AC_DEFUN(LIB_ADD_DIR,[
434if test "$2" != "/usr/lib" ; then
435 $1="$$1 -L$2"
436fi
437])
438
439dnl AC_ENABLE_SHARED - implement the --enable-shared flag
440dnl Usage: AC_ENABLE_SHARED[(DEFAULT)]
441dnl Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
442dnl `yes'.
443AC_DEFUN([AC_ENABLE_SHARED],
444[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
445AC_ARG_ENABLE(shared,
446changequote(<<, >>)dnl
447<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
448changequote([, ])dnl
449[p=${PACKAGE-default}
450case $enableval in
451yes) enable_shared=yes ;;
452no) enable_shared=no ;;
453*)
454 enable_shared=no
455 # Look at the argument we got. We use all the common list separators.
456 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
457 for pkg in $enableval; do
458 if test "X$pkg" = "X$p"; then
459 enable_shared=yes
460 fi
461
462 done
463 IFS="$ac_save_ifs"
464 ;;
465esac],
466enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
467])
468
469dnl AC_ENABLE_STATIC - implement the --enable-static flag
470dnl Usage: AC_ENABLE_STATIC[(DEFAULT)]
471dnl Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
472dnl `yes'.
473AC_DEFUN([AC_ENABLE_STATIC],
474[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
475AC_ARG_ENABLE(static,
476changequote(<<, >>)dnl
477<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
478changequote([, ])dnl
479[p=${PACKAGE-default}
480case $enableval in
481yes) enable_static=yes ;;
482no) enable_static=no ;;
483*)
484 enable_static=no
485 # Look at the argument we got. We use all the common list separators.
486 IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
487 for pkg in $enableval; do
488 if test "X$pkg" = "X$p"; then
489 enable_static=yes
490 fi
491 done
492 IFS="$ac_save_ifs"
493 ;;
494esac],
495enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
496])
497
498dnl AC_DISABLE_STATIC - set the default static flag to --disable-static
499AC_DEFUN([AC_DISABLE_STATIC],
500[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
501AC_ENABLE_STATIC(no)])
502
503dnl AC_TRY_RUN_STRICT(PROGRAM,CFLAGS,CPPFLAGS,LDFLAGS,
504dnl [ACTION-IF-TRUE],[ACTION-IF-FALSE],
505dnl [ACTION-IF-CROSS-COMPILING = RUNTIME-ERROR])
506AC_DEFUN( [AC_TRY_RUN_STRICT],
507[
508 old_CFLAGS="$CFLAGS";
509 CFLAGS="$2";
510 export CFLAGS;
511 old_CPPFLAGS="$CPPFLAGS";
512 CPPFLAGS="$3";
513 export CPPFLAGS;
514 old_LDFLAGS="$LDFLAGS";
515 LDFLAGS="$4";
516 export LDFLAGS;
517 AC_TRY_RUN([$1],[$5],[$6],[$7])
518 CFLAGS="$old_CFLAGS";
519 old_CFLAGS="";
520 export CFLAGS;
521 CPPFLAGS="$old_CPPFLAGS";
522 old_CPPFLAGS="";
523 export CPPFLAGS;
524 LDFLAGS="$old_LDFLAGS";
525 old_LDFLAGS="";
526 export LDFLAGS;
527])
528
529dnl SMB_CHECK_SYSCONF(varname)
530dnl Tests whether the sysconf(3) variable "varname" is available.
531AC_DEFUN([SMB_CHECK_SYSCONF],
532[
533 AC_CACHE_CHECK([for sysconf($1)],
534 samba_cv_SYSCONF$1,
535 [
536 AC_TRY_LINK([#include <unistd.h>],
537 [ return sysconf($1) == -1 ? 1 : 0; ],
538 [ samba_cv_SYSCONF$1=yes ],
539 [ samba_cv_SYSCONF$1=no ])
540 ])
541
542 if test x"$samba_cv_SYSCONF$1" = x"yes" ; then
543 AC_DEFINE(SYSCONF$1, 1, [Whether sysconf($1) is available])
544 fi
545])
546
547dnl SMB_IS_LIBPTHREAD_LINKED([actions if true], [actions if false])
548dnl Test whether the current LIBS results in libpthread being present.
549dnl Execute the corresponding user action list.
550AC_DEFUN([SMB_IS_LIBPTHREAD_LINKED],
551[
552 AC_MSG_CHECKING(if libpthread is linked)
553 AC_TRY_LINK([],
554 [return pthread_create(0, 0, 0, 0);],
555 [
556 AC_MSG_RESULT(yes)
557 $1
558 ],
559 [
560 AC_MSG_RESULT(no)
561 $2
562 ])
563])
564
565dnl SMB_REMOVE_LIB(lib)
566dnl Remove the given library from $LIBS
567AC_DEFUN([SMB_REMOVE_LIB],
568[
569 LIBS=`echo $LIBS | sed '-es/-l$1//g'`
570])
571
572dnl SMB_CHECK_DMAPI([actions if true], [actions if false])
573dnl Check whether DMAPI is available and is a version that we know
574dnl how to deal with. The default truth action is to set samba_dmapi_libs
575dnl to the list of necessary libraries, and to define USE_DMAPI.
576AC_DEFUN([SMB_CHECK_DMAPI],
577[
578 samba_dmapi_libs=""
579
580 if test x"$samba_dmapi_libs" = x"" ; then
581 AC_CHECK_LIB(dm, dm_get_eventlist,
582 [ samba_dmapi_libs="-ldm"], [])
583 fi
584
585 if test x"$samba_dmapi_libs" = x"" ; then
586 AC_CHECK_LIB(jfsdm, dm_get_eventlist,
587 [samba_dmapi_libs="-ljfsdm"], [])
588 fi
589
590 if test x"$samba_dmapi_libs" = x"" ; then
591 AC_CHECK_LIB(xdsm, dm_get_eventlist,
592 [samba_dmapi_libs="-lxdsm"], [])
593 fi
594
595 if test x"$samba_dmapi_libs" = x"" ; then
596 AC_CHECK_LIB(dmapi, dm_get_eventlist,
597 [samba_dmapi_libs="-ldmapi"], [])
598 fi
599
600
601 # Only bother to test ehaders if we have a candidate DMAPI library
602 if test x"$samba_dmapi_libs" != x"" ; then
603 AC_CHECK_HEADERS(sys/dmi.h xfs/dmapi.h sys/jfsdmapi.h sys/dmapi.h dmapi.h)
604 fi
605
606 if test x"$samba_dmapi_libs" != x"" ; then
607 samba_dmapi_save_LIBS="$LIBS"
608 LIBS="$LIBS $samba_dmapi_libs"
609 AC_TRY_LINK(
610 [
611#include <time.h> /* needed by Tru64 */
612#include <sys/types.h> /* needed by AIX */
613#ifdef HAVE_XFS_DMAPI_H
614#include <xfs/dmapi.h>
615#elif defined(HAVE_SYS_DMI_H)
616#include <sys/dmi.h>
617#elif defined(HAVE_SYS_JFSDMAPI_H)
618#include <sys/jfsdmapi.h>
619#elif defined(HAVE_SYS_DMAPI_H)
620#include <sys/dmapi.h>
621#elif defined(HAVE_DMAPI_H)
622#include <dmapi.h>
623#endif
624 ],
625 [
626/* This link test is designed to fail on IRI 6.4, but should
627 * succeed on Linux, IRIX 6.5 and AIX.
628 */
629 char * version;
630 dm_eventset_t events;
631 /* This doesn't take an argument on IRIX 6.4. */
632 dm_init_service(&version);
633 /* IRIX 6.4 expects events to be a pointer. */
634 DMEV_ISSET(DM_EVENT_READ, events);
635 ],
636 [
637 true # DMAPI link test succeeded
638 ],
639 [
640 # DMAPI link failure
641 samba_dmapi_libs=
642 ])
643 LIBS="$samba_dmapi_save_LIBS"
644 fi
645
646 if test x"$samba_dmapi_libs" = x"" ; then
647 # DMAPI detection failure actions begin
648 ifelse($2, [],
649 [
650 AC_ERROR(Failed to detect a supported DMAPI implementation)
651 ],
652 [
653 $2
654 ])
655 # DMAPI detection failure actions end
656 else
657 # DMAPI detection success actions start
658 ifelse($1, [],
659 [
660 AC_DEFINE(USE_DMAPI, 1,
661 [Whether we should build DMAPI integration components])
662 AC_MSG_NOTICE(Found DMAPI support in $samba_dmapi_libs)
663 ],
664 [
665 $1
666 ])
667 # DMAPI detection success actions end
668 fi
669
670])
671
672dnl SMB_CHECK_CLOCK_ID(clockid)
673dnl Test whether the specified clock_gettime clock ID is available. If it
674dnl is, we define HAVE_clockid
675AC_DEFUN([SMB_CHECK_CLOCK_ID],
676[
677 AC_MSG_CHECKING(for $1)
678 AC_TRY_LINK([
679#if TIME_WITH_SYS_TIME
680# include <sys/time.h>
681# include <time.h>
682#else
683# if HAVE_SYS_TIME_H
684# include <sys/time.h>
685# else
686# include <time.h>
687# endif
688#endif
689 ],
690 [
691clockid_t clk = $1;
692 ],
693 [
694 AC_MSG_RESULT(yes)
695 AC_DEFINE(HAVE_$1, 1,
696 [Whether the clock_gettime clock ID $1 is available])
697 ],
698 [
699 AC_MSG_RESULT(no)
700 ])
701])
702
703dnl SMB_IF_RTSIGNAL_BUG([actions if true],
704dnl [actions if false],
705dnl [actions if cross compiling])
706dnl Test whether we can call sigaction with RT_SIGNAL_NOTIFY and
707dnl RT_SIGNAL_LEASE (also RT_SIGNAL_AIO for good measure, though
708dnl I don't believe that triggers any bug.
709dnl
710dnl See the samba-technical thread titled "Failed to setup
711dnl RT_SIGNAL_NOTIFY handler" for details on the bug in question.
712AC_DEFUN([SMB_IF_RTSIGNAL_BUG],
713[
714 rt_signal_notify_works=yes
715 rt_signal_lease_works=yes
716 rt_signal_aio_works=yes
717
718 AC_MSG_CHECKING(if sigaction works with realtime signals)
719 AC_TRY_RUN(
720 [
721#include <sys/types.h>
722#include <fcntl.h>
723#include <signal.h>
724
725/* from smbd/notify_kernel.c */
726#ifndef RT_SIGNAL_NOTIFY
727#define RT_SIGNAL_NOTIFY (SIGRTMIN+2)
728#endif
729
730/* from smbd/aio.c */
731#ifndef RT_SIGNAL_AIO
732#define RT_SIGNAL_AIO (SIGRTMIN+3)
733#endif
734
735/* from smbd/oplock_linux.c */
736#ifndef RT_SIGNAL_LEASE
737#define RT_SIGNAL_LEASE (SIGRTMIN+1)
738#endif
739
740static void signal_handler(int sig, siginfo_t *info, void *unused)
741{
742 int do_nothing = 0;
743}
744
745int main(void)
746{
747 int result = 0;
748 struct sigaction act = {0};
749
750 act.sa_sigaction = signal_handler;
751 act.sa_flags = SA_SIGINFO;
752 sigemptyset( &act.sa_mask );
753
754 if (sigaction(RT_SIGNAL_LEASE, &act, 0) != 0) {
755 /* Failed to setup RT_SIGNAL_LEASE handler */
756 result += 1;
757 }
758
759 if (sigaction(RT_SIGNAL_NOTIFY, &act, 0) != 0) {
760 /* Failed to setup RT_SIGNAL_NOTIFY handler */
761 result += 10;
762 }
763
764 if (sigaction(RT_SIGNAL_AIO, &act, 0) != 0) {
765 /* Failed to setup RT_SIGNAL_AIO handler */
766 result += 100;
767 }
768
769 /* zero on success */
770 return result;
771}
772 ],
773 [
774 AC_MSG_RESULT(yes)
775 $2
776 ],
777 [
778 AC_MSG_RESULT(no)
779 case "$ac_status" in
780 1|11|101|111) rt_signal_lease_ok=no ;;
781 esac
782 case "$ac_status" in
783 10|11|110|111) rt_signal_notify_ok=no ;;
784 esac
785 case "$ac_status" in
786 100|110|101|111) rt_signal_aio_ok=no ;;
787 esac
788 $2
789 ],
790 [
791 AC_MSG_RESULT(cross)
792 $3
793 ])
794])
795
796m4_include(lib/replace/libreplace.m4)
Note: See TracBrowser for help on using the repository browser.