r21365: Lets see which build farm machines have makecontext & friends
[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_HEADERS(sys/mman.h)
1244 # setbuffer, shmget, shm_open are needed for smbtorture
1245 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1246 AC_CHECK_FUNCS(makecontext getcontext setcontext swapcontext)
1247
1248 # Find a method of generating a stack trace
1249 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1250 AC_CHECK_FUNCS(backtrace_symbols)
1251 AC_CHECK_LIB(exc, trace_back_stack)
1252
1253 echo -n "checking for GPFS GPL libs... "
1254 save_LIBS="$LIBS"
1255 LIBS="$LIBS -lgpfs_gpl"
1256 AC_TRY_LINK([#include <gpfs_gpl.h>],
1257           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1258           samba_cv_HAVE_GPFS=yes,
1259           samba_cv_HAVE_GPFS=no)
1260 echo $samba_cv_HAVE_GPFS
1261 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1262     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1263     default_shared_modules="$default_shared_modules vfs_gpfs"
1264 fi
1265 LIBS="$save_LIBS"
1266
1267 # Note that all the libunwind symbols in the API are defined to internal
1268 # platform-specific version, so we must include libunwind.h before checking
1269 # any of them.
1270 AC_MSG_CHECKING([for libunwind])
1271 save_LIBS=$LIBS
1272 if test x"$UNAME_P" = xunknown ; then
1273     # This probably won't link without the platform-specific libunwind.
1274     LIBS="$LIBS -lunwind"
1275 else
1276     # Add the platform-specific libunwind module. uname -p seems the most
1277     # plausible option and works for ia64, where libunwind is most useful.
1278     LIBS="$LIBS -lunwind -lunwind-$UNAME_P"
1279 fi
1280
1281 AC_TRY_LINK(
1282     [
1283 #ifdef HAVE_LIBUNWIND_H
1284 #include <libunwind.h>
1285 #endif
1286     ],
1287     [
1288         unw_context_t ctx; unw_cursor_t cur;
1289         char buf[256]; unw_word_t off; 
1290         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1291         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1292     ],
1293     [
1294         AC_MSG_RESULT(yes)
1295         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1296
1297         # If we have libunwind, test whether we also have libunwind-ptrace
1298         # which would let us unwind arbitrary processes.
1299         save_LIBS=$LIBS
1300         AC_CHECK_HEADERS(libunwind-ptrace.h)
1301         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1302             [
1303                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1304                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1305                     [Whether libunwind-ptrace.a is available.])
1306             ],
1307             [ LIBUNWIND_PTRACE="" ])
1308
1309         LIBS=$save_LIBS
1310     ],
1311     [
1312         AC_MSG_RESULT(no)
1313         LIBS=$save_LIBS
1314     ])
1315
1316 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1317 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1318     AC_CHECK_HEADERS(sys/ptrace.h)
1319     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1320     AC_TRY_LINK(
1321             [
1322 #if HAVE_SYS_TYPES_H
1323 #include <sys/types.h>
1324 #endif
1325 #if HAVE_SYS_PTRACE_H
1326 #include <sys/ptrace.h>
1327 #endif
1328             ],
1329             [
1330                 int main(int argc, const char ** argv)
1331                 {
1332                         pid_t me = (pid_t)-1;
1333                         ptrace(PTRACE_ATTACH, me, 0, 0);
1334                         ptrace(PTRACE_DETACH, me, 0, 0);
1335                         return 0;
1336                 }
1337             ],
1338             [
1339                 AC_MSG_RESULT(yes)
1340                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1341                     [Whether the Linux ptrace(2) interface is available.])
1342             ],
1343             [
1344                 AC_MSG_RESULT(no)
1345                 LIBUNWIND_PTRACE=""
1346             ])
1347 fi
1348
1349 AC_SUBST(LIBUNWIND_PTRACE)
1350
1351 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1352 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1353 AC_CHECK_FUNCS(__getcwd _getcwd)
1354 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1355 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1356 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1357 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1358 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1359 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1360 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1361 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1362 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1363 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1364 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1365 AC_CHECK_FUNCS(prctl)
1366
1367 AC_TRY_COMPILE([
1368 #ifdef HAVE_SYS_PRCTL_H
1369 #include <sys/prctl.h>
1370 #endif
1371 ],
1372 [int i; i = prtcl(0); ],
1373 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1374
1375 #
1376
1377 #
1378 case "$host_os" in
1379     *linux*)
1380        # glibc <= 2.3.2 has a broken getgrouplist
1381        AC_TRY_RUN([
1382 #include <unistd.h>
1383 #include <sys/utsname.h>
1384 main() {
1385        /* glibc up to 2.3 has a broken getgrouplist */
1386 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1387        int libc_major = __GLIBC__;
1388        int libc_minor = __GLIBC_MINOR__;
1389
1390        if (libc_major < 2)
1391               exit(1);
1392        if ((libc_major == 2) && (libc_minor <= 3))
1393               exit(1);
1394 #endif
1395        exit(0);
1396 }
1397 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1398        if test x"$linux_getgrouplist_ok" = x"yes"; then
1399           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1400        fi
1401        ;;
1402     *)
1403        AC_CHECK_FUNCS(getgrouplist)
1404        ;;
1405 esac
1406
1407 #
1408 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1409 #
1410
1411 if test x$ac_cv_func_stat64 = xno ; then
1412   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1413   AC_TRY_LINK([
1414 #if defined(HAVE_UNISTD_H)
1415 #include <unistd.h>
1416 #endif
1417 #include <sys/stat.h>
1418 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1419   AC_MSG_RESULT([$ac_cv_func_stat64])
1420   if test x$ac_cv_func_stat64 = xyes ; then
1421     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1422   fi
1423 fi
1424
1425 if test x$ac_cv_func_lstat64 = xno ; then
1426   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1427   AC_TRY_LINK([
1428 #if defined(HAVE_UNISTD_H)
1429 #include <unistd.h>
1430 #endif
1431 #include <sys/stat.h>
1432 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1433   AC_MSG_RESULT([$ac_cv_func_lstat64])
1434   if test x$ac_cv_func_lstat64 = xyes ; then
1435     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1436   fi
1437 fi
1438
1439 if test x$ac_cv_func_fstat64 = xno ; then
1440   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1441   AC_TRY_LINK([
1442 #if defined(HAVE_UNISTD_H)
1443 #include <unistd.h>
1444 #endif
1445 #include <sys/stat.h>
1446 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1447   AC_MSG_RESULT([$ac_cv_func_fstat64])
1448   if test x$ac_cv_func_fstat64 = xyes ; then
1449     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1450   fi
1451 fi
1452
1453 #################################################
1454 # Check whether struct stat has timestamps with sub-second resolution.
1455 # At least IRIX and Solaris have these.
1456 #
1457 # We check that 
1458 #       all of st_mtim, st_atim and st_ctim exist
1459 #       all of the members are in fact of type struct timespec
1460 #
1461 # There is some conflicting standards weirdness about whether we should use
1462 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1463 # prefer struct timespec.
1464
1465 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1466     [
1467         AC_TRY_COMPILE(
1468             [
1469 #if TIME_WITH_SYS_TIME
1470 # include <sys/time.h>
1471 # include <time.h>
1472 #else
1473 # if HAVE_SYS_TIME_H
1474 #  include <sys/time.h>
1475 # else
1476 #  include <time.h>
1477 # endif
1478 #endif
1479 #ifdef HAVE_SYS_STAT_H
1480 #include <sys/stat.h>
1481 #endif
1482             ],
1483             [
1484                 struct timespec t;
1485                 struct stat s = {0};
1486                 t.tv_sec = s.st_mtim.tv_sec;
1487                 t.tv_nsec = s.st_mtim.tv_nsec;
1488                 t.tv_sec = s.st_ctim.tv_sec;
1489                 t.tv_nsec = s.st_ctim.tv_nsec;
1490                 t.tv_sec = s.st_atim.tv_sec;
1491                 t.tv_nsec = s.st_atim.tv_nsec;
1492             ],
1493             samba_stat_hires=yes, samba_stat_hires=no)
1494     ])
1495
1496 if test x"$samba_stat_hires" = x"yes" ; then
1497     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1498     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1499     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1500     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1501             [whether struct stat has sub-second timestamps])
1502 fi
1503
1504 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_stat_hires_notimespec,
1505     [
1506         AC_TRY_COMPILE(
1507             [
1508 #if TIME_WITH_SYS_TIME
1509 # include <sys/time.h>
1510 # include <time.h>
1511 #else
1512 # if HAVE_SYS_TIME_H
1513 #  include <sys/time.h>
1514 # else
1515 #  include <time.h>
1516 # endif
1517 #endif
1518 #ifdef HAVE_SYS_STAT_H
1519 #include <sys/stat.h>
1520 #endif
1521             ],
1522             [
1523                 struct timespec t;
1524                 struct stat s = {0};
1525                 t.tv_sec = s.st_mtime;
1526                 t.tv_nsec = s.st_mtimensec;
1527                 t.tv_sec = s.st_ctime;
1528                 t.tv_nsec = s.st_ctimensec;
1529                 t.tv_sec = s.st_atime;
1530                 t.tv_nsec = s.st_atimensec;
1531             ],
1532             samba_stat_hires=yes, samba_stat_hires=no)
1533     ])
1534
1535 if test x"$samba_stat_hires_notimespec" = x"yes" ; then
1536     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1537     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1538     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1539     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1540             [whether struct stat has sub-second timestamps without struct timespec])
1541 fi
1542
1543 #####################################
1544 # needed for SRV lookups
1545 AC_CHECK_LIB(resolv, dn_expand)
1546 AC_CHECK_LIB(resolv, _dn_expand)
1547 AC_CHECK_LIB(resolv, __dn_expand)
1548
1549 #
1550 # Check for the functions putprpwnam, set_auth_parameters,
1551 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1552 # Needed for OSF1 and HPUX.
1553 #
1554
1555 AC_LIBTESTFUNC(security, putprpwnam)
1556 AC_LIBTESTFUNC(sec, putprpwnam)
1557
1558 AC_LIBTESTFUNC(security, set_auth_parameters)
1559 AC_LIBTESTFUNC(sec, set_auth_parameters)
1560
1561 # UnixWare 7.x has its getspnam in -lgen
1562 AC_LIBTESTFUNC(gen, getspnam)
1563
1564 AC_LIBTESTFUNC(security, getspnam)
1565 AC_LIBTESTFUNC(sec, getspnam)
1566
1567 AC_LIBTESTFUNC(security, bigcrypt)
1568 AC_LIBTESTFUNC(sec, bigcrypt)
1569
1570 AC_LIBTESTFUNC(security, getprpwnam)
1571 AC_LIBTESTFUNC(sec, getprpwnam)
1572
1573 AC_CHECK_FUNCS(strsignal)
1574
1575 ############################################
1576 # Check if we have libattr
1577 case "$host_os" in
1578   *osf*)
1579         AC_SEARCH_LIBS(getproplist, [proplist])
1580         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1581         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1582         AC_CHECK_FUNCS(sizeof_proplist_entry)
1583   ;;
1584   *)
1585         AC_SEARCH_LIBS(getxattr, [attr])
1586         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1587         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1588         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1589         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1590         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1591         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1592         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1593   ;;
1594 esac
1595
1596 ########################################################
1597 # Do xattr functions take additional options like on Darwin?
1598 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1599         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1600                 old_LIBS=$LIBS
1601                 LIBS="$LIBS $ACL_LIBS"
1602                 AC_TRY_COMPILE([
1603                         #include <sys/types.h>
1604                         #if HAVE_ATTR_XATTR_H
1605                         #include <attr/xattr.h>
1606                         #elif HAVE_SYS_XATTR_H
1607                         #include <sys/xattr.h>
1608                         #endif
1609                 ],[
1610                         getxattr(0, 0, 0, 0, 0, 0);
1611                 ],
1612                 [smb_attr_cv_xattr_add_opt=yes],
1613                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1614         ])
1615         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1616                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1617         fi
1618 fi
1619
1620 # Check if we have extattr
1621 case "$host_os" in
1622   *freebsd4* | *dragonfly* )
1623     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1624     ;;
1625   *)
1626     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1627     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1628     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1629     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1630     ;;
1631 esac
1632
1633 # Set defaults
1634 PIE_CFLAGS=""
1635 PIE_LDFLAGS=""
1636 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
1637
1638 if test "x$enable_pie" != xno
1639 then
1640         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1641         [
1642                 cat > conftest.c <<EOF
1643 int foo;
1644 main () { return 0;}
1645 EOF
1646                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1647                 then
1648                         samba_cv_fpie=yes
1649                 else
1650                         samba_cv_fpie=no
1651                 fi
1652                 rm -f conftest*
1653         ])
1654         if test x"${samba_cv_fpie}" = x"yes"
1655         then
1656                 PIE_CFLAGS="-fPIE"
1657                 PIE_LDFLAGS="-pie"
1658         fi
1659 fi
1660
1661 # Assume non-shared by default and override below
1662 BLDSHARED="false"
1663
1664 # these are the defaults, good for lots of systems
1665 HOST_OS="$host_os"
1666 LDSHFLAGS="-shared"
1667 SONAMEFLAG="#"
1668 SHLD="\${CC} \${CFLAGS}"
1669 PICFLAG="${PIE_CFLAGS}"
1670 SHLIBEXT="so"
1671
1672 # this bit needs to be modified for each OS that supports share libs
1673 # You need to specify how to create a shared library and
1674 # how to compile C code to produce PIC object files
1675
1676 AC_MSG_CHECKING([ability to build shared libraries])
1677
1678 # and these are for particular systems
1679 case "$host_os" in
1680                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1681                         BLDSHARED="true"
1682                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1683                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined" 
1684                         else
1685                                 LDSHFLAGS="-shared -Wl,-Bsymbolic" 
1686                         fi
1687                         DYNEXP="-Wl,--export-dynamic"
1688                         PICFLAG="-fPIC"
1689                         SONAMEFLAG="-Wl,-soname="
1690                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1691                         ;;
1692                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1693                         BLDSHARED="true"
1694                         LDSHFLAGS="-G"
1695                         SONAMEFLAG="-h "
1696                         if test "${GCC}" = "yes"; then
1697                                 PICFLAG="-fPIC"
1698                                 SONAMEFLAG="-Wl,-soname="
1699                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1700                                         DYNEXP="-Wl,-E"
1701                                 fi
1702                         else
1703                                 PICFLAG="-KPIC"
1704                                 ## ${CFLAGS} added for building 64-bit shared 
1705                                 ## libs using Sun's Compiler
1706                                 LDSHFLAGS="-G \${CFLAGS}"
1707                         fi
1708                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1709                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1710                         ;;
1711                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1712                         BLDSHARED="true"
1713                         LDSHFLAGS="-G"
1714                         SONAMEFLAG="-Wl,-h,"
1715                         PICFLAG="-KPIC"   # Is this correct for SunOS
1716                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1717                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1718                         ;;
1719                 *netbsd* | *freebsd* | *dragonfly* )  
1720                         BLDSHARED="true"
1721                         LDSHFLAGS="-shared"
1722                         DYNEXP="-Wl,--export-dynamic"
1723                         SONAMEFLAG="-Wl,-soname,"
1724                         PICFLAG="-fPIC -DPIC"
1725                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1726                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1727                         ;;
1728                 *openbsd*)  BLDSHARED="true"
1729                         LDSHFLAGS="-shared"
1730                         DYNEXP="-Wl,-Bdynamic"
1731                         SONAMEFLAG="-Wl,-soname,"
1732                         PICFLAG="-fPIC"
1733                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1734                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1735                         ;;
1736                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1737                         case "$host_os" in
1738                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1739                         ;;
1740                         esac
1741                         BLDSHARED="true"
1742                         LDSHFLAGS="-set_version sgi1.0 -shared"
1743                         SONAMEFLAG="-soname "
1744                         SHLD="\${LD}"
1745                         if test "${GCC}" = "yes"; then
1746                                 PICFLAG="-fPIC"
1747                         else 
1748                                 PICFLAG="-KPIC"
1749                         fi
1750                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1751                         ;;
1752                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1753                         BLDSHARED="true"
1754                         LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
1755                         DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
1756                         PICFLAG="-O2"
1757                         # as AIX code is always position independent...
1758                         # .po will just create compile warnings, use po.o:
1759                         if test "${GCC}" != "yes"; then
1760                                 ## for funky AIX compiler using strncpy()
1761                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1762                         fi
1763
1764                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1765                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1766                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1767                         ;;
1768                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1769                         # Use special PIC flags for the native HP-UX compiler.
1770                         if test $ac_cv_prog_cc_Ae = yes; then
1771                                 BLDSHARED="true"
1772                                 SHLD="cc"
1773                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1774                                 SONAMEFLAG="-Wl,+h "
1775                                 PICFLAG="+z"
1776                         elif test "${GCC}" = "yes"; then
1777                                 PICFLAG="-fPIC"
1778                         fi
1779                         if test "$host_cpu" = "ia64"; then
1780                                 SHLIBEXT="so"
1781                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1782                         else
1783                                 SHLIBEXT="sl"
1784                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1785                         fi
1786                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1787                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1788                         ;;
1789                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1790                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1791                         ;;
1792                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1793                         BLDSHARED="true"
1794                         LDSHFLAGS="-shared"
1795                         SONAMEFLAG="-Wl,-soname,"
1796                         PICFLAG="-fPIC"
1797                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1798                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1799                         ;;
1800                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1801                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1802                         ;;
1803                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1804                         BLDSHARED="true"
1805                         LDSHFLAGS="-shared"
1806                         SONAMEFLAG="-Wl,-soname,"
1807                         PICFLAG="-KPIC"
1808                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1809                         ;;
1810                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1811                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1812                         ;;
1813                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1814                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1815                         ;;
1816                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1817                         case "$host" in
1818                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1819                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1820                                         fi
1821                                         LDSHFLAGS="-G"
1822                                         DYNEXP="-Bexport"
1823                                 ;;
1824                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1825                         esac
1826                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1827                         ;;
1828
1829                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1830                         if [ test "$GCC" != yes ]; then
1831                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1832                         fi
1833                         LDSHFLAGS="-G"
1834                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1835                         ;;
1836                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1837                         BLDSHARED="false"
1838                         LDSHFLAGS=""
1839                         ;;
1840
1841                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1842                         BLDSHARED="true"
1843                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1844                         SHLIBEXT="dylib"
1845                         # Since gcc doesn't fail on unrecognised options, the
1846                         # PIE test incorrectly succeeds. Darwin gcc does not
1847                         # actually support the PIE stuff.
1848                         PIE_LDFLAGS=
1849                         PIE_CFLAGS=
1850                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1851                         ;;
1852
1853                 *)
1854                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1855                         ;;
1856 esac
1857
1858 if test "$enable_shared" != "yes"; then
1859         BLDSHARED=false
1860 fi
1861
1862 AC_MSG_RESULT($BLDSHARED)
1863
1864 AC_MSG_CHECKING([LDFLAGS])
1865 AC_MSG_RESULT([$LDFLAGS])
1866 AC_MSG_CHECKING([DYNEXP])
1867 AC_MSG_RESULT([$DYNEXP])
1868
1869 #######################################################
1870 # test whether building a shared library actually works
1871 if test $BLDSHARED = true; then
1872
1873 AC_MSG_CHECKING([SHLD])
1874 AC_MSG_RESULT([$SHLD])
1875 AC_MSG_CHECKING([LDSHFLAGS])
1876 AC_MSG_RESULT([$LDSHFLAGS])
1877
1878 AC_MSG_CHECKING([SHLIBEXT])
1879 AC_MSG_RESULT([$SHLIBEXT])
1880 AC_MSG_CHECKING([SONAMEFLAG])
1881 AC_MSG_RESULT([$SONAMEFLAG])
1882
1883 AC_MSG_CHECKING([PICFLAG])
1884 AC_MSG_RESULT([$PICFLAG])
1885
1886 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1887 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1888
1889 AC_CACHE_CHECK([whether building shared libraries actually works], 
1890                [ac_cv_shlib_works],[
1891    # try building a trivial shared library
1892    ac_cv_shlib_works=no
1893    # The $SHLD and $LDSHFLAGS variables may contain references to other
1894    # variables so they need to be eval'ed.
1895    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1896         shlib.o ${srcdir-.}/tests/shlib.c && \
1897    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1898         shlib.o && ac_cv_shlib_works=yes
1899    rm -f "shlib.$SHLIBEXT" shlib.o
1900
1901 ])
1902 if test $ac_cv_shlib_works = no; then
1903    BLDSHARED=false
1904 fi
1905 fi
1906
1907 if test x"$BLDSHARED" != x"true"; then
1908         LDSHFLAGS="shared-libraries-disabled"
1909         SONAMEFLAG="shared-libraries-disabled"
1910         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1911         SHLD="shared-libraries-disabled"
1912         PICFLAG="${PIE_CFLAGS}"
1913         SHLIBEXT="shared_libraries_disabled"
1914 fi
1915
1916 AC_MSG_CHECKING([used PICFLAG])
1917 AC_MSG_RESULT([$PICFLAG])
1918
1919 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1920
1921 ################
1922
1923 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1924 AC_TRY_RUN([#include <stdio.h>
1925 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1926 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1927 if test x"$samba_cv_have_longlong" = x"yes"; then
1928     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1929     AC_CHECK_TYPE(intptr_t, unsigned long long)
1930 else
1931     AC_CHECK_TYPE(intptr_t, unsigned long)
1932 fi
1933
1934 #
1935 # Check if the compiler supports the LL prefix on long long integers.
1936 # AIX needs this.
1937
1938 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1939     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1940         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1941 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1942    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1943 fi
1944
1945   
1946 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1947 AC_TRY_RUN([#include <stdio.h>
1948 #include <sys/stat.h>
1949 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1950 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1951 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1952     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1953 fi
1954
1955 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1956 AC_TRY_RUN([
1957 #if defined(HAVE_UNISTD_H)
1958 #include <unistd.h>
1959 #endif
1960 #include <stdio.h>
1961 #include <sys/stat.h>
1962 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1963 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1964 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1965     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1966 fi
1967
1968 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1969 AC_TRY_RUN([
1970 #if defined(HAVE_UNISTD_H)
1971 #include <unistd.h>
1972 #endif
1973 #include <stdio.h>
1974 #include <sys/stat.h>
1975 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1976 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1977 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1978     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1979 fi
1980
1981 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1982 AC_TRY_RUN([
1983 #if defined(HAVE_UNISTD_H)
1984 #include <unistd.h>
1985 #endif
1986 #include <stdio.h>
1987 #include <sys/stat.h>
1988 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1989 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1990 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1991     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1992 fi
1993
1994 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1995 AC_TRY_RUN([
1996 #if defined(HAVE_UNISTD_H)
1997 #include <unistd.h>
1998 #endif
1999 #include <stdio.h>
2000 #include <sys/stat.h>
2001 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2002 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2003 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2004     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2005 fi
2006
2007 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2008 AC_TRY_RUN([
2009 #if defined(HAVE_UNISTD_H)
2010 #include <unistd.h>
2011 #endif
2012 #include <stdio.h>
2013 #include <sys/stat.h>
2014 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2015 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2016 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2017     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2018 fi
2019
2020 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2021 AC_TRY_COMPILE([
2022 #if defined(HAVE_UNISTD_H)
2023 #include <unistd.h>
2024 #endif
2025 #include <sys/types.h>
2026 #include <dirent.h>],
2027 [DIR64 de;],
2028 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2029 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2030     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2031 fi
2032
2033 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2034 AC_TRY_COMPILE([
2035 #if defined(HAVE_UNISTD_H)
2036 #include <unistd.h>
2037 #endif
2038 #include <sys/types.h>
2039 #include <dirent.h>],
2040 [struct dirent64 de;],
2041 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2042 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2043     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2044 fi
2045
2046 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2047 AC_TRY_RUN([
2048 #if defined(HAVE_UNISTD_H)
2049 #include <unistd.h>
2050 #endif
2051 #include <sys/types.h>
2052 main() { dev_t dev; int i = major(dev); return 0; }],
2053 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2054 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2055     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2056 fi
2057
2058 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2059 AC_TRY_RUN([
2060 #if defined(HAVE_UNISTD_H)
2061 #include <unistd.h>
2062 #endif
2063 #include <sys/types.h>
2064 main() { dev_t dev; int i = minor(dev); return 0; }],
2065 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2066 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2067     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2068 fi
2069
2070 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2071 AC_TRY_RUN([
2072 #if defined(HAVE_UNISTD_H)
2073 #include <unistd.h>
2074 #endif
2075 #include <sys/types.h>
2076 main() { dev_t dev = makedev(1,2); return 0; }],
2077 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2078 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2079     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2080 fi
2081
2082 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2083 AC_TRY_RUN([#include <stdio.h>
2084 main() { char c; c=250; exit((c > 0)?0:1); }],
2085 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2086 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2087     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2088 fi
2089
2090 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2091 AC_TRY_COMPILE([#include <sys/types.h>
2092 #include <sys/socket.h>
2093 #include <netinet/in.h>],
2094 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2095 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2096 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2097     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2098 fi
2099
2100 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2101 AC_TRY_COMPILE([#include <sys/types.h>
2102 #include <dirent.h>
2103 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2104 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2105 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2106     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2107 fi
2108
2109 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2110 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2111 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2112 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2113     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2114 fi
2115
2116 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2117 AC_TRY_RUN([
2118 #include <sys/time.h>
2119 #include <unistd.h>
2120 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
2121            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
2122 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2123     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
2124 fi
2125
2126 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2127
2128     # On some systems (eg. Linux) librt can pull in libpthread. We
2129     # don't want this to happen because libpthreads changes signal delivery
2130     # semantics in ways we are not prepared for. This breaks Linux oplocks
2131     # which rely on signals.
2132
2133     AC_LIBTESTFUNC(rt, clock_gettime,
2134             [
2135                 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2136                     [Whether clock_gettime is available])
2137                 SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2138                 SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2139                 SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2140             ])
2141
2142 fi
2143
2144 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2145 AC_TRY_LINK([#include <stdarg.h>
2146 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2147 samba_cv_HAVE_VA_COPY=yes,
2148 samba_cv_HAVE_VA_COPY=no)])
2149 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2150     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2151 else
2152     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2153     AC_TRY_LINK([#include <stdarg.h>
2154     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2155     samba_cv_HAVE___VA_COPY=yes,
2156     samba_cv_HAVE___VA_COPY=no)])
2157     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2158         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2159     fi
2160 fi
2161
2162 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2163 AC_TRY_RUN([
2164 #include <sys/types.h>
2165 #include <stdarg.h>
2166 void foo(const char *format, ...) { 
2167        va_list ap;
2168        int len;
2169        char buf[5];
2170
2171        va_start(ap, format);
2172        len = vsnprintf(buf, 0, format, ap);
2173        va_end(ap);
2174        if (len != 5) exit(1);
2175
2176        va_start(ap, format);
2177        len = vsnprintf(0, 0, format, ap);
2178        va_end(ap);
2179        if (len != 5) exit(1);
2180
2181        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
2182
2183        exit(0);
2184 }
2185 main() { foo("hello"); }
2186 ],
2187 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2188 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2189     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2190 fi
2191
2192 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2193 AC_TRY_RUN([#include <sys/types.h>
2194 #include <dirent.h>
2195 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2196 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2197 di->d_name[0] == 0) exit(0); exit(1);} ],
2198 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2199 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2200     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2201 fi
2202
2203 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2204 AC_TRY_COMPILE([#include <sys/types.h>
2205 #include <utime.h>],
2206 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2207 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2208 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2209     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2210 fi
2211
2212 ##############
2213 # Check utmp details, but only if our OS offers utmp.h
2214 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2215 dnl  utmp and utmpx come in many flavours
2216 dnl  We need to check for many of them
2217 dnl  But we don't need to do each and every one, because our code uses
2218 dnl  mostly just the utmp (not utmpx) fields.
2219
2220 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2221
2222 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2223 AC_TRY_COMPILE([#include <sys/types.h>
2224 #include <utmp.h>],
2225 [struct utmp ut;  ut.ut_name[0] = 'a';],
2226 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2227 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2228     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2229 fi 
2230
2231 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2232 AC_TRY_COMPILE([#include <sys/types.h>
2233 #include <utmp.h>],
2234 [struct utmp ut;  ut.ut_user[0] = 'a';],
2235 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2236 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2237     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2238 fi 
2239
2240 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2241 AC_TRY_COMPILE([#include <sys/types.h>
2242 #include <utmp.h>],
2243 [struct utmp ut;  ut.ut_id[0] = 'a';],
2244 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2245 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2246     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2247 fi 
2248
2249 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2250 AC_TRY_COMPILE([#include <sys/types.h>
2251 #include <utmp.h>],
2252 [struct utmp ut;  ut.ut_host[0] = 'a';],
2253 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2254 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2255     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2256 fi 
2257
2258 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2259 AC_TRY_COMPILE([#include <sys/types.h>
2260 #include <utmp.h>],
2261 [struct utmp ut;  time_t t; ut.ut_time = t;],
2262 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2263 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2264     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2265 fi 
2266
2267 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2268 AC_TRY_COMPILE([#include <sys/types.h>
2269 #include <utmp.h>],
2270 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2271 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2272 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2273     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2274 fi 
2275
2276 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2277 AC_TRY_COMPILE([#include <sys/types.h>
2278 #include <utmp.h>],
2279 [struct utmp ut;  ut.ut_type = 0;],
2280 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2281 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2282     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2283 fi 
2284
2285 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2286 AC_TRY_COMPILE([#include <sys/types.h>
2287 #include <utmp.h>],
2288 [struct utmp ut;  ut.ut_pid = 0;],
2289 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2290 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2291     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2292 fi 
2293
2294 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2295 AC_TRY_COMPILE([#include <sys/types.h>
2296 #include <utmp.h>],
2297 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2298 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2299 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2300     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2301 fi 
2302
2303 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2304 AC_TRY_COMPILE([#include <sys/types.h>
2305 #include <utmp.h>],
2306 [struct utmp ut;  ut.ut_addr = 0;],
2307 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2308 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2309     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2310 fi 
2311
2312 if test x$ac_cv_func_pututline = xyes ; then
2313   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2314   AC_TRY_COMPILE([#include <sys/types.h>
2315 #include <utmp.h>],
2316   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2317   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2318   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2319       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2320   fi
2321 fi
2322
2323 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2324 AC_TRY_COMPILE([#include <sys/types.h>
2325 #include <utmpx.h>],
2326 [struct utmpx ux;  ux.ut_syslen = 0;],
2327 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2328 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2329     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2330 fi 
2331
2332 fi
2333 # end utmp details
2334
2335
2336 ICONV_LOCATION=standard
2337 LOOK_DIRS="/usr /usr/local /sw /opt"
2338 AC_ARG_WITH(libiconv,
2339 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2340 [
2341   if test "$withval" = "no" ; then
2342     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2343   else
2344      if test "$withval" != "yes" ; then
2345         ICONV_PATH_SPEC=yes
2346         LOOK_DIRS="$withval"
2347      fi
2348   fi
2349 ])
2350
2351 for i in $LOOK_DIRS ; do
2352     save_LIBS=$LIBS
2353     save_LDFLAGS=$LDFLAGS
2354     save_CPPFLAGS=$CPPFLAGS
2355     ICONV_FOUND="no"
2356     unset libext
2357     CPPFLAGS="$CPPFLAGS -I$i/include"
2358 dnl This is here to handle -withval stuff for --with-libiconv
2359 dnl Perhaps we should always add a -L
2360
2361 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
2362 dnl installation paths. This gets a little tricky since we might have iconv
2363 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
2364 dnl succeed when the header is found. To counter this, make sure the 
2365 dnl library directory is there and check the ABI directory first (which
2366 dnl should be harmless on other systems.
2367 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2368     for l in "lib32" "lib" "lib/hpux32"; do
2369         if test -d "$i/$l" ; then
2370                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2371         LIBS=
2372         export LDFLAGS LIBS CPPFLAGS
2373 dnl Try to find iconv(3)
2374                 jm_ICONV($i/$l)
2375                 if test x"$ICONV_FOUND" = "xyes" ; then
2376             libext="$l"
2377             break;
2378         fi
2379         fi
2380     done
2381
2382     if test x"$ICONV_FOUND" = "xyes" ; then
2383         LDFLAGS=$save_LDFLAGS
2384         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2385         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2386         LIBS="$save_LIBS"
2387         ICONV_LOCATION=$i
2388         export LDFLAGS LIBS CPPFLAGS
2389 dnl Now, check for a working iconv ... we want to do it here because
2390 dnl there might be a working iconv further down the list of LOOK_DIRS
2391
2392         ############
2393         # check for iconv in libc
2394         ic_save_LIBS="$LIBS"
2395         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
2396            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
2397         fi
2398         if test x"$jm_cv_lib_iconv" != x; then
2399            LIBS="$LIBS -l$jm_cv_lib_iconv"
2400         fi
2401 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
2402         default_dos_charset=no
2403         default_display_charset=no
2404         default_unix_charset=no
2405
2406         # check for default dos charset name
2407         for j in CP850 IBM850 ; do
2408             rjs_CHARSET($j)
2409             if test x"$ICONV_CHARSET" = x"$j"; then
2410                 default_dos_charset="\"$j\""
2411                 break
2412             fi
2413         done
2414         # check for default display charset name
2415         for j in ASCII 646 ; do
2416             rjs_CHARSET($j)
2417             if test x"$ICONV_CHARSET" = x"$j"; then
2418                 default_display_charset="\"$j\""
2419                 break
2420             fi
2421         done
2422         # check for default unix charset name
2423         for j in UTF-8 UTF8 ; do
2424             rjs_CHARSET($j)
2425             if test x"$ICONV_CHARSET" = x"$j"; then
2426                 default_unix_charset="\"$j\""
2427                 break
2428             fi
2429         done
2430         
2431         if test "$default_dos_charset" != "no" -a \
2432                 "$default_dos_charset" != "cross" -a \
2433                 "$default_display_charset" != "no" -a \ 
2434                 "$default_display_charset" != "cross" -a \
2435                 "$default_unix_charset" != "no" -a \
2436                 "$default_unix_charset" != "cross"
2437         then
2438                 samba_cv_HAVE_NATIVE_ICONV=yes
2439         else if test "$default_dos_charset" = "cross" -o \
2440                      "$default_display_charset" = "cross" -o \
2441                      "$default_unix_charset" = "cross"
2442         then
2443                 samba_cv_HAVE_NATIVE_ICONV=cross
2444         else
2445                 samba_cv_HAVE_NATIVE_ICONV=no
2446         fi
2447         fi
2448 dnl ])
2449
2450         LIBS="$ic_save_LIBS"
2451         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2452            CPPFLAGS=$save_CPPFLAGS
2453            LDFLAGS=$save_LDFLAGS
2454            LIBS=$save_LIBS
2455            if test x"$jm_cv_lib_iconv" != x; then
2456               LIBS="$LIBS -l$jm_cv_lib_iconv"
2457            fi
2458            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2459            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2460            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2461            export CPPFLAGS
2462            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2463            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2464            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2465            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2466            break
2467         fi
2468 dnl We didn't find a working iconv, so keep going
2469     fi
2470 dnl We only need to clean these up here for the next pass through the loop
2471     CPPFLAGS=$save_CPPFLAGS
2472     LDFLAGS=$save_LDFLAGS
2473     LIBS=$save_LIBS
2474     export LDFLAGS LIBS CPPFLAGS
2475 done
2476 unset libext
2477
2478
2479 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2480     AC_MSG_WARN([Sufficient support for iconv function was not found. 
2481     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2482    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2483    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2484    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2485 fi
2486
2487
2488 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2489 AC_TRY_RUN([
2490 #include <sys/types.h>
2491 #include <fcntl.h>
2492 #ifndef F_GETLEASE
2493 #define F_GETLEASE      1025
2494 #endif
2495 main() {
2496        int fd = open("/dev/null", O_RDONLY);
2497        return fcntl(fd, F_GETLEASE, 0) == -1;
2498 }
2499 ],
2500 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2501 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2502     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2503 fi
2504
2505 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2506 AC_TRY_RUN([
2507 #include <sys/types.h>
2508 #include <fcntl.h>
2509 #include <signal.h>
2510 #ifndef F_NOTIFY
2511 #define F_NOTIFY 1026
2512 #endif
2513 main() {
2514         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2515 }
2516 ],
2517 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2518 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2519     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2520 fi
2521
2522 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2523 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2524 AC_CHECK_FUNC(inotify_init)
2525 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2526 ],
2527 samba_cv_HAVE_INOTIFY=yes,
2528 samba_cv_HAVE_INOTIFY=no,
2529 samba_cv_HAVE_INOTIFY=cross)
2530
2531 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2532     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2533 fi
2534
2535 #################################################
2536 # Check if FAM notifications are available. For FAM info, see
2537 #       http://oss.sgi.com/projects/fam/
2538 #       http://savannah.nongnu.org/projects/fam/
2539 AC_ARG_ENABLE(fam,
2540 [  --enable-fam            Turn on FAM support (default=auto)])
2541
2542 if test x$enable_fam != xno; then
2543     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2544     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2545         # On IRIX, libfam requires libC, but other FAM implementations
2546         # might not need it.
2547         AC_CHECK_LIB(fam, FAMOpen2,
2548             [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam"],
2549             [samba_cv_HAVE_LIBFAM=no])
2550
2551         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2552             samba_fam_xtra=-lC
2553             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2554                 [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam -lC"],
2555                 [samba_cv_HAVE_LIBFAM=no])
2556             unset samba_fam_xtra
2557         fi
2558     fi
2559
2560     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2561         default_shared_modules="$default_shared_modules vfs_notify_fam"
2562         AC_TRY_COMPILE([#include <fam.h>],
2563                     [FAMCodes code = FAMChanged;],
2564                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2565                         [Whether fam.h contains a typedef for enum FAMCodes]),
2566                     [])
2567     fi
2568
2569     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2570         AC_MSG_ERROR(FAM support requested but FAM library not available )
2571     fi
2572 fi
2573
2574 #################################################
2575 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2576
2577 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2578
2579 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2580 AC_TRY_RUN([
2581 #include <sys/types.h>
2582 #include <fcntl.h>
2583 #include <signal.h>
2584 #include <sys/file.h>
2585 #ifndef LOCK_MAND
2586 #define LOCK_MAND       32
2587 #define LOCK_READ       64
2588 #endif
2589 main() {
2590         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2591 }
2592 ],
2593 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2594 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2595     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2596 fi
2597
2598
2599 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2600 AC_TRY_COMPILE([#include <sys/types.h>
2601 #include <fcntl.h>],
2602 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2603 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2604 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2605     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2606 fi
2607
2608 #################################################
2609 # Check for POSIX capability support
2610
2611 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2612     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2613     [], [])
2614
2615 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2616
2617     ac_save_LIBS=$LIBS
2618     AC_LIBTESTFUNC(cap, cap_get_proc)
2619
2620     AC_CACHE_CHECK([for POSIX capabilities],
2621             samba_cv_HAVE_POSIX_CAPABILITIES,
2622             [
2623                 AC_TRY_RUN([
2624 #include <sys/types.h>
2625 #include <sys/capability.h>
2626 main() {
2627  cap_t cap;
2628  cap_value_t vals[1];
2629  if (!(cap = cap_get_proc()))
2630    exit(1);
2631  vals[0] = CAP_CHOWN;
2632  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2633  cap_set_proc(cap);
2634  exit(0);
2635 }],
2636                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2637                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2638                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2639             ])
2640
2641 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2642     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2643             [Whether POSIX capabilities are available])
2644 else
2645     LIBS=$ac_save_LIBS
2646 fi
2647
2648 fi
2649
2650 #
2651 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2652 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2653 #
2654
2655 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2656 AC_TRY_COMPILE([#include <sys/types.h>
2657 #if defined(HAVE_RPC_RPC_H)
2658 #include <rpc/rpc.h>
2659 #endif],
2660 [int16 testvar;],
2661 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2662 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2663     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2664 fi
2665
2666 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2667 AC_TRY_COMPILE([#include <sys/types.h>
2668 #if defined(HAVE_RPC_RPC_H)
2669 #include <rpc/rpc.h>
2670 #endif],
2671 [uint16 testvar;],
2672 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2673 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2674     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2675 fi
2676
2677 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2678 AC_TRY_COMPILE([#include <sys/types.h>
2679 #if defined(HAVE_RPC_RPC_H)
2680 #include <rpc/rpc.h>
2681 #endif],
2682 [int32 testvar;],
2683 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2684 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2685     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2686 fi
2687
2688 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2689 AC_TRY_COMPILE([#include <sys/types.h>
2690 #if defined(HAVE_RPC_RPC_H)
2691 #include <rpc/rpc.h>
2692 #endif],
2693 [uint32 testvar;],
2694 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2695 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2696     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2697 fi
2698
2699 dnl
2700 dnl Some systems (SCO) have a problem including
2701 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2702 dnl as a #define in <prot.h> and as part of an enum
2703 dnl in <rpc/rpc.h>.
2704 dnl
2705
2706 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2707 AC_TRY_COMPILE([#include <sys/types.h>
2708 #ifdef HAVE_SYS_SECURITY_H
2709 #include <sys/security.h>
2710 #include <prot.h>
2711 #endif  /* HAVE_SYS_SECURITY_H */
2712 #if defined(HAVE_RPC_RPC_H)
2713 #include <rpc/rpc.h>
2714 #endif],
2715 [int testvar;],
2716 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2717 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2718     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2719 fi
2720
2721 AC_MSG_CHECKING([for test routines])
2722 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2723            AC_MSG_RESULT(yes),
2724            AC_MSG_ERROR([cant find test code. Aborting config]),
2725            AC_MSG_WARN([cannot run when cross-compiling]))
2726
2727 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2728 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2729            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2730 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2731     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2732 fi
2733
2734 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2735 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2736            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2737            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2738            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2739 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2740 then
2741     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2742 fi
2743
2744 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2745 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2746            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2747 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2748     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2749 fi
2750
2751 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2752 AC_TRY_RUN([#include <stdlib.h>
2753 #include <sys/types.h>
2754 #include <sys/stat.h>
2755 #include <unistd.h>
2756 main() { 
2757   struct stat st;
2758   char tpl[20]="/tmp/test.XXXXXX"; 
2759   int fd = mkstemp(tpl); 
2760   if (fd == -1) exit(1);
2761   unlink(tpl);
2762   if (fstat(fd, &st) != 0) exit(1);
2763   if ((st.st_mode & 0777) != 0600) exit(1);
2764   exit(0);
2765 }],
2766 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2767 samba_cv_HAVE_SECURE_MKSTEMP=no,
2768 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2769 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2770     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2771 fi
2772
2773 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2774         AC_TRY_RUN([#include "${srcdir-.}/tests/os2_delete.c"],
2775                 [samba_cv_HAVE_BROKEN_READDIR=no],
2776                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2777                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2778
2779 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2780 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2781         AC_TRY_RUN([
2782 #include "${srcdir-.}/lib/repdir.c"
2783 #include "${srcdir-.}/tests/os2_delete.c"],
2784         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2785 fi
2786
2787 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2788         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2789 fi
2790
2791 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2792 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2793 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2794 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2795 AC_CHECK_FUNCS(getpagesize)
2796
2797 ##################
2798 # look for a method of finding the list of network interfaces
2799 iface=no;
2800 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2801 SAVE_CPPFLAGS="$CPPFLAGS"
2802 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2803 AC_TRY_RUN([
2804 #define HAVE_IFACE_AIX 1
2805 #define AUTOCONF_TEST 1
2806 #undef _XOPEN_SOURCE_EXTENDED
2807 #include "${srcdir-.}/lib/interfaces.c"],
2808            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2809 CPPFLAGS="$SAVE_CPPFLAGS"
2810 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2811     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2812 fi
2813
2814 if test $iface = no; then
2815 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2816 SAVE_CPPFLAGS="$CPPFLAGS"
2817 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2818 AC_TRY_RUN([
2819 #define HAVE_IFACE_IFCONF 1
2820 #define AUTOCONF_TEST 1
2821 #include "${srcdir-.}/lib/interfaces.c"],
2822            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2823 CPPFLAGS="$SAVE_CPPFLAGS"
2824 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2825     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2826 fi
2827 fi
2828
2829 if test $iface = no; then
2830 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2831 SAVE_CPPFLAGS="$CPPFLAGS"
2832 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2833 AC_TRY_RUN([
2834 #define HAVE_IFACE_IFREQ 1
2835 #define AUTOCONF_TEST 1
2836 #include "${srcdir-.}/lib/interfaces.c"],
2837            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2838 CPPFLAGS="$SAVE_CPPFLAGS"
2839 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2840     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2841 fi
2842 fi
2843
2844
2845 ################################################
2846 # look for a method of setting the effective uid
2847 seteuid=no;
2848 if test $seteuid = no; then
2849 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2850 AC_TRY_RUN([
2851 #define AUTOCONF_TEST 1
2852 #define USE_SETRESUID 1
2853 #include "confdefs.h"
2854 #include "${srcdir-.}/lib/util_sec.c"],
2855            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2856 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2857     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2858 fi
2859 fi
2860
2861
2862 if test $seteuid = no; then
2863 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2864 AC_TRY_RUN([
2865 #define AUTOCONF_TEST 1
2866 #define USE_SETREUID 1
2867 #include "confdefs.h"
2868 #include "${srcdir-.}/lib/util_sec.c"],
2869            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2870 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2871     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2872 fi
2873 fi
2874
2875 if test $seteuid = no; then
2876 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2877 AC_TRY_RUN([
2878 #define AUTOCONF_TEST 1
2879 #define USE_SETEUID 1
2880 #include "confdefs.h"
2881 #include "${srcdir-.}/lib/util_sec.c"],
2882            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2883 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2884     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2885 fi
2886 fi
2887
2888 if test $seteuid = no; then
2889 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2890 AC_TRY_RUN([
2891 #define AUTOCONF_TEST 1
2892 #define USE_SETUIDX 1
2893 #include "confdefs.h"
2894 #include "${srcdir-.}/lib/util_sec.c"],
2895            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2896 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2897     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2898 fi
2899 fi
2900
2901
2902 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2903 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2904            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2905 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2906     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2907 fi
2908
2909 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2910 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2911            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2912 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2913     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2914 fi
2915
2916 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2917 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2918            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2919 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2920     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2921
2922 else
2923
2924 dnl
2925 dnl Don't check for 64 bit fcntl locking if we know that the
2926 dnl glibc2.1 broken check has succeeded.
2927 dnl 
2928
2929   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2930   AC_TRY_RUN([
2931 #if defined(HAVE_UNISTD_H)
2932 #include <unistd.h>
2933 #endif
2934 #include <stdio.h>
2935 #include <stdlib.h>
2936
2937 #ifdef HAVE_FCNTL_H
2938 #include <fcntl.h>
2939 #endif
2940
2941 #ifdef HAVE_SYS_FCNTL_H
2942 #include <sys/fcntl.h>
2943 #endif
2944 main() { struct flock64 fl64;
2945 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2946 exit(0);
2947 #else
2948 exit(1);
2949 #endif
2950 }],
2951        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2952
2953   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2954       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2955   fi
2956 fi
2957
2958 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2959 AC_TRY_COMPILE([#include <sys/types.h>
2960 #include <sys/stat.h>
2961 #include <unistd.h>],
2962 [struct stat st;  st.st_blocks = 0;],
2963 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2964 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2965     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2966 fi 
2967
2968 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2969 AC_TRY_COMPILE([#include <sys/types.h>
2970 #include <sys/stat.h>
2971 #include <unistd.h>],
2972 [struct stat st;  st.st_blksize = 0;],
2973 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2974 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2975     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2976 fi
2977
2978 case "$host_os" in
2979 *linux*)
2980 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2981 AC_TRY_COMPILE([
2982 #ifdef HAVE_SYS_VFS_H
2983 #include <sys/vfs.h>
2984 #endif
2985 #ifdef HAVE_SYS_CAPABILITY_H
2986 #include <sys/capability.h>
2987 #endif
2988 ],[int i;],
2989    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
2990 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
2991    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
2992 fi
2993 ;;
2994 esac
2995
2996 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2997 AC_TRY_COMPILE([
2998 #include <sys/types.h>
2999 #include <sys/acl.h>
3000 #if defined(HAVE_RPCSVC_NIS_H)
3001 #include <rpcsvc/nis.h>
3002 #endif],
3003 [int i;],
3004 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3005 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3006         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3007 fi
3008
3009 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3010 AC_TRY_RUN([
3011 #include <stdio.h>
3012 #include <limits.h>
3013 main() {
3014         char *newpath = realpath("/tmp", NULL);
3015         exit ((newpath != NULL) ? 0 : 1);
3016 }
3017 ],
3018 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3019 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3020     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3021 fi
3022
3023 #################################################
3024 # check for AFS clear-text auth support
3025 samba_cv_WITH_AFS=no
3026 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3027 AC_ARG_WITH(afs,
3028 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3029 [ case "$withval" in
3030   yes|auto)
3031     AC_MSG_RESULT($withval)
3032     samba_cv_WITH_AFS=$withval
3033     ;;
3034   *)
3035     AC_MSG_RESULT(no)
3036     ;;
3037   esac ],
3038   AC_MSG_RESULT(no)
3039 )
3040
3041 ####################################################
3042 # check for Linux-specific AFS fake-kaserver support
3043 samba_cv_WITH_FAKE_KASERVER=no
3044 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3045 AC_ARG_WITH(fake-kaserver,
3046 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3047 [ case "$withval" in
3048   yes|auto)
3049     AC_MSG_RESULT($withval)
3050     samba_cv_WITH_FAKE_KASERVER=$withval
3051     ;;
3052   *)
3053     AC_MSG_RESULT(no)
3054     ;;
3055   esac ],
3056   AC_MSG_RESULT(no)
3057 )
3058
3059 #################################################
3060 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3061 if test x"$samba_cv_WITH_AFS" != x"no" ||
3062    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3063
3064     # see if this box has the afs-headers in /usr/include/afs
3065     AC_MSG_CHECKING(for /usr/include/afs)
3066     if test -d /usr/include/afs; then
3067           CFLAGS="$CFLAGS -I/usr/include/afs"
3068           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3069           AC_MSG_RESULT(yes)
3070     else
3071       AC_MSG_RESULT(no)
3072     fi
3073    
3074     # check for afs.h
3075     have_afs_headers=no
3076     AC_CHECK_HEADERS(afs.h afs/afs.h)
3077     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3078         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3079            test x"$samba_cv_WITH_AFS" = x"auto"; then
3080                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3081         else
3082                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3083         fi
3084     else
3085         have_afs_headers=yes
3086     fi
3087 fi
3088
3089 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3090     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3091 fi
3092
3093 #################################################
3094 # check whether to compile AFS/NT ACL mapping module
3095 samba_cv_WITH_VFS_AFSACL=no
3096 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3097 AC_ARG_WITH(vfs-afsacl,
3098 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3099 [ case "$withval" in
3100   yes|auto)
3101     AC_MSG_RESULT($withval)
3102     samba_cv_WITH_VFS_AFSACL=yes
3103     ;;
3104   *)
3105     AC_MSG_RESULT(no)
3106     ;;
3107   esac ],
3108   AC_MSG_RESULT(no)
3109 )
3110
3111 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3112    default_shared_modules="$default_shared_modules vfs_afsacl"
3113 fi
3114         
3115 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3116     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3117 fi
3118
3119 #################################################
3120 # check for the DFS clear-text auth system
3121 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3122 AC_ARG_WITH(dfs,
3123 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3124 [ case "$withval" in
3125   yes)
3126     AC_MSG_RESULT(yes)
3127     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3128     ;;
3129   *)
3130     AC_MSG_RESULT(no)
3131     ;;
3132   esac ],
3133   AC_MSG_RESULT(no)
3134 )
3135
3136 ########################################################
3137 # Compile with LDAP support?
3138
3139 with_ldap_support=auto
3140 AC_MSG_CHECKING([for LDAP support])
3141
3142 AC_ARG_WITH(ldap,
3143 [  --with-ldap             LDAP support (default yes)],
3144 [ case "$withval" in
3145     yes|no)
3146         with_ldap_support=$withval
3147         ;;
3148   esac ])
3149
3150 AC_MSG_RESULT($with_ldap_support)
3151
3152 SMBLDAP=""
3153 AC_SUBST(SMBLDAP)
3154 SMBLDAPUTIL=""
3155 AC_SUBST(SMBLDAPUTIL)
3156 LDBLDAP=""
3157 AC_SUBST(LDBLDAP)
3158
3159 if test x"$with_ldap_support" != x"no"; then
3160
3161   ##################################################################
3162   # first test for ldap.h and lber.h
3163   # (ldap.h is required for this test)
3164   AC_CHECK_HEADERS(ldap.h lber.h)
3165   
3166   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3167         if test x"$with_ldap_support" = x"yes"; then
3168          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3169         else
3170          AC_MSG_WARN(ldap.h is needed for LDAP support)
3171         fi
3172         
3173         with_ldap_support=no
3174   fi
3175
3176   ##################################################################
3177   # HP/UX does not have ber_tag_t, disable LDAP there
3178   AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3179   if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3180         if test x"$with_ldap_support" = x"yes"; then
3181          AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3182         else
3183          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3184         fi
3185         with_ldap_support=no
3186   fi
3187 fi
3188
3189 if test x"$with_ldap_support" != x"no"; then
3190   ac_save_LIBS=$LIBS
3191
3192   ##################################################################
3193   # we might need the lber lib on some systems. To avoid link errors
3194   # this test must be before the libldap test
3195   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3196
3197   ########################################################
3198   # now see if we can find the ldap libs in standard paths
3199   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3200
3201   ########################################################
3202   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3203   # Check found in pam_ldap 145.
3204   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3205
3206   LIBS="$LIBS $LDAP_LIBS"
3207   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3208     AC_TRY_COMPILE([
3209         #include <lber.h>
3210         #include <ldap.h>], 
3211         [ldap_set_rebind_proc(0, 0, 0);], 
3212         [smb_ldap_cv_ldap_set_rebind_proc=3], 
3213         [smb_ldap_cv_ldap_set_rebind_proc=2]
3214     ) 
3215   ])
3216   
3217   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3218
3219   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3220   
3221   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3222     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3223     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3224     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3225     default_shared_modules="$default_shared_modules";
3226     SMBLDAP="lib/smbldap.o"
3227     SMBLDAPUTIL="lib/smbldap_util.o"
3228     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3229       AC_MSG_WARN(Disabling ldb_ldap support (requires ldap_initialize))
3230     else
3231       AC_DEFINE(HAVE_LDB_LDAP,1,[Whether ldb_ldap is available])
3232       LDBLDAP="lib/ldb/ldb_ldap/ldb_ldap.o"
3233     fi
3234     with_ldap_support=yes
3235     AC_MSG_CHECKING(whether LDAP support is used)
3236     AC_MSG_RESULT(yes)
3237   else
3238     if test x"$with_ldap_support" = x"yes"; then
3239         AC_MSG_ERROR(libldap is needed for LDAP support)
3240     else
3241         AC_MSG_WARN(libldap is needed for LDAP support)
3242     fi
3243     
3244     LDAP_LIBS=""
3245     with_ldap_support=no
3246   fi
3247   LIBS=$ac_save_LIBS
3248 fi
3249
3250
3251 #################################################
3252 # active directory support
3253
3254 with_ads_support=auto
3255 AC_MSG_CHECKING([for Active Directory and krb5 support])
3256
3257 AC_ARG_WITH(ads,
3258 [  --with-ads              Active Directory support (default auto)],
3259 [ case "$withval" in
3260     yes|no)
3261         with_ads_support="$withval"
3262         ;;
3263   esac ])
3264
3265 AC_MSG_RESULT($with_ads_support)
3266
3267 FOUND_KRB5=no
3268 KRB5_LIBS=""
3269
3270 if test x"$with_ldap_support" != x"yes"; then
3271
3272     if test x"$with_ads_support" = x"yes"; then
3273         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3274     elif test x"$with_ads_support" = x"auto"; then
3275         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3276         with_ads_support=no
3277     fi
3278
3279 else
3280
3281     # Check to see whether there is enough LDAP functionality to be able
3282     # to build AD support.
3283
3284     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3285
3286     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3287         if test x"$with_ads_support" = x"yes"; then
3288             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3289         elif test x"$with_ads_support" = x"auto"; then
3290             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3291             with_ads_support=no
3292         fi
3293     fi
3294
3295     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3296
3297     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3298         if test x"$with_ads_support" = x"yes"; then
3299             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3300         elif test x"$with_ads_support" = x"auto"; then
3301             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3302             with_ads_support=no
3303         fi
3304     fi
3305
3306 fi
3307
3308 if test x"$with_ads_support" != x"no"; then
3309
3310   # Do no harm to the values of CFLAGS and LIBS while testing for
3311   # Kerberos support.
3312  
3313   if test x$FOUND_KRB5 = x"no"; then
3314     #################################################
3315     # check for location of Kerberos 5 install
3316     AC_MSG_CHECKING(for kerberos 5 install path)
3317     AC_ARG_WITH(krb5,
3318     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
3319     [ case "$withval" in
3320       no)
3321         AC_MSG_RESULT(no krb5-path given)
3322         ;;
3323       yes)
3324         AC_MSG_RESULT(/usr)
3325         FOUND_KRB5=yes
3326         ;;
3327       *)
3328         AC_MSG_RESULT($withval)
3329         KRB5_CFLAGS="-I$withval/include"
3330         KRB5_CPPFLAGS="-I$withval/include"
3331         KRB5_LDFLAGS="-L$withval/lib"
3332         FOUND_KRB5=yes
3333         if test -x "$withval/bin/krb5-config"; then
3334                 KRB5CONFIG=$withval/bin/krb5-config
3335         fi
3336         ;;
3337       esac ],
3338       AC_MSG_RESULT(no krb5-path given)
3339     )
3340   fi
3341
3342   #################################################
3343   # check for krb5-config from recent MIT and Heimdal kerberos 5
3344   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3345   AC_MSG_CHECKING(for working krb5-config)
3346   if test -x "$KRB5CONFIG"; then
3347     ac_save_CFLAGS=$CFLAGS
3348     CFLAGS="";export CFLAGS
3349     ac_save_LDFLAGS=$LDFLAGS
3350     LDFLAGS="";export LDFLAGS
3351     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3352     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3353     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`" 
3354     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3355     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3356     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3357     FOUND_KRB5=yes
3358     AC_MSG_RESULT(yes)
3359   else
3360     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3361   fi
3362  
3363   if test x$FOUND_KRB5 = x"no"; then
3364     #################################################
3365     # see if this box has the SuSE location for the heimdal krb implementation
3366     AC_MSG_CHECKING(for /usr/include/heimdal)
3367     if test -d /usr/include/heimdal; then
3368       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3369           KRB5_CFLAGS="-I/usr/include/heimdal"
3370           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3371           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3372           AC_MSG_RESULT(yes)
3373       else
3374           KRB5_CFLAGS="-I/usr/include/heimdal"
3375           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3376           AC_MSG_RESULT(yes)
3377       fi
3378     else
3379       AC_MSG_RESULT(no)
3380     fi
3381   fi
3382
3383   if test x$FOUND_KRB5 = x"no"; then
3384     #################################################
3385     # see if this box has the RedHat location for kerberos
3386     AC_MSG_CHECKING(for /usr/kerberos)
3387     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3388       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3389       KRB5_CFLAGS="-I/usr/kerberos/include"
3390       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3391       AC_MSG_RESULT(yes)
3392     else
3393       AC_MSG_RESULT(no)
3394     fi
3395   fi
3396
3397   ac_save_CFLAGS=$CFLAGS
3398   ac_save_CPPFLAGS=$CPPFLAGS
3399   ac_save_LDFLAGS=$LDFLAGS
3400
3401   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3402   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3403   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3404
3405   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3406
3407   # now check for krb5.h. Some systems have the libraries without the headers!
3408   # note that this check is done here to allow for different kerberos
3409   # include paths
3410   AC_CHECK_HEADERS(krb5.h)
3411
3412   if test x"$ac_cv_header_krb5_h" = x"no"; then
3413
3414     # Give a warning if AD support was not explicitly requested,
3415     # i.e with_ads_support = auto, otherwise die with an error.
3416
3417     if test x"$with_ads_support" = x"yes"; then
3418       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3419     else
3420       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3421     fi
3422
3423     # Turn off AD support and restore CFLAGS and LIBS variables
3424
3425     with_ads_support="no"
3426     
3427     CFLAGS=$ac_save_CFLAGS
3428     CPPFLAGS=$ac_save_CPPFLAGS
3429     LDFLAGS=$ac_save_LDFLAGS
3430   fi
3431 fi
3432
3433 # Now we have determined whether we really want ADS support
3434 use_ads=no
3435 if test x"$with_ads_support" != x"no"; then
3436   use_ads=yes
3437   have_gssapi=no
3438   ac_save_LIBS=$LIBS
3439
3440   # now check for gssapi headers.  This is also done here to allow for
3441   # different kerberos include paths
3442   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3443
3444   ##################################################################
3445   # we might need the k5crypto and com_err libraries on some systems
3446   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3447   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3448
3449   # Heimdal checks.
3450   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3451   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3452   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3453
3454   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3455   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3456
3457   ########################################################
3458   # now see if we can find the krb5 libs in standard paths
3459   # or as specified above
3460   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3461   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3462
3463   ########################################################
3464   # now see if we can find the gssapi libs in standard paths
3465   if test x"$have_gssapi" != x"yes"; then
3466      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3467   fi
3468
3469   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3470   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3471   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3472   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3473   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3474   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3475   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
3476   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3477   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
3478   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3479   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
3480   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3481   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
3482   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
3483   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3484   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3485   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3486   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3487   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3488   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3489   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3490   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3491   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3492   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3493   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3494   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3495   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3496   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3497   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3498   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3499   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3500   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3501   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3502   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3503   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3504   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3505   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3506   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3507
3508   LIBS="$KRB5_LIBS $LIBS"
3509
3510   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3511         smb_krb5_ticket_has_keyinfo,
3512         [
3513             AC_TRY_COMPILE(
3514             [
3515                 #include <krb5.h>
3516             ],
3517             [
3518                 krb5_ticket ticket;
3519                 krb5_kvno kvno;
3520                 krb5_enctype enctype;
3521
3522                 enctype = ticket.enc_part.enctype;
3523                 kvno = ticket.enc_part.kvno;
3524             ],
3525             [ smb_krb5_ticket_has_keyinfo=yes ],
3526             [ smb_krb5_ticket_has_keyinfo=no ])
3527         ])
3528
3529   if test x"$smb_krb5_ticket_has_keyinfo" = x"yes" ; then
3530         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3531             [Whether the krb5_ticket structure contains the kvno and enctype])
3532   fi
3533
3534   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3535     AC_TRY_COMPILE([
3536         #include <krb5.h>], 
3537         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);], 
3538         [smb_krb5_verify_checksum=7], 
3539         [smb_krb5_verify_checksum=6], 
3540     ) 
3541   ])
3542   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3543
3544   AC_CACHE_CHECK([for checksum in krb5_checksum],
3545                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3546     AC_TRY_COMPILE([#include <krb5.h>],
3547       [krb5_checksum cksum; cksum.checksum.length = 0;],
3548       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3549       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3550
3551   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3552     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3553                [Whether the krb5_checksum struct has a checksum property])
3554   fi
3555
3556   AC_CACHE_CHECK([for etype in EncryptedData],
3557                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3558     AC_TRY_COMPILE([#include <krb5.h>],
3559       [EncryptedData edata; edata.etype = 0;],
3560       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3561       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3562
3563   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3564     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3565                [Whether the EncryptedData struct has a etype property])
3566   fi
3567
3568   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3569                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3570     AC_TRY_COMPILE([#include <krb5.h>],
3571       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3572       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3573       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3574
3575   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3576     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3577                [Whether the krb5_ap_req struct has a ticket pointer])
3578   fi
3579
3580   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3581                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3582     AC_TRY_COMPILE([#include <krb5.h>],
3583       [krb5_error err; err.e_data = NULL;],
3584       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3585       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3586
3587   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3588     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3589                [Whether the krb5_error struct has a e_data pointer])
3590   fi
3591
3592   AC_CACHE_CHECK([for krb5_crypto type],
3593                 samba_cv_HAVE_KRB5_CRYPTO,[
3594     AC_TRY_COMPILE([#include <krb5.h>],
3595       [krb5_crypto crypto;],
3596       samba_cv_HAVE_KRB5_CRYPTO=yes,
3597       samba_cv_HAVE_KRB5_CRYPTO=no)])
3598
3599   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3600     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3601                [Whether the type krb5_crypto exists])
3602   fi
3603
3604   AC_CACHE_CHECK([for krb5_encrypt_block type],
3605                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3606     AC_TRY_COMPILE([#include <krb5.h>],
3607       [krb5_encrypt_block block;],
3608       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3609       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3610
3611   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3612     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3613                [Whether the type krb5_encrypt_block exists])
3614   fi
3615
3616   AC_CACHE_CHECK([for addrtype in krb5_address],
3617                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3618     AC_TRY_COMPILE([#include <krb5.h>],
3619       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3620       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3621       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3622
3623   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3624     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3625                [Whether the krb5_address struct has a addrtype property])
3626   fi
3627
3628   AC_CACHE_CHECK([for addr_type in krb5_address],
3629                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3630     AC_TRY_COMPILE([#include <krb5.h>],
3631       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3632       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3633       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3634
3635   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3636     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3637               [Whether the krb5_address struct has a addr_type property])
3638   fi
3639
3640   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3641                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3642                  [AC_TRY_COMPILE([#include <krb5.h>],
3643     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3644     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3645
3646   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3647     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3648               [Whether the krb5_ticket struct has a enc_part2 property])
3649   fi
3650
3651   AC_CACHE_CHECK([for keyblock in krb5_creds],
3652                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3653     AC_TRY_COMPILE([#include <krb5.h>],
3654       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3655       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3656       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3657
3658   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3659     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3660               [Whether the krb5_creds struct has a keyblock property])
3661   fi
3662
3663   AC_CACHE_CHECK([for session in krb5_creds],
3664                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3665     AC_TRY_COMPILE([#include <krb5.h>],
3666       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3667       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3668       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3669
3670   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3671     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3672               [Whether the krb5_creds struct has a session property])
3673   fi
3674
3675   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3676                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3677     AC_TRY_COMPILE([#include <krb5.h>],
3678       [krb5_keyblock key; key.keyvalue.data = NULL;],
3679       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3680       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3681
3682   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3683     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3684               [Whether the krb5_keyblock struct has a keyvalue property])
3685   fi
3686
3687   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3688                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3689     AC_TRY_COMPILE([#include <krb5.h>],
3690       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3691       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3692       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3693   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3694                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3695     AC_TRY_COMPILE([#include <krb5.h>],
3696       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3697       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3698       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3699 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3700 # w.r.t. arcfour and windows, so we must not enable it here
3701   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3702           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3703     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3704               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3705   fi
3706
3707   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3708                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3709     AC_TRY_COMPILE([#include <krb5.h>],
3710       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3711       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3712       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3713
3714   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3715     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3716               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3717   fi
3718
3719   AC_CACHE_CHECK([for KV5M_KEYTAB],
3720                  samba_cv_HAVE_KV5M_KEYTAB,[
3721     AC_TRY_COMPILE([#include <krb5.h>],
3722       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3723       samba_cv_HAVE_KV5M_KEYTAB=yes,
3724       samba_cv_HAVE_KV5M_KEYTAB=no)])
3725
3726   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3727       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3728              [Whether the KV5M_KEYTAB option is available])
3729   fi
3730
3731   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3732                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3733     AC_TRY_COMPILE([#include <krb5.h>],
3734       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3735       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3736       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3737
3738   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3739     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3740               [Whether KRB5_KU_OTHER_CKSUM is available])
3741   fi
3742   
3743   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3744                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3745     AC_TRY_COMPILE([#include <krb5.h>],
3746       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3747       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3748       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3749
3750   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3751     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3752               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3753   fi
3754
3755   AC_CACHE_CHECK([for the krb5_princ_component macro],
3756                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3757     AC_TRY_LINK([#include <krb5.h>],
3758       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3759       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3760       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3761
3762   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3763     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3764                [Whether krb5_princ_component is available])
3765   fi
3766
3767   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3768                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3769     AC_TRY_COMPILE([#include <krb5.h>],
3770       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3771       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3772       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3773
3774   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3775     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3776               [Whether krb5_keytab_entry has key member])
3777   fi
3778
3779   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3780                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3781     AC_TRY_COMPILE([#include <krb5.h>],
3782       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3783       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3784       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3785
3786   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3787     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3788               [Whether krb5_keytab_entry has keyblock member])
3789   fi
3790
3791   AC_CACHE_CHECK([for magic in krb5_address],
3792                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3793     AC_TRY_COMPILE([#include <krb5.h>],
3794       [krb5_address addr; addr.magic = 0;],
3795       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3796       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3797
3798   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3799     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3800               [Whether the krb5_address struct has a magic property])
3801   fi
3802
3803   AC_CACHE_CHECK([for WRFILE: keytab support],
3804                 samba_cv_HAVE_WRFILE_KEYTAB,[
3805     AC_TRY_RUN([
3806 #include<krb5.h>
3807   main()
3808   {
3809     krb5_context context;
3810     krb5_keytab keytab;
3811
3812     krb5_init_context(&context);
3813     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3814   }],
3815   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3816   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3817
3818   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3819       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3820                [Whether the WRFILE:-keytab is supported])
3821   fi
3822
3823   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3824                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3825     AC_TRY_COMPILE([#include <krb5.h>],
3826     [
3827     krb5_context context;
3828     krb5_principal principal;
3829     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3830     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3831     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3832
3833   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3834     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3835               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3836   fi
3837
3838   AC_CACHE_CHECK([for krb5_addresses type],
3839                 samba_cv_HAVE_KRB5_ADDRESSES,[
3840     AC_TRY_COMPILE([#include <krb5.h>],
3841       [krb5_addresses addr;],
3842       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3843       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3844
3845   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3846     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3847                [Whether the type krb5_addresses type exists])
3848   fi
3849
3850   #
3851   #
3852   # Now the decisions whether we can support krb5
3853   # 
3854   # NOTE: all tests should be done before this block!
3855   #
3856   #
3857   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3858     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3859     use_ads=no
3860   fi
3861
3862   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3863           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3864   then
3865     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3866     use_ads=no
3867   fi
3868
3869   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3870           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3871   then
3872     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3873     use_ads=no
3874   fi
3875
3876   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3877           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3878   then
3879     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3880     use_ads=no
3881   fi
3882
3883   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3884           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3885   then
3886     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3887     use_ads=no
3888   fi
3889
3890   if test x"$smb_krb5_ticket_has_keyinfo" != x"yes" ; then
3891
3892       # We only need the following functions if we can't get the enctype
3893       # and kvno out of the ticket directly (ie. on Heimdal).
3894
3895       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3896       then
3897         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3898         use_ads=no
3899       fi
3900
3901       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3902       then
3903         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3904         use_ads=no
3905       fi
3906
3907   fi
3908
3909   if test x"$use_ads" = x"yes"; then
3910     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3911     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3912     if test x"$have_gssapi" = x"yes"; then
3913       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3914     fi
3915   else
3916     if test x"$with_ads_support" = x"yes"; then
3917         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
3918     else
3919         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
3920     fi
3921     AC_REMOVE_DEFINE(HAVE_KRB5_H)
3922     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
3923     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
3924     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
3925     KRB5_LIBS=""
3926     with_ads_support=no 
3927   fi
3928   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3929   AC_MSG_RESULT([$use_ads])
3930
3931 LIBS="$ac_save_LIBS"
3932 fi
3933
3934 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
3935 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
3936
3937
3938 ########################################################
3939 # Compile with DNS Updates support?
3940
3941 with_dnsupdate_support=no
3942 AC_MSG_CHECKING([whether to enable DNS Updates support])
3943
3944 AC_ARG_WITH(dnsupdate,
3945 [  --with-dnsupdate        Enable DNS Updates support (default no)],
3946 [ case "$withval" in
3947     yes|no)
3948         with_dnsupdate_support=$withval
3949         ;;
3950   esac ])
3951
3952 AC_MSG_RESULT($with_dnsupdate_support)
3953
3954 if test x"$with_dnsupdate_support" != x"no"; then
3955
3956   ################################################################
3957   # first test for Active Directory support being enabled
3958   #if test x"$with_ads_support" = x"no"; then
3959   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
3960   #             with_dnsupdate_support=no
3961   #fi           
3962   ##################################################################
3963   # then test for uuid.h (necessary to generate unique DNS keynames
3964   # (uuid.h is required for this test)
3965   AC_CHECK_HEADERS(uuid/uuid.h)
3966   
3967   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
3968         if test x"$with_dnsupdate_support" = x"yes"; then
3969          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
3970         else
3971          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
3972         fi
3973         with_dnsupdate_support=no
3974   fi
3975 fi
3976
3977 if test x"$with_dnsupdate_support" != x"no"; then
3978
3979   ########################################################
3980   # Now see if we can find the uuid libs in standard paths
3981   # On some systems, the uuid API is in libc, so we have to
3982   # be careful not to insert a spurious -luuid.
3983   
3984   UUID_LIBS=""
3985   AC_LIBTESTFUNC(uuid, uuid_generate,
3986           [
3987             case " $LIBS " in
3988                 *\ -luuid\ *)
3989                 UUID_LIBS="-luuid"
3990                 SMB_REMOVE_LIB(uuid)
3991                 ;;
3992             esac
3993
3994             with_dnsupdate_support=yes
3995             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
3996         ],
3997         [
3998             if test x"$with_dnsupdate_support" = x"yes"; then
3999                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4000             else
4001                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4002             fi
4003             with_dnsupdate_support=no
4004         ])
4005 fi
4006
4007 #################################################
4008 # check for automount support
4009 AC_MSG_CHECKING(whether to use automount)
4010 AC_ARG_WITH(automount,
4011 [  --with-automount        Include automount support (default=no)],
4012 [ case "$withval" in
4013   yes)
4014     AC_MSG_RESULT(yes)
4015     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4016     ;;
4017   *)
4018     AC_MSG_RESULT(no)
4019     ;;
4020   esac ],
4021   AC_MSG_RESULT(no)
4022 )
4023
4024 #################################################
4025 # check for smbmount support
4026 AC_MSG_CHECKING(whether to use smbmount)
4027 AC_ARG_WITH(smbmount,
4028 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
4029 [ case "$withval" in
4030   yes)
4031         case "$host_os" in
4032         *linux*)
4033                 AC_MSG_RESULT(yes)
4034                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
4035                 SMBMOUNT_PROGS="bin/smbmount bin/smbmnt bin/smbumount"
4036                 ;;
4037         *)
4038                 AC_MSG_ERROR(not on a linux system!)
4039                 ;;
4040         esac
4041     ;;
4042   *)
4043     AC_MSG_RESULT(no)
4044     ;;
4045   esac ],
4046   AC_MSG_RESULT(no)
4047 )
4048
4049 #################################################
4050 # check for mount- and umount.cifs support
4051 CIFSMOUNT_PROGS=""
4052 INSTALL_CIFSMOUNT=""
4053 UNINSTALL_CIFSMOUNT=""
4054 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4055 AC_ARG_WITH(cifsmount,
4056 [  --with-cifsmount        Include mount.cifs and umount.cifs (Linux only) support (default=yes)],
4057 [ case "$withval" in
4058   no)
4059         AC_MSG_RESULT(no)
4060         ;;
4061   *)
4062         case "$host_os" in
4063         *linux*)
4064                 AC_MSG_RESULT(yes)
4065                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4066                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4067                 INSTALL_CIFSMOUNT="installcifsmount"
4068                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4069                 ;;
4070         *)
4071                 AC_MSG_ERROR(not on a linux system!)
4072                 ;;
4073         esac
4074     ;;
4075   esac ],
4076 [ case "$host_os" in
4077   *linux*)
4078         AC_MSG_RESULT(yes)
4079         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4080         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4081         INSTALL_CIFSMOUNT="installcifsmount"
4082         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4083         ;;
4084   *)
4085         AC_MSG_RESULT(no)
4086         ;;
4087   esac ]
4088 )
4089
4090
4091 #################################################
4092 # check for a PAM clear-text auth, accounts, password and session support
4093 with_pam_for_crypt=no
4094 try_pam=no
4095 AC_MSG_CHECKING(whether to try PAM support)
4096 AC_ARG_WITH(pam,
4097 [  --with-pam              Include PAM support (default=no)],
4098 [ case "$withval" in
4099   yes|no)
4100     try_pam=$withval
4101     ;;
4102   esac
4103 ])
4104 AC_MSG_RESULT([$try_pam])
4105
4106 use_pam=no
4107 create_pam_modules=no
4108 if test x"${try_pam}" != x"no";then
4109         use_pam=yes
4110         create_pam_modules=yes
4111
4112         AC_CHECK_HEADERS(security/pam_appl.h)
4113         if test x"$ac_cv_header_security_pam_appl_h" != x"yes"; then
4114                 if test x"${try_pam}" = x"yes";then
4115                         AC_MSG_ERROR([--with-pam=yes but security/pam_appl.h not found])
4116                 fi
4117                 use_pam=no
4118                 create_pam_modules=no
4119         fi
4120
4121         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4122         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4123                 if test x"${try_pam}" = x"yes";then
4124                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4125                 fi
4126                 use_pam=no
4127                 create_pam_modules=no
4128         fi
4129
4130         AC_CHECK_HEADERS(security/pam_modules.h,,,[[
4131                 #if HAVE_SECURITY_PAM_APPL_H
4132                 #include <security/pam_appl.h>
4133                 #endif
4134         ]])
4135         if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
4136                 if test x"${try_pam}" = x"yes";then
4137                         AC_MSG_ERROR([--with-pam=yes but security/pam_modules.h not found])
4138                 fi
4139                 create_pam_modules=no
4140         fi
4141
4142         if test x"$use_pam" = x"yes"; then
4143                 AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4144                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4145                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4146                 with_pam_for_crypt=yes
4147
4148                 if test x"$create_pam_modules" = x"yes"; then
4149                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4150                         # this checks are optional,
4151                         # we don't care about the results here
4152                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4153                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4154                 else
4155                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4156                 fi
4157         fi
4158         AC_MSG_CHECKING(whether to use PAM support)
4159         AC_MSG_RESULT([$use_pam])
4160
4161         AC_MSG_CHECKING(whether to have PAM MODULES support)
4162         AC_MSG_RESULT([$create_pam_modules])
4163 fi # try_pam != no
4164
4165 #################################################
4166 # check for pam_smbpass support
4167 PAM_MODULES=""
4168 INSTALL_PAM_MODULES=""
4169 UNINSTALL_PAM_MODULES=""
4170 AC_MSG_CHECKING(whether to use pam_smbpass)
4171 AC_ARG_WITH(pam_smbpass,
4172 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
4173 [ case "$withval" in
4174   yes)
4175     AC_MSG_RESULT(yes)
4176
4177        # Conditions under which pam_smbpass should not be built.
4178
4179        if test x"$BLDSHARED" != x"true"; then
4180           AC_MSG_ERROR([No support for shared modules])
4181        elif test x"$create_pam_modules" != x"yes"; then
4182           AC_MSG_ERROR([No support for PAM MODULES])
4183        else
4184           PAM_MODULES="pam_smbpass"
4185           INSTALL_PAM_MODULES="installpammodules"
4186           UNINSTALL_PAM_MODULES="uninstallpammodules"
4187        fi
4188     ;;
4189   *)
4190     AC_MSG_RESULT(no)
4191     ;;
4192   esac ],
4193   AC_MSG_RESULT(no)
4194 )
4195
4196
4197 ###############################################
4198 # test for where we get crypt() from
4199 AC_SEARCH_LIBS(crypt, [crypt],
4200   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4201   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4202
4203 ##
4204 ## moved after the check for -lcrypt in order to
4205 ## ensure that the necessary libraries are included
4206 ## check checking for truncated salt.  Wrapped by the
4207 ## $with_pam_for_crypt variable as above   --jerry
4208 ##
4209 if test $with_pam_for_crypt = no; then
4210 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4211 crypt_LIBS="$LIBS"
4212 LIBS="$AUTH_LIBS $LIBS"
4213 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4214         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4215 LIBS="$crypt_LIBS"])
4216 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4217         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4218 fi
4219 fi
4220
4221 #################################################
4222 # check for a NISPLUS_HOME support 
4223 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4224 AC_ARG_WITH(nisplus-home,
4225 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
4226 [ case "$withval" in
4227   yes)
4228     AC_MSG_RESULT(yes)
4229     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4230     ;;
4231   *)
4232     AC_MSG_RESULT(no)
4233     ;;
4234   esac ],
4235   AC_MSG_RESULT(no)
4236 )
4237
4238 #################################################
4239 # check for syslog logging
4240 AC_MSG_CHECKING(whether to use syslog logging)
4241 AC_ARG_WITH(syslog,
4242 [  --with-syslog           Include experimental SYSLOG support (default=no)],
4243 [ case "$withval" in
4244   yes)
4245     AC_MSG_RESULT(yes)
4246     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4247     ;;
4248   *)
4249     AC_MSG_RESULT(no)
4250     ;;
4251   esac ],
4252   AC_MSG_RESULT(no)
4253 )
4254
4255 #################################################
4256 # check for experimental disk-quotas support
4257
4258 samba_cv_WITH_QUOTAS=auto
4259 samba_cv_TRY_QUOTAS=no
4260 samba_cv_RUN_QUOTA_TESTS=auto
4261 samba_cv_WITH_SYS_QUOTAS=auto
4262 samba_cv_TRY_SYS_QUOTAS=auto
4263 samba_cv_SYSQUOTA_FOUND=no
4264
4265 AC_MSG_CHECKING(whether to try disk-quotas support)
4266 AC_ARG_WITH(quotas,
4267 [  --with-quotas           Include disk-quota support (default=no)],
4268 [ case "$withval" in
4269   yes)
4270     AC_MSG_RESULT(yes)
4271     samba_cv_WITH_QUOTAS=yes
4272     samba_cv_TRY_QUOTAS=yes
4273     samba_cv_RUN_QUOTA_TESTS=yes
4274     #set sys quotas to auto in this case
4275     samba_cv_TRY_SYS_QUOTAS=auto
4276     ;;
4277   auto)
4278     AC_MSG_RESULT(auto)
4279     samba_cv_WITH_QUOTAS=auto
4280     samba_cv_TRY_QUOTAS=auto
4281     samba_cv_RUN_QUOTA_TESTS=auto
4282     #set sys quotas to auto in this case
4283     samba_cv_TRY_SYS_QUOTAS=auto
4284     ;;
4285   no)
4286     AC_MSG_RESULT(no)
4287     samba_cv_WITH_QUOTAS=no
4288     samba_cv_TRY_QUOTAS=no
4289     samba_cv_RUN_QUOTA_TESTS=no
4290     ;;
4291   *)
4292     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4293     ;;
4294   esac ],
4295   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4296 )
4297
4298 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4299 AC_ARG_WITH(sys-quotas,
4300 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
4301 [ case "$withval" in
4302   yes)
4303     AC_MSG_RESULT(yes)
4304     samba_cv_WITH_SYS_QUOTAS=yes
4305     samba_cv_TRY_SYS_QUOTAS=yes
4306     samba_cv_RUN_QUOTA_TESTS=yes
4307     ;;
4308   auto)
4309     AC_MSG_RESULT(auto)
4310     samba_cv_WITH_SYS_QUOTAS=auto
4311     samba_cv_TRY_SYS_QUOTAS=auto
4312     samba_cv_RUN_QUOTA_TESTS=auto
4313     ;;
4314   no)
4315     AC_MSG_RESULT(no)
4316     samba_cv_WITH_SYS_QUOTAS=no
4317     samba_cv_TRY_SYS_QUOTAS=no
4318     ;;
4319   *)
4320     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4321     ;;
4322   esac ],
4323   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4324 )
4325
4326 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4327 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4328   case "$host_os" in
4329         *linux*)
4330             AC_MSG_RESULT(yes)
4331             samba_cv_TRY_SYS_QUOTAS=yes
4332             samba_cv_RUN_QUOTA_TESTS=yes
4333             ;;
4334         *)
4335             AC_MSG_RESULT(no)
4336             samba_cv_TRY_SYS_QUOTAS=no
4337             ;;
4338   esac
4339 fi
4340
4341 #############################################
4342 # only check for quota stuff if --with-quotas
4343 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4344
4345 case "$host_os" in
4346         # on linux we didn't need to test we have builtin support
4347         *linux*)
4348             samba_cv_SYSQUOTA_FOUND=yes
4349             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4350             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4351             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4352             AC_MSG_RESULT(yes)
4353
4354             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4355             samba_cv_found_xfs_header=yes
4356             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4357             AC_MSG_RESULT(yes)
4358             ;;
4359         *solaris*)
4360             # need to set this define when using static linking (BUG 1473)
4361             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4362             ;;
4363         *)
4364             ;;
4365 esac
4366
4367 # some broken header files need this
4368 AC_CHECK_HEADER(asm/types.h,[
4369             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4370             AC_ADD_INCLUDE(<asm/types.h>)
4371             ])
4372
4373 # For quotas on Veritas VxFS filesystems
4374 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4375
4376 # For sys/quota.h and linux/quota.h
4377 AC_CHECK_HEADERS(sys/quota.h)
4378
4379 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4380 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4381 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4382 AC_TRY_COMPILE([
4383 #include "confdefs.h"
4384 #ifdef HAVE_SYS_TYPES_H
4385 #include <sys/types.h>
4386 #endif
4387 #ifdef HAVE_ASM_TYPES_H
4388 #include <asm/types.h>
4389 #endif
4390 #include <sys/quota.h>
4391 ],[int i = Q_XGETQUOTA;],
4392 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4393 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4394         samba_cv_found_xfs_header=yes
4395 fi
4396 fi
4397
4398 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX 
4399 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4400 AC_TRY_COMPILE([
4401 #include "confdefs.h"
4402 #ifdef HAVE_SYS_QUOTA_H
4403 #include <sys/quota.h>
4404 #endif
4405 ],[
4406 struct dqblk D;
4407 D.dqb_fsoftlimit = 0;],
4408 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4409 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4410         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4411 fi
4412
4413 ##################
4414 # look for a working quota system
4415
4416 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4417 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4418 AC_TRY_RUN_STRICT([
4419 #define HAVE_QUOTACTL_4A 1
4420 #define AUTOCONF_TEST 1
4421 #include "confdefs.h"
4422 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4423            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4424 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4425     samba_cv_SYSQUOTA_FOUND=yes;
4426     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4427     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4428 fi
4429 fi
4430
4431 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4432 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4433 AC_TRY_RUN_STRICT([
4434 #define HAVE_QUOTACTL_4B 1
4435 #define AUTOCONF_TEST 1
4436 #include "confdefs.h"
4437 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4438            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4439 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4440     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4441     samba_cv_SYSQUOTA_FOUND=yes;
4442     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4443     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4444 fi
4445 fi
4446
4447 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4448 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4449 AC_TRY_RUN_STRICT([
4450 #define HAVE_QUOTACTL_3 1
4451 #define AUTOCONF_TEST 1
4452 #include "confdefs.h"
4453 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4454            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4455 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4456     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4457     samba_cv_SYSQUOTA_FOUND=yes;
4458     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4459     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4460 fi
4461 fi
4462
4463 #################################################
4464 # check for mntent.h and struct mntent
4465 AC_CHECK_HEADERS(mntent.h)
4466 #################################################
4467 # check for setmntent,getmntent,endmntent
4468 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4469
4470 #################################################
4471 # check for devnm.h and struct mntent
4472 AC_CHECK_HEADERS(devnm.h)
4473 #################################################
4474 # check for devnm
4475 AC_CHECK_FUNCS(devnm)
4476
4477 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4478     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4479         # if --with-sys-quotas=yes then build it 
4480         # you have can use the get/set quota command smb.conf
4481         # options then
4482         samba_cv_SYSQUOTA_FOUND=auto
4483     fi
4484     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4485         # if --with-sys-quotas=yes then build it 
4486         # you have can use the get/set quota command smb.conf
4487         # options then
4488         samba_cv_TRY_SYS_QUOTAS=auto
4489     fi
4490 fi
4491
4492 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4493 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4494 SAVE_CPPFLAGS="$CPPFLAGS"
4495 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4496 AC_TRY_COMPILE([
4497 #include "confdefs.h"
4498 #define NO_PROTO_H 1
4499 #define NO_CONFIG_H 1
4500 #define HAVE_SYS_QUOTAS 1
4501 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4502 #include "${srcdir-.}/lib/sysquotas.c"
4503 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4504 CPPFLAGS="$SAVE_CPPFLAGS"
4505 ])
4506 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4507 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4508     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then 
4509         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4510         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4511         samba_cv_WE_USE_SYS_QUOTAS=yes
4512         AC_MSG_RESULT(yes)
4513     else
4514         AC_MSG_RESULT(no)
4515     fi
4516 fi
4517 fi
4518
4519 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4520 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4521 SAVE_CPPFLAGS="$CPPFLAGS"
4522 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4523 AC_TRY_COMPILE([
4524 #include "confdefs.h"
4525 #define NO_PROTO_H 1
4526 #define NO_CONFIG_H 1
4527 #define HAVE_SYS_QUOTAS 1
4528 #define HAVE_XFS_QUOTAS 1
4529 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4530 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4531 CPPFLAGS="$SAVE_CPPFLAGS"
4532 ])
4533 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4534     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4535         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4536     fi
4537 fi
4538 fi
4539
4540 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4541 SAVE_CPPFLAGS="$CPPFLAGS"
4542 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4543 AC_TRY_COMPILE([
4544 #include "confdefs.h"
4545 #define NO_PROTO_H 1
4546 #define NO_CONFIG_H 1
4547 #include "${srcdir-.}/smbd/quotas.c"
4548 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4549 CPPFLAGS="$SAVE_CPPFLAGS"
4550 ])
4551 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4552 AC_MSG_CHECKING(whether to use the old quota support)
4553     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4554       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4555         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4556         AC_MSG_RESULT(yes)
4557       else
4558         AC_MSG_RESULT(no)
4559       fi
4560     else
4561       AC_MSG_RESULT(no)
4562     fi
4563 fi
4564
4565 ####################
4566 # End of quota check samba_cv_RUN_QUOTA_TESTS
4567 fi
4568
4569 #################################################
4570 # check for experimental utmp accounting
4571
4572 AC_MSG_CHECKING(whether to support utmp accounting)
4573 WITH_UTMP=yes
4574 AC_ARG_WITH(utmp,
4575 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
4576 [ case "$withval" in
4577   no)
4578                 WITH_UTMP=no
4579                 ;;
4580   *)
4581                 WITH_UTMP=yes
4582                 ;;
4583   esac ],
4584 )
4585
4586 # utmp requires utmp.h
4587 # Note similar check earlier, when checking utmp details.
4588
4589 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4590         utmp_no_reason=", no utmp.h on $host_os"
4591         WITH_UTMP=no
4592 fi
4593
4594 # Display test results
4595
4596 if test x"$WITH_UTMP" = x"yes"; then
4597         AC_MSG_RESULT(yes)
4598         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4599 else
4600         AC_MSG_RESULT(no$utmp_no_reason)
4601 fi
4602
4603 INSTALLLIBCMD_SH=:
4604 INSTALLLIBCMD_A=:
4605 UNINSTALLLIBCMD_SH=:
4606 UNINSTALLLIBCMD_A=:
4607
4608 if test $BLDSHARED = true; then
4609         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4610         UNINSTALLLIBCMD_SH="rm -f"
4611 fi
4612 if test $enable_static = yes; then
4613         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4614         UNINSTALLLIBCMD_A="rm -f"
4615 fi
4616
4617 #################################################
4618 # should we build libmsrpc?
4619 INSTALL_LIBMSRPC=
4620 UNINSTALL_LIBMSRPC=
4621 LIBMSRPC_SHARED=
4622 LIBMSRPC=
4623 AC_MSG_CHECKING(whether to build the libmsrpc shared library)
4624 AC_ARG_WITH(libmsrpc,
4625 [  --with-libmsrpc         Build the libmsrpc shared library (default=yes if shared libs supported)],
4626 [ case "$withval" in
4627   no) 
4628      AC_MSG_RESULT(no)
4629      ;;
4630   *)
4631      if test $BLDSHARED = true; then
4632         LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4633         LIBMSRPC=libmsrpc
4634         AC_MSG_RESULT(yes)
4635      else
4636         enable_static=yes
4637         AC_MSG_RESULT(no shared library support -- will supply static library)
4638      fi
4639      if test $enable_static = yes; then
4640         LIBMSRPC=libmsrpc
4641      fi
4642      INSTALL_LIBMSRPC=installlibmsrpc
4643      UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4644      ;;
4645   esac ],
4646 [
4647 # if unspecified, default is to built it if possible.
4648   if test $BLDSHARED = true; then
4649      LIBMSRPC_SHARED=bin/libmsrpc.$SHLIBEXT
4650      LIBMSRPC=libmsrpc
4651      AC_MSG_RESULT(yes)
4652    else
4653      enable_static=yes
4654      AC_MSG_RESULT(no shared library support -- will supply static library)
4655    fi
4656    if test $enable_static = yes; then
4657      LIBMSRPC=libmsrpc
4658   fi]
4659   INSTALL_LIBMSRPC=installlibmsrpc
4660   UNINSTALL_LIBMSRPC=uninstalllibmsrpc
4661 )
4662
4663
4664 #################################################
4665 # should we build libaddns?
4666 INSTALL_LIBADDNS=
4667 UNINSTALL_LIBADDNS=
4668 LIBADDNS_SHARED=
4669 LIBADDNS=
4670 AC_MSG_CHECKING(whether to build the libaddns shared library)
4671 AC_ARG_WITH(libaddns,
4672 [  --with-libaddns         Build the libaddns shared library (default=yes if shared libs supported)],
4673 [ case "$withval" in
4674   no) 
4675      AC_MSG_RESULT(no)
4676      ;;
4677   *)
4678      if test $BLDSHARED = true; then
4679         LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4680         LIBADDNS=libaddns
4681         AC_MSG_RESULT(yes)
4682      else
4683         enable_static=yes
4684         AC_MSG_RESULT(no shared library support -- will supply static library)
4685      fi
4686      if test $enable_static = yes; then
4687         LIBADDNS=libaddns
4688      fi
4689      INSTALL_LIBADDNS=installlibaddns
4690      UNINSTALL_LIBADDNS=uninstalllibaddns
4691      ;;
4692   esac ],
4693 [
4694 # if unspecified, default is to built it if possible.
4695   if test $BLDSHARED = true; then
4696      LIBADDNS_SHARED=bin/libaddns.$SHLIBEXT
4697      LIBADDNS=libaddns
4698      AC_MSG_RESULT(yes)
4699    else
4700      enable_static=yes
4701      AC_MSG_RESULT(no shared library support -- will supply static library)
4702    fi
4703    if test $enable_static = yes; then
4704      LIBADDNS=libaddns
4705   fi]
4706   INSTALL_LIBADDNS=installlibaddns
4707   UNINSTALL_LIBADDNS=uninstalllibaddns
4708 )
4709
4710 #################################################
4711 # should we build libsmbclient?
4712 INSTALL_LIBSMBCLIENT=
4713 UNINSTALL_LIBSMBCLIENT=
4714 LIBSMBCLIENT_SHARED=
4715 LIBSMBCLIENT=
4716 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
4717 AC_ARG_WITH(libsmbclient,
4718 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
4719 [ case "$withval" in
4720   no) 
4721      AC_MSG_RESULT(no)
4722      ;;
4723   *)
4724      if test $BLDSHARED = true; then
4725         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4726         LIBSMBCLIENT=libsmbclient
4727         AC_MSG_RESULT(yes)
4728      else
4729         enable_static=yes
4730         AC_MSG_RESULT(no shared library support -- will supply static library)
4731      fi
4732      if test $enable_static = yes; then
4733         LIBSMBCLIENT=libsmbclient
4734      fi
4735      INSTALL_LIBSMBCLIENT=installclientlib
4736      UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4737      ;;
4738   esac ],
4739 [
4740 # if unspecified, default is to built it if possible.
4741   if test $BLDSHARED = true; then
4742      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
4743      LIBSMBCLIENT=libsmbclient
4744      AC_MSG_RESULT(yes)
4745    else
4746      enable_static=yes
4747      AC_MSG_RESULT(no shared library support -- will supply static library)
4748    fi
4749    if test $enable_static = yes; then
4750      LIBSMBCLIENT=libsmbclient
4751   fi]
4752   INSTALL_LIBSMBCLIENT=installclientlib
4753   UNINSTALL_LIBSMBCLIENT=uninstallclientlib
4754 )
4755
4756 INSTALL_LIBSMBSHAREMODES=
4757 LIBSMBSHAREMODES_SHARED=
4758 LIBSMBSHAREMODES=
4759 AC_MSG_CHECKING(whether to build the libsmbsharemodes shared library)
4760 AC_ARG_WITH(libsmbsharemodes,
4761 [  --with-libsmbsharemodes     Build the libsmbsharemodes shared library (default=yes if shared libs supported)],
4762 [ case "$withval" in
4763   no)
4764      AC_MSG_RESULT(no)
4765      ;;
4766   *)
4767      if test $BLDSHARED = true; then
4768         LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4769         LIBSMBSHAREMODES=libsmbsharemodes
4770         AC_MSG_RESULT(yes)
4771      else
4772         enable_static=yes
4773         AC_MSG_RESULT(no shared library support -- will supply static library)
4774      fi
4775      if test $enable_static = yes; then
4776         LIBSMBSHAREMODES=libsmbsharemodes
4777      fi
4778      INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4779      UNINSTALL_LIBSMBSHAREMODES=uninstalllibsmbsharemodes
4780      ;;
4781   esac ],
4782 [
4783 # if unspecified, default is to built it if possible.
4784   if test $BLDSHARED = true; then
4785      LIBSMBSHAREMODES_SHARED=bin/libsmbsharemodes.$SHLIBEXT
4786      LIBSMBSHAREMODES=libsmbsharemodes
4787      AC_MSG_RESULT(yes)
4788    else
4789      enable_static=yes
4790      AC_MSG_RESULT(no shared library support -- will supply static library)
4791    fi
4792    if test $enable_static = yes; then
4793      LIBSMBSHAREMODES=libsmbsharemodes
4794   fi]
4795   INSTALL_LIBSMBSHAREMODES=installlibsmbsharemodes
4796 )
4797
4798 #################################################
4799 # these tests are taken from the GNU fileutils package
4800 AC_CHECKING(how to get filesystem space usage)
4801 space=no
4802
4803 # Test for statvfs64.
4804 if test $space = no; then
4805   # SVR4
4806   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4807   [AC_TRY_RUN([
4808 #if defined(HAVE_UNISTD_H)
4809 #include <unistd.h>
4810 #endif
4811 #include <sys/types.h>
4812 #include <sys/statvfs.h>
4813   main ()
4814   {
4815     struct statvfs64 fsd;
4816     exit (statvfs64 (".", &fsd));
4817   }],
4818   fu_cv_sys_stat_statvfs64=yes,
4819   fu_cv_sys_stat_statvfs64=no,
4820   fu_cv_sys_stat_statvfs64=cross)])
4821   if test $fu_cv_sys_stat_statvfs64 = yes; then
4822     space=yes
4823     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4824   fi
4825 fi
4826
4827 # Perform only the link test since it seems there are no variants of the
4828 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4829 # because that got a false positive on SCO OSR5.  Adding the declaration
4830 # of a `struct statvfs' causes this test to fail (as it should) on such
4831 # systems.  That system is reported to work fine with STAT_STATFS4 which
4832 # is what it gets when this test fails.
4833 if test $space = no; then
4834   # SVR4
4835   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4836                  [AC_TRY_LINK([#include <sys/types.h>
4837 #include <sys/statvfs.h>],
4838                               [struct statvfs fsd; statvfs (0, &fsd);],
4839                               fu_cv_sys_stat_statvfs=yes,
4840                               fu_cv_sys_stat_statvfs=no)])
4841   if test $fu_cv_sys_stat_statvfs = yes; then
4842     space=yes
4843     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4844   fi
4845 fi
4846
4847 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4848 # This is not the case on ancient Linux systems.
4849
4850 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4851     AC_TRY_COMPILE([#include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4852         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4853 if test x"$samba_cv_fsid_int" = x"yes"; then
4854     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4855 fi
4856
4857 if test $space = no; then
4858   # DEC Alpha running OSF/1
4859   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4860   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4861   [AC_TRY_RUN([
4862 #include <sys/param.h>
4863 #include <sys/types.h>
4864 #include <sys/mount.h>
4865   main ()
4866   {
4867     struct statfs fsd;
4868     fsd.f_fsize = 0;
4869     exit (statfs (".", &fsd, sizeof (struct statfs)));
4870   }],
4871   fu_cv_sys_stat_statfs3_osf1=yes,
4872   fu_cv_sys_stat_statfs3_osf1=no,
4873   fu_cv_sys_stat_statfs3_osf1=no)])
4874   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4875   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4876     space=yes
4877     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4878   fi
4879 fi
4880
4881 if test $space = no; then
4882 # AIX
4883   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4884 member (AIX, 4.3BSD)])
4885   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4886   [AC_TRY_RUN([
4887 #ifdef HAVE_SYS_PARAM_H
4888 #include <sys/param.h>
4889 #endif
4890 #ifdef HAVE_SYS_MOUNT_H
4891 #include <sys/mount.h>
4892 #endif
4893 #ifdef HAVE_SYS_VFS_H
4894 #include <sys/vfs.h>
4895 #endif
4896   main ()
4897   {
4898   struct statfs fsd;
4899   fsd.f_bsize = 0;
4900   exit (statfs (".", &fsd));
4901   }],
4902   fu_cv_sys_stat_statfs2_bsize=yes,
4903   fu_cv_sys_stat_statfs2_bsize=no,
4904   fu_cv_sys_stat_statfs2_bsize=no)])
4905   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4906   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4907     space=yes
4908     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4909   fi
4910 fi
4911
4912 if test $space = no; then
4913 # SVR3
4914   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4915   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4916   [AC_TRY_RUN([#include <sys/types.h>
4917 #include <sys/statfs.h>
4918   main ()
4919   {
4920   struct statfs fsd;
4921   exit (statfs (".", &fsd, sizeof fsd, 0));
4922   }],
4923     fu_cv_sys_stat_statfs4=yes,
4924     fu_cv_sys_stat_statfs4=no,
4925     fu_cv_sys_stat_statfs4=no)])
4926   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4927   if test $fu_cv_sys_stat_statfs4 = yes; then
4928     space=yes
4929     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4930   fi
4931 fi
4932
4933 if test $space = no; then
4934 # 4.4BSD and NetBSD
4935   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4936 member (4.4BSD and NetBSD)])
4937   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4938   [AC_TRY_RUN([#include <sys/types.h>
4939 #ifdef HAVE_SYS_PARAM_H
4940 #include <sys/param.h>
4941 #endif
4942 #ifdef HAVE_SYS_MOUNT_H
4943 #include <sys/mount.h>
4944 #endif
4945   main ()
4946   {
4947   struct statfs fsd;
4948   fsd.f_fsize = 0;
4949   exit (statfs (".", &fsd));
4950   }],
4951   fu_cv_sys_stat_statfs2_fsize=yes,
4952   fu_cv_sys_stat_statfs2_fsize=no,
4953   fu_cv_sys_stat_statfs2_fsize=no)])
4954   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4955   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4956     space=yes
4957         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4958   fi
4959 fi
4960
4961 if test $space = no; then
4962   # Ultrix
4963   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4964   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4965   [AC_TRY_RUN([#include <sys/types.h>
4966 #ifdef HAVE_SYS_PARAM_H
4967 #include <sys/param.h>
4968 #endif
4969 #ifdef HAVE_SYS_MOUNT_H
4970 #include <sys/mount.h>
4971 #endif
4972 #ifdef HAVE_SYS_FS_TYPES_H
4973 #include <sys/fs_types.h>
4974 #endif
4975   main ()
4976   {
4977   struct fs_data fsd;
4978   /* Ultrix's statfs returns 1 for success,
4979      0 for not mounted, -1 for failure.  */
4980   exit (statfs (".", &fsd) != 1);
4981   }],
4982   fu_cv_sys_stat_fs_data=yes,
4983   fu_cv_sys_stat_fs_data=no,
4984   fu_cv_sys_stat_fs_data=no)])
4985   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4986   if test $fu_cv_sys_stat_fs_data = yes; then
4987     space=yes
4988     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4989   fi
4990 fi
4991
4992 #
4993 # As a gating factor for large file support, in order to
4994 # use <4GB files we must have the following minimal support
4995 # available.
4996 # long long, and a 64 bit off_t or off64_t.
4997 # If we don't have all of these then disable large
4998 # file support.
4999 #
5000 AC_MSG_CHECKING([if large file support can be enabled])
5001 AC_TRY_COMPILE([
5002 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5003 #include <sys/types.h>
5004 #else
5005 __COMPILE_ERROR_
5006 #endif
5007 ],
5008 [int i],
5009 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5010 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5011         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5012 fi
5013 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5014
5015 #################################################
5016 # check for cluster extensions
5017
5018 AC_MSG_CHECKING(whether to include cluster support)
5019 AC_ARG_WITH(cluster-support, 
5020 [  --with-cluster-support  Enable cluster extensions (default=no)])
5021 if test "x$with_cluster_support" = "xyes"; then
5022     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5023     AC_MSG_RESULT(yes)
5024 else
5025     AC_MSG_RESULT(no)
5026 fi
5027
5028
5029 #################################################
5030 # check for ACL support
5031
5032 AC_MSG_CHECKING(whether to support ACLs)
5033 AC_ARG_WITH(acl-support,
5034 [  --with-acl-support      Include ACL support (default=no)],
5035 [ case "$withval" in
5036   yes)
5037
5038         case "$host_os" in
5039         *sysv5*)
5040                 AC_MSG_RESULT(Using UnixWare ACLs)
5041                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5042                 default_static_modules="$default_static_modules vfs_solarisacl"
5043                 ;;
5044         *solaris*)
5045                 AC_MSG_RESULT(Using solaris ACLs)
5046                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5047                 ACL_LIBS="$ACL_LIBS -lsec"
5048                 default_static_modules="$default_static_modules vfs_solarisacl"
5049                 ;;
5050         *hpux*)
5051                 AC_MSG_RESULT(Using HPUX ACLs)
5052                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5053                 default_static_modules="$default_static_modules vfs_hpuxacl"
5054                 ;;
5055         *irix*)
5056                 AC_MSG_RESULT(Using IRIX ACLs)
5057                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5058                 default_static_modules="$default_static_modules vfs_irixacl"
5059                 ;;
5060         *aix*)
5061                 AC_MSG_RESULT(Using AIX ACLs)
5062                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5063                 default_static_modules="$default_static_modules vfs_aixacl"
5064                 ;;
5065         *osf*)
5066                 AC_MSG_RESULT(Using Tru64 ACLs)
5067                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5068                 ACL_LIBS="$ACL_LIBS -lpacl"
5069                 default_static_modules="$default_static_modules vfs_tru64acl"
5070                 ;;
5071         *freebsd[[5-9]]*)
5072                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
5073                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
5074                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5075                 ;;
5076         *linux*)
5077                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5078                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5079                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5080                         acl_LIBS=$LIBS
5081                         LIBS="$LIBS -lacl"
5082                         AC_TRY_LINK([
5083                                 #include <sys/types.h>
5084                                 #include <sys/acl.h>
5085                         ],[
5086                                 acl_t acl;
5087                                 int entry_id;
5088                                 acl_entry_t *entry_p;
5089                                 return acl_get_entry(acl, entry_id, entry_p);
5090                         ],
5091                         [samba_cv_HAVE_POSIX_ACLS=yes],
5092                         [samba_cv_HAVE_POSIX_ACLS=no])
5093                         LIBS=$acl_LIBS
5094                 ])
5095                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5096                         AC_MSG_RESULT(Using posix ACLs)
5097                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5098                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5099                                 acl_LIBS=$LIBS
5100                                 LIBS="$LIBS -lacl"
5101                                 AC_TRY_LINK([
5102                                         #include <sys/types.h>
5103                                         #include <sys/acl.h>
5104                                 ],[
5105                                         acl_permset_t permset_d;
5106                                         acl_perm_t perm;
5107                                         return acl_get_perm_np(permset_d, perm);
5108                                 ],
5109                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5110                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5111                                 LIBS=$acl_LIBS
5112                         ])
5113                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5114                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5115                         fi
5116                 fi
5117             ;;
5118          *)
5119                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5120                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
5121                         acl_LIBS=$LIBS
5122                         LIBS="$LIBS -lacl"
5123                         AC_TRY_LINK([
5124                                 #include <sys/types.h>
5125                                 #include <sys/acl.h>
5126                         ],[
5127                                 acl_t acl;
5128                                 int entry_id;
5129                                 acl_entry_t *entry_p;
5130                                 return acl_get_entry( acl, entry_id, entry_p);
5131                         ],
5132                         [samba_cv_HAVE_POSIX_ACLS=yes],
5133                         [samba_cv_HAVE_POSIX_ACLS=no])
5134                         LIBS=$acl_LIBS
5135                 ])
5136                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5137                         AC_MSG_RESULT(Using posix ACLs)
5138                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5139                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5140                                 acl_LIBS=$LIBS
5141                                 LIBS="$LIBS -lacl"
5142                                 AC_TRY_LINK([
5143                                         #include <sys/types.h>
5144                                         #include <sys/acl.h>
5145                                 ],[
5146                                         acl_permset_t permset_d;
5147                                         acl_perm_t perm;
5148                                         return acl_get_perm_np( permset_d, perm);
5149                                 ],
5150                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5151                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5152                                 LIBS=$acl_LIBS
5153                         ])
5154                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5155                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5156                         fi
5157                 fi
5158             ;;
5159         esac
5160         ;;
5161   *)
5162     AC_MSG_RESULT(no)
5163     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5164     ;;
5165   esac ],
5166   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5167   AC_MSG_RESULT(no)
5168 )
5169
5170 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5171    default_static_modules="$default_static_modules vfs_posixacl"
5172 fi
5173
5174 #################################################
5175 # check for AIO support
5176
5177 AC_MSG_CHECKING(whether to support asynchronous io)
5178 AC_ARG_WITH(aio-support,
5179 [  --with-aio-support      Include asynchronous io support (default=no)],
5180 [ case "$withval" in
5181   yes)
5182
5183         AC_MSG_RESULT(yes)
5184         case "$host_os" in
5185         *)
5186                 AIO_LIBS=$LIBS
5187                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5188                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5189                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5190                 aio_LIBS=$LIBS
5191                 LIBS=$AIO_LIBS
5192                 AC_TRY_LINK([#include <sys/types.h>
5193 #include <aio.h>],
5194 [ struct aiocb a; return aio_read(&a);],
5195 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5196                 LIBS=$aio_LIBS])
5197                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5198                 aio_LIBS=$LIBS
5199                 LIBS=$AIO_LIBS
5200                 AC_TRY_LINK([#include <sys/types.h>
5201 #include <aio.h>],
5202 [ struct aiocb64 a; return aio_read64(&a);],
5203 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5204                 LIBS=$aio_LIBS])
5205                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5206                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5207                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5208                         LIBS=$AIO_LIBS
5209                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5210                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5211                         LIBS=$AIO_LIBS
5212                 fi
5213
5214                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5215                         AC_MSG_CHECKING(for aio_read)
5216                         AC_LINK_IFELSE([#include <aio.h>
5217 int main() { struct aiocb a; return aio_read(&a); }],
5218 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5219 [AC_MSG_RESULT(no)])
5220
5221                         AC_MSG_CHECKING(for aio_write)
5222                         AC_LINK_IFELSE([#include <aio.h>
5223 int main() { struct aiocb a; return aio_write(&a); }],
5224 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5225 [AC_MSG_RESULT(no)])
5226
5227                         AC_MSG_CHECKING(for aio_fsync)
5228                         AC_LINK_IFELSE([#include <aio.h>
5229 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5230 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5231 [AC_MSG_RESULT(no)])
5232
5233                         AC_MSG_CHECKING(for aio_return)
5234                         AC_LINK_IFELSE([#include <aio.h>
5235 int main() { struct aiocb a; return aio_return(&a); }],
5236 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5237 [AC_MSG_RESULT(no)])
5238
5239                         AC_MSG_CHECKING(for aio_error)
5240                         AC_LINK_IFELSE([#include <aio.h>
5241 int main() { struct aiocb a; return aio_error(&a); }],
5242 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5243 [AC_MSG_RESULT(no)])
5244
5245                         AC_MSG_CHECKING(for aio_cancel)
5246                         AC_LINK_IFELSE([#include <aio.h>
5247 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5248 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5249 [AC_MSG_RESULT(no)])
5250
5251                         AC_MSG_CHECKING(for aio_suspend)
5252                         AC_LINK_IFELSE([#include <aio.h>
5253 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5254 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5255 [AC_MSG_RESULT(no)])
5256                 fi
5257
5258                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5259                         AC_MSG_CHECKING(for aio_read64)
5260                         AC_LINK_IFELSE([#include <aio.h>
5261 int main() { struct aiocb a; return aio_read64(&a); }],
5262 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5263 [AC_MSG_RESULT(no)])
5264
5265                         AC_MSG_CHECKING(for aio_write64)
5266                         AC_LINK_IFELSE([#include <aio.h>
5267 int main() { struct aiocb a; return aio_write64(&a); }],
5268 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5269 [AC_MSG_RESULT(no)])
5270
5271                         AC_MSG_CHECKING(for aio_fsync64)
5272                         AC_LINK_IFELSE([#include <aio.h>
5273 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5274 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5275 [AC_MSG_RESULT(no)])
5276
5277                         AC_MSG_CHECKING(for aio_return64)
5278                         AC_LINK_IFELSE([#include <aio.h>
5279 int main() { struct aiocb a; return aio_return64(&a); }],
5280 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5281 [AC_MSG_RESULT(no)])
5282
5283                         AC_MSG_CHECKING(for aio_error64)
5284                         AC_LINK_IFELSE([#include <aio.h>
5285 int main() { struct aiocb a; return aio_error64(&a); }],
5286 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5287 [AC_MSG_RESULT(no)])
5288
5289                         AC_MSG_CHECKING(for aio_cancel64)
5290                         AC_LINK_IFELSE([#include <aio.h>
5291 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5292 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5293 [AC_MSG_RESULT(no)])
5294
5295                         AC_MSG_CHECKING(for aio_suspend64)
5296                         AC_LINK_IFELSE([#include <aio.h>
5297 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5298 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5299 [AC_MSG_RESULT(no)])
5300                 fi
5301             ;;
5302         esac
5303         ;;
5304   *)
5305     AC_MSG_RESULT(no)
5306     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5307     ;;
5308   esac ],
5309   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5310   AC_MSG_RESULT(no)
5311 )
5312
5313 #################################################
5314 # check for sendfile support
5315
5316 with_sendfile_support=yes
5317 AC_MSG_CHECKING(whether to check to support sendfile)
5318 AC_ARG_WITH(sendfile-support,
5319 [  --with-sendfile-support Check for sendfile support (default=yes)],
5320 [ case "$withval" in
5321   yes)
5322
5323         AC_MSG_RESULT(yes);
5324
5325         case "$host_os" in
5326         *linux*)
5327                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5328                 AC_TRY_LINK([#include <sys/sendfile.h>],
5329 [\
5330 int tofd, fromfd;
5331 off64_t offset;
5332 size_t total;
5333 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5334 ],
5335 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5336
5337                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5338                 AC_TRY_LINK([#include <sys/sendfile.h>],
5339 [\
5340 int tofd, fromfd;
5341 off_t offset;
5342 size_t total;
5343 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5344 ],
5345 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5346
5347 # Try and cope with broken Linux sendfile....
5348                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5349                 AC_TRY_LINK([\
5350 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5351 #undef _FILE_OFFSET_BITS
5352 #endif
5353 #include <sys/sendfile.h>],
5354 [\
5355 int tofd, fromfd;
5356 off_t offset;
5357 size_t total;
5358 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5359 ],
5360 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5361
5362         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5363                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5364                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5365                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5366         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5367                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5368                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5369                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5370         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5371                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5372                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5373         else
5374                 AC_MSG_RESULT(no);
5375         fi
5376
5377         ;;
5378         *freebsd* | *dragonfly* )
5379                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5380                 AC_TRY_LINK([\
5381 #include <sys/types.h>
5382 #include <unistd.h>
5383 #include <sys/socket.h>
5384 #include <sys/uio.h>],
5385 [\
5386         int fromfd, tofd, ret, total=0;
5387         off_t offset, nwritten;
5388         struct sf_hdtr hdr;
5389         struct iovec hdtrl;
5390         hdr.headers = &hdtrl;
5391         hdr.hdr_cnt = 1;
5392         hdr.trailers = NULL;
5393         hdr.trl_cnt = 0;
5394         hdtrl.iov_base = NULL;
5395         hdtrl.iov_len = 0;
5396         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5397 ],
5398 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5399
5400         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5401                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5402                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5403                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5404         else
5405                 AC_MSG_RESULT(no);
5406         fi
5407         ;;
5408
5409         *hpux*)
5410                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5411                 AC_TRY_LINK([\
5412 #include <sys/socket.h>
5413 #include <sys/uio.h>],
5414 [\
5415         int fromfd, tofd;
5416         size_t total=0;
5417         struct iovec hdtrl[2];
5418         ssize_t nwritten;
5419         off64_t offset;
5420
5421         hdtrl[0].iov_base = 0;
5422         hdtrl[0].iov_len = 0;
5423
5424         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5425 ],
5426 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5427         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5428                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5429                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5430                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5431         else
5432                 AC_MSG_RESULT(no);
5433         fi
5434
5435                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5436                 AC_TRY_LINK([\
5437 #include <sys/socket.h>
5438 #include <sys/uio.h>],
5439 [\
5440         int fromfd, tofd;
5441         size_t total=0;
5442         struct iovec hdtrl[2];
5443         ssize_t nwritten;
5444         off_t offset;
5445
5446         hdtrl[0].iov_base = 0;
5447         hdtrl[0].iov_len = 0;
5448
5449         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5450 ],
5451 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5452         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5453                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5454                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5455                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5456         else
5457                 AC_MSG_RESULT(no);
5458         fi
5459         ;;
5460
5461         *solaris*)
5462                 AC_CHECK_LIB(sendfile,sendfilev)
5463                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5464                 AC_TRY_LINK([\
5465 #include <sys/sendfile.h>],
5466 [\
5467         int sfvcnt;
5468         size_t xferred;
5469         struct sendfilevec vec[2];
5470         ssize_t nwritten;
5471         int tofd;
5472
5473         sfvcnt = 2;
5474
5475         vec[0].sfv_fd = SFV_FD_SELF;
5476         vec[0].sfv_flag = 0;
5477         vec[0].sfv_off = 0;
5478         vec[0].sfv_len = 0;
5479
5480         vec[1].sfv_fd = 0;
5481         vec[1].sfv_flag = 0;
5482         vec[1].sfv_off = 0;
5483         vec[1].sfv_len = 0;
5484         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5485 ],
5486 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5487
5488         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5489                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5490                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5491                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5492         else
5493                 AC_MSG_RESULT(no);
5494         fi
5495
5496                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5497                 AC_TRY_LINK([\
5498 #include <sys/sendfile.h>],
5499 [\
5500         int sfvcnt;
5501         size_t xferred;
5502         struct sendfilevec vec[2];
5503         ssize_t nwritten;
5504         int tofd;
5505
5506         sfvcnt = 2;
5507
5508         vec[0].sfv_fd = SFV_FD_SELF;
5509         vec[0].sfv_flag = 0;
5510         vec[0].sfv_off = 0;
5511         vec[0].sfv_len = 0;
5512
5513         vec[1].sfv_fd = 0;
5514         vec[1].sfv_flag = 0;
5515         vec[1].sfv_off = 0;
5516         vec[1].sfv_len = 0;
5517         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5518 ],
5519 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5520
5521         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5522                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5523                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5524                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5525         else
5526                 AC_MSG_RESULT(no);
5527         fi
5528         ;;
5529         *aix*)
5530                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5531                 AC_TRY_LINK([\
5532 #include <sys/socket.h>],
5533 [\
5534         int fromfd, tofd;
5535         size_t total=0;
5536         struct sf_parms hdtrl;
5537         ssize_t nwritten;
5538         off64_t offset;
5539
5540         hdtrl.header_data = 0;
5541         hdtrl.header_length = 0;
5542         hdtrl.file_descriptor = fromfd;
5543         hdtrl.file_offset = 0;
5544         hdtrl.file_bytes = 0;
5545         hdtrl.trailer_data = 0;
5546         hdtrl.trailer_length = 0;
5547
5548         nwritten = send_file(&tofd, &hdtrl, 0);
5549 ],
5550 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5551         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5552                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5553                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5554                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5555         else
5556                 AC_MSG_RESULT(no);
5557         fi
5558         ;;
5559         *)
5560         ;;
5561         esac
5562         ;;
5563   *)
5564     AC_MSG_RESULT(no)
5565     ;;
5566   esac ],
5567   AC_MSG_RESULT(yes)
5568 )
5569
5570
5571 #################################################
5572 # Check whether winbind is supported on this platform.  If so we need to
5573 # build and install client programs, sbin programs and shared libraries
5574
5575 AC_MSG_CHECKING(whether to build winbind)
5576
5577 # Initially, the value of $host_os decides whether winbind is supported
5578
5579 HAVE_WINBIND=yes
5580
5581 # Define the winbind shared library name and any specific linker flags
5582 # it needs to be built with.
5583
5584 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5585 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5586 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5587 NSSSONAMEVERSIONSUFFIX=""
5588
5589 case "$host_os" in
5590         *linux*)
5591                 NSSSONAMEVERSIONSUFFIX=".2"
5592                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5593                 ;;
5594         *freebsd[[5-9]]*)
5595                 # FreeBSD winbind client is implemented as a wrapper around
5596                 # the Linux version.
5597                 NSSSONAMEVERSIONSUFFIX=".1"
5598                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5599                     nsswitch/winbind_nss_linux.o"
5600                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5601                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5602                 ;;
5603
5604         *netbsd*[[3-9]]*)
5605                 # NetBSD winbind client is implemented as a wrapper
5606                 # around the Linux version. It needs getpwent_r() to
5607                 # indicate libc's use of the correct nsdispatch API.
5608                 #
5609                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5610                         WINBIND_NSS_EXTRA_OBJS="\
5611                             nsswitch/winbind_nss_netbsd.o \
5612                             nsswitch/winbind_nss_linux.o"
5613                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5614                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5615                 else
5616                         HAVE_WINBIND=no
5617                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5618                 fi
5619                 ;;
5620         *irix*)
5621                 # IRIX has differently named shared libraries
5622                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5623                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5624                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5625                 ;;
5626         *solaris*)
5627                 # Solaris winbind client is implemented as a wrapper around
5628                 # the Linux version.
5629                 NSSSONAMEVERSIONSUFFIX=".1"
5630                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5631                     nsswitch/winbind_nss_linux.o"
5632                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
5633                 ;;
5634         *hpux11*)
5635                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5636                 ;;
5637         *aix*)
5638                 # AIX has even differently named shared libraries.  No
5639                 # WINS support has been implemented yet.
5640                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5641                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5642                 WINBIND_NSS="nsswitch/WINBIND"
5643                 WINBIND_WINS_NSS=""
5644                 ;;
5645         *)
5646                 HAVE_WINBIND=no
5647                 winbind_no_reason=", unsupported on $host_os"
5648                 ;;
5649 esac
5650
5651 AC_SUBST(WINBIND_NSS)
5652 AC_SUBST(WINBIND_WINS_NSS)
5653 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5654 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5655 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5656 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5657
5658 # Check the setting of --with-winbind
5659
5660 AC_ARG_WITH(winbind,
5661 [  --with-winbind          Build winbind (default, if supported by OS)],
5662
5663   case "$withval" in
5664         yes)
5665                 HAVE_WINBIND=yes
5666                 ;;
5667         no)
5668                 HAVE_WINBIND=no
5669                 winbind_reason=""
5670                 ;;
5671   esac ],
5672 )
5673
5674 # We need unix domain sockets for winbind
5675
5676 if test x"$HAVE_WINBIND" = x"yes"; then
5677         if test x"$samba_cv_unixsocket" = x"no"; then
5678                 winbind_no_reason=", no unix domain socket support on $host_os"
5679                 HAVE_WINBIND=no
5680         fi
5681 fi
5682
5683 # Display test results
5684
5685 if test x"$HAVE_WINBIND" = x"no"; then
5686         WINBIND_NSS=""
5687         WINBIND_WINS_NSS=""
5688 fi
5689
5690 if test x"$HAVE_WINBIND" = x"yes"; then
5691         AC_MSG_RESULT(yes)
5692         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5693
5694         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5695         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5696         if test $BLDSHARED = true; then
5697                 SHLIB_PROGS="$SHLIB_PROGS $WINBIND_NSS $WINBIND_WINS_NSS"
5698
5699                 if test x"$create_pam_modules" = x"yes"; then
5700                         PAM_MODULES="$PAM_MODULES pam_winbind"
5701                         INSTALL_PAM_MODULES="installpammodules"
5702                         UNINSTALL_PAM_MODULES="uninstallpammodules"
5703                 fi
5704         fi
5705 else
5706         AC_MSG_RESULT(no$winbind_no_reason)
5707 fi
5708
5709 # Solaris 10 does have new member in nss_XbyY_key
5710 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5711                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5712                 [#include <nss_dbdefs.h>])
5713
5714 # Solaris has some extra fields in struct passwd that need to be
5715 # initialised otherwise nscd crashes.  
5716  
5717 AC_CHECK_MEMBER(struct passwd.pw_comment,
5718                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5719                 [#include <pwd.h>])
5720
5721 AC_CHECK_MEMBER(struct passwd.pw_age,
5722                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5723                 [#include <pwd.h>])
5724
5725 # AIX 4.3.x and 5.1 do not have as many members in
5726 # struct secmethod_table as AIX 5.2
5727 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5728        [#include <usersec.h>])
5729 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5730        [#include <usersec.h>])
5731
5732 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
5733 AC_TRY_COMPILE([#include <sys/types.h>
5734 #include <sys/socket.h>],
5735 [struct ucred cred;
5736  socklen_t cred_len;
5737  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
5738 ],
5739 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
5740 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
5741     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
5742 fi
5743
5744
5745 #################################################
5746 # Check to see if we should use the included popt 
5747
5748 AC_ARG_WITH(included-popt,
5749 [  --with-included-popt    use bundled popt library, not from system],
5750
5751   case "$withval" in
5752         yes)
5753                 INCLUDED_POPT=yes
5754                 ;;
5755         no)
5756                 INCLUDED_POPT=no
5757                 ;;
5758   esac ],
5759 )
5760 if test x"$INCLUDED_POPT" != x"yes"; then
5761     AC_CHECK_LIB(popt, poptGetContext,
5762                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5763 fi
5764
5765 AC_MSG_CHECKING(whether to use included popt)
5766 if test x"$INCLUDED_POPT" = x"yes"; then
5767     AC_MSG_RESULT(yes)
5768     BUILD_POPT='$(POPT_OBJ)'
5769     POPTLIBS='$(POPT_OBJ)'
5770     FLAGS1="-I\$(srcdir)/popt"
5771 else
5772     AC_MSG_RESULT(no)
5773     BUILD_POPT=""
5774     POPTLIBS="-lpopt"
5775 fi
5776 AC_SUBST(BUILD_POPT)
5777 AC_SUBST(POPTLIBS)
5778 AC_SUBST(FLAGS1)
5779
5780 #################################################
5781 # Check to see if we should use the included iniparser 
5782
5783 AC_ARG_WITH(included-iniparser,
5784 [  --with-included-iniparser    use bundled iniparser library, not from system],
5785
5786   case "$withval" in
5787         yes)
5788                 INCLUDED_INIPARSER=yes
5789                 ;;
5790         no)
5791                 INCLUDED_INIPARSER=no
5792                 ;;
5793   esac ],
5794 )
5795 if test x"$INCLUDED_INIPARSER" != x"yes"; then
5796     AC_CHECK_LIB(iniparser, iniparser_load,
5797                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
5798 fi
5799
5800 AC_MSG_CHECKING(whether to use included iniparser)
5801 if test x"$INCLUDED_INIPARSER" = x"yes"; then
5802     AC_MSG_RESULT(yes)
5803     BUILD_INIPARSER='$(INIPARSER_OBJ)'
5804         INIPARSERLIBS=""
5805     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
5806 else
5807     AC_MSG_RESULT(no)
5808         BUILD_INIPARSER=""
5809     INIPARSERLIBS="-liniparser"
5810 fi
5811 AC_SUBST(BUILD_INIPARSER)
5812 AC_SUBST(INIPARSERLIBS)
5813 AC_SUBST(FLAGS1)
5814
5815
5816
5817 #################################################
5818 # Check if the user wants Python
5819
5820 # At the moment, you can use this to set which Python binary to link
5821 # against.  (Libraries built for Python2.2 can't be used by 2.1,
5822 # though they can coexist in different directories.)  In the future
5823 # this might make the Python stuff be built by default.
5824
5825 # Defaulting python breaks the clean target if python isn't installed
5826
5827 PYTHON=
5828
5829 AC_ARG_WITH(python,
5830 [  --with-python=PYTHONNAME  build Python libraries],
5831 [ case "${withval-python}" in
5832   yes)
5833         PYTHON=python
5834         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
5835         ;;
5836   no)
5837         PYTHON=
5838         ;;
5839   *)
5840         PYTHON=${withval-python}
5841         ;;
5842   esac ])
5843 AC_SUBST(PYTHON)
5844
5845 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
5846 do
5847         eval MODULE_DEFAULT_$i=STATIC
5848 done
5849
5850 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
5851 do
5852         dnl Fall back to static if we cannot build shared libraries
5853         eval MODULE_DEFAULT_$i=STATIC
5854
5855         if test $BLDSHARED = true; then
5856                 eval MODULE_DEFAULT_$i=SHARED
5857         fi
5858 done
5859
5860 dnl Always built these modules static
5861 MODULE_rpc_spoolss=STATIC
5862 MODULE_rpc_srvsvc=STATIC
5863 MODULE_idmap_tdb=STATIC
5864 MODULE_idmap_passdb=STATIC
5865 MODULE_idmap_nss=STATIC
5866
5867 MODULE_idmap_passdb=STATIC
5868 MODULE_idmap_nss=STATIC
5869
5870 MODULE_nss_info_template=STATIC
5871
5872 AC_ARG_WITH(static-modules,
5873 [  --with-static-modules=MODULES  Comma-separated list of names of modules to statically link in],
5874 [ if test $withval; then
5875         for i in `echo $withval | sed -e 's/,/ /g'`
5876         do
5877                 eval MODULE_$i=STATIC
5878         done
5879 fi ])
5880
5881 AC_ARG_WITH(shared-modules,
5882 [  --with-shared-modules=MODULES  Comma-separated list of names of modules to build shared],
5883 [ if test $withval; then
5884         for i in `echo $withval | sed -e 's/,/ /g'`
5885         do
5886                         eval MODULE_$i=SHARED
5887         done
5888 fi ])
5889
5890 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB, 
5891                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
5892 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
5893 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
5894 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
5895
5896
5897 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
5898 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
5899 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
5900 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
5901 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
5902 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
5903 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
5904 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
5905 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
5906 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
5907 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
5908 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
5909 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
5910 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
5911 SMB_MODULE(rpc_unixinfo, \$(RPC_UNIXINFO_OBJ), "bin/librpc_unixinfo.$SHLIBEXT", RPC)
5912 SMB_SUBSYSTEM(RPC,smbd/server.o)
5913
5914 SMB_MODULE(idmap_ldap, nsswitch/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
5915 SMB_MODULE(idmap_tdb, nsswitch/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
5916 SMB_MODULE(idmap_passdb, nsswitch/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
5917 SMB_MODULE(idmap_nss, nsswitch/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
5918 SMB_MODULE(idmap_rid, nsswitch/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
5919 SMB_MODULE(idmap_ad, nsswitch/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
5920 SMB_SUBSYSTEM(IDMAP, nsswitch/idmap.o)
5921
5922 SMB_MODULE(nss_info_template, nsswitch/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
5923 SMB_SUBSYSTEM(NSS_INFO, nsswitch/nss_info.o)
5924
5925 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
5926 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
5927 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
5928 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
5929 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
5930
5931 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
5932 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
5933 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
5934 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
5935 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
5936 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
5937 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
5938 SMB_SUBSYSTEM(AUTH,auth/auth.o)
5939
5940 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
5941 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
5942 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
5943 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
5944 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
5945 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
5946 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
5947 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
5948 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
5949 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
5950 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
5951 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
5952 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
5953 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
5954 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
5955 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
5956 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
5957 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
5958 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
5959 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
5960 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
5961 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
5962 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
5963 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
5964 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
5965 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
5966
5967 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
5968
5969 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
5970
5971 #################################################
5972 # do extra things if we are running insure
5973
5974 if test "${ac_cv_prog_CC}" = "insure"; then
5975         CPPFLAGS="$CPPFLAGS -D__INSURE__"
5976 fi
5977
5978 #################################################
5979 # If run from the build farm, enable NASTY hacks
5980 #################################################
5981 AC_MSG_CHECKING(whether to enable build farm hacks)
5982 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
5983         AC_MSG_RESULT(yes)
5984         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
5985 else
5986         AC_MSG_RESULT(no)
5987 fi
5988
5989 #################################################
5990 # check for bad librt/libpthread interactions
5991
5992 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
5993     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
5994     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
5995     x"$samba_cv_HAVE_AIO" = x"yes" ; then
5996
5997 SMB_IF_RTSIGNAL_BUG(
5998         [
5999             # Have RT_SIGNAL bug, need to check whether the problem will
6000             # affect anything we have configured.
6001
6002             rt_do_error=no
6003             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6004                 if test x"$rt_signal_lease_ok" = x"no" ; then
6005                     rt_do_error=yes
6006                 fi
6007             fi
6008
6009             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6010                 if test x"$rt_signal_notify_ok" = x"no" ; then
6011                     rt_do_error=yes
6012                 fi
6013             fi
6014
6015             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6016                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6017                 if test x"$rt_signal_aio_ok" = x"no" ; then
6018                     rt_do_error=yes
6019                 fi
6020             fi
6021
6022             if test x"$rt_do_error" = x"yes" ; then
6023                 SMB_IS_LIBPTHREAD_LINKED(
6024                     [
6025                         cat<<MSG
6026
6027 *** On this platforms, linking Samba against pthreads causes problems
6028 *** with the oplock and change notification mechanisms. You may be
6029 *** using pthreads as a side-effect of using the --with-aio-support
6030 *** or --with-profiling-data options. Please remove these and try again.
6031
6032 MSG
6033                     ],
6034                     [
6035                         cat<<MSG
6036
6037 *** On this platform, the oplock and change notification mechanisms do not
6038 *** appear to work. Please report this problem to samba-technical@samba.org
6039 *** and attach the config.log file from this directory.
6040
6041 MSG
6042                     ])
6043                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6044             fi
6045         ],
6046         [
6047             # no RT_SIGNAL bug, we are golden
6048             SMB_IS_LIBPTHREAD_LINKED(
6049                 [
6050                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6051                 ])
6052
6053         ],
6054         [
6055             # cross compiling, I hope you know what you are doing
6056             true
6057         ])
6058
6059 fi
6060
6061 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6062 LIB_REMOVE_USR_LIB(LDFLAGS)
6063 LIB_REMOVE_USR_LIB(LIBS)
6064 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6065
6066 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6067 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6068 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6069
6070 #################################################
6071 # Display summary of libraries detected
6072
6073 AC_MSG_RESULT([Using libraries:])
6074 AC_MSG_RESULT([    LIBS = $LIBS])
6075 if test x"$with_ads_support" != x"no"; then
6076     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6077 fi
6078 if test x"$with_ldap_support" != x"no"; then
6079     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6080 fi
6081 if test x"$with_dnsupdate_support" != x"no"; then
6082     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6083 fi
6084 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6085
6086 #################################################
6087 # final configure stuff
6088
6089 AC_MSG_CHECKING([configure summary])
6090 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6091            AC_MSG_RESULT(yes),
6092            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6093            AC_MSG_WARN([cannot run when cross-compiling]))
6094
6095 builddir=`pwd`
6096 AC_SUBST(builddir)
6097
6098 # Stuff the smbd-only libraries at the end of the smbd link
6099 # path (if we have them).
6100 SMBD_LIBS="$samba_fam_libs $samba_dmapi_libs"
6101 AC_SUBST(SMBD_LIBS)
6102
6103 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh)
6104
6105 #################################################
6106 # Print very concise instructions on building/use
6107 if test "x$enable_dmalloc" = xyes
6108 then
6109         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6110         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6111 fi