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