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