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