Add st_birthtime and friends for accurate create times on systems that support it...
[samba.git] / source / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/config.h)
10 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
11
12 case "$PATH" in
13     */usr/ucb*)
14         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
15         ;;
16 esac 
17
18 builddir=`pwd`
19 AC_SUBST(builddir)
20
21 m4_include(m4/samba_version.m4)
22 m4_include(m4/check_path.m4)
23
24 AC_LIBREPLACE_CC_CHECKS
25
26 m4_include(lib/talloc/libtalloc.m4)
27
28 TALLOC_OBJS=""
29 for obj in ${TALLOC_OBJ}; do
30         TALLOC_OBJS="${TALLOC_OBJS} ${tallocdir}/${obj}"
31 done
32 AC_SUBST(TALLOC_OBJS)
33
34 # TODO: These should come from m4_include(lib/tdb/libtdb.m4)
35 # but currently this fails: things have to get merged from s4.
36 tdbdir="lib/tdb"
37 AC_SUBST(tdbdir)
38 TDB_CFLAGS="-I${srcdir-.}/$tdbdir/include"
39 AC_SUBST(TDB_CFLAGS)
40 TDB_OBJ="common/tdb.o common/dump.o common/transaction.o common/error.o common/traverse.o"
41 TDB_OBJ="$TDB_OBJ common/freelist.o common/freelistcheck.o common/io.o common/lock.o common/open.o"
42 AC_SUBST(TDB_OBJ)
43
44 TDB_OBJS=""
45 for obj in ${TDB_OBJ}; do
46         TDB_OBJS="${TDB_OBJS} ${tdbdir}/${obj}"
47 done
48 AC_SUBST(TDB_OBJS)
49
50 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
51 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
52 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
53 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
54 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
55 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
56
57 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
58
59 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
60 if test "x${srcdir-.}" != "x."; then
61         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
62 fi
63
64 dnl Unique-to-Samba variables we'll be playing with.
65 AC_SUBST(SAMBA_CPPFLAGS)
66 AC_SUBST(SHELL)
67 AC_SUBST(LDSHFLAGS)
68 AC_SUBST(SONAMEFLAG)
69 AC_SUBST(SHLD)
70 AC_SUBST(MODULE_EXPORTS)
71 AC_SUBST(DSO_EXPORTS)
72 AC_SUBST(HOST_OS)
73 AC_SUBST(PICFLAG)
74 AC_SUBST(PIE_CFLAGS)
75 AC_SUBST(PIE_LDFLAGS)
76 AC_SUBST(RELRO_LDFLAGS)
77 AC_SUBST(SHLIBEXT)
78 AC_SUBST(INSTALLLIBCMD_SH)
79 AC_SUBST(INSTALLLIBCMD_A)
80 AC_SUBST(UNINSTALLLIBCMD_SH)
81 AC_SUBST(UNINSTALLLIBCMD_A)
82
83 AC_SUBST(INSTALL_LIBWBCLIENT)
84 AC_SUBST(UNINSTALL_LIBWBCLIENT)
85 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
86 AC_SUBST(LIBWBCLIENT_SHARED)
87 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
88 AC_SUBST(LIBWBCLIENT_STATIC)
89 AC_SUBST(LIBWBCLIENT_SOVER)
90 AC_SUBST(LIBWBCLIENT)
91 AC_SUBST(WINBIND_LIBS)
92
93 AC_SUBST(LIBSAMBAUTIL_SHARED)
94
95 AC_SUBST(PRINT_LIBS)
96 AC_SUBST(AUTH_LIBS)
97 AC_SUBST(ACL_LIBS)
98 AC_SUBST(PASSDB_LIBS)
99 AC_SUBST(IDMAP_LIBS)
100 AC_SUBST(KRB5_LIBS)
101 AC_SUBST(UUID_LIBS)
102 AC_SUBST(LDAP_LIBS)
103 AC_SUBST(PAM_MODULES)
104 AC_SUBST(INSTALL_PAM_MODULES)
105 AC_SUBST(UNINSTALL_PAM_MODULES)
106 AC_SUBST(NSS_MODULES)
107 AC_SUBST(EXTRA_BIN_PROGS)
108 AC_SUBST(CIFSMOUNT_PROGS)
109 AC_SUBST(INSTALL_CIFSMOUNT)
110 AC_SUBST(UNINSTALL_CIFSMOUNT)
111 AC_SUBST(CIFSUPCALL_PROGS)
112 AC_SUBST(INSTALL_CIFSUPCALL)
113 AC_SUBST(UNINSTALL_CIFSUPCALL)
114 AC_SUBST(EXTRA_SBIN_PROGS)
115 AC_SUBST(EXTRA_ALL_TARGETS)
116 AC_SUBST(CONFIG_LIBS)
117 AC_SUBST(NSCD_LIBS)
118
119 # compile with optimization and without debugging by default, but
120 # allow people to set their own preference.
121 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
122 # if it has no value.  This prevent *very* large debug binaries from occurring
123 # by default.
124 if test "x$CFLAGS" = x; then
125   CFLAGS="-O"
126 fi
127 if test "x$debug" = "xyes" ; then
128         CFLAGS="${CFLAGS} -g"
129 else
130         CFLAGS="-O"
131 fi
132
133 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
134
135 m4_include(lib/socket_wrapper/config.m4)
136 m4_include(lib/nss_wrapper/config.m4)
137
138 m4_include(m4/swat.m4)
139
140 # Probe the gcc version for extra CFLAGS. We always stash these in
141 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
142 # Makefile edit, avoiding the need to re-run configure.
143 if test x"$ac_cv_prog_gcc" = x"yes" ; then
144         DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
145         # Add -Wdeclaration-after-statement if compiler supports it
146         AC_CACHE_CHECK(
147           [that the C compiler understands -Wdeclaration-after-statement],
148           samba_cv_HAVE_Wdeclaration_after_statement, [
149           AC_TRY_RUN_STRICT([
150             int main(void)
151             {
152                 return 0;
153             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
154             samba_cv_HAVE_Wdeclaration_after_statement=yes,
155             samba_cv_HAVE_Wdeclaration_after_statement=no,
156             samba_cv_HAVE_Wdeclaration_after_statement=cross)
157        ])
158
159         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
160             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
161         fi
162
163         #-Werror-implicit-function-declaration
164         AC_CACHE_CHECK(
165           [that the C compiler understands -Werror-implicit-function-declaration],
166           samba_cv_HAVE_Werror_implicit_function_declaration, [
167           AC_TRY_RUN_STRICT([
168             int main(void)
169             {
170                 return 0;
171             }],[-Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
172             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
173             samba_cv_HAVE_Werror_implicit_function_declaration=no,
174             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
175        ])
176        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
177             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
178        fi
179
180         # krb5developer is like developer, except we don't get
181         # -Wstrict-prototypes.
182        if test x"$krb5_developer" != x"$yes" ; then
183             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
184        fi
185 fi
186
187 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
188
189 if test "x$enable_dmalloc" = xyes
190 then
191         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
192         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
193                   [Define to check invariants around some common functions])
194         LIBS="$LIBS -ldmalloc"  
195 fi
196
197 #################################################
198 # check for a shared memory profiling support
199 AC_MSG_CHECKING(whether to use profiling)
200 AC_ARG_WITH(profiling-data,
201 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
202 [ case "$withval" in
203   yes)
204     AC_MSG_RESULT(yes)
205     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
206     samba_cv_WITH_PROFILE=yes
207     ;;
208   *)
209     AC_MSG_RESULT(no)
210     samba_cv_WITH_PROFILE=no
211     ;;
212   esac ],
213   AC_MSG_RESULT(no)
214 )
215
216 dnl Checks for programs.
217
218 AC_PROG_INSTALL
219 AC_PROG_AWK
220 AC_PATH_PROG(PERL, perl)
221
222 AC_CHECK_TOOL(AR, ar)
223
224 dnl Check if we use GNU ld
225 LD=ld
226 AC_PROG_LD_GNU
227
228 dnl Certain versions of GNU ld the default is not to have the
229 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
230 dnl warnings when building modules.
231 if test "$ac_cv_prog_gnu_ld" = "yes"; then
232         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
233         AC_MSG_CHECKING(GNU ld release date)
234         changequote(,)dnl
235         ac_cv_gnu_ld_date=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
236         changequote([,])dnl
237         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
238         if test -n "$ac_cv_gnu_ld_date"; then
239         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
240                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
241         fi
242         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
243                 ac_cv_gnu_ld_version_script=yes
244         fi
245         else
246            AC_MSG_CHECKING(GNU ld release version)
247            changequote(,)dnl
248            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
249            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
250            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
251            changequote([,])dnl
252            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
253            AC_MSG_CHECKING(GNU ld release version major)
254            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
255            AC_MSG_CHECKING(GNU ld release version minor)
256            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
257            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
258              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
259            fi
260            if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_l= d_vernr_major"=2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
261              ac_cv_gnu_ld_version_script=yes
262            fi
263         fi
264 fi
265
266 dnl look for executable suffix
267 AC_EXEEXT
268
269 dnl Check if C compiler understands -c and -o at the same time
270 AC_PROG_CC_C_O
271 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
272       BROKEN_CC=
273 else
274       BROKEN_CC=#
275 fi
276 AC_SUBST(BROKEN_CC)
277
278 dnl Check if the C compiler understands -Werror
279 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
280  AC_TRY_RUN_STRICT([
281   int main(void)
282   {
283         return 0;
284   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
285   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
286 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
287    Werror_FLAGS="-Werror"
288 else
289 dnl Check if the C compiler understands -w2
290 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
291  AC_TRY_RUN_STRICT([
292   int main(void)
293   {
294         return 0;
295   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
296   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
297 if test x"$samba_cv_HAVE_w2" = x"yes"; then
298    Werror_FLAGS="-w2"
299 else
300 dnl Check if the C compiler understands -errwarn
301 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
302   AC_TRY_RUN_STRICT([
303    int main(void)
304    {
305         return 0;
306    }],[-errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
307    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
308 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
309    Werror_FLAGS="-errwarn=%all"
310 fi
311 fi
312 fi
313
314 dnl Check if the C compiler understands volatile (it should, being ANSI).
315 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
316     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
317         samba_cv_volatile=yes,samba_cv_volatile=no)])
318 if test x"$samba_cv_volatile" = x"yes"; then
319    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
320 fi
321
322 ############################################
323 # check if the compiler can handle negative enum values
324 # and don't truncate the values to INT_MAX
325 # a runtime test is needed here
326 AC_SUBST(PIDL_ARGS)
327 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
328     AC_TRY_RUN(
329 [
330         #include <stdio.h>
331         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
332         int main(void) {
333                 enum negative_values v1 = NEGATIVE_VALUE;
334                 unsigned v2 = NEGATIVE_VALUE;
335
336                 if (v1 != 0xFFFFFFFF) {
337                         printf("%u != 0xFFFFFFFF\n", v1);
338                         return 1;
339                 }
340                 if (v2 != 0xFFFFFFFF) {
341                         printf("%u != 0xFFFFFFFF\n", v2);
342                         return 1;
343                 }
344
345                 return 0;
346         }
347 ],
348         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
349 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
350         AC_MSG_WARN([using --unit-enums for pidl])
351         PIDL_ARGS="$PIDL_ARGS --uint-enums"
352 fi
353
354 dnl Figure out the flags to support named structure initializers
355
356 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
357
358 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
359 AC_MSG_CHECKING(uname -s)
360 AC_MSG_RESULT(${UNAME_S})
361
362 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
363 AC_MSG_CHECKING(uname -r)
364 AC_MSG_RESULT(${UNAME_R})
365
366 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
367 AC_MSG_CHECKING(uname -m)
368 AC_MSG_RESULT(${UNAME_M})
369
370 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
371 AC_MSG_CHECKING(uname -p)
372 AC_MSG_RESULT(${UNAME_P})
373
374 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
375 AC_MSG_CHECKING(uname -i)
376 AC_MSG_RESULT(${UNAME_I})
377
378 dnl Add #include for broken IRIX header files
379   case "$host_os" in
380         *irix6*)
381                 #TODO add to libreplace
382                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
383                         dnl Fix sensible defaults for MIPSPro compilers. The
384                         dnl error numbers are valid for the 7.3 compilers,
385                         dnl hopefully also valid for the 7.4 series.
386                         dnl
387                         dnl Bugzilla 3801. Force an error on warning 1035
388                         dnl so we don't incorrectly detect stdint.h. This
389                         dnl warning is emitted for #error directives.
390                         CFLAGS="$CFLAGS -diag_error 1035"
391                         dnl 1209: Controlling expression is constant
392                         dnl 1174: Function foo declared but never referenced
393                         dnl 3201: Parameter foo was never referenced
394                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
395                 fi
396         ;;
397 esac
398
399 DYNEXP=
400 AC_SUBST(DYNEXP)
401
402 dnl Add modules that have to be built by default here
403 dnl These have to be built static:
404 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs2 rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
405
406 dnl These are preferably build shared, and static if dlopen() is not available
407 default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb vfs_streams_xattr"
408
409 if test "x$developer" = xyes; then
410    default_static_modules="$default_static_modules rpc_rpcecho"
411    default_shared_modules="$default_shared_modules charset_weird"
412 fi
413
414 #
415 # Config CPPFLAG settings for strange OS's that must be set
416 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
417 # case statement; its first reference must be unconditional.
418 #
419 case "$host_os" in
420     *hpux*)
421 #
422 # Defines needed for HPUX support.
423 # HPUX has bigcrypt but (sometimes?) doesn't use it for
424 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
425 #
426       case `uname -r` in
427                 *9*|*10*|*11)
428                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
429                 ;;
430       esac
431       ;;
432
433 #
434 # CRAY Unicos has broken const handling
435        *unicos*)
436           AC_MSG_RESULT([disabling const])
437           CPPFLAGS="$CPPFLAGS -Dconst="
438           ;;
439         
440 #
441 # AIX4.x doesn't even admit to having large
442 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
443 #
444     *aix4*)
445           AC_MSG_RESULT([enabling large file support])
446       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
447           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
448       ;;
449 #
450 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
451 # to the existance of large files..
452 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
453 # recommendations on large file support, however it makes the
454 # compile work using gcc 2.7 and 2.8, whereas using the Sun
455 # recommendation makes the compile fail on gcc2.7. JRA.
456 #
457 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
458 #
459         *solaris*)
460                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
461                 case `uname -r` in
462                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
463                                 AC_MSG_RESULT([no large file support])
464                                 ;;
465                         5.*)
466                         AC_MSG_RESULT([enabling large file support])
467                         if test "$ac_cv_prog_gcc" = yes; then
468                                 ${CC-cc} -v >conftest.c 2>&1
469                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
470                                 rm -fr conftest.c
471                                 case "$ac_cv_gcc_compiler_version_number" in
472                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
473                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
474                                                 LDFLAGS="$LDFLAGS -lthread"
475                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
476                                                 ;;
477                                         *)
478                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
479                                                 LDFLAGS="$LDFLAGS -lthread"
480                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
481                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
482                                                 ;;
483                                 esac
484                         else
485                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
486                                 LDFLAGS="$LDFLAGS -lthread"
487                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
488                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
489                         fi
490                         ;;
491                 esac
492                 ;;
493 #
494 # IRIX uses SYSV printing.  Make sure to set that here
495 #
496         *irix*)
497                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
498                 ;;
499         *freebsd*|*dragonfly*)
500                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
501                 ;;
502 #
503 # VOS may need to have POSIX support and System V compatibility enabled.
504 #
505     *vos*)
506     case "$CPPFLAGS" in
507           *-D_POSIX_C_SOURCE*)
508                 ;;
509           *)
510                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
511                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
512                 ;;
513     esac
514     case "$CPPFLAGS" in
515           *-D_SYSV*|*-D_SVID_SOURCE*)
516                 ;;
517           *)
518                 CPPFLAGS="$CPPFLAGS -D_SYSV"
519                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
520     esac
521     ;;
522 #
523 # Tests needed for SINIX large file support.
524 #
525     *sysv4*)
526       if test $host = mips-sni-sysv4 ; then
527         AC_MSG_CHECKING([for LFS support])
528         old_CPPFLAGS="$CPPFLAGS"
529         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
530         AC_TRY_RUN([
531 #include <unistd.h>
532 main () {
533 #if _LFS64_LARGEFILE == 1
534 exit(0);
535 #else
536 exit(1);
537 #endif
538 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
539         CPPFLAGS="$old_CPPFLAGS"
540         if test x$SINIX_LFS_SUPPORT = xyes ; then
541           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
542                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
543           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
544           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
545           LIBS="`getconf LFS64_LIBS` $LIBS"
546         fi
547       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
548       fi
549     ;;
550
551 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
552 #
553     *linux*)
554         AC_MSG_CHECKING([for LFS support])
555         old_CPPFLAGS="$CPPFLAGS"
556         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
557        AC_TRY_RUN([
558 #include <unistd.h>
559 #include <sys/utsname.h>
560 #include <string.h>
561 #include <stdlib.h>
562 main() {
563 #if _LFS64_LARGEFILE == 1
564        struct utsname uts;
565        char *release;
566        int major, minor;
567
568        /* Ensure this is glibc 2.2 or higher */
569 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
570        int libc_major = __GLIBC__;
571        int libc_minor = __GLIBC_MINOR__;
572
573        if (libc_major < 2)
574               exit(1);
575        if (libc_minor < 2)
576               exit(1);
577 #endif
578
579        /* Ensure this is kernel 2.4 or higher */
580
581        uname(&uts);
582        release = strdup(uts.release);
583        major = atoi(strsep(&release, "."));
584        minor = atoi(strsep(&release, "."));
585
586        if (major > 2 || (major == 2 && minor > 3))
587                exit(0);
588        exit(1);
589 #else
590        exit(1);
591 #endif
592 }
593 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
594         CPPFLAGS="$old_CPPFLAGS"
595         if test x$LINUX_LFS_SUPPORT = xyes ; then
596                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
597                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
598                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
599                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
600         fi
601         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
602         ;;
603
604 #
605 # MacOS X is the *only* system that uses compose character in utf8. This
606 # is so horribly broken....
607 #
608     *darwin*)
609         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
610
611 # Add a system specific charset module.
612         default_shared_modules="$default_shared_modules charset_macosxfs"
613
614         ;;
615     *hurd*)
616         AC_MSG_CHECKING([for LFS support])
617         old_CPPFLAGS="$CPPFLAGS"
618         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
619         AC_TRY_RUN([
620 #include <unistd.h>
621 main () {
622 #if _LFS64_LARGEFILE == 1
623 exit(0);
624 #else
625 exit(1);
626 #endif
627 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
628         CPPFLAGS="$old_CPPFLAGS"
629         if test x$GLIBC_LFS_SUPPORT = xyes ; then
630           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
631                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
632           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
633         fi
634       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
635     ;;
636
637 esac
638
639 SAVE_CPPFLAGS="${CPPFLAGS}"
640 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
641
642 AC_LIBREPLACE_BROKEN_CHECKS
643 AC_LIBREPLACE_NETWORK_CHECKS
644
645 CPPFLAGS="${SAVE_CPPFLAGS}"
646
647 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
648
649 LIBREPLACE_OBJS=""
650 for obj in ${LIBREPLACEOBJ}; do
651         LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
652 done
653 AC_SUBST(LIBREPLACE_OBJS)
654
655 # add -ldl to the global LIBS
656 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
657
658 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
659 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
660 AC_CHECK_HEADERS(limits.h float.h pthread.h)
661 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
662 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
663 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
664 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
665 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
666 AC_CHECK_HEADERS(sys/sysmacros.h)
667 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
668 AC_CHECK_HEADERS(langinfo.h locale.h)
669 AC_CHECK_HEADERS(xfs/libxfs.h)
670 AC_CHECK_HEADERS(netgroup.h)
671
672 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
673 #if HAVE_RPC_RPC_H
674 #include <rpc/rpc.h>
675 #endif
676 ]])
677
678 ## These fail to compile on IRIX so just check for their presence
679 AC_CHECK_HEADERS(sys/mode.h,,,)
680
681 # Look for Darwin headers
682 old_CPPFLAGS="$CPPFLAGS"
683 CPPFLAGS="-Iinclude $CPPFLAGS"
684 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
685 CPPFLAGS="$old_CPPFLAGS"
686
687 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
688 # subdirectory of headers.
689 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
690
691 # check for linux on amd64 since valgrind is not quite there yet
692 case "$host_os" in
693         *linux*)
694                 case "$UNAME_P" in
695                         *x86_64*)
696                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
697                                 ;;
698                 esac
699                 ;;
700 esac
701
702
703 #
704 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
705 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
706 #
707 case "$host_os" in
708     *hpux*)
709                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
710                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
711                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
712                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
713                 fi
714         ;;
715 esac
716 AC_CHECK_HEADERS(shadow.h)
717 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
718 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
719
720 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
721 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
722
723 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
724
725 # For experimental utmp support (lastlog on some BSD-like systems)
726 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
727
728 AC_CHECK_SIZEOF(int,cross)
729 AC_CHECK_SIZEOF(long,cross)
730 AC_CHECK_SIZEOF(long long,cross)
731 AC_CHECK_SIZEOF(short,cross)
732
733 AC_C_CONST
734 AC_C_INLINE
735 AC_C_BIGENDIAN
736 AC_C_CHAR_UNSIGNED
737
738 AC_TYPE_SIGNAL
739 AC_TYPE_UID_T
740 AC_TYPE_MODE_T
741 AC_TYPE_OFF_T
742 AC_TYPE_SIZE_T
743 AC_TYPE_PID_T
744 AC_STRUCT_ST_RDEV
745 AC_DIRENT_D_OFF
746 AC_CHECK_TYPE(ssize_t, int)
747 AC_CHECK_TYPE(wchar_t, unsigned short)
748
749 ############################################
750 # for cups support we need libcups, and a handful of header files
751
752 AC_ARG_ENABLE(cups,
753 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
754
755 if test x$enable_cups != xno; then
756         AC_PATH_PROG(CUPS_CONFIG, cups-config)
757
758         if test "x$CUPS_CONFIG" != x; then
759                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
760                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
761                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
762                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
763         elif test x"$enable_cups" = x"yes"; then
764                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
765         fi
766 fi
767
768 AC_ARG_ENABLE(iprint,
769 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
770
771 if test x$enable_iprint != xno; then
772         if test "x$CUPS_CONFIG" != x; then
773                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
774         elif test x"$enable_iprint" = x"yes"; then
775                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
776         fi
777 fi
778
779 ############################################
780 # check if the compiler will optimize out function calls
781 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
782     AC_TRY_LINK([
783 #include <stdio.h>],
784 [
785                 if (0) {
786                    this_function_does_not_exist();
787                 } else {
788                   return 1;
789                 }
790
791 ],
792         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
793 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
794    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
795 fi
796
797 #############################################
798 # check for fd passing struct via msg_control
799 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
800     AC_TRY_COMPILE([
801 #include <sys/types.h>
802 #include <stdlib.h>
803 #include <stddef.h>
804 #include <sys/socket.h>
805 #include <sys/un.h>],
806 [
807         struct msghdr msg;
808         union {
809               struct cmsghdr cm;
810               char control[CMSG_SPACE(sizeof(int))];
811         } control_un;
812         msg.msg_control = control_un.control;
813         msg.msg_controllen = sizeof(control_un.control);
814 ],
815         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
816 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
817    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
818              [If we can use msg_control for passing file descriptors])
819 fi
820
821 #############################################
822 # check for fd passing struct via msg_acctrights
823 AC_CACHE_CHECK([for fd passing via msg_acctrights],
824                 samba_cv_msghdr_msg_acctrights, [
825     AC_TRY_COMPILE([
826 #include <sys/types.h>
827 #include <stdlib.h>
828 #include <stddef.h>
829 #include <sys/socket.h>
830 #include <sys/un.h>],
831 [
832         struct msghdr msg;
833         int fd;
834         msg.msg_acctrights = (caddr_t) &fd;
835         msg.msg_acctrightslen = sizeof(fd);
836 ],
837         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
838 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
839    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
840              [If we can use msg_acctrights for passing file descriptors])
841 fi
842
843 AC_CHECK_FUNCS(dirfd)
844 if test x"$ac_cv_func_dirfd" = x"yes"; then
845         default_shared_modules="$default_shared_modules vfs_syncops"
846 fi
847
848 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
849     AC_TRY_COMPILE([
850 #include <sys/types.h>
851 #if STDC_HEADERS
852 #include <stdlib.h>
853 #include <stddef.h>
854 #endif
855 #include <signal.h>],[sig_atomic_t i = 0],
856         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
857 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
858    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
859 fi
860
861 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
862     AC_TRY_COMPILE([
863 #include <sys/types.h>
864 #if STDC_HEADERS
865 #include <stdlib.h>
866 #include <stddef.h>
867 #endif
868 #if TIME_WITH_SYS_TIME
869 # include <sys/time.h>
870 # include <time.h>
871 #else
872 # if HAVE_SYS_TIME_H
873 #  include <sys/time.h>
874 # else
875 #  include <time.h>
876 # endif
877 #endif
878 ],[struct timespec ts;],
879         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
880 if test x"$samba_cv_struct_timespec" = x"yes"; then
881    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
882 fi
883
884 # stupid headers have the functions but no declaration. grrrr.
885 AC_HAVE_DECL(errno, [#include <errno.h>])
886 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
887 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
888
889 # and glibc has setresuid under linux but the function does
890 # nothing until kernel 2.1.44! very dumb.
891 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
892     AC_TRY_RUN([#include <errno.h>
893 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
894         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
895 if test x"$samba_cv_have_setresuid" = x"yes"; then
896     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
897 fi
898
899 # Do the same check for setresguid...
900 #
901 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
902     AC_TRY_RUN([#include <unistd.h>
903 #include <errno.h>
904 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
905         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
906 if test x"$samba_cv_have_setresgid" = x"yes"; then
907     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
908 fi
909
910 AC_FUNC_MEMCMP
911
912 ###############################################
913 # Readline included by default unless explicitly asked not to
914 test "${with_readline+set}" != "set" && with_readline=yes
915
916 # test for where we get readline() from
917 AC_MSG_CHECKING(whether to use readline)
918 AC_ARG_WITH(readline,
919 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
920 [  case "$with_readline" in
921   yes)
922     AC_MSG_RESULT(yes)
923
924     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
925     AC_CHECK_HEADERS(readline/history.h)
926
927     AC_CHECK_HEADERS(readline.h readline/readline.h,[
928       for termlib in ncurses curses termcap terminfo termlib tinfo; do
929        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
930       done
931       AC_CHECK_LIB(readline, rl_callback_handler_install,
932        [TERMLIBS="-lreadline $TERMLIBS"
933        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
934        break], [TERMLIBS=], $TERMLIBS)])
935     ;;
936   no)
937     AC_MSG_RESULT(no)
938     ;;
939   *)
940     AC_MSG_RESULT(yes)
941
942     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
943     # alternate readline path
944     _ldflags=${LDFLAGS}
945     _cppflags=${CPPFLAGS}
946
947     # Add additional search path
948     LDFLAGS="-L$with_readline/lib $LDFLAGS"
949     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
950
951     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
952     AC_CHECK_HEADERS(readline/history.h)
953
954     AC_CHECK_HEADERS(readline.h readline/readline.h,[
955       for termlib in ncurses curses termcap terminfo termlib; do
956        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
957       done
958       AC_CHECK_LIB(readline, rl_callback_handler_install,
959        [TERMLDFLAGS="-L$with_readline/lib"
960        TERMCPPFLAGS="-I$with_readline/include"
961        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
962        TERMLIBS="-lreadline $TERMLIBS"
963        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
964        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
965
966     LDFLAGS=$_ldflags
967     ;;
968   esac],
969   AC_MSG_RESULT(no)
970 )
971 AC_SUBST(TERMLIBS)
972 AC_SUBST(TERMLDFLAGS)
973
974 # The readline API changed slightly from readline3 to readline4, so
975 # code will generate warnings on one of them unless we have a few
976 # special cases.
977 AC_CHECK_LIB(readline, rl_completion_matches,
978              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
979                         [Do we have rl_completion_matches?])],
980              [],
981              [$TERMLIBS])
982
983 # not all readline libs have rl_event_hook or history_list
984 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
985 AC_CHECK_LIB(readline, history_list,
986              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
987              [],
988              [$TERMLIBS])
989
990 ###############################################
991 # test for where we get yp_get_default_domain() from
992 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
993 AC_CHECK_FUNCS(yp_get_default_domain)
994
995 # Check if we have execl, if not we need to compile smbrun.
996 AC_CHECK_FUNCS(execl)
997 if test x"$ac_cv_func_execl" = x"no"; then
998     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
999 fi
1000
1001 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown lchown chmod fchmod chroot link mknod mknod64)
1002 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1003 AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
1004 AC_CHECK_FUNCS(getrlimit fsync fdatasync memset strlcpy strlcat setpgid)
1005 AC_CHECK_FUNCS(memmove setsid glob strpbrk pipe crypt16 getauthuid)
1006 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1007 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1008 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1009 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1010 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1011 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1012 AC_CHECK_FUNCS(getpwent_r)
1013 AC_CHECK_FUNCS(getdents getdents64)
1014 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1015 AC_CHECK_FUNCS(syslog vsyslog timegm)
1016 AC_CHECK_FUNCS(setlocale nl_langinfo)
1017 AC_CHECK_FUNCS(nanosleep)
1018 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1019 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1020 AC_CHECK_HEADERS(sys/mman.h)
1021 # setbuffer, shmget, shm_open are needed for smbtorture
1022 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1023
1024 # Find a method of generating a stack trace
1025 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1026 AC_CHECK_FUNCS(backtrace_symbols)
1027 AC_CHECK_LIB(exc, trace_back_stack)
1028
1029 printf "%s" "checking for GPFS GPL libs... "
1030 save_LIBS="$LIBS"
1031 LIBS="$LIBS -lgpfs_gpl"
1032 AC_TRY_LINK([#include <gpfs_gpl.h>],
1033           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1034           samba_cv_HAVE_GPFS=yes,
1035           samba_cv_HAVE_GPFS=no)
1036 echo $samba_cv_HAVE_GPFS
1037 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1038     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1039     default_shared_modules="$default_shared_modules vfs_gpfs"
1040 fi
1041 LIBS="$save_LIBS"
1042
1043 # Note that all the libunwind symbols in the API are defined to internal
1044 # platform-specific version, so we must include libunwind.h before checking
1045 # any of them.
1046 AC_MSG_CHECKING([for libunwind])
1047 save_LIBS=$LIBS
1048
1049 UNWIND_ARCH="unknown"
1050 if test x"$UNAME_I" != x"unknown"; then
1051         UNWIND_ARCH="$UNAME_I"
1052 elif test x"$UNAME_M" != x"unknown"; then
1053         UNWIND_ARCH="$UNAME_M"
1054 elif test x"$UNAME_P" != x"unknown"; then
1055         UNWIND_ARCH="$UNAME_P"
1056 fi
1057
1058 case "$UNWIND_ARCH" in
1059         unknown)
1060                 # This probably won't link without
1061                 # the platform-specific libunwind.
1062                 LIBS="$LIBS -lunwind"
1063                 ;;
1064         i386|i586|i686)
1065                 # Add the platform-specific libunwind module.
1066                 LIBS="$LIBS -lunwind -lunwind-x86"
1067                 ;;
1068         *)
1069                 # Add the platform-specific libunwind module.
1070                 # based on uname -i, uname -m or uname -p
1071                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1072                 ;;
1073 esac
1074
1075 AC_TRY_LINK(
1076     [
1077 #ifdef HAVE_LIBUNWIND_H
1078 #include <libunwind.h>
1079 #endif
1080     ],
1081     [
1082         unw_context_t ctx; unw_cursor_t cur;
1083         char buf[256]; unw_word_t off;
1084         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1085         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1086     ],
1087     [
1088         AC_MSG_RESULT(yes)
1089         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1090
1091         # If we have libunwind, test whether we also have libunwind-ptrace
1092         # which would let us unwind arbitrary processes.
1093         save_LIBS=$LIBS
1094         AC_CHECK_HEADERS(libunwind-ptrace.h)
1095         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1096             [
1097                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1098                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1099                     [Whether libunwind-ptrace.a is available.])
1100             ],
1101             [ LIBUNWIND_PTRACE="" ])
1102
1103         LIBS=$save_LIBS
1104     ],
1105     [
1106         AC_MSG_RESULT(no)
1107         LIBS=$save_LIBS
1108     ])
1109
1110 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1111 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1112     AC_CHECK_HEADERS(sys/ptrace.h)
1113     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1114     AC_TRY_LINK(
1115             [
1116 #if HAVE_SYS_TYPES_H
1117 #include <sys/types.h>
1118 #endif
1119 #if HAVE_SYS_PTRACE_H
1120 #include <sys/ptrace.h>
1121 #endif
1122             ],
1123             [
1124                 int main(int argc, const char ** argv)
1125                 {
1126                         pid_t me = (pid_t)-1;
1127                         ptrace(PTRACE_ATTACH, me, 0, 0);
1128                         ptrace(PTRACE_DETACH, me, 0, 0);
1129                         return 0;
1130                 }
1131             ],
1132             [
1133                 AC_MSG_RESULT(yes)
1134                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1135                     [Whether the Linux ptrace(2) interface is available.])
1136             ],
1137             [
1138                 AC_MSG_RESULT(no)
1139                 LIBUNWIND_PTRACE=""
1140             ])
1141 fi
1142
1143 AC_SUBST(LIBUNWIND_PTRACE)
1144
1145 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1146 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1147 AC_CHECK_FUNCS(__getcwd _getcwd)
1148 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1149 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1150 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1151 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1152 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1153 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1154 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1155 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1156 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1157 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1158 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1159 AC_CHECK_FUNCS(prctl)
1160
1161 AC_TRY_COMPILE([
1162 #ifdef HAVE_SYS_PRCTL_H
1163 #include <sys/prctl.h>
1164 #endif
1165 ],
1166 [int i; i = prtcl(0); ],
1167 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1168
1169 #
1170 #
1171 #
1172 case "$host_os" in
1173     *linux*)
1174        # glibc <= 2.3.2 has a broken getgrouplist
1175        AC_TRY_RUN([
1176 #include <unistd.h>
1177 #include <sys/utsname.h>
1178 main() {
1179        /* glibc up to 2.3 has a broken getgrouplist */
1180 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1181        int libc_major = __GLIBC__;
1182        int libc_minor = __GLIBC_MINOR__;
1183
1184        if (libc_major < 2)
1185               exit(1);
1186        if ((libc_major == 2) && (libc_minor <= 3))
1187               exit(1);
1188 #endif
1189        exit(0);
1190 }
1191 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1192        if test x"$linux_getgrouplist_ok" = x"yes"; then
1193           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1194        fi
1195        ;;
1196     *)
1197        AC_CHECK_FUNCS(getgrouplist)
1198        ;;
1199 esac
1200
1201 #
1202 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1203 #
1204
1205 if test x$ac_cv_func_stat64 = xno ; then
1206   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1207   AC_TRY_LINK([
1208 #if defined(HAVE_UNISTD_H)
1209 #include <unistd.h>
1210 #endif
1211 #include <sys/stat.h>
1212 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1213   AC_MSG_RESULT([$ac_cv_func_stat64])
1214   if test x$ac_cv_func_stat64 = xyes ; then
1215     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1216   fi
1217 fi
1218
1219 if test x$ac_cv_func_lstat64 = xno ; then
1220   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1221   AC_TRY_LINK([
1222 #if defined(HAVE_UNISTD_H)
1223 #include <unistd.h>
1224 #endif
1225 #include <sys/stat.h>
1226 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1227   AC_MSG_RESULT([$ac_cv_func_lstat64])
1228   if test x$ac_cv_func_lstat64 = xyes ; then
1229     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1230   fi
1231 fi
1232
1233 if test x$ac_cv_func_fstat64 = xno ; then
1234   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1235   AC_TRY_LINK([
1236 #if defined(HAVE_UNISTD_H)
1237 #include <unistd.h>
1238 #endif
1239 #include <sys/stat.h>
1240 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1241   AC_MSG_RESULT([$ac_cv_func_fstat64])
1242   if test x$ac_cv_func_fstat64 = xyes ; then
1243     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1244   fi
1245 fi
1246
1247 #################################################
1248 # Check whether struct stat has timestamps with sub-second resolution.
1249 # At least IRIX and Solaris have these.
1250 #
1251 # We check that
1252 #       all of st_mtim, st_atim and st_ctim exist
1253 #       all of the members are in fact of type struct timespec
1254 #
1255 # There is some conflicting standards weirdness about whether we should use
1256 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1257 # prefer struct timespec.
1258
1259 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
1260     [
1261         AC_TRY_COMPILE(
1262             [
1263 #if TIME_WITH_SYS_TIME
1264 # include <sys/time.h>
1265 # include <time.h>
1266 #else
1267 # if HAVE_SYS_TIME_H
1268 #  include <sys/time.h>
1269 # else
1270 #  include <time.h>
1271 # endif
1272 #endif
1273 #ifdef HAVE_SYS_STAT_H
1274 #include <sys/stat.h>
1275 #endif
1276             ],
1277             [
1278                 struct timespec t;
1279                 struct stat s = {0};
1280                 t.tv_sec = s.st_mtim.tv_sec;
1281                 t.tv_nsec = s.st_mtim.tv_nsec;
1282                 t.tv_sec = s.st_ctim.tv_sec;
1283                 t.tv_nsec = s.st_ctim.tv_nsec;
1284                 t.tv_sec = s.st_atim.tv_sec;
1285                 t.tv_nsec = s.st_atim.tv_nsec;
1286             ],
1287             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1288     ])
1289
1290 if test x"$samba_cv_stat_hires" = x"yes" ; then
1291     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1292     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1293     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1294     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1295             [whether struct stat has sub-second timestamps])
1296 fi
1297
1298 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_cv_stat_hires_notimespec,
1299     [
1300         AC_TRY_COMPILE(
1301             [
1302 #if TIME_WITH_SYS_TIME
1303 # include <sys/time.h>
1304 # include <time.h>
1305 #else
1306 # if HAVE_SYS_TIME_H
1307 #  include <sys/time.h>
1308 # else
1309 #  include <time.h>
1310 # endif
1311 #endif
1312 #ifdef HAVE_SYS_STAT_H
1313 #include <sys/stat.h>
1314 #endif
1315             ],
1316             [
1317                 struct timespec t;
1318                 struct stat s = {0};
1319                 t.tv_sec = s.st_mtime;
1320                 t.tv_nsec = s.st_mtimensec;
1321                 t.tv_sec = s.st_ctime;
1322                 t.tv_nsec = s.st_ctimensec;
1323                 t.tv_sec = s.st_atime;
1324                 t.tv_nsec = s.st_atimensec;
1325             ],
1326             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1327     ])
1328
1329 if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
1330     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1331     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1332     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1333     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1334             [whether struct stat has sub-second timestamps without struct timespec])
1335 fi
1336
1337 AC_CACHE_CHECK([whether struct stat has st_birthtimespec], samba_cv_stat_st_birthtimespec,
1338     [
1339         AC_TRY_COMPILE(
1340             [
1341 #if TIME_WITH_SYS_TIME
1342 # include <sys/time.h>
1343 # include <time.h>
1344 #else
1345 # if HAVE_SYS_TIME_H
1346 #  include <sys/time.h>
1347 # else
1348 #  include <time.h>
1349 # endif
1350 #endif
1351 #ifdef HAVE_SYS_STAT_H
1352 #include <sys/stat.h>
1353 #endif
1354             ],
1355             [
1356                 struct timespec t;
1357                 struct stat s = {0};
1358                 t = s.st_birthtimespec;
1359             ],
1360             samba_cv_stat_st_birthtimespec=yes, samba_cv_stat_birthtimespec=no)
1361     ])
1362
1363 if test x"$samba_cv_stat_st_birthtimespec" = x"yes" ; then
1364     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMESPEC, 1, [whether struct stat contains st_birthtimespec])
1365 fi
1366
1367 AC_CACHE_CHECK([whether struct stat has st_birthtimensec], samba_cv_stat_st_birthtimensec,
1368     [
1369         AC_TRY_COMPILE(
1370             [
1371 #if TIME_WITH_SYS_TIME
1372 # include <sys/time.h>
1373 # include <time.h>
1374 #else
1375 # if HAVE_SYS_TIME_H
1376 #  include <sys/time.h>
1377 # else
1378 #  include <time.h>
1379 # endif
1380 #endif
1381 #ifdef HAVE_SYS_STAT_H
1382 #include <sys/stat.h>
1383 #endif
1384             ],
1385             [
1386                 struct timespec t;
1387                 struct stat s = {0};
1388                 t.tv_nsec = s.st_birthtimensec;
1389             ],
1390             samba_cv_stat_st_birthtimensec=yes, samba_cv_stat_birthtimensec=no)
1391     ])
1392
1393 if test x"$samba_cv_stat_st_birthtimensec" = x"yes" ; then
1394     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMENSEC, 1, [whether struct stat contains st_birthtimensec])
1395 fi
1396
1397 AC_CACHE_CHECK([whether struct stat has st_birthtime], samba_cv_stat_st_birthtime,
1398     [
1399         AC_TRY_COMPILE(
1400             [
1401 #if TIME_WITH_SYS_TIME
1402 # include <sys/time.h>
1403 # include <time.h>
1404 #else
1405 # if HAVE_SYS_TIME_H
1406 #  include <sys/time.h>
1407 # else
1408 #  include <time.h>
1409 # endif
1410 #endif
1411 #ifdef HAVE_SYS_STAT_H
1412 #include <sys/stat.h>
1413 #endif
1414             ],
1415             [
1416                 struct time_t t;
1417                 struct stat s = {0};
1418                 t = s.st_birthtime;
1419             ],
1420             samba_cv_stat_st_birthtime=yes, samba_cv_stat_birthtime=no)
1421     ])
1422
1423 if test x"$samba_cv_stat_st_birthtime" = x"yes" ; then
1424     AC_DEFINE(HAVE_STAT_ST_BIRTHTIME, 1, [whether struct stat contains st_birthtime])
1425 fi
1426
1427 #####################################
1428 # needed for SRV lookups
1429 AC_CHECK_LIB(resolv, dn_expand)
1430 AC_CHECK_LIB(resolv, _dn_expand)
1431 AC_CHECK_LIB(resolv, __dn_expand)
1432
1433 #
1434 # Check for the functions putprpwnam, set_auth_parameters,
1435 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1436 # Needed for OSF1 and HPUX.
1437 #
1438
1439 AC_LIBTESTFUNC(security, putprpwnam)
1440 AC_LIBTESTFUNC(sec, putprpwnam)
1441
1442 AC_LIBTESTFUNC(security, set_auth_parameters)
1443 AC_LIBTESTFUNC(sec, set_auth_parameters)
1444
1445 # UnixWare 7.x has its getspnam in -lgen
1446 AC_LIBTESTFUNC(gen, getspnam)
1447
1448 AC_LIBTESTFUNC(security, getspnam)
1449 AC_LIBTESTFUNC(sec, getspnam)
1450
1451 AC_LIBTESTFUNC(security, bigcrypt)
1452 AC_LIBTESTFUNC(sec, bigcrypt)
1453
1454 AC_LIBTESTFUNC(security, getprpwnam)
1455 AC_LIBTESTFUNC(sec, getprpwnam)
1456
1457 AC_CHECK_FUNCS(strsignal)
1458
1459 ############################################
1460 # Check if we have libattr
1461 case "$host_os" in
1462   *osf*)
1463         AC_SEARCH_LIBS(getproplist, [proplist])
1464         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1465         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1466         AC_CHECK_FUNCS(sizeof_proplist_entry)
1467   ;;
1468   *)
1469         AC_SEARCH_LIBS(getxattr, [attr])
1470         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1471         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1472         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1473         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1474         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1475         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1476         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1477   ;;
1478 esac
1479
1480 ########################################################
1481 # Check if attropen() is present if this is Solaris
1482 case "$host_os" in
1483   *solaris*)
1484         AC_CHECK_FUNCS(attropen)
1485   ;;
1486 esac
1487
1488 ########################################################
1489 # Do xattr functions take additional options like on Darwin?
1490 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1491         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1492                 old_LIBS=$LIBS
1493                 LIBS="$LIBS $ACL_LIBS"
1494                 AC_TRY_COMPILE([
1495                         #include <sys/types.h>
1496                         #if HAVE_ATTR_XATTR_H
1497                         #include <attr/xattr.h>
1498                         #elif HAVE_SYS_XATTR_H
1499                         #include <sys/xattr.h>
1500                         #endif
1501                 ],[
1502                         getxattr(0, 0, 0, 0, 0, 0);
1503                 ],
1504                 [smb_attr_cv_xattr_add_opt=yes],
1505                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1506         ])
1507         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1508                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1509         fi
1510 fi
1511
1512 # Check if we have extattr
1513 case "$host_os" in
1514   *freebsd4* | *dragonfly* )
1515     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1516     ;;
1517   *)
1518     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1519     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1520     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1521     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1522     ;;
1523 esac
1524
1525 AC_DISABLE_STATIC
1526 AC_ENABLE_SHARED
1527
1528 # Set defaults
1529 PIE_CFLAGS=""
1530 PIE_LDFLAGS=""
1531 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1532
1533 if test "x$enable_pie" != xno
1534 then
1535         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1536         [
1537                 cat > conftest.c <<EOF
1538 int foo;
1539 main () { return 0;}
1540 EOF
1541                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1542                 then
1543                         samba_cv_fpie=yes
1544                 else
1545                         samba_cv_fpie=no
1546                 fi
1547                 rm -f conftest*
1548         ])
1549         if test x"${samba_cv_fpie}" = x"yes"
1550         then
1551                 PIE_CFLAGS="-fPIE"
1552                 PIE_LDFLAGS="-pie"
1553         fi
1554 fi
1555
1556 # Set defaults
1557 RELRO_LDFLAGS=""
1558 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1559
1560 if test "x$enable_relro" != xno
1561 then
1562         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1563         [
1564                 cat > conftest.c <<EOF
1565 int foo;
1566 main () { return 0;}
1567 EOF
1568                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1569                 then
1570                         samba_cv_relro=yes
1571                 else
1572                         samba_cv_relro=no
1573                 fi
1574                 rm -f conftest*
1575         ])
1576         if test x"${samba_cv_relro}" = x"yes"
1577         then
1578                 RELRO_LDFLAGS="-Wl,-z,relro"
1579         fi
1580 fi
1581
1582 # Set defaults
1583 SYMSEXT="syms"
1584 AC_SUBST(SYMSEXT)
1585
1586 # Assume non-shared by default and override below
1587 BLDSHARED="false"
1588
1589 # these are the defaults, good for lots of systems
1590 HOST_OS="$host_os"
1591 LDSHFLAGS="-shared"
1592 MODULE_EXPORTS=""
1593 SONAMEFLAG="#"
1594 SHLD="\${CC} \${CFLAGS}"
1595 PICFLAG="${PIE_CFLAGS}"
1596 SHLIBEXT="so"
1597 DSO_EXPORTS=""
1598
1599 # this bit needs to be modified for each OS that supports share libs
1600 # You need to specify how to create a shared library and
1601   # how to compile C code to produce PIC object files
1602
1603   AC_MSG_CHECKING([ability to build shared libraries])
1604
1605   # and these are for particular systems
1606   case "$host_os" in
1607                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1608                         BLDSHARED="true"
1609                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1610                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1611                         else
1612                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1613                         fi
1614                         DYNEXP="-Wl,--export-dynamic"
1615                         PICFLAG="-fPIC"
1616                         SONAMEFLAG="-Wl,-soname="
1617                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1618                         ;;
1619                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1620                         BLDSHARED="true"
1621                         LDSHFLAGS="-G"
1622                         SONAMEFLAG="-h "
1623                         if test "${GCC}" = "yes"; then
1624                                 PICFLAG="-fPIC"
1625                                 SONAMEFLAG="-Wl,-soname="
1626                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1627                                         DYNEXP="-Wl,-E"
1628                                 fi
1629                         else
1630                                 PICFLAG="-KPIC"
1631                                 ## ${CFLAGS} added for building 64-bit shared
1632                                 ## libs using Sun's Compiler
1633                                 LDSHFLAGS="-G \${CFLAGS}"
1634                         fi
1635                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1636                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1637                         ;;
1638                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1639                         BLDSHARED="true"
1640                         LDSHFLAGS="-G"
1641                         SONAMEFLAG="-Wl,-h,"
1642                         PICFLAG="-KPIC"   # Is this correct for SunOS
1643                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1644                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1645                         ;;
1646                 *netbsd* | *freebsd* | *dragonfly* )
1647                         BLDSHARED="true"
1648                         LDSHFLAGS="-shared"
1649                         DYNEXP="-Wl,--export-dynamic"
1650                         SONAMEFLAG="-Wl,-soname,"
1651                         PICFLAG="-fPIC -DPIC"
1652                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1653                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1654                         ;;
1655                 *openbsd*)  BLDSHARED="true"
1656                         LDSHFLAGS="-shared"
1657                         DYNEXP="-Wl,-Bdynamic"
1658                         SONAMEFLAG="-Wl,-soname,"
1659                         PICFLAG="-fPIC"
1660                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1661                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1662                         ;;
1663                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1664                         case "$host_os" in
1665                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1666                         ;;
1667                         esac
1668                         BLDSHARED="true"
1669                         LDSHFLAGS="-set_version sgi1.0 -shared"
1670                         SONAMEFLAG="-soname "
1671                         SHLD="\${LD}"
1672                         if test "${GCC}" = "yes"; then
1673                                 PICFLAG="-fPIC"
1674                         else
1675                                 PICFLAG="-KPIC"
1676                         fi
1677                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1678                         ;;
1679                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1680                         BLDSHARED="true"
1681                         # use expfull to export underscored symbols
1682                         # add rtl to remove /lib/crt0.o warning
1683                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1684                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1685                         PICFLAG="-O2"
1686                         # as AIX code is always position independent...
1687                         # .po will just create compile warnings, use po.o:
1688                         if test "${GCC}" != "yes"; then
1689                                 ## for funky AIX compiler using strncpy()
1690                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1691                         fi
1692
1693                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1694                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1695                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1696                         ;;
1697                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1698                         # Use special PIC flags for the native HP-UX compiler.
1699                                 BLDSHARED="true"
1700                                 SHLD="cc"
1701                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1702                                 SONAMEFLAG="-Wl,+h "
1703                                 PICFLAG="+z"
1704                         if test "${GCC}" = "yes"; then
1705                                 PICFLAG="-fPIC"
1706                         else
1707                                 PICFLAG="+z +ESnolit"
1708                         fi
1709                         if test "$host_cpu" = "ia64"; then
1710                                 SHLIBEXT="so"
1711                               PICFLAG="+z"
1712                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1713                         else
1714                                 SHLIBEXT="sl"
1715                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1716                         fi
1717                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1718                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1719                         ;;
1720                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1721                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1722                         ;;
1723                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1724                         BLDSHARED="true"
1725                         LDSHFLAGS="-shared"
1726                         SONAMEFLAG="-Wl,-soname,"
1727                         PICFLAG="-fPIC"
1728                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1729                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1730                         ;;
1731                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1732                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1733                         ;;
1734                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1735                         BLDSHARED="true"
1736                         LDSHFLAGS="-shared"
1737                         SONAMEFLAG="-Wl,-soname,"
1738                         PICFLAG="-KPIC"
1739                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1740                         ;;
1741                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1742                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1743                         ;;
1744                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1745                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1746                         ;;
1747                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1748                         case "$host" in
1749                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1750                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1751                                         fi
1752                                         LDSHFLAGS="-G"
1753                                         DYNEXP="-Bexport"
1754                                 ;;
1755                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1756                         esac
1757                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1758                         ;;
1759
1760                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1761                         if [ test "$GCC" != yes ]; then
1762                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1763                         fi
1764                         LDSHFLAGS="-G"
1765                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1766                         ;;
1767                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1768                         BLDSHARED="false"
1769                         LDSHFLAGS=""
1770                         ;;
1771
1772                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1773                         BLDSHARED="true"
1774                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1775                         CFLAGS="$CFLAGS -fno-common"
1776                         SHLD="\${CC}"
1777                         SHLIBEXT="dylib"
1778                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1779                         SHLIBEXT="dylib"
1780                         # Since gcc doesn't fail on unrecognised options, the
1781                         # PIE test incorrectly succeeds. Darwin gcc does not
1782                         # actually support the PIE stuff.
1783                         PIE_LDFLAGS=
1784                         PIE_CFLAGS=
1785                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1786                         ;;
1787
1788                 *)
1789                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1790                         ;;
1791   esac
1792
1793 if test "$enable_shared" != "yes"; then
1794         BLDSHARED=false
1795 fi
1796
1797 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1798         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1799 fi
1800
1801 if test x"$BLDSHARED" = x"true" ; then
1802         LDFLAGS="$LDFLAGS -L./bin"
1803 fi
1804
1805 AC_MSG_RESULT($BLDSHARED)
1806
1807 AC_MSG_CHECKING([LDFLAGS])
1808 AC_MSG_RESULT([$LDFLAGS])
1809 AC_MSG_CHECKING([DYNEXP])
1810 AC_MSG_RESULT([$DYNEXP])
1811
1812 #######################################################
1813 # test whether building a shared library actually works
1814 if test $BLDSHARED = true; then
1815
1816 AC_MSG_CHECKING([SHLD])
1817 AC_MSG_RESULT([$SHLD])
1818 AC_MSG_CHECKING([LDSHFLAGS])
1819 AC_MSG_RESULT([$LDSHFLAGS])
1820
1821 AC_MSG_CHECKING([SHLIBEXT])
1822 AC_MSG_RESULT([$SHLIBEXT])
1823 AC_MSG_CHECKING([SONAMEFLAG])
1824 AC_MSG_RESULT([$SONAMEFLAG])
1825
1826 AC_MSG_CHECKING([PICFLAG])
1827 AC_MSG_RESULT([$PICFLAG])
1828
1829 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1830 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1831
1832 AC_CACHE_CHECK([whether building shared libraries actually works],
1833                [ac_cv_shlib_works],[
1834    # try building a trivial shared library
1835    ac_cv_shlib_works=no
1836    # The $SHLD and $LDSHFLAGS variables may contain references to other
1837    # variables so they need to be eval'ed.
1838    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1839         shlib.o ${srcdir-.}/tests/shlib.c && \
1840    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1841         shlib.o && ac_cv_shlib_works=yes
1842    rm -f "shlib.$SHLIBEXT" shlib.o
1843
1844 ])
1845 if test $ac_cv_shlib_works = no; then
1846    BLDSHARED=false
1847 fi
1848 fi
1849
1850 if test x"$BLDSHARED" != x"true"; then
1851         LDSHFLAGS="shared-libraries-disabled"
1852         SONAMEFLAG="shared-libraries-disabled"
1853         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1854         SHLD="shared-libraries-disabled"
1855         PICFLAG="${PIE_CFLAGS}"
1856         SHLIBEXT="shared_libraries_disabled"
1857 fi
1858
1859 AC_MSG_CHECKING([used PICFLAG])
1860 AC_MSG_RESULT([$PICFLAG])
1861
1862 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1863
1864 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1865
1866 ################
1867
1868 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1869 AC_TRY_RUN([#include <stdio.h>
1870 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1871 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1872 if test x"$samba_cv_have_longlong" = x"yes"; then
1873     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1874     AC_CHECK_TYPE(intptr_t, unsigned long long)
1875 else
1876     AC_CHECK_TYPE(intptr_t, unsigned long)
1877 fi
1878
1879 #
1880 # Check if the compiler supports the LL prefix on long long integers.
1881 # AIX needs this.
1882
1883 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1884     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1885         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1886 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1887    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1888 fi
1889
1890
1891 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1892 AC_TRY_RUN([#include <time.h>
1893 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1894 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1895 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1896     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1897 fi
1898
1899 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1900 AC_TRY_RUN([#include <stdio.h>
1901 #include <sys/stat.h>
1902 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1903 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1904 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1905     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1906 fi
1907
1908 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1909 AC_TRY_RUN([
1910 #if defined(HAVE_UNISTD_H)
1911 #include <unistd.h>
1912 #endif
1913 #include <stdio.h>
1914 #include <sys/stat.h>
1915 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1916 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1917 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1918     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1919 fi
1920
1921 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1922 AC_TRY_RUN([
1923 #if defined(HAVE_UNISTD_H)
1924 #include <unistd.h>
1925 #endif
1926 #include <stdio.h>
1927 #include <sys/stat.h>
1928 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1929 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1930 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1931     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1932 fi
1933
1934 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1935 AC_TRY_RUN([
1936 #if defined(HAVE_UNISTD_H)
1937 #include <unistd.h>
1938 #endif
1939 #include <stdio.h>
1940 #include <sys/stat.h>
1941 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1942 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1943 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1944     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1945 fi
1946
1947 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1948 AC_TRY_RUN([
1949 #if defined(HAVE_UNISTD_H)
1950 #include <unistd.h>
1951 #endif
1952 #include <stdio.h>
1953 #include <sys/stat.h>
1954 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1955 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1956 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1957     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1958 fi
1959
1960 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1961 AC_TRY_RUN([
1962 #if defined(HAVE_UNISTD_H)
1963 #include <unistd.h>
1964 #endif
1965 #include <stdio.h>
1966 #include <sys/stat.h>
1967 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1968 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1969 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1970     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1971 fi
1972
1973 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
1974 AC_TRY_COMPILE([
1975 #if defined(HAVE_UNISTD_H)
1976 #include <unistd.h>
1977 #endif
1978 #include <sys/types.h>
1979 #include <dirent.h>],
1980 [DIR64 de;],
1981 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
1982 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1983     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
1984 fi
1985
1986 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1987 AC_TRY_COMPILE([
1988 #if defined(HAVE_UNISTD_H)
1989 #include <unistd.h>
1990 #endif
1991 #include <sys/types.h>
1992 #include <dirent.h>],
1993 [struct dirent64 de;],
1994 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1995 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1996     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1997 fi
1998
1999 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2000 AC_TRY_RUN([
2001 #if defined(HAVE_UNISTD_H)
2002 #include <unistd.h>
2003 #endif
2004 #include <sys/types.h>
2005 main() { dev_t dev; int i = major(dev); return 0; }],
2006 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2007 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2008     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2009 fi
2010
2011 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2012 AC_TRY_RUN([
2013 #if defined(HAVE_UNISTD_H)
2014 #include <unistd.h>
2015 #endif
2016 #include <sys/types.h>
2017 main() { dev_t dev; int i = minor(dev); return 0; }],
2018 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2019 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2020     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2021 fi
2022
2023 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2024 AC_TRY_RUN([
2025 #if defined(HAVE_UNISTD_H)
2026 #include <unistd.h>
2027 #endif
2028 #include <sys/types.h>
2029 main() { dev_t dev = makedev(1,2); return 0; }],
2030 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2031 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2032     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2033 fi
2034
2035 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2036 AC_TRY_RUN([#include <stdio.h>
2037 main() { char c; c=250; exit((c > 0)?0:1); }],
2038 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2039 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2040     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2041 fi
2042
2043 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2044 AC_TRY_COMPILE([#include <sys/types.h>
2045 #include <dirent.h>
2046 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2047 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2048 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2049     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2050 fi
2051
2052 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2053 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2054 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2055 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2056     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2057 fi
2058
2059 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2060 AC_TRY_LINK([
2061 #include <sys/time.h>
2062 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2063            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2064            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2065 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2066     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2067 fi
2068
2069 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2070
2071     # On some systems (eg. Linux) librt can pull in libpthread. We
2072     # don't want this to happen because libpthreads changes signal delivery
2073     # semantics in ways we are not prepared for. This breaks Linux oplocks
2074     # which rely on signals.
2075
2076     AC_LIBTESTFUNC(rt, clock_gettime,
2077             [
2078                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2079                                 [Whether clock_gettime is available])
2080                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2081                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2082                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2083                         ])
2084
2085 fi
2086
2087 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2088 AC_TRY_RUN([#include <sys/types.h>
2089 #include <dirent.h>
2090 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2091 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2092 di->d_name[0] == 0) exit(0); exit(1);} ],
2093 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2094 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2095     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2096 fi
2097
2098 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2099 AC_TRY_COMPILE([#include <sys/types.h>
2100 #include <utime.h>],
2101 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2102 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2103 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2104     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2105 fi
2106
2107 ##############
2108 # Check utmp details, but only if our OS offers utmp.h
2109 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2110 dnl  utmp and utmpx come in many flavours
2111 dnl  We need to check for many of them
2112 dnl  But we don't need to do each and every one, because our code uses
2113 dnl  mostly just the utmp (not utmpx) fields.
2114
2115 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2116
2117 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2118 AC_TRY_COMPILE([#include <sys/types.h>
2119 #include <utmp.h>],
2120 [struct utmp ut;  ut.ut_name[0] = 'a';],
2121 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2122 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2123     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2124 fi
2125
2126 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2127 AC_TRY_COMPILE([#include <sys/types.h>
2128 #include <utmp.h>],
2129 [struct utmp ut;  ut.ut_user[0] = 'a';],
2130 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2131 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2132     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2133 fi
2134
2135 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2136 AC_TRY_COMPILE([#include <sys/types.h>
2137 #include <utmp.h>],
2138 [struct utmp ut;  ut.ut_id[0] = 'a';],
2139 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2140 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2141     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2142 fi
2143
2144 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2145 AC_TRY_COMPILE([#include <sys/types.h>
2146 #include <utmp.h>],
2147 [struct utmp ut;  ut.ut_host[0] = 'a';],
2148 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2149 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2150     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2151 fi
2152
2153 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2154 AC_TRY_COMPILE([#include <sys/types.h>
2155 #include <utmp.h>],
2156 [struct utmp ut;  time_t t; ut.ut_time = t;],
2157 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2158 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2159     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2160 fi
2161
2162 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2163 AC_TRY_COMPILE([#include <sys/types.h>
2164 #include <utmp.h>],
2165 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2166 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2167 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2168     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2169 fi
2170
2171 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2172 AC_TRY_COMPILE([#include <sys/types.h>
2173 #include <utmp.h>],
2174 [struct utmp ut;  ut.ut_type = 0;],
2175 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2176 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2177     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2178 fi
2179
2180 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2181 AC_TRY_COMPILE([#include <sys/types.h>
2182 #include <utmp.h>],
2183 [struct utmp ut;  ut.ut_pid = 0;],
2184 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2185 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2186     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2187 fi
2188
2189 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2190 AC_TRY_COMPILE([#include <sys/types.h>
2191 #include <utmp.h>],
2192 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2193 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2194 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2195     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2196 fi
2197
2198 dnl Look for the IPv6 varient by preference. Many systems have both.
2199 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2200 AC_TRY_COMPILE([#include <sys/types.h>
2201 #include <utmp.h>],
2202 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2203 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2204 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2205     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2206 fi
2207
2208 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2209 AC_TRY_COMPILE([#include <sys/types.h>
2210 #include <utmp.h>],
2211 [struct utmp ut;  ut.ut_addr = 0;],
2212 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2213 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2214     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2215 fi
2216
2217 if test x$ac_cv_func_pututline = xyes ; then
2218   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2219   AC_TRY_COMPILE([#include <sys/types.h>
2220 #include <utmp.h>],
2221   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2222   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2223   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2224       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2225   fi
2226 fi
2227
2228 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2229 AC_TRY_COMPILE([#include <sys/types.h>
2230 #include <utmpx.h>],
2231 [struct utmpx ux;  ux.ut_syslen = 0;],
2232 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2233 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2234     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2235 fi
2236
2237 fi
2238 # end utmp details
2239
2240
2241 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2242 AC_ARG_WITH(libiconv,
2243 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2244 [
2245   if test "$withval" = "no" ; then
2246     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2247   else
2248      if test "$withval" != "yes" ; then
2249         ICONV_PATH_SPEC=yes
2250         ICONV_LOOK_DIRS="$withval"
2251      fi
2252   fi
2253 ])
2254
2255 for i in $ICONV_LOOK_DIRS ; do
2256
2257     save_LIBS="$LIBS"
2258     save_LDFLAGS="$LDFLAGS"
2259     save_CPPFLAGS="$CPPFLAGS"
2260
2261     iconv_current_LIBS=""
2262     iconv_current_LDFLAGS=""
2263     iconv_current_CPPFLAGS=""
2264
2265     ICONV_FOUND="no"
2266     unset libext
2267
2268     #  This is here to handle -withval stuff for --with-libiconv
2269     #  Perhaps we should always add a -L
2270     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2271
2272     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2273     # installation paths. This gets a little tricky since we might have iconv
2274     # in both libiconv and in libc. In this case the jm_ICONV test will always
2275     # succeed when the header is found. To counter this, make sure the
2276     # library directory is there and check the ABI directory first (which
2277     # should be harmless on other systems.
2278     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2279     for l in "lib32" "lib" "lib/hpux32"; do
2280         if test -d "$i/$l" ; then
2281                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2282                 LIBS=
2283                 export LDFLAGS LIBS CPPFLAGS
2284                 # Try to find iconv(3)
2285                 jm_ICONV($i/$l)
2286                 if test x"$ICONV_FOUND" = "xyes" ; then
2287                     libext="$l"
2288                     break
2289                 fi
2290         fi
2291     done
2292
2293     if test x"$ICONV_FOUND" = "xyes" ; then
2294         iconv_current_LDFLAGS="-L$i/$libext"
2295         iconv_current_CPPFLAGS="-I$i/include"
2296
2297         if test x"$jm_cv_lib_iconv" != x; then
2298             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2299         else
2300             # We found iconv in libc.
2301             iconv_current_LIBS=""
2302         fi
2303
2304     fi
2305
2306     if test x"$ICONV_FOUND" = "xyes" ; then
2307
2308         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2309         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2310         LIBS="$save_LIBS $iconv_current_LIBS"
2311         export LDFLAGS LIBS CPPFLAGS
2312
2313         default_dos_charset=no
2314         default_display_charset=no
2315         default_unix_charset=no
2316
2317         # check for default dos charset name
2318         for j in CP850 IBM850 ; do
2319             rjs_CHARSET($j)
2320             default_dos_charset="$ICONV_CHARSET"
2321             if test x"$default_dos_charset" = x"$j"; then
2322                 break
2323             fi
2324         done
2325
2326         # check for default display charset name
2327         for j in ASCII 646 ; do
2328             rjs_CHARSET($j)
2329             default_display_charset="$ICONV_CHARSET"
2330             if test x"$default_display_charset" = x"$j"; then
2331                 break
2332             fi
2333         done
2334
2335         # check for default unix charset name
2336         for j in UTF-8 UTF8 ; do
2337             rjs_CHARSET($j)
2338             default_unix_charset="$ICONV_CHARSET"
2339             if test x"$default_unix_charset" = x"$j"; then
2340                 break
2341             fi
2342         done
2343
2344         if test "$default_dos_charset" != "no" -a \
2345                 "$default_dos_charset" != "cross" -a \
2346                 "$default_display_charset" != "no" -a \
2347                 "$default_display_charset" != "cross" -a \
2348                 "$default_unix_charset" != "no" -a \
2349                 "$default_unix_charset" != "cross"
2350         then
2351                 samba_cv_HAVE_NATIVE_ICONV=yes
2352         else
2353             if test "$default_dos_charset" = "cross" -o \
2354                      "$default_display_charset" = "cross" -o \
2355                      "$default_unix_charset" = "cross"
2356             then
2357                     samba_cv_HAVE_NATIVE_ICONV=cross
2358             else
2359                     samba_cv_HAVE_NATIVE_ICONV=no
2360             fi
2361         fi
2362
2363         # At this point, we have a libiconv candidate. We know that
2364         # we have the right headers and libraries, but we don't know
2365         # whether it does the conversions we want. We can't test this
2366         # because we are cross-compiling. This is not necessarily a big
2367         # deal, since we can't guarantee that the results we get now will
2368         # match the results we get at runtime anyway.
2369         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2370             default_dos_charset="CP850"
2371             default_display_charset="ASCII"
2372             default_unix_charset="UTF-8"
2373             samba_cv_HAVE_NATIVE_ICONV=yes
2374             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2375             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2376         fi
2377
2378         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2379
2380             CPPFLAGS=$save_CPPFLAGS
2381             LDFLAGS=$save_LDFLAGS
2382             LIBS=$save_LIBS
2383
2384             if test x"$iconv_current_LIBS" != x; then
2385                 LIBS="$LIBS $iconv_current_LIBS"
2386             fi
2387
2388             # Add the flags we need to CPPFLAGS and LDFLAGS
2389             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2390             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2391
2392             # Turn the #defines into string literals
2393             default_dos_charset="\"$default_dos_charset\""
2394             default_display_charset="\"$default_display_charset\""
2395             default_unix_charset="\"$default_unix_charset\""
2396
2397             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2398             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2399             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2400             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2401
2402            break
2403         fi
2404
2405     # We didn't find a working iconv, so keep going
2406     fi
2407
2408     #  We only need to clean these up here for the next pass through the loop
2409     CPPFLAGS=$save_CPPFLAGS
2410     LDFLAGS=$save_LDFLAGS
2411     LIBS=$save_LIBS
2412     export LDFLAGS LIBS CPPFLAGS
2413 done
2414 unset libext
2415
2416
2417 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2418     AC_MSG_WARN([Sufficient support for iconv function was not found.
2419     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2420    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2421    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2422    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2423 fi
2424
2425
2426 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2427 AC_TRY_RUN([
2428 #include <sys/types.h>
2429 #include <fcntl.h>
2430 #ifndef F_GETLEASE
2431 #define F_GETLEASE      1025
2432 #endif
2433 main() {
2434        int fd = open("/dev/null", O_RDONLY);
2435        return fcntl(fd, F_GETLEASE, 0) == -1;
2436 }
2437 ],
2438 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2439 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2440     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2441 fi
2442
2443 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2444 AC_TRY_RUN([
2445 #include <sys/types.h>
2446 #include <fcntl.h>
2447 #include <signal.h>
2448 #ifndef F_NOTIFY
2449 #define F_NOTIFY 1026
2450 #endif
2451 main() {
2452         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2453 }
2454 ],
2455 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2456 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2457     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2458 fi
2459
2460 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2461 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2462 AC_CHECK_FUNCS(inotify_init)
2463 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2464 ],
2465 samba_cv_HAVE_INOTIFY=yes,
2466 samba_cv_HAVE_INOTIFY=no,
2467 samba_cv_HAVE_INOTIFY=cross)
2468
2469 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2470     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2471 fi
2472
2473 #################################################
2474 # Check if FAM notifications are available. For FAM info, see
2475 #       http://oss.sgi.com/projects/fam/
2476 #       http://savannah.nongnu.org/projects/fam/
2477 AC_ARG_ENABLE(fam,
2478 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2479
2480 if test x$enable_fam != xno; then
2481     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2482     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2483         # On IRIX, libfam requires libC, but other FAM implementations
2484         # might not need it.
2485         AC_CHECK_LIB(fam, FAMOpen2,
2486             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2487             [samba_cv_HAVE_LIBFAM=no])
2488
2489         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2490             samba_fam_xtra=-lC
2491             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2492                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2493                 [samba_cv_HAVE_LIBFAM=no])
2494             unset samba_fam_xtra
2495         fi
2496     fi
2497
2498     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2499         default_shared_modules="$default_shared_modules vfs_notify_fam"
2500         AC_TRY_COMPILE([#include <fam.h>],
2501                     [FAMCodes code = FAMChanged;],
2502                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2503                         [Whether fam.h contains a typedef for enum FAMCodes]),
2504                     [])
2505     fi
2506
2507     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2508         AC_MSG_ERROR(FAM support requested but FAM library not available )
2509     fi
2510 fi
2511
2512 AC_SUBST(SMB_FAM_LIBS)
2513
2514 #################################################
2515 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2516
2517 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2518
2519 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2520 # Theoretically it should work with AIX JFS2 too but this needs testing
2521 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2522     default_shared_modules="$default_shared_modules vfs_tsmsm"
2523 fi
2524
2525 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2526 AC_TRY_RUN([
2527 #include <sys/types.h>
2528 #include <fcntl.h>
2529 #include <signal.h>
2530 #include <sys/file.h>
2531 #ifndef LOCK_MAND
2532 #define LOCK_MAND       32
2533 #define LOCK_READ       64
2534 #endif
2535 main() {
2536         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2537 }
2538 ],
2539 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2540 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2541     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2542 fi
2543
2544
2545 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2546 AC_TRY_COMPILE([#include <sys/types.h>
2547 #include <fcntl.h>],
2548 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2549 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2550 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2551     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2552 fi
2553
2554 #################################################
2555 # Check for POSIX capability support
2556
2557 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2558     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2559     [], [])
2560
2561 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2562
2563     ac_save_LIBS=$LIBS
2564     AC_LIBTESTFUNC(cap, cap_get_proc)
2565
2566     AC_CACHE_CHECK([for POSIX capabilities],
2567             samba_cv_HAVE_POSIX_CAPABILITIES,
2568             [
2569                 AC_TRY_RUN([
2570 #include <sys/types.h>
2571 #include <sys/capability.h>
2572 main() {
2573  cap_t cap;
2574  cap_value_t vals[1];
2575  if (!(cap = cap_get_proc()))
2576    exit(1);
2577  vals[0] = CAP_CHOWN;
2578  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2579  cap_set_proc(cap);
2580  exit(0);
2581 }],
2582                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2583                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2584                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2585             ])
2586
2587 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2588     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2589             [Whether POSIX capabilities are available])
2590 else
2591     LIBS=$ac_save_LIBS
2592 fi
2593
2594 fi
2595
2596 #
2597 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2598 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2599 #
2600
2601 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2602 AC_TRY_COMPILE([#include <sys/types.h>
2603 #if defined(HAVE_RPC_RPC_H)
2604 #include <rpc/rpc.h>
2605 #endif],
2606 [int16 testvar;],
2607 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2608 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2609     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2610 fi
2611
2612 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2613 AC_TRY_COMPILE([#include <sys/types.h>
2614 #if defined(HAVE_RPC_RPC_H)
2615 #include <rpc/rpc.h>
2616 #endif],
2617 [uint16 testvar;],
2618 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2619 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2620     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2621 fi
2622
2623 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2624 AC_TRY_COMPILE([#include <sys/types.h>
2625 #if defined(HAVE_RPC_RPC_H)
2626 #include <rpc/rpc.h>
2627 #endif],
2628 [int32 testvar;],
2629 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2630 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2631     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2632 fi
2633
2634 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2635 AC_TRY_COMPILE([#include <sys/types.h>
2636 #if defined(HAVE_RPC_RPC_H)
2637 #include <rpc/rpc.h>
2638 #endif],
2639 [uint32 testvar;],
2640 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2641 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2642     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2643 fi
2644
2645 dnl
2646 dnl Some systems (SCO) have a problem including
2647 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2648 dnl as a #define in <prot.h> and as part of an enum
2649 dnl in <rpc/rpc.h>.
2650 dnl
2651
2652 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2653 AC_TRY_COMPILE([#include <sys/types.h>
2654 #ifdef HAVE_SYS_SECURITY_H
2655 #include <sys/security.h>
2656 #include <prot.h>
2657 #endif  /* HAVE_SYS_SECURITY_H */
2658 #if defined(HAVE_RPC_RPC_H)
2659 #include <rpc/rpc.h>
2660 #endif],
2661 [int testvar;],
2662 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2663 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2664     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2665 fi
2666
2667 AC_MSG_CHECKING([for test routines])
2668 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2669            AC_MSG_RESULT(yes),
2670            AC_MSG_ERROR([cant find test code. Aborting config]),
2671            AC_MSG_WARN([cannot run when cross-compiling]))
2672
2673 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2674 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2675            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2676 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2677     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2678 fi
2679
2680 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2681 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2682            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2683 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2684     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2685 fi
2686
2687 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2688 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2689 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2690 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2691 AC_CHECK_FUNCS(getpagesize)
2692
2693 ################################################
2694 # look for a method of setting the effective uid
2695 seteuid=no;
2696
2697 if test $seteuid = no; then
2698 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2699 AC_TRY_RUN([
2700 #define AUTOCONF_TEST 1
2701 #define USE_SETREUID 1
2702 #include "confdefs.h"
2703 #include "${srcdir-.}/lib/util_sec.c"],
2704            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2705 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2706     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2707 fi
2708 fi
2709
2710 # we check for setresuid second as it conflicts with AIO on Linux. 
2711 # see http://samba.org/~tridge/junkcode/aio_uid.c
2712 if test $seteuid = no; then
2713 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2714 AC_TRY_RUN([
2715 #define AUTOCONF_TEST 1
2716 #define USE_SETRESUID 1
2717 #include "confdefs.h"
2718 #include "${srcdir-.}/lib/util_sec.c"],
2719            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2720 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2721     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2722 fi
2723 fi
2724
2725 if test $seteuid = no; then
2726 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2727 AC_TRY_RUN([
2728 #define AUTOCONF_TEST 1
2729 #define USE_SETEUID 1
2730 #include "confdefs.h"
2731 #include "${srcdir-.}/lib/util_sec.c"],
2732            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2733 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2734     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2735 fi
2736 fi
2737
2738 if test $seteuid = no; then
2739 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2740 AC_TRY_RUN([
2741 #define AUTOCONF_TEST 1
2742 #define USE_SETUIDX 1
2743 #include "confdefs.h"
2744 #include "${srcdir-.}/lib/util_sec.c"],
2745            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2746 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2747     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2748 fi
2749 fi
2750
2751 AC_CACHE_CHECK([for the Darwin initgroups system call],
2752         samba_cv_DARWIN_INITGROUPS,
2753         AC_TRY_LINK([
2754 #include <sys/syscall.h>
2755 #include <unistd.h>
2756         ],
2757         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2758         samba_cv_DARWIN_INITGROUPS=yes,
2759         samba_cv_DARWIN_INITGROUPS=no)
2760 )
2761
2762 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2763     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2764         [Whether to use the Darwin-specific initgroups system call])
2765 fi
2766
2767 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2768 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2769            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2770 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2771     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2772 fi
2773
2774 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2775 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2776            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2777 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2778     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2779
2780 else
2781
2782 dnl
2783 dnl Don't check for 64 bit fcntl locking if we know that the
2784 dnl glibc2.1 broken check has succeeded.
2785 dnl
2786
2787   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2788   AC_TRY_RUN([
2789 #if defined(HAVE_UNISTD_H)
2790 #include <unistd.h>
2791 #endif
2792 #include <stdio.h>
2793 #include <stdlib.h>
2794
2795 #ifdef HAVE_FCNTL_H
2796 #include <fcntl.h>
2797 #endif
2798
2799 #ifdef HAVE_SYS_FCNTL_H
2800 #include <sys/fcntl.h>
2801 #endif
2802 main() { struct flock64 fl64;
2803 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2804 exit(0);
2805 #else
2806 exit(1);
2807 #endif
2808 }],
2809        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2810
2811   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2812       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2813   fi
2814 fi
2815
2816 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2817 AC_TRY_COMPILE([#include <sys/types.h>
2818 #include <sys/stat.h>
2819 #include <unistd.h>],
2820 [struct stat st;  st.st_blocks = 0;],
2821 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2822 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2823     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2824 fi
2825
2826 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2827 AC_TRY_COMPILE([#include <sys/types.h>
2828 #include <sys/stat.h>
2829 #include <unistd.h>],
2830 [struct stat st;  st.st_blksize = 0;],
2831 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2832 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2833     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2834 fi
2835
2836 AC_CACHE_CHECK([for st_flags in struct stat],
2837         samba_cv_HAVE_STAT_ST_FLAGS,
2838         [
2839             AC_TRY_COMPILE([#include <sys/types.h>
2840 #include <sys/stat.h>
2841 #include <unistd.h>],
2842             [struct stat st;  st.st_flags = 0;],
2843             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2844             samba_cv_HAVE_STAT_ST_FLAGS=no,
2845             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2846         ])
2847
2848 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2849     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2850                 [Whether the stat struct has a st_flags member])
2851 fi
2852
2853 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2854 AC_TRY_COMPILE([
2855 #include <sys/types.h>
2856 #include <sys/acl.h>
2857 #if defined(HAVE_RPCSVC_NIS_H)
2858 #include <rpcsvc/nis.h>
2859 #endif],
2860 [int i;],
2861 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2862 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2863         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2864 fi
2865
2866 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2867 AC_TRY_RUN([
2868 #include <stdio.h>
2869 #include <limits.h>
2870 #include <signal.h>
2871
2872 void exit_on_core(int ignored) {
2873         exit(1);
2874 }
2875
2876 main() {
2877         char *newpath;
2878         signal(SIGSEGV, exit_on_core);
2879         newpath = realpath("/tmp", NULL);
2880         exit((newpath != NULL) ? 0 : 1);
2881 }
2882 ],
2883 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2884 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2885     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2886 fi
2887
2888 #################################################
2889 # check for AFS clear-text auth support
2890 samba_cv_WITH_AFS=no
2891 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2892 AC_ARG_WITH(afs,
2893 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2894 [ case "$withval" in
2895   yes|auto)
2896     AC_MSG_RESULT($withval)
2897     samba_cv_WITH_AFS=$withval
2898     ;;
2899   *)
2900     AC_MSG_RESULT(no)
2901     ;;
2902   esac ],
2903   AC_MSG_RESULT(no)
2904 )
2905
2906 ####################################################
2907 # check for Linux-specific AFS fake-kaserver support
2908 samba_cv_WITH_FAKE_KASERVER=no
2909 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2910 AC_ARG_WITH(fake-kaserver,
2911 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2912 [ case "$withval" in
2913   yes|auto)
2914     AC_MSG_RESULT($withval)
2915     samba_cv_WITH_FAKE_KASERVER=$withval
2916     ;;
2917   *)
2918     AC_MSG_RESULT(no)
2919     ;;
2920   esac ],
2921   AC_MSG_RESULT(no)
2922 )
2923
2924 #################################################
2925 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2926 if test x"$samba_cv_WITH_AFS" != x"no" ||
2927    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2928
2929     # see if this box has the afs-headers in /usr/include/afs
2930     AC_MSG_CHECKING(for /usr/include/afs)
2931     if test -d /usr/include/afs; then
2932           CFLAGS="$CFLAGS -I/usr/include/afs"
2933           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2934           AC_MSG_RESULT(yes)
2935     else
2936       AC_MSG_RESULT(no)
2937     fi
2938
2939     # check for afs.h
2940     have_afs_headers=no
2941     AC_CHECK_HEADERS(afs.h afs/afs.h)
2942     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2943         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2944            test x"$samba_cv_WITH_AFS" = x"auto"; then
2945                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2946         else
2947                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2948         fi
2949     else
2950         have_afs_headers=yes
2951     fi
2952 fi
2953
2954 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2955     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2956 fi
2957
2958 #################################################
2959 # check whether to compile AFS/NT ACL mapping module
2960 samba_cv_WITH_VFS_AFSACL=no
2961 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
2962 AC_ARG_WITH(vfs-afsacl,
2963 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
2964 [ case "$withval" in
2965   yes|auto)
2966     AC_MSG_RESULT($withval)
2967     samba_cv_WITH_VFS_AFSACL=yes
2968     ;;
2969   *)
2970     AC_MSG_RESULT(no)
2971     ;;
2972   esac ],
2973   AC_MSG_RESULT(no)
2974 )
2975
2976 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2977    default_shared_modules="$default_shared_modules vfs_afsacl"
2978 fi
2979         
2980 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2981     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2982 fi
2983
2984 #################################################
2985 # check for the DFS clear-text auth system
2986 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2987 AC_ARG_WITH(dfs,
2988 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
2989 [ case "$withval" in
2990   yes)
2991     AC_MSG_RESULT(yes)
2992     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2993     ;;
2994   *)
2995     AC_MSG_RESULT(no)
2996     ;;
2997   esac ],
2998   AC_MSG_RESULT(no)
2999 )
3000
3001 ########################################################
3002 # Compile with LDAP support?
3003
3004 with_ldap_support=auto
3005 AC_MSG_CHECKING([for LDAP support])
3006
3007 AC_ARG_WITH(ldap,
3008 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
3009 [ case "$withval" in
3010     yes|no)
3011         with_ldap_support=$withval
3012         ;;
3013   esac ])
3014
3015 AC_MSG_RESULT($with_ldap_support)
3016
3017 SMBLDAP=""
3018 AC_SUBST(SMBLDAP)
3019 SMBLDAPUTIL=""
3020 AC_SUBST(SMBLDAPUTIL)
3021 LDBLDAP=""
3022 AC_SUBST(LDBLDAP)
3023
3024 if test x"$with_ldap_support" != x"no"; then
3025
3026   ##################################################################
3027   # first test for ldap.h and lber.h
3028   # (ldap.h is required for this test)
3029   AC_CHECK_HEADERS(ldap.h lber.h)
3030
3031   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3032         if test x"$with_ldap_support" = x"yes"; then
3033          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3034         else
3035          AC_MSG_WARN(ldap.h is needed for LDAP support)
3036         fi
3037         
3038         with_ldap_support=no
3039   fi
3040
3041   ##################################################################
3042   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3043   # unsigned int in include/includes.h
3044   case $host_os in
3045         *hpux*)
3046          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3047          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3048         with_ldap_support=yes
3049         ;;
3050         *)
3051         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3052         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3053                 if test x"$with_ldap_support" = x"yes"; then
3054                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3055                 else
3056                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3057                 fi
3058                 with_ldap_support=no
3059         fi
3060         ;;
3061   esac
3062 fi
3063
3064 if test x"$with_ldap_support" != x"no"; then
3065   ac_save_LIBS=$LIBS
3066
3067   ##################################################################
3068   # we might need the lber lib on some systems. To avoid link errors
3069   # this test must be before the libldap test
3070   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3071
3072   ########################################################
3073   # If ber_sockbuf_add_io() is available we can add
3074   # SASL wrapping hooks
3075   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3076
3077   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3078                  AC_TRY_COMPILE([#include <ldap.h>],
3079                                 [int val = LDAP_OPT_SOCKBUF;],
3080                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3081                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3082
3083   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3084           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3085         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3086   fi
3087
3088   #######################################################
3089   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3090   # ldap logging and print it out in the samba logs
3091   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3092                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3093                  [AC_TRY_COMPILE([#include <lber.h>],
3094                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3095                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3096                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3097
3098   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3099         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3100                   [Support for LDAP/LBER logging interception])
3101   fi
3102
3103   ########################################################
3104   # now see if we can find the ldap libs in standard paths
3105   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3106
3107   ########################################################
3108   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3109   # Check found in pam_ldap 145.
3110   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3111
3112   LIBS="$LIBS $LDAP_LIBS"
3113   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3114     AC_TRY_COMPILE([
3115         #include <lber.h>
3116         #include <ldap.h>],
3117         [ldap_set_rebind_proc(0, 0, 0);],
3118         [smb_ldap_cv_ldap_set_rebind_proc=3],
3119         [smb_ldap_cv_ldap_set_rebind_proc=2]
3120     )
3121   ])
3122
3123   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3124
3125   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3126
3127   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3128     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3129     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3130     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3131     default_shared_modules="$default_shared_modules";
3132     SMBLDAP="lib/smbldap.o"
3133     SMBLDAPUTIL="lib/smbldap_util.o"
3134     with_ldap_support=yes
3135     AC_MSG_CHECKING(whether LDAP support is used)
3136     AC_MSG_RESULT(yes)
3137   else
3138     if test x"$with_ldap_support" = x"yes"; then
3139         AC_MSG_ERROR(libldap is needed for LDAP support)
3140     else
3141         AC_MSG_WARN(libldap is needed for LDAP support)
3142     fi
3143
3144     LDAP_LIBS=""
3145     with_ldap_support=no
3146   fi
3147   LIBS=$ac_save_LIBS
3148 fi
3149
3150
3151 #################################################
3152 # active directory support
3153
3154 with_ads_support=auto
3155 AC_MSG_CHECKING([for Active Directory and krb5 support])
3156
3157 AC_ARG_WITH(ads,
3158 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3159 [ case "$withval" in
3160     yes|no)
3161         with_ads_support="$withval"
3162         ;;
3163   esac ])
3164
3165 AC_MSG_RESULT($with_ads_support)
3166
3167 FOUND_KRB5=no
3168 KRB5_LIBS=""
3169
3170 if test x"$with_ldap_support" != x"yes"; then
3171
3172     if test x"$with_ads_support" = x"yes"; then
3173         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3174     elif test x"$with_ads_support" = x"auto"; then
3175         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3176         with_ads_support=no
3177     fi
3178
3179 else
3180
3181     # Check to see whether there is enough LDAP functionality to be able
3182     # to build AD support.
3183
3184 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3185 case "$host_os" in
3186         *hpux*)
3187     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3188
3189     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3190         if test x"$with_ads_support" = x"yes"; then
3191             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3192         elif test x"$with_ads_support" = x"auto"; then
3193             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3194             with_ads_support=no
3195         fi
3196     fi
3197     ;;
3198         *)
3199     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3200
3201     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3202         if test x"$with_ads_support" = x"yes"; then
3203             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3204         elif test x"$with_ads_support" = x"auto"; then
3205             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3206             with_ads_support=no
3207         fi
3208     fi
3209     ;;
3210 esac
3211
3212
3213     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3214
3215     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3216         if test x"$with_ads_support" = x"yes"; then
3217             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3218         elif test x"$with_ads_support" = x"auto"; then
3219             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3220             with_ads_support=no
3221         fi
3222     fi
3223
3224 fi
3225
3226 if test x"$with_ads_support" != x"no"; then
3227
3228   # Do no harm to the values of CFLAGS and LIBS while testing for
3229   # Kerberos support.
3230
3231   if test x$FOUND_KRB5 = x"no"; then
3232     #################################################
3233     # check for location of Kerberos 5 install
3234     AC_MSG_CHECKING(for kerberos 5 install path)
3235     AC_ARG_WITH(krb5,
3236     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3237     [ case "$withval" in
3238       no)
3239         AC_MSG_RESULT(no krb5-path given)
3240         ;;
3241       yes)
3242         AC_MSG_RESULT(/usr)
3243         FOUND_KRB5=yes
3244         ;;
3245       *)
3246         AC_MSG_RESULT($withval)
3247         KRB5_CFLAGS="-I$withval/include"
3248         KRB5_CPPFLAGS="-I$withval/include"
3249         KRB5_LDFLAGS="-L$withval/lib"
3250         FOUND_KRB5=yes
3251         if test -x "$withval/bin/krb5-config"; then
3252                 KRB5CONFIG=$withval/bin/krb5-config
3253         fi
3254         ;;
3255       esac ],
3256       AC_MSG_RESULT(no krb5-path given)
3257     )
3258   fi
3259
3260   #################################################
3261   # check for krb5-config from recent MIT and Heimdal kerberos 5
3262   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3263   AC_MSG_CHECKING(for working krb5-config)
3264   if test -x "$KRB5CONFIG"; then
3265     ac_save_CFLAGS=$CFLAGS
3266     CFLAGS="";export CFLAGS
3267     ac_save_LDFLAGS=$LDFLAGS
3268     LDFLAGS="";export LDFLAGS
3269     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3270     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3271     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3272     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3273     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3274     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3275     FOUND_KRB5=yes
3276     AC_MSG_RESULT(yes)
3277   else
3278     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3279   fi
3280
3281   if test x$FOUND_KRB5 = x"no"; then
3282     #################################################
3283     # see if this box has the SuSE location for the heimdal krb implementation
3284     AC_MSG_CHECKING(for /usr/include/heimdal)
3285     if test -d /usr/include/heimdal; then
3286       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3287           KRB5_CFLAGS="-I/usr/include/heimdal"
3288           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3289           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3290           FOUND_KRB5=yes
3291           AC_MSG_RESULT(yes)
3292       else
3293           KRB5_CFLAGS="-I/usr/include/heimdal"
3294           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3295           FOUND_KRB5=yes
3296           AC_MSG_RESULT(yes)
3297       fi
3298     else
3299       AC_MSG_RESULT(no)
3300     fi
3301   fi
3302
3303   if test x$FOUND_KRB5 = x"no"; then
3304     #################################################
3305     # see if this box has the RedHat location for kerberos
3306     AC_MSG_CHECKING(for /usr/kerberos)
3307     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3308       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3309       KRB5_CFLAGS="-I/usr/kerberos/include"
3310       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3311       FOUND_KRB5=yes
3312       AC_MSG_RESULT(yes)
3313     else
3314       AC_MSG_RESULT(no)
3315     fi
3316   fi
3317
3318   if test x$FOUND_KRB5 = x"no"; then
3319     #################################################
3320     # see if this box has the OpenBSD location for heimdal krb5
3321     AC_MSG_CHECKING(for /usr/include/kerberosV)
3322     if test -d /usr/include/kerberosV; then
3323       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3324       KRB5_LIBS="-lcrypto"
3325       FOUND_KRB5=yes
3326       AC_MSG_RESULT(yes)
3327     else
3328       AC_MSG_RESULT(no)
3329     fi
3330   fi
3331
3332   ac_save_CFLAGS=$CFLAGS
3333   ac_save_CPPFLAGS=$CPPFLAGS
3334   ac_save_LDFLAGS=$LDFLAGS
3335
3336   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3337   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3338   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3339
3340   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3341
3342   # now check for krb5.h. Some systems have the libraries without the headers!
3343   # note that this check is done here to allow for different kerberos
3344   # include paths
3345   AC_CHECK_HEADERS(krb5.h)
3346
3347   if test x"$ac_cv_header_krb5_h" = x"no"; then
3348
3349     # Give a warning if AD support was not explicitly requested,
3350     # i.e with_ads_support = auto, otherwise die with an error.
3351
3352     if test x"$with_ads_support" = x"yes"; then
3353       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3354     else
3355       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3356     fi
3357
3358     # Turn off AD support and restore CFLAGS and LIBS variables
3359
3360     with_ads_support="no"
3361
3362     CFLAGS=$ac_save_CFLAGS
3363     CPPFLAGS=$ac_save_CPPFLAGS
3364     LDFLAGS=$ac_save_LDFLAGS
3365   fi
3366   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3367   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3368         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3369         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3370   fi
3371 fi
3372
3373 # Now we have determined whether we really want ADS support
3374 use_ads=no
3375 if test x"$with_ads_support" != x"no"; then
3376   use_ads=yes
3377   have_gssapi=no
3378   ac_save_LIBS=$LIBS
3379
3380   # now check for gssapi headers.  This is also done here to allow for
3381   # different kerberos include paths
3382   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3383
3384   ##################################################################
3385   # we might need the k5crypto and com_err libraries on some systems
3386   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3387   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3388
3389   # Heimdal checks.
3390   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3391   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3392   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3393
3394   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3395   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3396
3397   ########################################################
3398   # now see if we can find the krb5 libs in standard paths
3399   # or as specified above
3400   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3401   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3402
3403   ########################################################
3404   # now see if we can find the gssapi libs in standard paths
3405   if test x"$have_gssapi" != x"yes"; then
3406      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3407   fi
3408
3409   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3410   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3411   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3412   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3413   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3414   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3415   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3416   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3417   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3418   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3419   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3420   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3421   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3422   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3423   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3424   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3425   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3426   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3427   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3428   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3429   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3430   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3431   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3432   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3433   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3434   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3435   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3436   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3437   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3438   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3439   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3440   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3441   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3442   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3443   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3444   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3445   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3446   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3447   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3448   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3449   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3450   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3451   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3452
3453   LIBS="$KRB5_LIBS $LIBS"
3454
3455   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3456         smb_krb5_cv_ticket_has_keyinfo,
3457         [
3458             AC_TRY_COMPILE(
3459             [
3460                 #include <krb5.h>
3461             ],
3462             [
3463                 krb5_ticket ticket;
3464                 krb5_kvno kvno;
3465                 krb5_enctype enctype;
3466
3467                 enctype = ticket.enc_part.enctype;
3468                 kvno = ticket.enc_part.kvno;
3469             ],
3470             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3471             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3472         ])
3473
3474   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3475         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3476             [Whether the krb5_ticket structure contains the kvno and enctype])
3477   fi
3478
3479   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3480           smb_krb5_cv_creds_opt_free_context,
3481           [
3482                 AC_TRY_COMPILE([
3483                     #include <krb5.h>],
3484                     [
3485                         krb5_context ctx;
3486                         krb5_get_init_creds_opt *opt = NULL;
3487                         krb5_get_init_creds_opt_free(ctx, opt);
3488                     ],
3489                     [smb_krb5_cv_creds_opt_free_context=yes],
3490                     [smb_krb5_cv_creds_opt_free_context=no]
3491                 )
3492           ])
3493
3494   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3495         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3496             [Whether krb5_get_init_creds_opt_free takes a context argument])
3497   fi
3498
3499   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3500     AC_TRY_COMPILE([
3501         #include <krb5.h>],
3502         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3503         [smb_krb5_cv_verify_checksum=7],
3504         [smb_krb5_cv_verify_checksum=6],
3505     )
3506   ])
3507   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3508
3509   AC_CACHE_CHECK([for checksum in krb5_checksum],
3510                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3511     AC_TRY_COMPILE([#include <krb5.h>],
3512       [krb5_checksum cksum; cksum.checksum.length = 0;],
3513       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3514       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3515
3516   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3517     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3518                [Whether the krb5_checksum struct has a checksum property])
3519   fi
3520
3521   AC_CACHE_CHECK([for etype in EncryptedData],
3522                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3523     AC_TRY_COMPILE([#include <krb5.h>],
3524       [EncryptedData edata; edata.etype = 0;],
3525       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3526       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3527
3528   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3529     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3530                [Whether the EncryptedData struct has a etype property])
3531   fi
3532
3533   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3534                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3535     AC_TRY_COMPILE([#include <krb5.h>],
3536       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3537       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3538       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3539
3540   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3541     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3542                [Whether the krb5_ap_req struct has a ticket pointer])
3543   fi
3544
3545   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3546                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3547     AC_TRY_COMPILE([#include <krb5.h>],
3548       [krb5_error err; err.e_data = NULL;],
3549       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3550       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3551
3552   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3553     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3554                [Whether the krb5_error struct has a e_data pointer])
3555   fi
3556
3557   AC_CACHE_CHECK([for krb5_crypto type],
3558                 samba_cv_HAVE_KRB5_CRYPTO,[
3559     AC_TRY_COMPILE([#include <krb5.h>],
3560       [krb5_crypto crypto;],
3561       samba_cv_HAVE_KRB5_CRYPTO=yes,
3562       samba_cv_HAVE_KRB5_CRYPTO=no)])
3563
3564   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3565     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3566                [Whether the type krb5_crypto exists])
3567   fi
3568
3569   AC_CACHE_CHECK([for krb5_encrypt_block type],
3570                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3571     AC_TRY_COMPILE([#include <krb5.h>],
3572       [krb5_encrypt_block block;],
3573       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3574       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3575
3576   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3577     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3578                [Whether the type krb5_encrypt_block exists])
3579   fi
3580
3581   AC_CACHE_CHECK([for addrtype in krb5_address],
3582                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3583     AC_TRY_COMPILE([#include <krb5.h>],
3584       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3585       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3586       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3587
3588   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3589     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3590                [Whether the krb5_address struct has a addrtype property])
3591   fi
3592
3593   AC_CACHE_CHECK([for addr_type in krb5_address],
3594                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3595     AC_TRY_COMPILE([#include <krb5.h>],
3596       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3597       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3598       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3599
3600   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3601     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3602               [Whether the krb5_address struct has a addr_type property])
3603   fi
3604
3605   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3606                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3607                  [AC_TRY_COMPILE([#include <krb5.h>],
3608     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3609     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3610
3611   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3612     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3613               [Whether the krb5_ticket struct has a enc_part2 property])
3614   fi
3615
3616   AC_CACHE_CHECK([for keyblock in krb5_creds],
3617                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3618     AC_TRY_COMPILE([#include <krb5.h>],
3619       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3620       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3621       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3622
3623   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3624     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3625               [Whether the krb5_creds struct has a keyblock property])
3626   fi
3627
3628   AC_CACHE_CHECK([for session in krb5_creds],
3629                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3630     AC_TRY_COMPILE([#include <krb5.h>],
3631       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3632       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3633       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3634
3635   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3636     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3637               [Whether the krb5_creds struct has a session property])
3638   fi
3639
3640   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3641                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3642     AC_TRY_COMPILE([#include <krb5.h>],
3643       [krb5_keyblock key; key.keyvalue.data = NULL;],
3644       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3645       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3646
3647   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3648     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3649               [Whether the krb5_keyblock struct has a keyvalue property])
3650   fi
3651
3652   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3653                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3654     AC_TRY_COMPILE([#include <krb5.h>],
3655       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3656       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3657       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3658   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3659                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3660     AC_TRY_COMPILE([#include <krb5.h>],
3661       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3662       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3663       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3664 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3665 # w.r.t. arcfour and windows, so we must not enable it here
3666   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3667           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3668     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3669               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3670   fi
3671
3672   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3673                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3674     AC_TRY_COMPILE([#include <krb5.h>],
3675       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3676       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3677       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3678
3679   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3680     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3681               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3682   fi
3683
3684   AC_CACHE_CHECK([for KV5M_KEYTAB],
3685                  samba_cv_HAVE_KV5M_KEYTAB,[
3686     AC_TRY_COMPILE([#include <krb5.h>],
3687       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3688       samba_cv_HAVE_KV5M_KEYTAB=yes,
3689       samba_cv_HAVE_KV5M_KEYTAB=no)])
3690
3691   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3692       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3693              [Whether the KV5M_KEYTAB option is available])
3694   fi
3695
3696   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3697                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3698     AC_TRY_COMPILE([#include <krb5.h>],
3699       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3700       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3701       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3702
3703   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3704     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3705               [Whether KRB5_KU_OTHER_CKSUM is available])
3706   fi
3707
3708   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3709                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3710     AC_TRY_COMPILE([#include <krb5.h>],
3711       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3712       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3713       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3714
3715   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3716     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3717               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3718   fi
3719
3720   AC_CACHE_CHECK([for the krb5_princ_component macro],
3721                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3722     AC_TRY_LINK([#include <krb5.h>],
3723       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3724       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3725       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3726
3727   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3728     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3729                [Whether krb5_princ_component is available])
3730   fi
3731
3732   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3733                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3734     AC_TRY_COMPILE([#include <krb5.h>],
3735       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3736       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3737       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3738
3739   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3740     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3741               [Whether krb5_keytab_entry has key member])
3742   fi
3743
3744   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3745                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3746     AC_TRY_COMPILE([#include <krb5.h>],
3747       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3748       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3749       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3750
3751   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3752     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3753               [Whether krb5_keytab_entry has keyblock member])
3754   fi
3755
3756   AC_CACHE_CHECK([for magic in krb5_address],
3757                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3758     AC_TRY_COMPILE([#include <krb5.h>],
3759       [krb5_address addr; addr.magic = 0;],
3760       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3761       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3762
3763   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3764     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3765               [Whether the krb5_address struct has a magic property])
3766   fi
3767
3768   AC_CACHE_CHECK([for WRFILE: keytab support],
3769                 samba_cv_HAVE_WRFILE_KEYTAB,[
3770     AC_TRY_RUN([
3771 #include<krb5.h>
3772   main()
3773   {
3774     krb5_context context;
3775     krb5_keytab keytab;
3776
3777     krb5_init_context(&context);
3778     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3779   }],
3780   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3781   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3782
3783   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3784       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3785                [Whether the WRFILE:-keytab is supported])
3786   fi
3787
3788   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3789                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3790     AC_TRY_COMPILE([#include <krb5.h>],
3791     [
3792     krb5_context context;
3793     krb5_principal principal;
3794     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3795     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3796     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3797
3798   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3799     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3800               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3801   fi
3802
3803   AC_CACHE_CHECK([for krb5_addresses type],
3804                 samba_cv_HAVE_KRB5_ADDRESSES,[
3805     AC_TRY_COMPILE([#include <krb5.h>],
3806       [krb5_addresses addr;],
3807       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3808       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3809
3810   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3811     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3812                [Whether the type krb5_addresses type exists])
3813   fi
3814
3815   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3816                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3817     AC_TRY_COMPILE([#include <krb5.h>],
3818     [
3819     krb5_mk_error(0,0,0);],
3820     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3821     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3822
3823   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3824     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3825               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3826   fi
3827
3828   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3829     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3830         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3831         AC_TRY_RUN_STRICT([
3832                 #include <stdlib.h>
3833                 #include <krb5.h>
3834                 int main(void) {
3835                         krb5_context context = NULL;
3836                         char *str = NULL;
3837                         krb5_enctype_to_string(context, 1, &str);
3838                         if (str) free (str); 
3839                         return 0;
3840                 }
3841                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3842                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3843                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3844
3845     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3846       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3847                 [whether krb5_enctype_to_string takes krb5_context argument])
3848     fi
3849
3850     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3851         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3852         AC_TRY_RUN_STRICT([
3853                 #include <krb5.h>
3854                 int main(void) {
3855                         char buf[256];
3856                         krb5_enctype_to_string(1, buf, 256);
3857                         return 0;
3858                 }
3859                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3860                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3861                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3862
3863     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3864       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3865                 [whether krb5_enctype_to_string takes size_t argument])
3866     fi
3867   fi
3868
3869   AC_CACHE_CHECK([for krb5_principal_get_realm],
3870                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3871     AC_TRY_LINK([#include <krb5.h>],
3872       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3873       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3874       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3875
3876   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3877     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3878                [Whether the function krb5_principal_get_realm is defined])
3879   fi
3880
3881   AC_CACHE_CHECK([for krb5_princ_realm],
3882                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3883     AC_TRY_LINK([#include <krb5.h>],
3884       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3885       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3886       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3887
3888   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3889     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3890                [Whether the macro krb5_princ_realm is defined])
3891   fi
3892
3893   #
3894   #
3895   # Now the decisions whether we can support krb5
3896   #
3897   # NOTE: all tests should be done before this block!
3898   #
3899   #
3900   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3901     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3902     use_ads=no
3903   fi
3904
3905   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3906           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3907   then
3908     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3909     use_ads=no
3910   fi
3911
3912   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3913           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3914   then
3915     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3916     use_ads=no
3917   fi
3918
3919   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3920           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3921   then
3922     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3923     use_ads=no
3924   fi
3925
3926   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3927           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3928   then
3929     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3930     use_ads=no
3931   fi
3932
3933   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3934
3935       # We only need the following functions if we can't get the enctype
3936       # and kvno out of the ticket directly (ie. on Heimdal).
3937
3938       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3939       then
3940         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3941         use_ads=no
3942       fi
3943
3944       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3945       then
3946         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3947         use_ads=no
3948       fi
3949
3950   fi
3951
3952   if test x"$use_ads" = x"yes"; then
3953     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3954     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3955     if test x"$have_gssapi" = x"yes"; then
3956       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3957     fi
3958   else
3959     if test x"$with_ads_support" = x"yes"; then
3960         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3961     else
3962         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3963     fi
3964     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3965     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3966     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3967     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3968     KRB5_LIBS=""
3969     with_ads_support=no
3970   fi
3971   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3972   AC_MSG_RESULT([$use_ads])
3973
3974 LIBS="$ac_save_LIBS"
3975 fi
3976
3977 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3978 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3979
3980
3981 ########################################################
3982 # Compile with DNS Updates support?
3983
3984 with_dnsupdate_support=no
3985 AC_MSG_CHECKING([whether to enable DNS Updates support])
3986
3987 AC_ARG_WITH(dnsupdate,
3988 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
3989 [ case "$withval" in
3990     yes|no)
3991         with_dnsupdate_support=$withval
3992         ;;
3993   esac ])
3994
3995 AC_MSG_RESULT($with_dnsupdate_support)
3996
3997 if test x"$with_dnsupdate_support" != x"no"; then
3998
3999   ################################################################
4000   # first test for Active Directory support being enabled
4001   #if test x"$with_ads_support" = x"no"; then
4002   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4003   #             with_dnsupdate_support=no
4004   #fi           
4005   ##################################################################
4006   # then test for uuid.h (necessary to generate unique DNS keynames
4007   # (uuid.h is required for this test)
4008   AC_CHECK_HEADERS(uuid/uuid.h)
4009
4010   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4011         if test x"$with_dnsupdate_support" = x"yes"; then
4012          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4013         else
4014          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4015         fi
4016         with_dnsupdate_support=no
4017   fi
4018 fi
4019
4020 if test x"$with_dnsupdate_support" != x"no"; then
4021
4022   ########################################################
4023   # Now see if we can find the uuid libs in standard paths
4024   # On some systems, the uuid API is in libc, so we have to
4025   # be careful not to insert a spurious -luuid.
4026
4027   UUID_LIBS=""
4028   AC_LIBTESTFUNC(uuid, uuid_generate,
4029           [
4030             case " $LIBS " in
4031                 *\ -luuid\ *)
4032                 UUID_LIBS="-luuid"
4033                 SMB_REMOVE_LIB(uuid)
4034                 ;;
4035             esac
4036
4037             with_dnsupdate_support=yes
4038             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4039         ],
4040         [
4041             if test x"$with_dnsupdate_support" = x"yes"; then
4042                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4043             else
4044                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4045             fi
4046             with_dnsupdate_support=no
4047         ])
4048 fi
4049
4050 #################################################
4051 # check for automount support
4052 AC_MSG_CHECKING(whether to use automount)
4053 AC_ARG_WITH(automount,
4054 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4055 [ case "$withval" in
4056   yes)
4057     AC_MSG_RESULT(yes)
4058     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4059     ;;
4060   *)
4061     AC_MSG_RESULT(no)
4062     ;;
4063   esac ],
4064   AC_MSG_RESULT(no)
4065 )
4066
4067 #################################################
4068 # check for mount- and umount.cifs support
4069 CIFSMOUNT_PROGS=""
4070 INSTALL_CIFSMOUNT=""
4071 UNINSTALL_CIFSMOUNT=""
4072 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4073 AC_ARG_WITH(cifsmount,
4074 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
4075 [ case "$withval" in
4076   no)
4077         AC_MSG_RESULT(no)
4078         ;;
4079   *)
4080         case "$host_os" in
4081         *linux*)
4082                 AC_MSG_RESULT(yes)
4083                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4084                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4085                 INSTALL_CIFSMOUNT="installcifsmount"
4086                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4087                 ;;
4088         *)
4089                 AC_MSG_ERROR(not on a linux system!)
4090                 ;;
4091         esac
4092     ;;
4093   esac ],
4094 [ case "$host_os" in
4095   *linux*)
4096         AC_MSG_RESULT(yes)
4097         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4098         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4099         INSTALL_CIFSMOUNT="installcifsmount"
4100         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4101         ;;
4102   *)
4103         AC_MSG_RESULT(no)
4104         ;;
4105   esac ]
4106 )
4107
4108 #################################################
4109 # check for cifs.upcall support
4110 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4111 CIFSUPCALL_PROGS=""
4112 INSTALL_CIFSUPCALL=""
4113 UNINSTALL_CIFSUPCALL=""
4114 AC_MSG_CHECKING(whether to build cifs.upcall)
4115 AC_ARG_WITH(cifsupcall,
4116 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=no)])],
4117 [ case "$withval" in
4118   no)
4119         AC_MSG_RESULT(no)
4120         ;;
4121   *)
4122         case "$host_os" in
4123         *linux*)
4124                 if test x"$use_ads" != x"yes"; then
4125                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4126                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4127                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4128                 else
4129                         AC_MSG_RESULT(yes)
4130                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4131                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4132                         INSTALL_CIFSUPCALL="installcifsupcall"
4133                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4134                 fi
4135                 ;;
4136         *)
4137                 AC_MSG_ERROR(not on a linux system!)
4138                 ;;
4139         esac
4140     ;;
4141   esac ],
4142 [
4143   AC_MSG_RESULT(no)
4144   ]
4145 )
4146
4147
4148 #################################################
4149 # Check for a PAM clear-text auth, accounts, password
4150 # and session support. Most PAM implementations keep their
4151 # headers in /usr/include/security. Darwin keeps its in
4152 # /usr/include/pam.
4153
4154 with_pam_for_crypt=no
4155 try_pam=no
4156 AC_MSG_CHECKING(whether to try PAM support)
4157 AC_ARG_WITH(pam,
4158 [AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
4159 [ case "$withval" in
4160   yes|no)
4161     try_pam=$withval
4162     ;;
4163   esac
4164 ])
4165 AC_MSG_RESULT([$try_pam])
4166
4167 use_pam=no
4168 create_pam_modules=no
4169 if test x"${try_pam}" != x"no";then
4170         use_pam=yes
4171         create_pam_modules=yes
4172
4173         # Most systems have PAM headers in /usr/include/security, but Darwin
4174         # has them in /usr/include/pam.
4175         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4176         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4177                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4178                 if test x"${try_pam}" = x"yes";then
4179                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4180                 fi
4181                 use_pam=no
4182                 create_pam_modules=no
4183         fi
4184
4185         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4186         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4187                 if test x"${try_pam}" = x"yes";then
4188                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4189                 fi
4190                 use_pam=no
4191                 create_pam_modules=no
4192         fi
4193
4194         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4195                 #if HAVE_SECURITY_PAM_APPL_H
4196                 #include <security/pam_appl.h>
4197                 #endif
4198                 #if HAVE_PAM_PAM_APPL_H
4199                 #include <pam/pam_appl.h>
4200                 #endif
4201         ]])
4202         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4203                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4204                 if test x"${try_pam}" = x"yes";then
4205                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4206        fi
4207                 create_pam_modules=no
4208     fi
4209
4210         if test x"$use_pam" = x"yes"; then
4211     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4212                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4213                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4214     with_pam_for_crypt=yes
4215
4216                 if test x"$create_pam_modules" = x"yes"; then
4217                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4218                         # this checks are optional,
4219                         # we don't care about the results here
4220                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4221                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4222                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4223                 else
4224                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4225                 fi
4226         fi
4227         AC_MSG_CHECKING(whether to use PAM support)
4228         AC_MSG_RESULT([$use_pam])
4229
4230         AC_MSG_CHECKING(whether to have PAM MODULES support)
4231         AC_MSG_RESULT([$create_pam_modules])
4232 fi # try_pam != no
4233
4234 #################################################
4235 # check for pam_smbpass support
4236 PAM_MODULES=""
4237 INSTALL_PAM_MODULES=""
4238 UNINSTALL_PAM_MODULES=""
4239 AC_MSG_CHECKING(whether to use pam_smbpass)
4240 AC_ARG_WITH(pam_smbpass,
4241 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=no)])],
4242 [ case "$withval" in
4243   yes)
4244     AC_MSG_RESULT(yes)
4245
4246        # Conditions under which pam_smbpass should not be built.
4247
4248        if test x"$BLDSHARED" != x"true"; then
4249           AC_MSG_ERROR([No support for shared modules])
4250        elif test x"$create_pam_modules" != x"yes"; then
4251           AC_MSG_ERROR([No support for PAM MODULES])
4252        else
4253           PAM_MODULES="pam_smbpass"
4254           INSTALL_PAM_MODULES="installpammodules"
4255           UNINSTALL_PAM_MODULES="uninstallpammodules"
4256        fi
4257     ;;
4258   *)
4259     AC_MSG_RESULT(no)
4260     ;;
4261   esac ],
4262   AC_MSG_RESULT(no)
4263 )
4264
4265
4266 ###############################################
4267 # test for where we get crypt() from
4268 AC_SEARCH_LIBS(crypt, [crypt],
4269   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4270   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4271
4272 ##
4273 ## moved after the check for -lcrypt in order to
4274 ## ensure that the necessary libraries are included
4275 ## check checking for truncated salt.  Wrapped by the
4276 ## $with_pam_for_crypt variable as above   --jerry
4277 ##
4278 if test $with_pam_for_crypt = no; then
4279 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4280 crypt_LIBS="$LIBS"
4281 LIBS="$AUTH_LIBS $LIBS"
4282 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4283         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4284 LIBS="$crypt_LIBS"])
4285 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4286         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4287 fi
4288 fi
4289
4290 #################################################
4291 # check for a NISPLUS_HOME support
4292 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4293 AC_ARG_WITH(nisplus-home,
4294 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4295 [ case "$withval" in
4296   yes)
4297     AC_MSG_RESULT(yes)
4298     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4299     ;;
4300   *)
4301     AC_MSG_RESULT(no)
4302     ;;
4303   esac ],
4304   AC_MSG_RESULT(no)
4305 )
4306
4307 #################################################
4308 # check for syslog logging
4309 AC_MSG_CHECKING(whether to use syslog logging)
4310 AC_ARG_WITH(syslog,
4311 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4312 [ case "$withval" in
4313   yes)
4314     AC_MSG_RESULT(yes)
4315     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4316     ;;
4317   *)
4318     AC_MSG_RESULT(no)
4319     ;;
4320   esac ],
4321   AC_MSG_RESULT(no)
4322 )
4323
4324 #################################################
4325 # check for experimental disk-quotas support
4326
4327 samba_cv_WITH_QUOTAS=auto
4328 samba_cv_TRY_QUOTAS=no
4329 samba_cv_RUN_QUOTA_TESTS=auto
4330 samba_cv_WITH_SYS_QUOTAS=auto
4331 samba_cv_TRY_SYS_QUOTAS=auto
4332 samba_cv_SYSQUOTA_FOUND=no
4333
4334 AC_MSG_CHECKING(whether to try disk-quotas support)
4335 AC_ARG_WITH(quotas,
4336 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4337 [ case "$withval" in
4338   yes)
4339     AC_MSG_RESULT(yes)
4340     samba_cv_WITH_QUOTAS=yes
4341     samba_cv_TRY_QUOTAS=yes
4342     samba_cv_RUN_QUOTA_TESTS=yes
4343     #set sys quotas to auto in this case
4344     samba_cv_TRY_SYS_QUOTAS=auto
4345     ;;
4346   auto)
4347     AC_MSG_RESULT(auto)
4348     samba_cv_WITH_QUOTAS=auto
4349     samba_cv_TRY_QUOTAS=auto
4350     samba_cv_RUN_QUOTA_TESTS=auto
4351     #set sys quotas to auto in this case
4352     samba_cv_TRY_SYS_QUOTAS=auto
4353     ;;
4354   no)
4355     AC_MSG_RESULT(no)
4356     samba_cv_WITH_QUOTAS=no
4357     samba_cv_TRY_QUOTAS=no
4358     samba_cv_RUN_QUOTA_TESTS=no
4359     ;;
4360   *)
4361     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4362     ;;
4363   esac ],
4364   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4365 )
4366
4367 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4368 AC_ARG_WITH(sys-quotas,
4369 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4370 [ case "$withval" in
4371   yes)
4372     AC_MSG_RESULT(yes)
4373     samba_cv_WITH_SYS_QUOTAS=yes
4374     samba_cv_TRY_SYS_QUOTAS=yes
4375     samba_cv_RUN_QUOTA_TESTS=yes
4376     ;;
4377   auto)
4378     AC_MSG_RESULT(auto)
4379     samba_cv_WITH_SYS_QUOTAS=auto
4380     samba_cv_TRY_SYS_QUOTAS=auto
4381     samba_cv_RUN_QUOTA_TESTS=auto
4382     ;;
4383   no)
4384     AC_MSG_RESULT(no)
4385     samba_cv_WITH_SYS_QUOTAS=no
4386     samba_cv_TRY_SYS_QUOTAS=no
4387     ;;
4388   *)
4389     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4390     ;;
4391   esac ],
4392   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4393 )
4394
4395 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4396 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4397   case "$host_os" in
4398         *linux*)
4399             AC_MSG_RESULT(yes)
4400             samba_cv_TRY_SYS_QUOTAS=yes
4401             samba_cv_RUN_QUOTA_TESTS=yes
4402             ;;
4403         *)
4404             AC_MSG_RESULT(no)
4405             samba_cv_TRY_SYS_QUOTAS=no
4406             ;;
4407   esac
4408 fi
4409
4410 #############################################
4411 # only check for quota stuff if --with-quotas
4412 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4413
4414 case "$host_os" in
4415         # on linux we didn't need to test we have builtin support
4416         *linux*)
4417             samba_cv_SYSQUOTA_FOUND=yes
4418             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4419             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4420             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4421             AC_MSG_RESULT(yes)
4422
4423             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4424             samba_cv_found_xfs_header=yes
4425             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4426             AC_MSG_RESULT(yes)
4427             ;;
4428         *solaris*)
4429             # need to set this define when using static linking (BUG 1473)
4430             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4431             ;;
4432         *)
4433             ;;
4434 esac
4435
4436 # some broken header files need this
4437 AC_CHECK_HEADER(asm/types.h,[
4438             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4439             AC_ADD_INCLUDE(<asm/types.h>)
4440             ])
4441
4442 # For quotas on Veritas VxFS filesystems
4443 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4444
4445 # For quotas on Linux XFS filesystems
4446 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4447
4448 # For sys/quota.h and linux/quota.h
4449 AC_CHECK_HEADERS(sys/quota.h)
4450
4451 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4452 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4453 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4454 AC_TRY_COMPILE([
4455 #include "confdefs.h"
4456 #ifdef HAVE_SYS_TYPES_H
4457 #include <sys/types.h>
4458 #endif
4459 #ifdef HAVE_ASM_TYPES_H
4460 #include <asm/types.h>
4461 #endif
4462 #include <sys/quota.h>
4463 ],[int i = Q_XGETQUOTA;],
4464 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4465 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4466         samba_cv_found_xfs_header=yes
4467 fi
4468 fi
4469
4470 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4471 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4472 AC_TRY_COMPILE([
4473 #include "confdefs.h"
4474 #ifdef HAVE_SYS_QUOTA_H
4475 #include <sys/quota.h>
4476 #endif
4477 ],[
4478 struct dqblk D;
4479 D.dqb_fsoftlimit = 0;],
4480 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4481 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4482         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4483 fi
4484
4485 ##################
4486 # look for a working quota system
4487
4488 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4489 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4490 AC_TRY_RUN_STRICT([
4491 #define HAVE_QUOTACTL_4A 1
4492 #define AUTOCONF_TEST 1
4493 #include "confdefs.h"
4494 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4495            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4496 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4497     samba_cv_SYSQUOTA_FOUND=yes;
4498     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4499     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4500 fi
4501 fi
4502
4503 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4504 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4505 AC_TRY_RUN_STRICT([
4506 #define HAVE_QUOTACTL_4B 1
4507 #define AUTOCONF_TEST 1
4508 #include "confdefs.h"
4509 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4510            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4511 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4512     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4513     samba_cv_SYSQUOTA_FOUND=yes;
4514     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4515     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4516 fi
4517 fi
4518
4519 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4520 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4521 AC_TRY_RUN_STRICT([
4522 #define HAVE_QUOTACTL_3 1
4523 #define AUTOCONF_TEST 1
4524 #include "confdefs.h"
4525 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4526            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4527 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4528     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4529     samba_cv_SYSQUOTA_FOUND=yes;
4530     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4531     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4532 fi
4533 fi
4534
4535 #################################################
4536 # check for mntent.h and struct mntent
4537 AC_CHECK_HEADERS(mntent.h)
4538 #################################################
4539 # check for setmntent,getmntent,endmntent
4540 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4541
4542 #################################################
4543 # check for devnm.h and struct mntent
4544 AC_CHECK_HEADERS(devnm.h)
4545 #################################################
4546 # check for devnm
4547 AC_CHECK_FUNCS(devnm)
4548
4549 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4550     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4551         # if --with-sys-quotas=yes then build it
4552         # you have can use the get/set quota command smb.conf
4553         # options then
4554         samba_cv_SYSQUOTA_FOUND=auto
4555     fi
4556     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4557         # if --with-sys-quotas=yes then build it
4558         # you have can use the get/set quota command smb.conf
4559         # options then
4560         samba_cv_TRY_SYS_QUOTAS=auto
4561     fi
4562 fi
4563
4564 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4565 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4566 SAVE_CPPFLAGS="$CPPFLAGS"
4567 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4568 AC_TRY_COMPILE([
4569 #include "confdefs.h"
4570 #define NO_PROTO_H 1
4571 #define NO_CONFIG_H 1
4572 #define HAVE_SYS_QUOTAS 1
4573 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4574 #include "${srcdir-.}/lib/sysquotas.c"
4575 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4576 CPPFLAGS="$SAVE_CPPFLAGS"
4577 ])
4578 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4579 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4580     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4581         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4582         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4583         samba_cv_WE_USE_SYS_QUOTAS=yes
4584         AC_MSG_RESULT(yes)
4585     else
4586         AC_MSG_RESULT(no)
4587     fi
4588 fi
4589 fi
4590
4591 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4592 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4593 SAVE_CPPFLAGS="$CPPFLAGS"
4594 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4595 AC_TRY_COMPILE([
4596 #include "confdefs.h"
4597 #define NO_PROTO_H 1
4598 #define NO_CONFIG_H 1
4599 #define HAVE_SYS_QUOTAS 1
4600 #define HAVE_XFS_QUOTAS 1
4601 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4602 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4603 CPPFLAGS="$SAVE_CPPFLAGS"
4604 ])
4605 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4606     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4607         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4608     fi
4609 fi
4610 fi
4611
4612 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4613 SAVE_CPPFLAGS="$CPPFLAGS"
4614 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4615 AC_TRY_COMPILE([
4616 #include "confdefs.h"
4617 #define NO_PROTO_H 1
4618 #define NO_CONFIG_H 1
4619 #include "${srcdir-.}/smbd/quotas.c"
4620 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4621 CPPFLAGS="$SAVE_CPPFLAGS"
4622 ])
4623 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4624 AC_MSG_CHECKING(whether to use the old quota support)
4625     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4626       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4627         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4628         AC_MSG_RESULT(yes)
4629       else
4630         AC_MSG_RESULT(no)
4631       fi
4632     else
4633       AC_MSG_RESULT(no)
4634     fi
4635 fi
4636
4637 ####################
4638 # End of quota check samba_cv_RUN_QUOTA_TESTS
4639 fi
4640
4641 #################################################
4642 # check for experimental utmp accounting
4643
4644 AC_MSG_CHECKING(whether to support utmp accounting)
4645 WITH_UTMP=yes
4646 AC_ARG_WITH(utmp,
4647 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4648 [ case "$withval" in
4649   no)
4650                 WITH_UTMP=no
4651                 ;;
4652   *)
4653                 WITH_UTMP=yes
4654                 ;;
4655   esac ],
4656 )
4657
4658 # utmp requires utmp.h
4659 # Note similar check earlier, when checking utmp details.
4660
4661 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4662         utmp_no_reason=", no utmp.h on $host_os"
4663         WITH_UTMP=no
4664 fi
4665
4666 # Display test results
4667
4668 if test x"$WITH_UTMP" = x"yes"; then
4669         AC_MSG_RESULT(yes)
4670         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4671 else
4672         AC_MSG_RESULT(no$utmp_no_reason)
4673 fi
4674
4675 INSTALLLIBCMD_SH=:
4676 INSTALLLIBCMD_A=:
4677 UNINSTALLLIBCMD_SH=:
4678 UNINSTALLLIBCMD_A=:
4679
4680 if test $BLDSHARED = true; then
4681         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4682         UNINSTALLLIBCMD_SH="rm -f"
4683 fi
4684 if test $enable_static = yes; then
4685         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4686         UNINSTALLLIBCMD_A="rm -f"
4687 fi
4688
4689 #################################################
4690 # --disable-shared-libs
4691 # can be used to disable the internal use of shared libs altogether
4692 # (this only has an effect when building shared libs is enabled)
4693 #
4694 USESHARED=false
4695 AC_SUBST(USESHARED)
4696
4697 AC_MSG_CHECKING(whether to use shared libraries internally)
4698 AC_ARG_ENABLE([shared-libs],
4699         AS_HELP_STRING([--enable-shared-libs],
4700                 [Use shared libraries internally (default=yes)]),
4701         [enable_shared_libs=$enableval],
4702         [enable_shared_libs=yes])
4703
4704 if test x"$enable_shared_libs" != x"no" ; then
4705         USESHARED=$BLDSHARED
4706 fi
4707
4708 AC_MSG_RESULT([$USESHARED])
4709
4710 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4711         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4712 fi
4713
4714 #################################################
4715 # --with-static-libs=LIBS:
4716 #   link (internal) libs dynamically or statically?
4717 #
4718 # If a subsystem is built as a library then this controls whether they are
4719 # linked into Samba targets statically or dynamically:
4720 #
4721 # * If we build the shared library at all, we link dynamically by default.
4722 #
4723 # * We only link statically if we don't build shared or if the library
4724 #   appears in the --with-static-libs configure option.
4725 #
4726 # Example:
4727 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4728 #   of linking the dynamic variant with -ltalloc.
4729 #
4730 # NOTE: This option only affects libraries that we do not only build
4731 # but that samba also links against as libraries (as opposed to linking
4732 # the plain object files. - This has to be configured in Makefile.in.
4733 # So in particular it does not harm to give invalid or unknown names here.
4734 #
4735
4736 AC_ARG_WITH([static-libs],
4737         [AS_HELP_STRING([--with-static-libs=LIBS],
4738                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4739         [AS_IF([test $withval],
4740                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4741                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4742                         eval LINK_$lib=STATIC
4743                 done], [])],
4744         [])
4745
4746 #
4747 # WORKAROUND:
4748 #   until we have organized other internal subsystems (as util, registry
4749 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4750 #   dynamically to samba programs.
4751 #
4752 LINK_LIBNETAPI=STATIC
4753
4754 LINK_LIBSMBCLIENT=STATIC
4755
4756 #
4757 #  The library versions are hardcoded here
4758 #  and filled into the LIBFOO_SOVER variable.
4759 #
4760 #  TODO: for talloc and tdb (at least), these should
4761 #  be extracted from their respective source directories
4762 #
4763 SMB_LIBRARY(talloc, 1)
4764 SMB_LIBRARY(tdb, 1)
4765 SMB_LIBRARY(netapi, 0)
4766 SMB_LIBRARY(smbclient, 0)
4767 SMB_LIBRARY(smbsharemodes, 0)
4768 SMB_LIBRARY(addns, 0, no, [undefined API])
4769
4770
4771
4772 #################################################
4773 # these tests are taken from the GNU fileutils package
4774 AC_CHECKING(how to get filesystem space usage)
4775 space=no
4776
4777 # Test for statvfs64.
4778 if test $space = no; then
4779   # SVR4
4780   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4781   [AC_TRY_RUN([
4782 #if defined(HAVE_UNISTD_H)
4783 #include <unistd.h>
4784 #endif
4785 #include <sys/types.h>
4786 #include <sys/statvfs.h>
4787   main ()
4788   {
4789     struct statvfs64 fsd;
4790     exit (statvfs64 (".", &fsd));
4791   }],
4792   fu_cv_sys_stat_statvfs64=yes,
4793   fu_cv_sys_stat_statvfs64=no,
4794   fu_cv_sys_stat_statvfs64=cross)])
4795   if test $fu_cv_sys_stat_statvfs64 = yes; then
4796     space=yes
4797     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4798   fi
4799 fi
4800
4801 # Perform only the link test since it seems there are no variants of the
4802 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4803 # because that got a false positive on SCO OSR5.  Adding the declaration
4804 # of a `struct statvfs' causes this test to fail (as it should) on such
4805 # systems.  That system is reported to work fine with STAT_STATFS4 which
4806 # is what it gets when this test fails.
4807 if test $space = no; then
4808   # SVR4
4809   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4810                  [AC_TRY_LINK([#include <sys/types.h>
4811 #include <sys/statvfs.h>],
4812                               [struct statvfs fsd; statvfs (0, &fsd);],
4813                               fu_cv_sys_stat_statvfs=yes,
4814                               fu_cv_sys_stat_statvfs=no)])
4815   if test $fu_cv_sys_stat_statvfs = yes; then
4816     space=yes
4817     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4818   fi
4819 fi
4820
4821 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4822 # This is not the case on ancient Linux systems.
4823
4824 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4825     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4826         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4827 if test x"$samba_cv_fsid_int" = x"yes"; then
4828     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4829 fi
4830
4831 if test $space = no; then
4832   # DEC Alpha running OSF/1
4833   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4834   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4835   [AC_TRY_RUN([
4836 #include <sys/param.h>
4837 #include <sys/types.h>
4838 #include <sys/mount.h>
4839   main ()
4840   {
4841     struct statfs fsd;
4842     fsd.f_fsize = 0;
4843     exit (statfs (".", &fsd, sizeof (struct statfs)));
4844   }],
4845   fu_cv_sys_stat_statfs3_osf1=yes,
4846   fu_cv_sys_stat_statfs3_osf1=no,
4847   fu_cv_sys_stat_statfs3_osf1=no)])
4848   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4849   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4850     space=yes
4851     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4852   fi
4853 fi
4854
4855 if test $space = no; then
4856 # AIX
4857   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4858 member (AIX, 4.3BSD)])
4859   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4860   [AC_TRY_RUN([
4861 #ifdef HAVE_SYS_PARAM_H
4862 #include <sys/param.h>
4863 #endif
4864 #ifdef HAVE_SYS_MOUNT_H
4865 #include <sys/mount.h>
4866 #endif
4867 #ifdef HAVE_SYS_VFS_H
4868 #include <sys/vfs.h>
4869 #endif
4870   main ()
4871   {
4872   struct statfs fsd;
4873   fsd.f_bsize = 0;
4874   exit (statfs (".", &fsd));
4875   }],
4876   fu_cv_sys_stat_statfs2_bsize=yes,
4877   fu_cv_sys_stat_statfs2_bsize=no,
4878   fu_cv_sys_stat_statfs2_bsize=no)])
4879   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4880   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4881     space=yes
4882     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4883   fi
4884 fi
4885
4886 if test $space = no; then
4887 # SVR3
4888   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4889   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4890   [AC_TRY_RUN([#include <sys/types.h>
4891 #include <sys/statfs.h>
4892   main ()
4893   {
4894   struct statfs fsd;
4895   exit (statfs (".", &fsd, sizeof fsd, 0));
4896   }],
4897     fu_cv_sys_stat_statfs4=yes,
4898     fu_cv_sys_stat_statfs4=no,
4899     fu_cv_sys_stat_statfs4=no)])
4900   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4901   if test $fu_cv_sys_stat_statfs4 = yes; then
4902     space=yes
4903     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4904   fi
4905 fi
4906
4907 if test $space = no; then
4908 # 4.4BSD and NetBSD
4909   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4910 member (4.4BSD and NetBSD)])
4911   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4912   [AC_TRY_RUN([#include <sys/types.h>
4913 #ifdef HAVE_SYS_PARAM_H
4914 #include <sys/param.h>
4915 #endif
4916 #ifdef HAVE_SYS_MOUNT_H
4917 #include <sys/mount.h>
4918 #endif
4919   main ()
4920   {
4921   struct statfs fsd;
4922   fsd.f_fsize = 0;
4923   exit (statfs (".", &fsd));
4924   }],
4925   fu_cv_sys_stat_statfs2_fsize=yes,
4926   fu_cv_sys_stat_statfs2_fsize=no,
4927   fu_cv_sys_stat_statfs2_fsize=no)])
4928   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4929   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4930     space=yes
4931         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4932   fi
4933 fi
4934
4935 if test $space = no; then
4936   # Ultrix
4937   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4938   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4939   [AC_TRY_RUN([#include <sys/types.h>
4940 #ifdef HAVE_SYS_PARAM_H
4941 #include <sys/param.h>
4942 #endif
4943 #ifdef HAVE_SYS_MOUNT_H
4944 #include <sys/mount.h>
4945 #endif
4946 #ifdef HAVE_SYS_FS_TYPES_H
4947 #include <sys/fs_types.h>
4948 #endif
4949   main ()
4950   {
4951   struct fs_data fsd;
4952   /* Ultrix's statfs returns 1 for success,
4953      0 for not mounted, -1 for failure.  */
4954   exit (statfs (".", &fsd) != 1);
4955   }],
4956   fu_cv_sys_stat_fs_data=yes,
4957   fu_cv_sys_stat_fs_data=no,
4958   fu_cv_sys_stat_fs_data=no)])
4959   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4960   if test $fu_cv_sys_stat_fs_data = yes; then
4961     space=yes
4962     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4963   fi
4964 fi
4965
4966 #
4967 # As a gating factor for large file support, in order to
4968 # use <4GB files we must have the following minimal support
4969 # available.
4970 # long long, and a 64 bit off_t or off64_t.
4971 # If we don't have all of these then disable large
4972 # file support.
4973 #
4974 AC_MSG_CHECKING([if large file support can be enabled])
4975 AC_TRY_COMPILE([
4976 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
4977 #include <sys/types.h>
4978 #else
4979 __COMPILE_ERROR_
4980 #endif
4981 ],
4982 [int i],
4983 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
4984 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
4985         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
4986 fi
4987 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
4988
4989 #################################################
4990 # check for cluster extensions
4991
4992 AC_MSG_CHECKING(whether to include cluster support)
4993 AC_ARG_WITH(cluster-support,
4994 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=no)])])
4995 if test "x$with_cluster_support" = "xyes"; then
4996     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
4997     AC_MSG_RESULT(yes)
4998 else
4999     AC_MSG_RESULT(no)
5000 fi
5001
5002
5003 #################################################
5004 # check for ACL support
5005
5006 AC_MSG_CHECKING(whether to support ACLs)
5007 AC_ARG_WITH(acl-support,
5008 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5009 [ case "$withval" in
5010         yes|no)
5011                 with_acl_support="$withval"
5012                 ;;
5013   esac ])
5014
5015 if test x"$with_acl_support" = x ; then
5016         with_acl_support="auto"
5017 fi
5018
5019 AC_MSG_RESULT($with_acl_support)
5020
5021 if test x"$with_acl_support" = x"no"; then
5022         AC_MSG_RESULT(Disabling ACL support)
5023         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5024 else
5025         AC_MSG_NOTICE(checking whether ACL support is available:)
5026         case "$host_os" in
5027         *sysv5*)
5028                 AC_MSG_NOTICE(Using UnixWare ACLs)
5029                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5030                 default_static_modules="$default_static_modules vfs_solarisacl"
5031                 ;;
5032         *solaris*)
5033                 AC_MSG_NOTICE(Using solaris ACLs)
5034                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5035                 ACL_LIBS="$ACL_LIBS -lsec"
5036                 default_static_modules="$default_static_modules vfs_solarisacl"
5037                 ;;
5038         *hpux*)
5039                 AC_MSG_NOTICE(Using HPUX ACLs)
5040                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5041                 default_static_modules="$default_static_modules vfs_hpuxacl"
5042                 ;;
5043         *irix*)
5044                 AC_MSG_NOTICE(Using IRIX ACLs)
5045                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5046                 default_static_modules="$default_static_modules vfs_irixacl"
5047                 ;;
5048         *aix*)
5049                 AC_MSG_NOTICE(Using AIX ACLs)
5050                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5051                 default_static_modules="$default_static_modules vfs_aixacl"
5052                 ;;
5053         *osf*)
5054                 AC_MSG_NOTICE(Using Tru64 ACLs)
5055                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5056                 ACL_LIBS="$ACL_LIBS -lpacl"
5057                 default_static_modules="$default_static_modules vfs_tru64acl"
5058                 ;;
5059         *darwin*)
5060                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5061                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5062                 ;;
5063         *)
5064                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5065                 case "$host_os" in
5066                 *linux*)
5067                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5068                         ;;
5069                 esac
5070                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5071                         acl_LIBS=$LIBS
5072                         LIBS="$LIBS $ACL_LIBS"
5073                         AC_TRY_LINK([
5074                                 #include <sys/types.h>
5075                                 #include <sys/acl.h>
5076                         ],[
5077                                 acl_t acl;
5078                                 int entry_id;
5079                                 acl_entry_t *entry_p;
5080                                 return acl_get_entry(acl, entry_id, entry_p);
5081                         ],
5082                         [samba_cv_HAVE_POSIX_ACLS=yes],
5083                         [samba_cv_HAVE_POSIX_ACLS=no])
5084                         LIBS=$acl_LIBS
5085                 ])
5086                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5087                         AC_MSG_NOTICE(Using posix ACLs)
5088                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5089                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5090                                 acl_LIBS=$LIBS
5091                                 LIBS="$LIBS $ACL_LIBS"
5092                                 AC_TRY_LINK([
5093                                         #include <sys/types.h>
5094                                         #include <sys/acl.h>
5095                                 ],[
5096                                         acl_permset_t permset_d;
5097                                         acl_perm_t perm;
5098                                         return acl_get_perm_np(permset_d, perm);
5099                                 ],
5100                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5101                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5102                                 LIBS=$acl_LIBS
5103                         ])
5104                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5105                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5106                         fi
5107                         default_static_modules="$default_static_modules vfs_posixacl"
5108                 else
5109                         AC_MSG_NOTICE(ACL support is not avaliable)
5110                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5111                 fi
5112                 ;;
5113         esac
5114 fi # with_acl_support
5115
5116
5117
5118 #################################################
5119 # check for AIO support
5120
5121 AC_MSG_CHECKING(whether to support asynchronous io)
5122 AC_ARG_WITH(aio-support,
5123 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5124 [ case "$withval" in
5125   yes)
5126
5127         AC_MSG_RESULT(yes)
5128         case "$host_os" in
5129         *)
5130                 AIO_LIBS=$LIBS
5131                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5132                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5133                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5134                 aio_LIBS=$LIBS
5135                 LIBS=$AIO_LIBS
5136                 AC_TRY_LINK([#include <sys/types.h>
5137 #include <aio.h>],
5138 [ struct aiocb a; return aio_read(&a);],
5139 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5140                 LIBS=$aio_LIBS])
5141                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5142                 aio_LIBS=$LIBS
5143                 LIBS=$AIO_LIBS
5144                 AC_TRY_LINK([#include <sys/types.h>
5145 #include <aio.h>],
5146 [ struct aiocb64 a; return aio_read64(&a);],
5147 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5148                 LIBS=$aio_LIBS])
5149                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5150                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5151                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5152                         LIBS=$AIO_LIBS
5153                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5154                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5155                         LIBS=$AIO_LIBS
5156                 fi
5157
5158                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5159                         AC_MSG_CHECKING(for aio_read)
5160                         AC_LINK_IFELSE([#include <aio.h>
5161 int main() { struct aiocb a; return aio_read(&a); }],
5162 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5163 [AC_MSG_RESULT(no)])
5164
5165                         AC_MSG_CHECKING(for aio_write)
5166                         AC_LINK_IFELSE([#include <aio.h>
5167 int main() { struct aiocb a; return aio_write(&a); }],
5168 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5169 [AC_MSG_RESULT(no)])
5170
5171                         AC_MSG_CHECKING(for aio_fsync)
5172                         AC_LINK_IFELSE([#include <aio.h>
5173 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5174 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5175 [AC_MSG_RESULT(no)])
5176
5177                         AC_MSG_CHECKING(for aio_return)
5178                         AC_LINK_IFELSE([#include <aio.h>
5179 int main() { struct aiocb a; return aio_return(&a); }],
5180 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5181 [AC_MSG_RESULT(no)])
5182
5183                         AC_MSG_CHECKING(for aio_error)
5184                         AC_LINK_IFELSE([#include <aio.h>
5185 int main() { struct aiocb a; return aio_error(&a); }],
5186 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5187 [AC_MSG_RESULT(no)])
5188
5189                         AC_MSG_CHECKING(for aio_cancel)
5190                         AC_LINK_IFELSE([#include <aio.h>
5191 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5192 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5193 [AC_MSG_RESULT(no)])
5194
5195                         AC_MSG_CHECKING(for aio_suspend)
5196                         AC_LINK_IFELSE([#include <aio.h>
5197 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5198 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5199 [AC_MSG_RESULT(no)])
5200                 fi
5201
5202                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5203                         AC_MSG_CHECKING(for aio_read64)
5204                         AC_LINK_IFELSE([#include <aio.h>
5205 int main() { struct aiocb a; return aio_read64(&a); }],
5206 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5207 [AC_MSG_RESULT(no)])
5208
5209                         AC_MSG_CHECKING(for aio_write64)
5210                         AC_LINK_IFELSE([#include <aio.h>
5211 int main() { struct aiocb a; return aio_write64(&a); }],
5212 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5213 [AC_MSG_RESULT(no)])
5214
5215                         AC_MSG_CHECKING(for aio_fsync64)
5216                         AC_LINK_IFELSE([#include <aio.h>
5217 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5218 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5219 [AC_MSG_RESULT(no)])
5220
5221                         AC_MSG_CHECKING(for aio_return64)
5222                         AC_LINK_IFELSE([#include <aio.h>
5223 int main() { struct aiocb a; return aio_return64(&a); }],
5224 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5225 [AC_MSG_RESULT(no)])
5226
5227                         AC_MSG_CHECKING(for aio_error64)
5228                         AC_LINK_IFELSE([#include <aio.h>
5229 int main() { struct aiocb a; return aio_error64(&a); }],
5230 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5231 [AC_MSG_RESULT(no)])
5232
5233                         AC_MSG_CHECKING(for aio_cancel64)
5234                         AC_LINK_IFELSE([#include <aio.h>
5235 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5236 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5237 [AC_MSG_RESULT(no)])
5238
5239                         AC_MSG_CHECKING(for aio_suspend64)
5240                         AC_LINK_IFELSE([#include <aio.h>
5241 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5242 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5243 [AC_MSG_RESULT(no)])
5244                 fi
5245             ;;
5246         esac
5247         ;;
5248   *)
5249     AC_MSG_RESULT(no)
5250     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5251     ;;
5252   esac ],
5253   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5254   AC_MSG_RESULT(no)
5255 )
5256
5257 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5258         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5259                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5260                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5261         fi
5262 fi
5263
5264 #################################################
5265 # check for sendfile support
5266
5267 with_sendfile_support=yes
5268 AC_MSG_CHECKING(whether to check to support sendfile)
5269 AC_ARG_WITH(sendfile-support,
5270 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5271 [ case "$withval" in
5272   yes)
5273
5274         AC_MSG_RESULT(yes);
5275
5276         case "$host_os" in
5277         *linux*)
5278                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5279                 AC_TRY_LINK([#include <sys/sendfile.h>],
5280 [\
5281 int tofd, fromfd;
5282 off64_t offset;
5283 size_t total;
5284 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5285 ],
5286 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5287
5288                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5289                 AC_TRY_LINK([#include <sys/sendfile.h>],
5290 [\
5291 int tofd, fromfd;
5292 off_t offset;
5293 size_t total;
5294 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5295 ],
5296 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5297
5298 # Try and cope with broken Linux sendfile....
5299                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5300                 AC_TRY_LINK([\
5301 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5302 #undef _FILE_OFFSET_BITS
5303 #endif
5304 #include <sys/sendfile.h>],
5305 [\
5306 int tofd, fromfd;
5307 off_t offset;
5308 size_t total;
5309 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5310 ],
5311 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5312
5313         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5314                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5315                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5316                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5317         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5318                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5319                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5320                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5321         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5322                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5323                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5324         else
5325                 AC_MSG_RESULT(no);
5326         fi
5327
5328         ;;
5329         *freebsd* | *dragonfly* )
5330                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5331                 AC_TRY_LINK([\
5332 #include <sys/types.h>
5333 #include <unistd.h>
5334 #include <sys/socket.h>
5335 #include <sys/uio.h>],
5336 [\
5337         int fromfd, tofd, ret, total=0;
5338         off_t offset, nwritten;
5339         struct sf_hdtr hdr;
5340         struct iovec hdtrl;
5341         hdr.headers = &hdtrl;
5342         hdr.hdr_cnt = 1;
5343         hdr.trailers = NULL;
5344         hdr.trl_cnt = 0;
5345         hdtrl.iov_base = NULL;
5346         hdtrl.iov_len = 0;
5347         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5348 ],
5349 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5350
5351         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5352                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5353                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5354                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5355         else
5356                 AC_MSG_RESULT(no);
5357         fi
5358         ;;
5359
5360         *hpux*)
5361                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5362                 AC_TRY_LINK([\
5363 #include <sys/socket.h>
5364 #include <sys/uio.h>],
5365 [\
5366         int fromfd, tofd;
5367         size_t total=0;
5368         struct iovec hdtrl[2];
5369         ssize_t nwritten;
5370         off64_t offset;
5371
5372         hdtrl[0].iov_base = 0;
5373         hdtrl[0].iov_len = 0;
5374
5375         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5376 ],
5377 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5378         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5379                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5380                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5381                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5382         else
5383                 AC_MSG_RESULT(no);
5384         fi
5385
5386                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5387                 AC_TRY_LINK([\
5388 #include <sys/socket.h>
5389 #include <sys/uio.h>],
5390 [\
5391         int fromfd, tofd;
5392         size_t total=0;
5393         struct iovec hdtrl[2];
5394         ssize_t nwritten;
5395         off_t offset;
5396
5397         hdtrl[0].iov_base = 0;
5398         hdtrl[0].iov_len = 0;
5399
5400         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5401 ],
5402 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5403         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5404                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5405                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5406                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5407         else
5408                 AC_MSG_RESULT(no);
5409         fi
5410         ;;
5411
5412         *solaris*)
5413                 AC_CHECK_LIB(sendfile,sendfilev)
5414                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5415                 AC_TRY_LINK([\
5416 #include <sys/sendfile.h>],
5417 [\
5418         int sfvcnt;
5419         size_t xferred;
5420         struct sendfilevec vec[2];
5421         ssize_t nwritten;
5422         int tofd;
5423
5424         sfvcnt = 2;
5425
5426         vec[0].sfv_fd = SFV_FD_SELF;
5427         vec[0].sfv_flag = 0;
5428         vec[0].sfv_off = 0;
5429         vec[0].sfv_len = 0;
5430
5431         vec[1].sfv_fd = 0;
5432         vec[1].sfv_flag = 0;
5433         vec[1].sfv_off = 0;
5434         vec[1].sfv_len = 0;
5435         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5436 ],
5437 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5438
5439         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5440                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5441                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5442                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5443         else
5444                 AC_MSG_RESULT(no);
5445         fi
5446
5447                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5448                 AC_TRY_LINK([\
5449 #include <sys/sendfile.h>],
5450 [\
5451         int sfvcnt;
5452         size_t xferred;
5453         struct sendfilevec vec[2];
5454         ssize_t nwritten;
5455         int tofd;
5456
5457         sfvcnt = 2;
5458
5459         vec[0].sfv_fd = SFV_FD_SELF;
5460         vec[0].sfv_flag = 0;
5461         vec[0].sfv_off = 0;
5462         vec[0].sfv_len = 0;
5463
5464         vec[1].sfv_fd = 0;
5465         vec[1].sfv_flag = 0;
5466         vec[1].sfv_off = 0;
5467         vec[1].sfv_len = 0;
5468         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5469 ],
5470 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5471
5472         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5473                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5474                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5475                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5476         else
5477                 AC_MSG_RESULT(no);
5478         fi
5479         ;;
5480         *aix*)
5481                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5482                 AC_TRY_LINK([\
5483 #include <sys/socket.h>],
5484 [\
5485         int fromfd, tofd;
5486         size_t total=0;
5487         struct sf_parms hdtrl;
5488         ssize_t nwritten;
5489         off64_t offset;
5490
5491         hdtrl.header_data = 0;
5492         hdtrl.header_length = 0;
5493         hdtrl.file_descriptor = fromfd;
5494         hdtrl.file_offset = 0;
5495         hdtrl.file_bytes = 0;
5496         hdtrl.trailer_data = 0;
5497         hdtrl.trailer_length = 0;
5498
5499         nwritten = send_file(&tofd, &hdtrl, 0);
5500 ],
5501 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5502         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5503                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5504                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5505                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5506         else
5507                 AC_MSG_RESULT(no);
5508         fi
5509         ;;
5510         *)
5511         ;;
5512         esac
5513         ;;
5514   *)
5515     AC_MSG_RESULT(no)
5516     ;;
5517   esac ],
5518   AC_MSG_RESULT(yes)
5519 )
5520
5521 ############################################
5522 # See if we have the Linux readahead syscall.
5523
5524 AC_CACHE_CHECK([for Linux readahead],
5525                 samba_cv_HAVE_LINUX_READAHEAD,[
5526     AC_TRY_LINK([
5527 #if defined(HAVE_UNISTD_H)
5528 #include <unistd.h>
5529 #endif
5530 #include <fcntl.h>],
5531     [ssize_t err = readahead(0,0,0x80000);],
5532     samba_cv_HAVE_LINUX_READAHEAD=yes,
5533     samba_cv_HAVE_LINUX_READAHEAD=no)])
5534
5535 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5536   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5537              [Whether Linux readahead is available])
5538 fi
5539
5540 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5541
5542 ############################################
5543 # See if we have the posix_fadvise syscall.
5544
5545 AC_CACHE_CHECK([for posix_fadvise],
5546                 samba_cv_HAVE_POSIX_FADVISE,[
5547     AC_TRY_LINK([
5548 #if defined(HAVE_UNISTD_H)
5549 #include <unistd.h>
5550 #endif
5551 #include <fcntl.h>],
5552     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5553     samba_cv_HAVE_POSIX_FADVISE=yes,
5554     samba_cv_HAVE_POSIX_FADVISE=no)])
5555
5556 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5557   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5558              [Whether posix_fadvise is available])
5559 fi
5560
5561 ############################################
5562 # See if we have the Linux splice syscall.
5563
5564 AC_CACHE_CHECK([for Linux splice],
5565                 samba_cv_HAVE_LINUX_SPLICE,[
5566     AC_TRY_LINK([
5567 #if defined(HAVE_UNISTD_H)
5568 #include <unistd.h>
5569 #endif
5570 #include <fcntl.h>],
5571     [long ret = splice(0,0,1,0,400,0);],
5572     samba_cv_HAVE_LINUX_SPLICE=yes,
5573     samba_cv_HAVE_LINUX_SPLICE=no)])
5574
5575 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5576   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5577              [Whether Linux splice is available])
5578 fi
5579
5580 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5581
5582
5583 #################################################
5584 # Check whether winbind is supported on this platform.  If so we need to
5585 # build and install client programs, sbin programs and shared libraries
5586
5587 AC_MSG_CHECKING(whether to build winbind)
5588
5589 # Initially, the value of $host_os decides whether winbind is supported
5590
5591 HAVE_WINBIND=yes
5592
5593 # Define the winbind shared library name and any specific linker flags
5594 # it needs to be built with.
5595
5596 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5597 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5598 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5599 NSSSONAMEVERSIONSUFFIX=""
5600 WINBIND_NSS_PTHREAD=""
5601
5602 case "$host_os" in
5603         *linux*)
5604                 NSSSONAMEVERSIONSUFFIX=".2"
5605                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5606                 ;;
5607         *freebsd[[5-9]]*)
5608                 # FreeBSD winbind client is implemented as a wrapper around
5609                 # the Linux version.
5610                 NSSSONAMEVERSIONSUFFIX=".1"
5611                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5612                     nsswitch/winbind_nss_linux.o"
5613                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5614                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5615                 ;;
5616
5617         *netbsd*[[3-9]]*)
5618                 # NetBSD winbind client is implemented as a wrapper
5619                 # around the Linux version. It needs getpwent_r() to
5620                 # indicate libc's use of the correct nsdispatch API.
5621                 #
5622                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5623                         WINBIND_NSS_EXTRA_OBJS="\
5624                             nsswitch/winbind_nss_netbsd.o \
5625                             nsswitch/winbind_nss_linux.o"
5626                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5627                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5628                 else
5629                         HAVE_WINBIND=no
5630                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5631                 fi
5632                 ;;
5633         *irix*)
5634                 # IRIX has differently named shared libraries
5635                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5636                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5637                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5638                 ;;
5639         *solaris*)
5640                 # Solaris winbind client is implemented as a wrapper around
5641                 # the Linux version.
5642                 NSSSONAMEVERSIONSUFFIX=".1"
5643                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5644                     nsswitch/winbind_nss_linux.o"
5645                 WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5646                 PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5647                 ;;
5648         *hpux11*)
5649                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5650                 ;;
5651         *aix*)
5652                 # AIX has even differently named shared libraries.  No
5653                 # WINS support has been implemented yet.
5654                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5655                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5656                 WINBIND_NSS="nsswitch/WINBIND"
5657                 WINBIND_WINS_NSS=""
5658                 ;;
5659         *)
5660                 HAVE_WINBIND=no
5661                 winbind_no_reason=", unsupported on $host_os"
5662                 ;;
5663 esac
5664
5665 # Check the setting of --with-winbind
5666
5667 AC_ARG_WITH(winbind,
5668 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5669 [
5670   case "$withval" in
5671         yes)
5672                 HAVE_WINBIND=yes
5673                 ;;
5674         no)
5675                 HAVE_WINBIND=no
5676                 winbind_reason=""
5677                 ;;
5678   esac ],
5679 )
5680
5681 # We need unix domain sockets for winbind
5682
5683 if test x"$HAVE_WINBIND" = x"yes"; then
5684         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5685                 winbind_no_reason=", no unix domain socket support on $host_os"
5686                 HAVE_WINBIND=no
5687         fi
5688 fi
5689
5690 # Display test results
5691
5692 if test x"$HAVE_WINBIND" = x"no"; then
5693         WINBIND_NSS=""
5694         WINBIND_WINS_NSS=""
5695 fi
5696
5697 if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
5698         BUILD_LIBWBCLIENT_SHARED=no
5699 else
5700         BUILD_LIBWBCLIENT_SHARED=yes
5701 fi
5702
5703 LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
5704 LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
5705 LIBWBCLIENT_SOVER=0
5706 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
5707         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5708         ## Only worry about libwbclient if we have shared library support
5709         ## and winbindd
5710         LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
5711         LIBWBCLIENT=libwbclient
5712         INSTALL_LIBWBCLIENT=installlibwbclient
5713         UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
5714         WINBIND_LIBS="-lwbclient"
5715 else
5716         LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
5717 fi
5718
5719 if test x"$HAVE_WINBIND" = x"yes"; then
5720         AC_MSG_RESULT(yes)
5721         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5722
5723         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5724         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5725         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5726                 PAM_MODULES="$PAM_MODULES pam_winbind"
5727                 INSTALL_PAM_MODULES="installpammodules"
5728                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5729         fi
5730 else
5731         AC_MSG_RESULT(no$winbind_no_reason)
5732 fi
5733
5734 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
5735                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
5736
5737 AC_SUBST(WINBIND_NSS_PTHREAD)
5738 AC_SUBST(WINBIND_NSS)
5739 AC_SUBST(WINBIND_WINS_NSS)
5740 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5741 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5742 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5743 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5744 AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
5745
5746 AC_SUBST(WINBIND_KRB5_LOCATOR)
5747
5748 # Solaris 10 does have new member in nss_XbyY_key
5749 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5750                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5751                 [#include <nss_dbdefs.h>])
5752
5753 # Solaris has some extra fields in struct passwd that need to be
5754 # initialised otherwise nscd crashes.
5755
5756 AC_CHECK_MEMBER(struct passwd.pw_comment,
5757                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5758                 [#include <pwd.h>])
5759
5760 AC_CHECK_MEMBER(struct passwd.pw_age,
5761                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5762                 [#include <pwd.h>])
5763
5764 # AIX 4.3.x and 5.1 do not have as many members in
5765 # struct secmethod_table as AIX 5.2
5766 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5767        [#include <usersec.h>])
5768 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5769        [#include <usersec.h>])
5770
5771 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
5772 AC_TRY_COMPILE([#include <sys/types.h>
5773 #include <sys/socket.h>],
5774 [struct ucred cred;
5775  socklen_t cred_len;
5776  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
5777 ],
5778 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
5779 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
5780     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
5781 fi
5782
5783
5784 #################################################
5785 # Check to see if we should use the included popt
5786
5787 AC_ARG_WITH(included-popt,
5788 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
5789 [
5790   case "$withval" in
5791         yes)
5792                 INCLUDED_POPT=yes
5793                 ;;
5794         no)
5795                 INCLUDED_POPT=no
5796                 ;;
5797   esac ],
5798 )
5799 if test x"$INCLUDED_POPT" != x"yes"; then
5800     AC_CHECK_LIB(popt, poptGetContext,
5801                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5802 fi
5803
5804 AC_MSG_CHECKING(whether to use included popt)
5805 if test x"$INCLUDED_POPT" = x"yes"; then
5806     AC_MSG_RESULT(yes)
5807     BUILD_POPT='$(POPT_OBJ)'
5808     POPTLIBS='$(POPT_OBJ)'
5809     FLAGS1="-I\$(srcdir)/popt"
5810 else
5811     AC_MSG_RESULT(no)
5812         BUILD_POPT=""
5813     POPTLIBS="-lpopt"
5814 fi
5815 AC_SUBST(BUILD_POPT)
5816 AC_SUBST(POPTLIBS)
5817 AC_SUBST(FLAGS1)
5818
5819 #################################################
5820 # Check if user wants DNS service discovery support
5821
5822 AC_ARG_ENABLE(dnssd,
5823 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=auto)])])
5824
5825 AC_SUBST(DNSSD_LIBS)
5826 if test x"$enable_dnssd" != x"no"; then
5827     have_dnssd_support=yes
5828
5829     AC_CHECK_HEADERS(dns_sd.h)
5830     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
5831         have_dnssd_support=no
5832     fi
5833
5834     # On Darwin the DNSSD API is in libc, but on other platforms it's
5835     # probably in -ldns_sd
5836     AC_CHECK_FUNCS(DNSServiceRegister)
5837     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
5838     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
5839             x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
5840         have_dnssd_support=no
5841     fi
5842
5843     if test x"$have_dnssd_support" = x"yes"; then
5844         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
5845                 [Whether to enable DNS service discovery support])
5846     else
5847         if test x"$enable_dnssd" = x"yes"; then
5848             AC_MSG_ERROR(DNS service discovery support not available)
5849         fi
5850     fi
5851
5852 fi
5853
5854 #################################################
5855 # Check to see if we should use the included iniparser
5856
5857 AC_ARG_WITH(included-iniparser,
5858 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
5859 [
5860   case "$withval" in
5861         yes)
5862                 INCLUDED_INIPARSER=yes
5863                 ;;
5864         no)
5865                 INCLUDED_INIPARSER=no
5866                 ;;
5867   esac ],
5868 )
5869 if test x"$INCLUDED_INIPARSER" != x"yes"; then
5870     AC_CHECK_LIB(iniparser, iniparser_load,
5871                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
5872 fi
5873
5874 AC_MSG_CHECKING(whether to use included iniparser)
5875 if test x"$INCLUDED_INIPARSER" = x"yes"; then
5876     AC_MSG_RESULT(yes)
5877     BUILD_INIPARSER='$(INIPARSER_OBJ)'
5878         INIPARSERLIBS=""
5879     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
5880 else
5881     AC_MSG_RESULT(no)
5882         BUILD_INIPARSER=""
5883     INIPARSERLIBS="-liniparser"
5884 fi
5885 AC_SUBST(BUILD_INIPARSER)
5886 AC_SUBST(INIPARSERLIBS)
5887 AC_SUBST(FLAGS1)
5888
5889
5890
5891 # Checks for the vfs_fileid module
5892 # Start
5893 AC_CHECK_FUNC(getmntent)
5894
5895 AC_CHECK_HEADERS(sys/statfs.h)
5896
5897 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
5898 AC_CACHE_VAL(vfsfileid_cv_statfs,[
5899              AC_TRY_RUN([
5900                 #include <sys/types.h>
5901                 #include <sys/statfs.h>
5902                 int main(void)
5903                 {
5904                         struct statfs fsd;
5905                         fsid_t fsid = fsd.f_fsid;
5906                         return statfs (".", &fsd);
5907                 }],
5908                 vfsfileid_cv_statfs=yes,
5909                 vfsfileid_cv_statfs=no,
5910                 vfsfileid_cv_statfs=cross)
5911 ])
5912 AC_MSG_RESULT($vfsfileid_cv_statfs)
5913
5914 if test x"$ac_cv_func_getmntent" = x"yes" -a \
5915         x"$vfsfileid_cv_statfs" = x"yes"; then
5916         default_shared_modules="$default_shared_modules vfs_fileid"
5917 fi
5918 # End
5919 # Checks for the vfs_fileid module
5920
5921
5922 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
5923 do
5924         eval MODULE_DEFAULT_$i=STATIC
5925 done
5926
5927 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
5928 do
5929         dnl Fall back to static if we cannot build shared libraries
5930         eval MODULE_DEFAULT_$i=STATIC
5931
5932         if test $BLDSHARED = true; then
5933                 eval MODULE_DEFAULT_$i=SHARED
5934         fi
5935 done
5936
5937 dnl Always build these modules static
5938 MODULE_rpc_spoolss=STATIC
5939 MODULE_rpc_srvsvc=STATIC
5940 MODULE_idmap_tdb=STATIC
5941 MODULE_idmap_passdb=STATIC
5942 MODULE_idmap_nss=STATIC
5943
5944 MODULE_nss_info_template=STATIC
5945
5946 AC_ARG_WITH(static-modules,
5947 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
5948 [ if test $withval; then
5949         for i in `echo $withval | sed -e 's/,/ /g'`
5950         do
5951                 eval MODULE_$i=STATIC
5952         done
5953 fi ])
5954
5955 AC_ARG_WITH(shared-modules,
5956 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
5957 [ if test $withval; then
5958         for i in `echo $withval | sed -e 's/,/ /g'`
5959         do
5960                         eval MODULE_$i=SHARED
5961         done
5962 fi ])
5963
5964 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
5965                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
5966 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
5967 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
5968 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
5969
5970
5971 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
5972 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
5973 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
5974 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
5975 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
5976 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
5977 SMB_MODULE(rpc_ntsvcs2, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs2.$SHLIBEXT", RPC)
5978 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
5979 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
5980 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
5981 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
5982 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
5983 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
5984 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
5985 SMB_SUBSYSTEM(RPC,smbd/server.o)
5986
5987 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
5988 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
5989 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
5990 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
5991 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
5992 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
5993 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
5994 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
5995
5996 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
5997 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
5998
5999 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6000 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6001 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6002 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6003 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6004
6005 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6006 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6007 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6008 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6009 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6010 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6011 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6012 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6013
6014 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6015 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6016 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6017 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6018 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6019 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6020 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6021 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6022 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6023 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6024 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6025 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6026 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6027 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6028 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6029 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6030 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6031 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6032 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6033 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6034 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6035 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6036 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6037 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6038 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6039 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6040 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6041 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6042 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6043 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6044 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6045 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6046 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6047 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6048 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6049 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6050
6051
6052 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6053
6054 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6055
6056 #################################################
6057 # do extra things if we are running insure
6058
6059 if test "${ac_cv_prog_CC}" = "insure"; then
6060         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6061 fi
6062
6063 #################################################
6064 # If run from the build farm, enable NASTY hacks
6065 #################################################
6066 AC_MSG_CHECKING(whether to enable build farm hacks)
6067 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6068         AC_MSG_RESULT(yes)
6069         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6070 else
6071         AC_MSG_RESULT(no)
6072 fi
6073
6074 #################################################
6075 # check for bad librt/libpthread interactions
6076
6077 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6078     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6079     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6080     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6081
6082 SMB_IF_RTSIGNAL_BUG(
6083         [
6084             # Have RT_SIGNAL bug, need to check whether the problem will
6085             # affect anything we have configured.
6086
6087             rt_do_error=no
6088             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6089                 if test x"$rt_signal_lease_ok" = x"no" ; then
6090                     rt_do_error=yes
6091                 fi
6092             fi
6093
6094             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6095                 if test x"$rt_signal_notify_ok" = x"no" ; then
6096                     rt_do_error=yes
6097                 fi
6098             fi
6099
6100             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6101                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6102                 if test x"$rt_signal_aio_ok" = x"no" ; then
6103                     rt_do_error=yes
6104                 fi
6105             fi
6106
6107             if test x"$rt_do_error" = x"yes" ; then
6108                 SMB_IS_LIBPTHREAD_LINKED(
6109                     [
6110                         cat<<MSG
6111
6112 *** On this platforms, linking Samba against pthreads causes problems
6113 *** with the oplock and change notification mechanisms. You may be
6114 *** using pthreads as a side-effect of using the --with-aio-support
6115 *** or --with-profiling-data options. Please remove these and try again.
6116
6117 MSG
6118                     ],
6119                     [
6120                         cat<<MSG
6121
6122 *** On this platform, the oplock and change notification mechanisms do not
6123 *** appear to work. Please report this problem to samba-technical@samba.org
6124 *** and attach the config.log file from this directory.
6125
6126 MSG
6127                     ])
6128                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6129             fi
6130         ],
6131         [
6132             # no RT_SIGNAL bug, we are golden
6133             SMB_IS_LIBPTHREAD_LINKED(
6134                 [
6135                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6136                 ])
6137
6138         ],
6139         [
6140             # cross compiling, I hope you know what you are doing
6141             true
6142         ])
6143
6144 fi
6145
6146 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6147 LIB_REMOVE_USR_LIB(LDFLAGS)
6148 LIB_REMOVE_USR_LIB(LIBS)
6149 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6150
6151 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6152 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6153 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6154
6155 #################################################
6156 # Display summary of libraries detected
6157
6158 AC_MSG_RESULT([Using libraries:])
6159 AC_MSG_RESULT([    LIBS = $LIBS])
6160 if test x"$with_ads_support" != x"no"; then
6161     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6162 fi
6163 if test x"$with_ldap_support" != x"no"; then
6164     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6165 fi
6166 if test x"$with_dnsupdate_support" != x"no"; then
6167     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6168 fi
6169 if test x"$have_dnssd_support" != x"no"; then
6170     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6171 fi
6172 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6173
6174 #################################################
6175 # final configure stuff
6176
6177 AC_MSG_CHECKING([configure summary])
6178 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6179            AC_MSG_RESULT(yes),
6180            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6181            AC_MSG_WARN([cannot run when cross-compiling]))
6182
6183 dnl Merge in developer cflags from now on
6184 AC_SUBST(DEVELOPER_CFLAGS)
6185 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes"; then
6186     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6187 fi
6188
6189 # Stuff the smbd-only libraries at the end of the smbd link
6190 # path (if we have them).
6191 SMBD_LIBS="$samba_dmapi_libs"
6192 AC_SUBST(SMBD_LIBS)
6193
6194 AC_OUTPUT(Makefile
6195           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6196           lib/netapi/examples/Makefile
6197           pkgconfig/smbclient.pc
6198           pkgconfig/wbclient.pc
6199           pkgconfig/netapi.pc
6200           pkgconfig/smbsharemodes.pc
6201           )
6202
6203 #################################################
6204 # Print very concise instructions on building/use
6205 if test "x$enable_dmalloc" = xyes
6206 then
6207         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6208         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6209 fi