• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/samba-3.0.25b/source/
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