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) 797