source: branches/samba-3.2.x/source/m4/aclocal.m4@ 1036

Last change on this file since 1036 was 204, checked in by Herwig Bauernfeind, 16 years ago

Update 3.2 branch to 3.2.4

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