r22777: Fix for [Bug 4543] - POSIX ACL support on FreeBSD.
[sfrench/samba-autobuild/.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         DEVELOPER_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        ])
417        if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
418             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
419        fi
420         # here
421         #-Werror-implicit-function-declaration
422         AC_CACHE_CHECK(
423           [that the C compiler understands -Werror-implicit-function-declaration],
424           samba_cv_HAVE_Werror_implicit_function_declaration, [
425           AC_TRY_RUN_STRICT([
426             int main(void)
427             {
428                 return 0;
429             }],[-Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
430             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
431             samba_cv_HAVE_Werror_implicit_function_declaration=no,
432             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
433        ])
434        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
435             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
436        fi
437     fi])
438
439 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
440     [if eval "test x$enable_krb5developer = xyes"; then
441         developer=yes
442         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
443     fi])
444
445 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
446
447 if test "x$enable_dmalloc" = xyes
448 then
449         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
450         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
451                   [Define to check invariants around some common functions])
452         LIBS="$LIBS -ldmalloc"  
453 fi
454
455 #################################################
456 # check for a shared memory profiling support
457 AC_MSG_CHECKING(whether to use profiling)
458 AC_ARG_WITH(profiling-data,
459 [  --with-profiling-data   Include gathering source code profile information (default=no)],
460 [ case "$withval" in
461   yes)
462     AC_MSG_RESULT(yes)
463     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
464     samba_cv_WITH_PROFILE=yes
465     ;;
466   *)
467     AC_MSG_RESULT(no)
468     samba_cv_WITH_PROFILE=no
469     ;;
470   esac ],
471   AC_MSG_RESULT(no)
472 )
473
474 dnl Checks for programs.
475
476 AC_PROG_INSTALL
477 AC_PROG_AWK
478 AC_PATH_PROG(PERL, perl)
479
480 AC_CHECK_TOOL(AR, ar)
481
482 dnl Check if we use GNU ld
483 LD=ld
484 AC_PROG_LD_GNU
485
486 dnl Certain versions of GNU ld the default is not to have the
487 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
488 dnl warnings when building modules.
489 if test "$ac_cv_prog_gnu_ld" = "yes"; then
490         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
491         AC_MSG_CHECKING(GNU ld release date)
492         changequote(,)dnl
493         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'`
494         changequote([,])dnl
495         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
496         if test -n "$ac_cv_gnu_ld_date"; then
497         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
498                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
499         fi
500         else
501            AC_MSG_CHECKING(GNU ld release version)
502            changequote(,)dnl
503            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
504            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
505            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
506            changequote([,])dnl
507            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
508            AC_MSG_CHECKING(GNU ld release version major)
509            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
510            AC_MSG_CHECKING(GNU ld release version minor)
511            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
512            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
513              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
514            fi
515         fi
516 fi
517
518 dnl look for executable suffix
519 AC_EXEEXT
520
521 dnl Check if C compiler understands -c and -o at the same time
522 AC_PROG_CC_C_O
523 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
524       BROKEN_CC=
525 else
526       BROKEN_CC=#
527 fi
528 AC_SUBST(BROKEN_CC)
529
530 dnl Check if the C compiler understands -Werror
531 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
532  AC_TRY_RUN_STRICT([
533   int main(void)
534   {
535         return 0;
536   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
537   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
538 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
539    Werror_FLAGS="-Werror"
540 else
541 dnl Check if the C compiler understands -w2
542 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
543  AC_TRY_RUN_STRICT([
544   int main(void)
545   {
546         return 0;
547   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
548   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
549 if test x"$samba_cv_HAVE_w2" = x"yes"; then
550    Werror_FLAGS="-w2"
551 fi
552 fi
553
554 dnl Check if the C compiler understands volatile (it should, being ANSI).
555 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
556     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
557         samba_cv_volatile=yes,samba_cv_volatile=no)])
558 if test x"$samba_cv_volatile" = x"yes"; then
559    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
560 fi
561
562 ############################################
563 # check if the compiler can handle negative enum values
564 # and don't truncate the values to INT_MAX
565 # a runtime test is needed here
566 AC_SUBST(PIDL_ARGS)
567 AC_CACHE_CHECK([that the C compiler understands negative enum values],SMB_BUILD_CC_NEGATIVE_ENUM_VALUES, [
568     AC_TRY_RUN(
569 [
570         #include <stdio.h>
571         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
572         int main(void) {
573                 enum negative_values v1 = NEGATIVE_VALUE;
574                 unsigned v2 = NEGATIVE_VALUE;
575
576                 if (v1 != 0xFFFFFFFF) {
577                         printf("%u != 0xFFFFFFFF\n", v1);
578                         return 1;
579                 }
580                 if (v2 != 0xFFFFFFFF) {
581                         printf("%u != 0xFFFFFFFF\n", v2);
582                         return 1;
583                 }
584
585                 return 0;
586         }
587 ],
588         SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=yes,SMB_BUILD_CC_NEGATIVE_ENUM_VALUES=no)])
589 if test x"$SMB_BUILD_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
590         AC_MSG_WARN([using --unit-enums for pidl])
591         PIDL_ARGS="$PIDL_ARGS --uint-enums"
592 fi
593
594 ############################################
595 # Check whether we can do automatic dependency tracking
596
597 m4_include(m4/substnot.m4)
598 m4_include(m4/cond.m4)
599 m4_include(m4/make.m4)
600 m4_include(m4/depout.m4)
601 m4_include(m4/lead-dot.m4)
602 m4_include(m4/check_gnu_make.m4)
603 m4_include(m4/depend.m4)
604
605 # Using the dependency files requires GNU make until someone adds support
606 # for Makefile includes for other make implementations. Note that
607 # CHECK_GNU_MAKE() can find a non-default make.
608 CHECK_GNU_MAKE()
609 if test "x$_cv_gnu_make_command" != "x" -a \
610     x`which make` = x`which "$_cv_gnu_make_command"` ; then
611     AC_SUBST(MAKE, $_cv_gnu_make_command)
612 else
613     # If GNU make is not the default, don't enable GNU-isms because we can't
614     # guarantee that GNU make will actually be the make that is invoked.
615     ifGNUmake='#'
616 fi
617
618 AM_DEP_TRACK()
619 _AM_DEPENDENCIES(CC)
620
621 ############################################
622 # Figure out the flags to support named structure initializers
623
624 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
625
626 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
627 AC_MSG_CHECKING(uname -s)
628 AC_MSG_RESULT(${UNAME_S})
629
630 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
631 AC_MSG_CHECKING(uname -r)
632 AC_MSG_RESULT(${UNAME_R})
633
634 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
635 AC_MSG_CHECKING(uname -m)
636 AC_MSG_RESULT(${UNAME_M})
637
638 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
639 AC_MSG_CHECKING(uname -p)
640 AC_MSG_RESULT(${UNAME_P})
641
642 dnl Add #include for broken IRIX header files
643   case "$host_os" in
644         *irix6*)
645                 #TODO add to libreplace
646                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
647                         dnl Fix sensible defaults for MIPSPro compilers. The
648                         dnl error numbers are valid for the 7.3 compilers,
649                         dnl hopefully also valid for the 7.4 series.
650                         dnl
651                         dnl Bugzilla 3801. Force an error on warning 1035
652                         dnl so we don't incorrectly detect stdint.h. This
653                         dnl warning is emitted for #error directives.
654                         CFLAGS="$CFLAGS -diag_error 1035"
655                         dnl 1209: Controlling expression is constant
656                         dnl 1174: Function foo declared but never referenced
657                         dnl 3201: Parameter foo was never referenced
658                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
659                 fi
660         ;;
661 esac
662
663 DYNEXP=
664 AC_SUBST(DYNEXP)
665
666 dnl Add modules that have to be built by default here
667 dnl These have to be built static:
668 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"
669
670 dnl These are preferably build shared, and static if dlopen() is not available
671 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"
672
673 if test "x$developer" = xyes; then
674    default_static_modules="$default_static_modules rpc_rpcecho"
675    default_shared_modules="$default_shared_modules charset_weird"
676 fi
677
678 #
679 # Config CPPFLAG settings for strange OS's that must be set
680 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
681 # case statement; its first reference must be unconditional.
682 #
683 case "$host_os" in
684     *hpux*)
685 #
686 # Defines needed for HPUX support.
687 # HPUX has bigcrypt but (sometimes?) doesn't use it for
688 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
689 #
690       case `uname -r` in
691                         *9*|*10*)
692                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
693                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
694                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
695                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
696                                 AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
697                                 AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
698                                 ;;
699                         *11*)
700                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
701                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
702                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
703                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
704                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
705                                 AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
706                                 AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
707                                 AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Unix 98 sources -- needed for socklen_t in getsockopt on HP/UX 11])
708                                 ;;
709       esac
710       ;;
711
712 #
713 # CRAY Unicos has broken const handling
714        *unicos*)
715           AC_MSG_RESULT([disabling const])
716           CPPFLAGS="$CPPFLAGS -Dconst="
717           ;;
718         
719 #
720 # AIX4.x doesn't even admit to having large
721 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
722 #
723     *aix4*)
724           AC_MSG_RESULT([enabling large file support])
725       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
726           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
727       ;;
728 #
729 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
730 # to the existance of large files..
731 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
732 # recommendations on large file support, however it makes the
733 # compile work using gcc 2.7 and 2.8, whereas using the Sun
734 # recommendation makes the compile fail on gcc2.7. JRA.
735 #
736 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
737 #
738         *solaris*)
739                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
740                 case `uname -r` in
741                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
742                                 AC_MSG_RESULT([no large file support])
743                                 ;;
744                         5.*)
745                         AC_MSG_RESULT([enabling large file support])
746                         if test "$ac_cv_prog_gcc" = yes; then
747                                 ${CC-cc} -v >conftest.c 2>&1
748                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
749                                 rm -fr conftest.c
750                                 case "$ac_cv_gcc_compiler_version_number" in
751                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
752                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
753                                                 LDFLAGS="$LDFLAGS -lthread"
754                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
755                                                 ;;
756                                         *)
757                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
758                                                 LDFLAGS="$LDFLAGS -lthread"
759                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
760                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
761                                                 ;;
762                                 esac
763                         else
764                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
765                                 LDFLAGS="$LDFLAGS -lthread"
766                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
767                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
768                         fi
769                         ;;
770                 esac
771                 ;;
772 #
773 # IRIX uses SYSV printing.  Make sure to set that here
774 #
775         *irix*)
776                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
777                 ;;
778         *freebsd*|*dragonfly*)
779                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
780                 ;;
781 #
782 # VOS may need to have POSIX support and System V compatibility enabled.
783 #
784     *vos*)
785     case "$CPPFLAGS" in
786           *-D_POSIX_C_SOURCE*)
787                 ;;
788           *)
789                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
790                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
791                 ;;
792     esac
793     case "$CPPFLAGS" in
794           *-D_SYSV*|*-D_SVID_SOURCE*)
795                 ;;
796           *)
797                 CPPFLAGS="$CPPFLAGS -D_SYSV"
798                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
799     esac
800     ;;
801 #
802 # Tests needed for SINIX large file support.
803 #
804     *sysv4*)
805       if test $host = mips-sni-sysv4 ; then
806         AC_MSG_CHECKING([for LFS support])
807         old_CPPFLAGS="$CPPFLAGS"
808         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
809         AC_TRY_RUN([
810 #include <unistd.h>
811 int main () {
812 #if _LFS64_LARGEFILE == 1
813 return 0;
814 #else
815 return 1;
816 #endif
817 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
818         CPPFLAGS="$old_CPPFLAGS"
819         if test x$SINIX_LFS_SUPPORT = xyes ; then
820           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
821                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
822           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
823           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
824           LIBS="`getconf LFS64_LIBS` $LIBS"
825         fi
826       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
827       fi
828     ;;
829
830 # Systems with LFS support.
831 #
832     gnu* | k*bsd*-gnu)
833         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
834         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
835         AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
836         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
837         ;;
838
839 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
840 #
841     *linux*)
842         AC_MSG_CHECKING([for LFS support])
843         old_CPPFLAGS="$CPPFLAGS"
844         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
845        AC_TRY_RUN([
846 #include <unistd.h>
847 #include <sys/utsname.h>
848 #include <string.h>
849 #include <stdlib.h>
850 int main() {
851 #if _LFS64_LARGEFILE == 1
852        struct utsname uts;
853        char *release;
854        int major, minor;
855
856        /* Ensure this is glibc 2.2 or higher */
857 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
858        int libc_major = __GLIBC__;
859        int libc_minor = __GLIBC_MINOR__;
860
861        if (libc_major < 2)
862               return 1;
863        if (libc_minor < 2)
864               return 1;
865 #endif
866
867        /* Ensure this is kernel 2.4 or higher */
868
869        uname(&uts);
870        release = strdup(uts.release);
871        major = atoi(strsep(&release, "."));
872        minor = atoi(strsep(&release, "."));
873
874        if (major > 2 || (major == 2 && minor > 3))
875                return 0;
876        return 1;
877 #else
878        return 1;
879 #endif
880 }
881 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
882         CPPFLAGS="$old_CPPFLAGS"
883         if test x$LINUX_LFS_SUPPORT = xyes ; then
884                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
885                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
886                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
887                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
888         fi
889         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
890         ;;
891
892 #
893 # MacOS X is the *only* system that uses compose character in utf8. This
894 # is so horribly broken....
895 #
896     *darwin*)
897         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
898
899         # Add a system specific charset module.
900         default_shared_modules="$default_shared_modules charset_macosxfs"
901
902         ;;
903     *hurd*)
904         AC_MSG_CHECKING([for LFS support])
905         old_CPPFLAGS="$CPPFLAGS"
906         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
907         AC_TRY_RUN([
908 #include <unistd.h>
909 main () {
910 #if _LFS64_LARGEFILE == 1
911 return 0;
912 #else
913 return 1;
914 #endif
915 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
916         CPPFLAGS="$old_CPPFLAGS"
917         if test x$GLIBC_LFS_SUPPORT = xyes ; then
918           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
919                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
920           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
921         fi
922       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
923     ;;
924
925 esac
926
927 AC_LIBREPLACE_BROKEN_CHECKS
928
929 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
930
931 LIBREPLACE_OBJS=""
932 for obj in ${LIBREPLACEOBJ}; do
933         LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
934 done
935 AC_SUBST(LIBREPLACE_OBJS)
936
937 # add -ldl to the global LIBS
938 LIBS="${LIBS} ${LIBDL}"
939
940 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)
941 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
942 AC_CHECK_HEADERS(limits.h float.h)
943 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
944 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
945 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
946 AC_CHECK_HEADERS(sys/un.h)
947 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
948 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
949 AC_CHECK_HEADERS(sys/sysmacros.h)
950 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
951 AC_CHECK_HEADERS(langinfo.h locale.h)
952 AC_CHECK_HEADERS(xfs/libxfs.h)
953
954 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
955 #if HAVE_RPC_RPC_H
956 #include <rpc/rpc.h>
957 #endif
958 ]])
959
960 ## These fail to compile on IRIX so just check for their presence
961 AC_CHECK_HEADERS(sys/mode.h,,,)
962
963 # Look for Darwin headers
964 old_CPPFLAGS="$CPPFLAGS"
965 CPPFLAGS="-Iinclude $CPPFLAGS"
966 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
967 CPPFLAGS="$old_CPPFLAGS"
968
969 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
970 # subdirectory of headers.
971 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
972
973 # check for linux on amd64 since valgrind is not quite there yet
974 case "$host_os" in
975         *linux*)
976                 case "$UNAME_P" in
977                         *x86_64*)
978                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
979                                 ;;
980                 esac
981                 ;;
982 esac
983
984
985 #
986 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
987 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
988 #
989 case "$host_os" in
990     *hpux*)
991                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
992                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
993                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
994                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
995                 fi
996         ;;
997 esac
998 AC_CHECK_HEADERS(shadow.h)
999 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
1000 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
1001
1002 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
1003 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
1004
1005 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
1006
1007 # For experimental utmp support (lastlog on some BSD-like systems)
1008 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
1009
1010 AC_CHECK_SIZEOF(int,cross)
1011 AC_CHECK_SIZEOF(long,cross)
1012 AC_CHECK_SIZEOF(long long,cross)
1013 AC_CHECK_SIZEOF(short,cross)
1014
1015 AC_C_CONST
1016 AC_C_INLINE
1017 AC_C_BIGENDIAN
1018 AC_C_CHAR_UNSIGNED
1019
1020 AC_TYPE_SIGNAL
1021 AC_TYPE_UID_T
1022 AC_TYPE_MODE_T
1023 AC_TYPE_OFF_T
1024 AC_TYPE_SIZE_T
1025 AC_TYPE_PID_T
1026 AC_STRUCT_ST_RDEV
1027 AC_DIRENT_D_OFF
1028 AC_CHECK_TYPE(ino_t,unsigned)
1029 AC_CHECK_TYPE(loff_t,off_t)
1030 AC_CHECK_TYPE(offset_t,loff_t)
1031 AC_CHECK_TYPE(ssize_t, int)
1032 AC_CHECK_TYPE(wchar_t, unsigned short)
1033 AC_CHECK_TYPE(comparison_fn_t,
1034 [AC_DEFINE(HAVE_COMPARISON_FN_T, 1,[Whether or not we have comparison_fn_t])])
1035
1036 ############################################
1037 # for cups support we need libcups, and a handful of header files
1038
1039 AC_ARG_ENABLE(cups,
1040 [  --enable-cups           Turn on CUPS support (default=auto)])
1041
1042 if test x$enable_cups != xno; then
1043         AC_PATH_PROG(CUPS_CONFIG, cups-config)
1044
1045         if test "x$CUPS_CONFIG" != x; then
1046                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
1047                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
1048                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
1049                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
1050         elif test x"$enable_cups" = x"yes"; then
1051                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
1052         fi
1053 fi
1054
1055 AC_ARG_ENABLE(iprint,
1056 [  --enable-iprint         Turn on iPrint support (default=yes if cups is yes)])
1057
1058 if test x$enable_iprint != xno; then
1059         if test "x$CUPS_CONFIG" != x; then
1060                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
1061         elif test x"$enable_iprint" = x"yes"; then
1062                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
1063         fi
1064 fi
1065
1066 ############################################
1067 # check if the compiler will optimize out function calls
1068 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
1069     AC_TRY_LINK([
1070 #include <stdio.h>],
1071 [
1072                 if (0) {
1073                    this_function_does_not_exist();
1074                 } else {
1075                   return 1;
1076                 }
1077
1078 ],
1079         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
1080 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
1081    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
1082 fi
1083
1084 ############################################
1085 # check for unix domain sockets
1086 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
1087     AC_TRY_COMPILE([
1088 #include <sys/types.h>
1089 #include <stdlib.h>
1090 #include <stddef.h>
1091 #include <sys/socket.h>
1092 #include <sys/un.h>],
1093 [
1094   struct sockaddr_un sunaddr;
1095   sunaddr.sun_family = AF_UNIX;
1096 ],
1097         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
1098 if test x"$samba_cv_unixsocket" = x"yes"; then
1099    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
1100 fi
1101
1102
1103 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
1104     AC_TRY_COMPILE([
1105 #include <sys/types.h>
1106 #if STDC_HEADERS
1107 #include <stdlib.h>
1108 #include <stddef.h>
1109 #endif
1110 #include <sys/socket.h>],[socklen_t i = 0],
1111         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
1112 if test x"$samba_cv_socklen_t" = x"yes"; then
1113    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
1114 fi
1115
1116 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
1117     AC_TRY_COMPILE([
1118 #include <sys/types.h>
1119 #if STDC_HEADERS
1120 #include <stdlib.h>
1121 #include <stddef.h>
1122 #endif
1123 #include <signal.h>],[sig_atomic_t i = 0],
1124         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
1125 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
1126    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
1127 fi
1128
1129 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
1130     AC_TRY_COMPILE([
1131 #include <sys/types.h>
1132 #if STDC_HEADERS
1133 #include <stdlib.h>
1134 #include <stddef.h>
1135 #endif
1136 #if TIME_WITH_SYS_TIME
1137 # include <sys/time.h>
1138 # include <time.h>
1139 #else
1140 # if HAVE_SYS_TIME_H
1141 #  include <sys/time.h>
1142 # else
1143 #  include <time.h>
1144 # endif
1145 #endif
1146 ],[struct timespec ts;],
1147         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
1148 if test x"$samba_cv_struct_timespec" = x"yes"; then
1149    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
1150 fi
1151
1152 # stupid headers have the functions but no declaration. grrrr.
1153 AC_HAVE_DECL(errno, [#include <errno.h>])
1154 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
1155 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
1156 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
1157 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
1158 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
1159 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
1160
1161 # and glibc has setresuid under linux but the function does
1162 # nothing until kernel 2.1.44! very dumb.
1163 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
1164     AC_TRY_RUN([#include <errno.h>
1165 int main() { setresuid(1,1,1); setresuid(2,2,2); return errno==EPERM?0:1;}],
1166         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
1167 if test x"$samba_cv_have_setresuid" = x"yes"; then
1168     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
1169 fi
1170
1171 # Do the same check for setresguid...
1172 #
1173 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
1174     AC_TRY_RUN([#include <unistd.h>
1175 #include <errno.h>
1176 int main() { errno = 0; setresgid(1,1,1); return errno != 0 ? (errno==EPERM ? 0 : 1) : 0;}],
1177         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
1178 if test x"$samba_cv_have_setresgid" = x"yes"; then
1179     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
1180 fi
1181
1182 AC_FUNC_MEMCMP
1183
1184 ###############################################
1185 # Readline included by default unless explicitly asked not to
1186 test "${with_readline+set}" != "set" && with_readline=yes
1187
1188 # test for where we get readline() from
1189 AC_MSG_CHECKING(whether to use readline)
1190 AC_ARG_WITH(readline,
1191 [  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
1192 [  case "$with_readline" in
1193   yes)
1194     AC_MSG_RESULT(yes)
1195
1196     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1197     AC_CHECK_HEADERS(readline/history.h)
1198
1199     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1200       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1201        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1202       done
1203       AC_CHECK_LIB(readline, rl_callback_handler_install,
1204        [TERMLIBS="-lreadline $TERMLIBS"
1205        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1206        break], [TERMLIBS=], $TERMLIBS)])
1207     ;;
1208   no)
1209     AC_MSG_RESULT(no)
1210     ;;
1211   *)
1212     AC_MSG_RESULT(yes)
1213
1214     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1215     # alternate readline path
1216     _ldflags=${LDFLAGS}
1217     _cppflags=${CPPFLAGS}
1218
1219     # Add additional search path
1220     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1221     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1222
1223     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1224     AC_CHECK_HEADERS(readline/history.h)
1225
1226     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1227       for termlib in ncurses curses termcap terminfo termlib; do
1228        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1229       done
1230       AC_CHECK_LIB(readline, rl_callback_handler_install,
1231        [TERMLDFLAGS="-L$with_readline/lib"
1232        TERMCPPFLAGS="-I$with_readline/include"
1233        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1234        TERMLIBS="-lreadline $TERMLIBS"
1235        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1236        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1237
1238     LDFLAGS=$_ldflags
1239     ;;
1240   esac],
1241   AC_MSG_RESULT(no)
1242 )
1243 AC_SUBST(TERMLIBS)
1244 AC_SUBST(TERMLDFLAGS)
1245
1246 # The readline API changed slightly from readline3 to readline4, so
1247 # code will generate warnings on one of them unless we have a few
1248 # special cases.
1249 AC_CHECK_LIB(readline, rl_completion_matches,
1250              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1251                         [Do we have rl_completion_matches?])],
1252              [],
1253              [$TERMLIBS])
1254
1255 # not all readline libs have rl_event_hook or history_list
1256 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1257 AC_CHECK_LIB(readline, history_list,
1258              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1259              [],
1260              [$TERMLIBS])
1261
1262 # The following test taken from the cvs sources
1263 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
1264 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
1265 # libsocket.so which has a bad implementation of gethostbyname (it
1266 # only looks in /etc/hosts), so we only look for -lsocket if we need
1267 # it.
1268 AC_CHECK_FUNCS(connect)
1269 if test x"$ac_cv_func_connect" = x"no"; then
1270     case "$LIBS" in
1271     *-lnsl*) ;;
1272     *) AC_CHECK_LIB(nsl_s, connect) ;;
1273     esac
1274     case "$LIBS" in
1275     *-lnsl*) ;;
1276     *) AC_CHECK_LIB(nsl, connect) ;;
1277     esac
1278     case "$LIBS" in
1279     *-lsocket*) ;;
1280     *) AC_CHECK_LIB(socket, connect) ;;
1281     esac
1282     case "$LIBS" in
1283     *-linet*) ;;
1284     *) AC_CHECK_LIB(inet, connect) ;;
1285     esac
1286     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
1287     dnl has been cached.
1288     if test x"$ac_cv_lib_socket_connect" = x"yes" ||
1289        test x"$ac_cv_lib_inet_connect" = x"yes"; then
1290         # ac_cv_func_connect=yes
1291         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
1292         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
1293     fi
1294 fi
1295
1296 ###############################################
1297 # test for where we get yp_get_default_domain() from
1298 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1299 AC_CHECK_FUNCS(yp_get_default_domain)
1300
1301 # Check if we have execl, if not we need to compile smbrun.
1302 AC_CHECK_FUNCS(execl)
1303 if test x"$ac_cv_func_execl" = x"no"; then
1304     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1305 fi
1306
1307 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown chmod fchmod chroot link mknod mknod64)
1308 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1309 AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
1310 AC_CHECK_FUNCS(getrlimit fsync memset strlcpy strlcat setpgid)
1311 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
1312 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1313 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1314 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1315 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1316 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1317 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1318 AC_CHECK_FUNCS(getpwent_r)
1319 AC_CHECK_FUNCS(getdents getdents64)
1320 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1321 AC_CHECK_FUNCS(syslog vsyslog timegm)
1322 AC_CHECK_FUNCS(setlocale nl_langinfo)
1323 AC_CHECK_FUNCS(nanosleep)
1324 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1325 AC_CHECK_FUNCS(memalign posix_memalign)
1326 AC_CHECK_HEADERS(sys/mman.h)
1327 # setbuffer, shmget, shm_open are needed for smbtorture
1328 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1329 AC_CHECK_FUNCS(makecontext getcontext setcontext swapcontext)
1330
1331 # Find a method of generating a stack trace
1332 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1333 AC_CHECK_FUNCS(backtrace_symbols)
1334 AC_CHECK_LIB(exc, trace_back_stack)
1335
1336 echo -n "checking for GPFS GPL libs... "
1337 save_LIBS="$LIBS"
1338 LIBS="$LIBS -lgpfs_gpl"
1339 AC_TRY_LINK([#include <gpfs_gpl.h>],
1340           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1341           samba_cv_HAVE_GPFS=yes,
1342           samba_cv_HAVE_GPFS=no)
1343 echo $samba_cv_HAVE_GPFS
1344 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1345     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1346     default_shared_modules="$default_shared_modules vfs_gpfs"
1347 fi
1348 LIBS="$save_LIBS"
1349
1350 # Note that all the libunwind symbols in the API are defined to internal
1351 # platform-specific version, so we must include libunwind.h before checking
1352 # any of them.
1353 AC_MSG_CHECKING([for libunwind])
1354 save_LIBS=$LIBS
1355 if test x"$UNAME_P" = xunknown ; then
1356     # This probably won't link without the platform-specific libunwind.
1357     LIBS="$LIBS -lunwind"
1358 else
1359     # Add the platform-specific libunwind module. uname -p seems the most
1360     # plausible option and works for ia64, where libunwind is most useful.
1361     LIBS="$LIBS -lunwind -lunwind-$UNAME_P"
1362 fi
1363
1364 AC_TRY_LINK(
1365     [
1366 #ifdef HAVE_LIBUNWIND_H
1367 #include <libunwind.h>
1368 #endif
1369     ],
1370     [
1371         unw_context_t ctx; unw_cursor_t cur;
1372         char buf[256]; unw_word_t off;
1373         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1374         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1375     ],
1376     [
1377         AC_MSG_RESULT(yes)
1378         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1379
1380         # If we have libunwind, test whether we also have libunwind-ptrace
1381         # which would let us unwind arbitrary processes.
1382         save_LIBS=$LIBS
1383         AC_CHECK_HEADERS(libunwind-ptrace.h)
1384         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1385             [
1386                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1387                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1388                     [Whether libunwind-ptrace.a is available.])
1389             ],
1390             [ LIBUNWIND_PTRACE="" ])
1391
1392         LIBS=$save_LIBS
1393     ],
1394     [
1395         AC_MSG_RESULT(no)
1396         LIBS=$save_LIBS
1397     ])
1398
1399 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1400 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1401     AC_CHECK_HEADERS(sys/ptrace.h)
1402     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1403     AC_TRY_LINK(
1404             [
1405 #if HAVE_SYS_TYPES_H
1406 #include <sys/types.h>
1407 #endif
1408 #if HAVE_SYS_PTRACE_H
1409 #include <sys/ptrace.h>
1410 #endif
1411             ],
1412             [
1413                 int main(int argc, const char ** argv)
1414                 {
1415                         pid_t me = (pid_t)-1;
1416                         ptrace(PTRACE_ATTACH, me, 0, 0);
1417                         ptrace(PTRACE_DETACH, me, 0, 0);
1418                         return 0;
1419                 }
1420             ],
1421             [
1422                 AC_MSG_RESULT(yes)
1423                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1424                     [Whether the Linux ptrace(2) interface is available.])
1425             ],
1426             [
1427                 AC_MSG_RESULT(no)
1428                 LIBUNWIND_PTRACE=""
1429             ])
1430 fi
1431
1432 AC_SUBST(LIBUNWIND_PTRACE)
1433
1434 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1435 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1436 AC_CHECK_FUNCS(__getcwd _getcwd)
1437 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1438 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1439 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1440 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1441 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1442 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1443 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1444 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1445 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1446 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1447 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1448 AC_CHECK_FUNCS(prctl)
1449
1450 AC_TRY_COMPILE([
1451 #ifdef HAVE_SYS_PRCTL_H
1452 #include <sys/prctl.h>
1453 #endif
1454 ],
1455 [int i; i = prtcl(0); ],
1456 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1457
1458 #
1459 #
1460 #
1461 case "$host_os" in
1462     linux*-gnu* | gnu* | k*bsd*-gnu)
1463        # glibc <= 2.3.2 has a broken getgrouplist
1464     AC_CACHE_CHECK([for a broken Linux getgrouplist API],
1465             linux_getgrouplist_ok,
1466             [
1467                 AC_TRY_RUN([
1468 #include <unistd.h>
1469 #include <sys/utsname.h>
1470
1471                     int main() {
1472                            /* glibc up to 2.3 has a broken getgrouplist */
1473 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1474                            int libc_major = __GLIBC__;
1475                            int libc_minor = __GLIBC_MINOR__;
1476
1477                            if (libc_major < 2)
1478                                   return 1;
1479                            if ((libc_major == 2) && (libc_minor <= 3))
1480                                   return 1;
1481 #endif
1482                            return 0;
1483                     }
1484
1485                 ],
1486                 [linux_getgrouplist_ok=yes],
1487                 [linux_getgrouplist_ok=no],
1488                 [linux_getgrouplist_ok=cross])
1489        ])
1490
1491        if test x"$linux_getgrouplist_ok" = x"yes"; then
1492           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1493        fi
1494        ;;
1495     *)
1496        AC_CHECK_FUNCS(getgrouplist)
1497        ;;
1498 esac
1499
1500 #
1501 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1502 #
1503
1504 if test x$ac_cv_func_stat64 = xno ; then
1505   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1506   AC_TRY_LINK([
1507 #if defined(HAVE_UNISTD_H)
1508 #include <unistd.h>
1509 #endif
1510 #include <sys/stat.h>
1511 ], [struct stat64 st64; return stat64(".",&st64);], [ac_cv_func_stat64=yes])
1512   AC_MSG_RESULT([$ac_cv_func_stat64])
1513   if test x$ac_cv_func_stat64 = xyes ; then
1514     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1515   fi
1516 fi
1517
1518 if test x$ac_cv_func_lstat64 = xno ; then
1519   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1520   AC_TRY_LINK([
1521 #if defined(HAVE_UNISTD_H)
1522 #include <unistd.h>
1523 #endif
1524 #include <sys/stat.h>
1525 ], [struct stat64 st64; return lstat64(".",&st64);], [ac_cv_func_lstat64=yes])
1526   AC_MSG_RESULT([$ac_cv_func_lstat64])
1527   if test x$ac_cv_func_lstat64 = xyes ; then
1528     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1529   fi
1530 fi
1531
1532 if test x$ac_cv_func_fstat64 = xno ; then
1533   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1534   AC_TRY_LINK([
1535 #if defined(HAVE_UNISTD_H)
1536 #include <unistd.h>
1537 #endif
1538 #include <sys/stat.h>
1539 ], [struct stat64 st64; return fstat64(0,&st64);], [ac_cv_func_fstat64=yes])
1540   AC_MSG_RESULT([$ac_cv_func_fstat64])
1541   if test x$ac_cv_func_fstat64 = xyes ; then
1542     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1543   fi
1544 fi
1545
1546 #################################################
1547 # Check whether struct stat has timestamps with sub-second resolution.
1548 # At least IRIX and Solaris have these.
1549 #
1550 # We check that
1551 #       all of st_mtim, st_atim and st_ctim exist
1552 #       all of the members are in fact of type struct timespec
1553 #
1554 # There is some conflicting standards weirdness about whether we should use
1555 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1556 # prefer struct timespec.
1557
1558 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1559     [
1560         AC_TRY_COMPILE(
1561             [
1562 #if TIME_WITH_SYS_TIME
1563 # include <sys/time.h>
1564 # include <time.h>
1565 #else
1566 # if HAVE_SYS_TIME_H
1567 #  include <sys/time.h>
1568 # else
1569 #  include <time.h>
1570 # endif
1571 #endif
1572 #ifdef HAVE_SYS_STAT_H
1573 #include <sys/stat.h>
1574 #endif
1575             ],
1576             [
1577                 struct timespec t;
1578                 struct stat s = {0};
1579                 t.tv_sec = s.st_mtim.tv_sec;
1580                 t.tv_nsec = s.st_mtim.tv_nsec;
1581                 t.tv_sec = s.st_ctim.tv_sec;
1582                 t.tv_nsec = s.st_ctim.tv_nsec;
1583                 t.tv_sec = s.st_atim.tv_sec;
1584                 t.tv_nsec = s.st_atim.tv_nsec;
1585             ],
1586             samba_stat_hires=yes, samba_stat_hires=no)
1587     ])
1588
1589 if test x"$samba_stat_hires" = x"yes" ; then
1590     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1591     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1592     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1593     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1594             [whether struct stat has sub-second timestamps])
1595 fi
1596
1597 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_stat_hires_notimespec,
1598     [
1599         AC_TRY_COMPILE(
1600             [
1601 #if TIME_WITH_SYS_TIME
1602 # include <sys/time.h>
1603 # include <time.h>
1604 #else
1605 # if HAVE_SYS_TIME_H
1606 #  include <sys/time.h>
1607 # else
1608 #  include <time.h>
1609 # endif
1610 #endif
1611 #ifdef HAVE_SYS_STAT_H
1612 #include <sys/stat.h>
1613 #endif
1614             ],
1615             [
1616                 struct timespec t;
1617                 struct stat s = {0};
1618                 t.tv_sec = s.st_mtime;
1619                 t.tv_nsec = s.st_mtimensec;
1620                 t.tv_sec = s.st_ctime;
1621                 t.tv_nsec = s.st_ctimensec;
1622                 t.tv_sec = s.st_atime;
1623                 t.tv_nsec = s.st_atimensec;
1624             ],
1625             samba_stat_hires=yes, samba_stat_hires=no)
1626     ])
1627
1628 if test x"$samba_stat_hires_notimespec" = x"yes" ; then
1629     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1630     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1631     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1632     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1633             [whether struct stat has sub-second timestamps without struct timespec])
1634 fi
1635
1636 #####################################
1637 # needed for SRV lookups
1638 AC_CHECK_LIB(resolv, dn_expand)
1639 AC_CHECK_LIB(resolv, _dn_expand)
1640 AC_CHECK_LIB(resolv, __dn_expand)
1641
1642 #
1643 # Check for the functions putprpwnam, set_auth_parameters,
1644 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1645 # Needed for OSF1 and HPUX.
1646 #
1647
1648 AC_LIBTESTFUNC(security, putprpwnam)
1649 AC_LIBTESTFUNC(sec, putprpwnam)
1650
1651 AC_LIBTESTFUNC(security, set_auth_parameters)
1652 AC_LIBTESTFUNC(sec, set_auth_parameters)
1653
1654 # UnixWare 7.x has its getspnam in -lgen
1655 AC_LIBTESTFUNC(gen, getspnam)
1656
1657 AC_LIBTESTFUNC(security, getspnam)
1658 AC_LIBTESTFUNC(sec, getspnam)
1659
1660 AC_LIBTESTFUNC(security, bigcrypt)
1661 AC_LIBTESTFUNC(sec, bigcrypt)
1662
1663 AC_LIBTESTFUNC(security, getprpwnam)
1664 AC_LIBTESTFUNC(sec, getprpwnam)
1665
1666 AC_CHECK_FUNCS(strsignal)
1667
1668 ############################################
1669 # Check if we have libattr
1670 case "$host_os" in
1671   *osf*)
1672         AC_SEARCH_LIBS(getproplist, [proplist])
1673         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1674         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1675         AC_CHECK_FUNCS(sizeof_proplist_entry)
1676   ;;
1677   *)
1678         AC_SEARCH_LIBS(getxattr, [attr])
1679         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1680         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1681         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1682         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1683         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1684         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1685         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1686   ;;
1687 esac
1688
1689 ########################################################
1690 # Do xattr functions take additional options like on Darwin?
1691 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1692         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1693                 old_LIBS=$LIBS
1694                 LIBS="$LIBS $ACL_LIBS"
1695                 AC_TRY_COMPILE([
1696                         #include <sys/types.h>
1697                         #if HAVE_ATTR_XATTR_H
1698                         #include <attr/xattr.h>
1699                         #elif HAVE_SYS_XATTR_H
1700                         #include <sys/xattr.h>
1701                         #endif
1702                 ],[
1703                         getxattr(0, 0, 0, 0, 0, 0);
1704                 ],
1705                 [smb_attr_cv_xattr_add_opt=yes],
1706                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1707         ])
1708         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1709                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1710         fi
1711 fi
1712
1713 # Check if we have extattr
1714 case "$host_os" in
1715   *freebsd4* | *dragonfly* )
1716     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1717     ;;
1718   *)
1719     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1720     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1721     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1722     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1723     ;;
1724 esac
1725
1726 # Set defaults
1727 PIE_CFLAGS=""
1728 PIE_LDFLAGS=""
1729 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
1730
1731 if test "x$enable_pie" != xno
1732 then
1733         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1734         [
1735                 cat > conftest.c <<EOF
1736 int foo;
1737 main () { return 0;}
1738 EOF
1739                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1740                 then
1741                         samba_cv_fpie=yes
1742                 else
1743                         samba_cv_fpie=no
1744                 fi
1745                 rm -f conftest*
1746         ])
1747         if test x"${samba_cv_fpie}" = x"yes"
1748         then
1749                 PIE_CFLAGS="-fPIE"
1750                 PIE_LDFLAGS="-pie"
1751         fi
1752 fi
1753
1754 # Assume non-shared by default and override below
1755 BLDSHARED="false"
1756
1757 # these are the defaults, good for lots of systems
1758 HOST_OS="$host_os"
1759 LDSHFLAGS="-shared"
1760 MODULE_EXPORTS=""
1761 SONAMEFLAG="#"
1762 SHLD="\${CC} \${CFLAGS}"
1763 PICFLAG="${PIE_CFLAGS}"
1764 SHLIBEXT="so"
1765
1766
1767 # this bit needs to be modified for each OS that supports share libs
1768 # You need to specify how to create a shared library and
1769 # how to compile C code to produce PIC object files
1770
1771 AC_MSG_CHECKING([ability to build shared libraries])
1772
1773 # and these are for particular systems
1774 case "$host_os" in
1775                 linux*-gnu* | gnu* | k*bsd*-gnu)
1776                         case "$host_os" in 
1777                                 linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1778                         esac
1779                         BLDSHARED="true"
1780                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1781                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1782                         else
1783                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1784                         fi
1785                         DYNEXP="-Wl,--export-dynamic"
1786                         PICFLAG="-fPIC"
1787                         SONAMEFLAG="-Wl,-soname="
1788                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1789                         ;;
1790                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1791                         BLDSHARED="true"
1792                         LDSHFLAGS="-G"
1793                         SONAMEFLAG="-h "
1794                         if test "${GCC}" = "yes"; then
1795                                 PICFLAG="-fPIC"
1796                                 SONAMEFLAG="-Wl,-soname="
1797                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1798                                         DYNEXP="-Wl,-E"
1799                                 fi
1800                         else
1801                                 PICFLAG="-KPIC"
1802                                 ## ${CFLAGS} added for building 64-bit shared
1803                                 ## libs using Sun's Compiler
1804                                 LDSHFLAGS="-G \${CFLAGS}"
1805                         fi
1806                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1807                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1808                         ;;
1809                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1810                         BLDSHARED="true"
1811                         LDSHFLAGS="-G"
1812                         SONAMEFLAG="-Wl,-h,"
1813                         PICFLAG="-KPIC"   # Is this correct for SunOS
1814                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1815                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1816                         ;;
1817                 *netbsd* | *freebsd* | *dragonfly* )
1818                         BLDSHARED="true"
1819                         LDSHFLAGS="-shared"
1820                         DYNEXP="-Wl,--export-dynamic"
1821                         SONAMEFLAG="-Wl,-soname,"
1822                         PICFLAG="-fPIC -DPIC"
1823                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1824                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1825                         ;;
1826                 *openbsd*)  BLDSHARED="true"
1827                         LDSHFLAGS="-shared"
1828                         DYNEXP="-Wl,-Bdynamic"
1829                         SONAMEFLAG="-Wl,-soname,"
1830                         PICFLAG="-fPIC"
1831                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1832                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1833                         ;;
1834                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1835                         case "$host_os" in
1836                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1837                         ;;
1838                         esac
1839                         BLDSHARED="true"
1840                         LDSHFLAGS="-set_version sgi1.0 -shared"
1841                         SONAMEFLAG="-soname "
1842                         SHLD="\${LD}"
1843                         if test "${GCC}" = "yes"; then
1844                                 PICFLAG="-fPIC"
1845                         else
1846                                 PICFLAG="-KPIC"
1847                         fi
1848                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1849                         ;;
1850                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1851                         BLDSHARED="true"
1852                         LDSHFLAGS="-Wl,-G,-bexpall,-bbigtoc"
1853                         DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
1854                         PICFLAG="-O2"
1855                         # as AIX code is always position independent...
1856                         # .po will just create compile warnings, use po.o:
1857                         if test "${GCC}" != "yes"; then
1858                                 ## for funky AIX compiler using strncpy()
1859                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1860                         fi
1861
1862                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1863                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1864                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1865                         ;;
1866                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1867                         # Use special PIC flags for the native HP-UX compiler.
1868                                 BLDSHARED="true"
1869                                 SHLD="cc"
1870                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1871                                 SONAMEFLAG="-Wl,+h "
1872                                 PICFLAG="+z"
1873                         if test "${GCC}" = "yes"; then
1874                                 PICFLAG="-fPIC"
1875                         else
1876                                 PICFLAG="+z"
1877                         fi
1878                         if test "$host_cpu" = "ia64"; then
1879                                 SHLIBEXT="so"
1880                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1881                         else
1882                                 SHLIBEXT="sl"
1883                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1884                         fi
1885                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1886                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1887                         ;;
1888                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1889                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1890                         ;;
1891                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1892                         BLDSHARED="true"
1893                         LDSHFLAGS="-shared"
1894                         SONAMEFLAG="-Wl,-soname,"
1895                         PICFLAG="-fPIC"
1896                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1897                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1898                         ;;
1899                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1900                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1901                         ;;
1902                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1903                         BLDSHARED="true"
1904                         LDSHFLAGS="-shared"
1905                         SONAMEFLAG="-Wl,-soname,"
1906                         PICFLAG="-KPIC"
1907                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1908                         ;;
1909                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1910                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1911                         ;;
1912                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1913                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1914                         ;;
1915                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1916                         case "$host" in
1917                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1918                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1919                                         fi
1920                                         LDSHFLAGS="-G"
1921                                         DYNEXP="-Bexport"
1922                                 ;;
1923                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1924                         esac
1925                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1926                         ;;
1927
1928                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1929                         if [ test "$GCC" != yes ]; then
1930                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1931                         fi
1932                         LDSHFLAGS="-G"
1933                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1934                         ;;
1935                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1936                         BLDSHARED="false"
1937                         LDSHFLAGS=""
1938                         ;;
1939
1940                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1941                         BLDSHARED="true"
1942                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1943                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/modules/exports.darwin"
1944                         SHLIBEXT="dylib"
1945                         # Since gcc doesn't fail on unrecognised options, the
1946                         # PIE test incorrectly succeeds. Darwin gcc does not
1947                         # actually support the PIE stuff.
1948                         PIE_LDFLAGS=
1949                         PIE_CFLAGS=
1950                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1951                         ;;
1952
1953                 *)
1954                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1955                         ;;
1956 esac
1957
1958 if test "$enable_shared" != "yes"; then
1959         BLDSHARED=false
1960 fi
1961
1962 AC_MSG_RESULT($BLDSHARED)
1963
1964 AC_MSG_CHECKING([LDFLAGS])
1965 AC_MSG_RESULT([$LDFLAGS])
1966 AC_MSG_CHECKING([DYNEXP])
1967 AC_MSG_RESULT([$DYNEXP])
1968
1969 #######################################################
1970 # test whether building a shared library actually works
1971 if test $BLDSHARED = true; then
1972
1973 AC_MSG_CHECKING([SHLD])
1974 AC_MSG_RESULT([$SHLD])
1975 AC_MSG_CHECKING([LDSHFLAGS])
1976 AC_MSG_RESULT([$LDSHFLAGS])
1977
1978 AC_MSG_CHECKING([SHLIBEXT])
1979 AC_MSG_RESULT([$SHLIBEXT])
1980 AC_MSG_CHECKING([SONAMEFLAG])
1981 AC_MSG_RESULT([$SONAMEFLAG])
1982
1983 AC_MSG_CHECKING([PICFLAG])
1984 AC_MSG_RESULT([$PICFLAG])
1985
1986 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1987 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1988
1989 AC_CACHE_CHECK([whether building shared libraries actually works],
1990                [ac_cv_shlib_works],[
1991    # try building a trivial shared library
1992    ac_cv_shlib_works=no
1993    # The $SHLD and $LDSHFLAGS variables may contain references to other
1994    # variables so they need to be eval'ed.
1995    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1996         shlib.o ${srcdir-.}/tests/shlib.c && \
1997    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1998         shlib.o && ac_cv_shlib_works=yes
1999    rm -f "shlib.$SHLIBEXT" shlib.o
2000
2001 ])
2002 if test $ac_cv_shlib_works = no; then
2003    BLDSHARED=false
2004 fi
2005 fi
2006
2007 if test x"$BLDSHARED" != x"true"; then
2008         LDSHFLAGS="shared-libraries-disabled"
2009         SONAMEFLAG="shared-libraries-disabled"
2010         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
2011         SHLD="shared-libraries-disabled"
2012         PICFLAG="${PIE_CFLAGS}"
2013         SHLIBEXT="shared_libraries_disabled"
2014 fi
2015
2016 AC_MSG_CHECKING([used PICFLAG])
2017 AC_MSG_RESULT([$PICFLAG])
2018
2019 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
2020
2021 ################
2022
2023 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2024 AC_TRY_RUN([#include <stdio.h>
2025 int main() { long long x = 1000000; x *= x; return ((x/1000000) == 1000000)? 0: 1; }],
2026 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2027 if test x"$samba_cv_have_longlong" = x"yes"; then
2028     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2029     AC_CHECK_TYPE(intptr_t, unsigned long long)
2030 else
2031     AC_CHECK_TYPE(intptr_t, unsigned long)
2032 fi
2033
2034 #
2035 # Check if the compiler supports the LL prefix on long long integers.
2036 # AIX needs this.
2037
2038 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2039     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2040         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2041 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2042    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2043 fi
2044
2045
2046 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2047 AC_TRY_RUN([#include <stdio.h>
2048 #include <sys/stat.h>
2049 int main() { return (sizeof(off_t) == 8) ? 0 : 1; }],
2050 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2051 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2052     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2053 fi
2054
2055 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2056 AC_TRY_RUN([
2057 #if defined(HAVE_UNISTD_H)
2058 #include <unistd.h>
2059 #endif
2060 #include <stdio.h>
2061 #include <sys/stat.h>
2062 int main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) return 1; return (lstat64("/dev/null", &st)==0)?0:1; }],
2063 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2064 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2065     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2066 fi
2067
2068 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2069 AC_TRY_RUN([
2070 #if defined(HAVE_UNISTD_H)
2071 #include <unistd.h>
2072 #endif
2073 #include <stdio.h>
2074 #include <sys/stat.h>
2075 int main() { return (sizeof(ino_t) == 8) ? 0 : 1; }],
2076 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2077 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2078     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2079 fi
2080
2081 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2082 AC_TRY_RUN([
2083 #if defined(HAVE_UNISTD_H)
2084 #include <unistd.h>
2085 #endif
2086 #include <stdio.h>
2087 #include <sys/stat.h>
2088 int main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) return 1; return (lstat64("/dev/null", &st)==0)?0:1; }],
2089 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2090 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2091     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2092 fi
2093
2094 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2095 AC_TRY_RUN([
2096 #if defined(HAVE_UNISTD_H)
2097 #include <unistd.h>
2098 #endif
2099 #include <stdio.h>
2100 #include <sys/stat.h>
2101 int main() { return (sizeof(dev_t) == 8) ? 0 : 1; }],
2102 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2103 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2104     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2105 fi
2106
2107 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2108 AC_TRY_RUN([
2109 #if defined(HAVE_UNISTD_H)
2110 #include <unistd.h>
2111 #endif
2112 #include <stdio.h>
2113 #include <sys/stat.h>
2114 int main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) return 1; return (lstat64("/dev/null", &st)==0)?0:1; }],
2115 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2116 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2117     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2118 fi
2119
2120 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2121 AC_TRY_COMPILE([
2122 #if defined(HAVE_UNISTD_H)
2123 #include <unistd.h>
2124 #endif
2125 #include <sys/types.h>
2126 #include <dirent.h>],
2127 [DIR64 de;],
2128 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2129 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2130     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2131 fi
2132
2133 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2134 AC_TRY_COMPILE([
2135 #if defined(HAVE_UNISTD_H)
2136 #include <unistd.h>
2137 #endif
2138 #include <sys/types.h>
2139 #include <dirent.h>],
2140 [struct dirent64 de;],
2141 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2142 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2143     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2144 fi
2145
2146 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2147 AC_TRY_RUN([
2148 #if defined(HAVE_UNISTD_H)
2149 #include <unistd.h>
2150 #endif
2151 #include <sys/types.h>
2152 int main() { dev_t dev; int i = major(dev); return 0; }],
2153 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2154 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2155     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2156 fi
2157
2158 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2159 AC_TRY_RUN([
2160 #if defined(HAVE_UNISTD_H)
2161 #include <unistd.h>
2162 #endif
2163 #include <sys/types.h>
2164 int main() { dev_t dev; int i = minor(dev); return 0; }],
2165 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2166 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2167     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2168 fi
2169
2170 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2171 AC_TRY_RUN([
2172 #if defined(HAVE_UNISTD_H)
2173 #include <unistd.h>
2174 #endif
2175 #include <sys/types.h>
2176 int main() { dev_t dev = makedev(1,2); return 0; }],
2177 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2178 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2179     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2180 fi
2181
2182 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2183 AC_TRY_RUN([#include <stdio.h>
2184 int main() { char c; c=250; return (c > 0)?0:1; }],
2185 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2186 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2187     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2188 fi
2189
2190 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
2191 AC_TRY_COMPILE([#include <sys/types.h>
2192 #include <sys/socket.h>
2193 #include <netinet/in.h>],
2194 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
2195 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
2196 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
2197     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
2198 fi
2199
2200 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2201 AC_TRY_COMPILE([#include <sys/types.h>
2202 #include <dirent.h>
2203 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2204 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2205 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2206     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2207 fi
2208
2209 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2210 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2211 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2212 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2213     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2214 fi
2215
2216 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2217 AC_TRY_RUN([
2218 #include <sys/time.h>
2219 #include <unistd.h>
2220 int main() { struct timeval tv; return gettimeofday(&tv, NULL);}],
2221            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
2222 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2223     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
2224 fi
2225
2226 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2227
2228     # On some systems (eg. Linux) librt can pull in libpthread. We
2229     # don't want this to happen because libpthreads changes signal delivery
2230     # semantics in ways we are not prepared for. This breaks Linux oplocks
2231     # which rely on signals.
2232
2233     AC_LIBTESTFUNC(rt, clock_gettime,
2234             [
2235                 AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2236                     [Whether clock_gettime is available])
2237                 SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2238                 SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2239                 SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2240             ])
2241
2242 fi
2243
2244 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
2245 AC_TRY_LINK([#include <stdarg.h>
2246 va_list ap1,ap2;], [va_copy(ap1,ap2);],
2247 samba_cv_HAVE_VA_COPY=yes,
2248 samba_cv_HAVE_VA_COPY=no)])
2249 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
2250     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
2251 else
2252     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
2253     AC_TRY_LINK([#include <stdarg.h>
2254     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
2255     samba_cv_HAVE___VA_COPY=yes,
2256     samba_cv_HAVE___VA_COPY=no)])
2257     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
2258         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
2259     fi
2260 fi
2261
2262 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
2263 AC_TRY_RUN([
2264 #include <sys/types.h>
2265 #include <stdarg.h>
2266 void foo(const char *format, ...) {
2267        va_list ap;
2268        int len;
2269        char buf[5];
2270
2271        va_start(ap, format);
2272        len = vsnprintf(buf, 0, format, ap);
2273        va_end(ap);
2274        if (len != 5) return 1;
2275
2276        va_start(ap, format);
2277        len = vsnprintf(0, 0, format, ap);
2278        va_end(ap);
2279        if (len != 5) return 1;
2280
2281        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) return 1;
2282
2283        return 0;
2284 }
2285 int main() { foo("hello"); }
2286 ],
2287 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
2288 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
2289     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
2290 fi
2291
2292 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2293 AC_TRY_RUN([#include <sys/types.h>
2294 #include <dirent.h>
2295 int main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2296 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2297 di->d_name[0] == 0) return 0; return 1;} ],
2298 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2299 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2300     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2301 fi
2302
2303 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2304 AC_TRY_COMPILE([#include <sys/types.h>
2305 #include <utime.h>],
2306 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; return utime("foo.c",&tbuf);],
2307 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2308 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2309     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2310 fi
2311
2312 ##############
2313 # Check utmp details, but only if our OS offers utmp.h
2314 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2315 dnl  utmp and utmpx come in many flavours
2316 dnl  We need to check for many of them
2317 dnl  But we don't need to do each and every one, because our code uses
2318 dnl  mostly just the utmp (not utmpx) fields.
2319
2320 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2321
2322 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2323 AC_TRY_COMPILE([#include <sys/types.h>
2324 #include <utmp.h>],
2325 [struct utmp ut;  ut.ut_name[0] = 'a';],
2326 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2327 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2328     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2329 fi
2330
2331 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2332 AC_TRY_COMPILE([#include <sys/types.h>
2333 #include <utmp.h>],
2334 [struct utmp ut;  ut.ut_user[0] = 'a';],
2335 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2336 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2337     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2338 fi
2339
2340 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2341 AC_TRY_COMPILE([#include <sys/types.h>
2342 #include <utmp.h>],
2343 [struct utmp ut;  ut.ut_id[0] = 'a';],
2344 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2345 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2346     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2347 fi
2348
2349 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2350 AC_TRY_COMPILE([#include <sys/types.h>
2351 #include <utmp.h>],
2352 [struct utmp ut;  ut.ut_host[0] = 'a';],
2353 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2354 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2355     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2356 fi
2357
2358 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2359 AC_TRY_COMPILE([#include <sys/types.h>
2360 #include <utmp.h>],
2361 [struct utmp ut;  time_t t; ut.ut_time = t;],
2362 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2363 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2364     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2365 fi
2366
2367 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2368 AC_TRY_COMPILE([#include <sys/types.h>
2369 #include <utmp.h>],
2370 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2371 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2372 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2373     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2374 fi
2375
2376 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2377 AC_TRY_COMPILE([#include <sys/types.h>
2378 #include <utmp.h>],
2379 [struct utmp ut;  ut.ut_type = 0;],
2380 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2381 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2382     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2383 fi
2384
2385 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2386 AC_TRY_COMPILE([#include <sys/types.h>
2387 #include <utmp.h>],
2388 [struct utmp ut;  ut.ut_pid = 0;],
2389 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2390 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2391     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2392 fi
2393
2394 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2395 AC_TRY_COMPILE([#include <sys/types.h>
2396 #include <utmp.h>],
2397 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2398 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2399 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2400     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2401 fi
2402
2403 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2404 AC_TRY_COMPILE([#include <sys/types.h>
2405 #include <utmp.h>],
2406 [struct utmp ut;  ut.ut_addr = 0;],
2407 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2408 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2409     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2410 fi
2411
2412 if test x$ac_cv_func_pututline = xyes ; then
2413   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2414   AC_TRY_COMPILE([#include <sys/types.h>
2415 #include <utmp.h>],
2416   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2417   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2418   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2419       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2420   fi
2421 fi
2422
2423 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2424 AC_TRY_COMPILE([#include <sys/types.h>
2425 #include <utmpx.h>],
2426 [struct utmpx ux;  ux.ut_syslen = 0;],
2427 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2428 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2429     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2430 fi
2431
2432 fi
2433 # end utmp details
2434
2435
2436 ICONV_LOCATION=standard
2437 LOOK_DIRS="/usr /usr/local /sw /opt"
2438 AC_ARG_WITH(libiconv,
2439 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
2440 [
2441   if test "$withval" = "no" ; then
2442     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2443   else
2444      if test "$withval" != "yes" ; then
2445         ICONV_PATH_SPEC=yes
2446         LOOK_DIRS="$withval"
2447      fi
2448   fi
2449 ])
2450
2451 for i in $LOOK_DIRS ; do
2452     save_LIBS=$LIBS
2453     save_LDFLAGS=$LDFLAGS
2454     save_CPPFLAGS=$CPPFLAGS
2455     ICONV_FOUND="no"
2456     unset libext
2457     CPPFLAGS="$CPPFLAGS -I$i/include"
2458 dnl This is here to handle -withval stuff for --with-libiconv
2459 dnl Perhaps we should always add a -L
2460
2461 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
2462 dnl installation paths. This gets a little tricky since we might have iconv
2463 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
2464 dnl succeed when the header is found. To counter this, make sure the
2465 dnl library directory is there and check the ABI directory first (which
2466 dnl should be harmless on other systems.
2467 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2468     for l in "lib32" "lib" "lib/hpux32"; do
2469         if test -d "$i/$l" ; then
2470                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2471         LIBS=
2472         export LDFLAGS LIBS CPPFLAGS
2473 dnl Try to find iconv(3)
2474                 jm_ICONV($i/$l)
2475                 if test x"$ICONV_FOUND" = "xyes" ; then
2476             libext="$l"
2477             break;
2478         fi
2479         fi
2480     done
2481
2482     if test x"$ICONV_FOUND" = "xyes" ; then
2483         LDFLAGS=$save_LDFLAGS
2484         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2485         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2486         LIBS="$save_LIBS"
2487         ICONV_LOCATION=$i
2488         export LDFLAGS LIBS CPPFLAGS
2489 dnl Now, check for a working iconv ... we want to do it here because
2490 dnl there might be a working iconv further down the list of LOOK_DIRS
2491
2492         ############
2493         # check for iconv in libc
2494         ic_save_LIBS="$LIBS"
2495         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
2496            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
2497         fi
2498         if test x"$jm_cv_lib_iconv" != x; then
2499            LIBS="$LIBS -l$jm_cv_lib_iconv"
2500         fi
2501 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
2502         default_dos_charset=no
2503         default_display_charset=no
2504         default_unix_charset=no
2505
2506         # check for default dos charset name
2507         for j in CP850 IBM850 ; do
2508             rjs_CHARSET($j)
2509             if test x"$ICONV_CHARSET" = x"$j"; then
2510                 default_dos_charset="\"$j\""
2511                 break
2512             fi
2513         done
2514         # check for default display charset name
2515         for j in ASCII 646 ; do
2516             rjs_CHARSET($j)
2517             if test x"$ICONV_CHARSET" = x"$j"; then
2518                 default_display_charset="\"$j\""
2519                 break
2520             fi
2521         done
2522         # check for default unix charset name
2523         for j in UTF-8 UTF8 ; do
2524             rjs_CHARSET($j)
2525             if test x"$ICONV_CHARSET" = x"$j"; then
2526                 default_unix_charset="\"$j\""
2527                 break
2528             fi
2529         done
2530         
2531         if test "$default_dos_charset" != "no" -a \
2532                 "$default_dos_charset" != "cross" -a \
2533                 "$default_display_charset" != "no" -a \
2534                 "$default_display_charset" != "cross" -a \
2535                 "$default_unix_charset" != "no" -a \
2536                 "$default_unix_charset" != "cross"
2537         then
2538                 samba_cv_HAVE_NATIVE_ICONV=yes
2539         else if test "$default_dos_charset" = "cross" -o \
2540                      "$default_display_charset" = "cross" -o \
2541                      "$default_unix_charset" = "cross"
2542         then
2543                 samba_cv_HAVE_NATIVE_ICONV=cross
2544         else
2545                 samba_cv_HAVE_NATIVE_ICONV=no
2546         fi
2547         fi
2548 dnl ])
2549
2550         LIBS="$ic_save_LIBS"
2551         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2552            CPPFLAGS=$save_CPPFLAGS
2553            LDFLAGS=$save_LDFLAGS
2554            LIBS=$save_LIBS
2555            if test x"$jm_cv_lib_iconv" != x; then
2556               LIBS="$LIBS -l$jm_cv_lib_iconv"
2557            fi
2558            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2559            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2560            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2561            export CPPFLAGS
2562            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2563            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2564            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2565            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2566            break
2567         fi
2568 dnl We didn't find a working iconv, so keep going
2569     fi
2570 dnl We only need to clean these up here for the next pass through the loop
2571     CPPFLAGS=$save_CPPFLAGS
2572     LDFLAGS=$save_LDFLAGS
2573     LIBS=$save_LIBS
2574     export LDFLAGS LIBS CPPFLAGS
2575 done
2576 unset libext
2577
2578
2579 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2580     AC_MSG_WARN([Sufficient support for iconv function was not found.
2581     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2582    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2583    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2584    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2585 fi
2586
2587
2588 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2589 AC_TRY_RUN([
2590 #include <sys/types.h>
2591 #include <fcntl.h>
2592 #ifndef F_GETLEASE
2593 #define F_GETLEASE      1025
2594 #endif
2595 int main() {
2596        int fd = open("/dev/null", O_RDONLY);
2597        return fcntl(fd, F_GETLEASE, 0) == -1;
2598 }
2599 ],
2600 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2601 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2602     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2603 fi
2604
2605 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2606 AC_TRY_RUN([
2607 #include <sys/types.h>
2608 #include <fcntl.h>
2609 #include <signal.h>
2610 #ifndef F_NOTIFY
2611 #define F_NOTIFY 1026
2612 #endif
2613 int main() {
2614         return fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0;
2615 }
2616 ],
2617 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2618 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2619     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2620 fi
2621
2622 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2623 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2624 AC_CHECK_FUNC(inotify_init)
2625 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2626 ],
2627 samba_cv_HAVE_INOTIFY=yes,
2628 samba_cv_HAVE_INOTIFY=no,
2629 samba_cv_HAVE_INOTIFY=cross)
2630
2631 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2632     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2633 fi
2634
2635 #################################################
2636 # Check if FAM notifications are available. For FAM info, see
2637 #       http://oss.sgi.com/projects/fam/
2638 #       http://savannah.nongnu.org/projects/fam/
2639 AC_ARG_ENABLE(fam,
2640 [  --enable-fam            Turn on FAM support (default=auto)])
2641
2642 if test x$enable_fam != xno; then
2643     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2644     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2645         # On IRIX, libfam requires libC, but other FAM implementations
2646         # might not need it.
2647         AC_CHECK_LIB(fam, FAMOpen2,
2648             [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam"],
2649             [samba_cv_HAVE_LIBFAM=no])
2650
2651         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2652             samba_fam_xtra=-lC
2653             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2654                 [samba_cv_HAVE_LIBFAM=yes; samba_fam_libs="-lfam -lC"],
2655                 [samba_cv_HAVE_LIBFAM=no])
2656             unset samba_fam_xtra
2657         fi
2658     fi
2659
2660     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2661         default_shared_modules="$default_shared_modules vfs_notify_fam"
2662         AC_TRY_COMPILE([#include <fam.h>],
2663                     [FAMCodes code = FAMChanged;],
2664                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2665                         [Whether fam.h contains a typedef for enum FAMCodes]),
2666                     [])
2667     fi
2668
2669     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2670         AC_MSG_ERROR(FAM support requested but FAM library not available )
2671     fi
2672 fi
2673
2674 #################################################
2675 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2676
2677 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2678
2679 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2680 AC_TRY_RUN([
2681 #include <sys/types.h>
2682 #include <fcntl.h>
2683 #include <signal.h>
2684 #include <sys/file.h>
2685 #ifndef LOCK_MAND
2686 #define LOCK_MAND       32
2687 #define LOCK_READ       64
2688 #endif
2689 int main() {
2690         return flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0;
2691 }
2692 ],
2693 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2694 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2695     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2696 fi
2697
2698
2699 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2700 AC_TRY_COMPILE([#include <sys/types.h>
2701 #include <fcntl.h>],
2702 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2703 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2704 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2705     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2706 fi
2707
2708 #################################################
2709 # Check for POSIX capability support
2710
2711 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2712     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2713     [], [])
2714
2715 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2716
2717     ac_save_LIBS=$LIBS
2718     AC_LIBTESTFUNC(cap, cap_get_proc)
2719
2720     AC_CACHE_CHECK([for POSIX capabilities],
2721             samba_cv_HAVE_POSIX_CAPABILITIES,
2722             [
2723                 AC_TRY_RUN([
2724 #include <sys/types.h>
2725 #include <sys/capability.h>
2726 int main() {
2727  cap_t cap;
2728  cap_value_t vals[1];
2729  if (!(cap = cap_get_proc()))
2730    return 1;
2731  vals[0] = CAP_CHOWN;
2732  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2733  cap_set_proc(cap);
2734  return 0;
2735 }],
2736                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2737                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2738                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2739             ])
2740
2741 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2742     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2743             [Whether POSIX capabilities are available])
2744 else
2745     LIBS=$ac_save_LIBS
2746 fi
2747
2748 fi
2749
2750 #
2751 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2752 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2753 #
2754
2755 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2756 AC_TRY_COMPILE([#include <sys/types.h>
2757 #if defined(HAVE_RPC_RPC_H)
2758 #include <rpc/rpc.h>
2759 #endif],
2760 [int16 testvar;],
2761 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2762 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2763     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2764 fi
2765
2766 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2767 AC_TRY_COMPILE([#include <sys/types.h>
2768 #if defined(HAVE_RPC_RPC_H)
2769 #include <rpc/rpc.h>
2770 #endif],
2771 [uint16 testvar;],
2772 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2773 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2774     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2775 fi
2776
2777 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2778 AC_TRY_COMPILE([#include <sys/types.h>
2779 #if defined(HAVE_RPC_RPC_H)
2780 #include <rpc/rpc.h>
2781 #endif],
2782 [int32 testvar;],
2783 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2784 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2785     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2786 fi
2787
2788 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2789 AC_TRY_COMPILE([#include <sys/types.h>
2790 #if defined(HAVE_RPC_RPC_H)
2791 #include <rpc/rpc.h>
2792 #endif],
2793 [uint32 testvar;],
2794 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2795 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2796     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2797 fi
2798
2799 dnl
2800 dnl Some systems (SCO) have a problem including
2801 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2802 dnl as a #define in <prot.h> and as part of an enum
2803 dnl in <rpc/rpc.h>.
2804 dnl
2805
2806 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2807 AC_TRY_COMPILE([#include <sys/types.h>
2808 #ifdef HAVE_SYS_SECURITY_H
2809 #include <sys/security.h>
2810 #include <prot.h>
2811 #endif  /* HAVE_SYS_SECURITY_H */
2812 #if defined(HAVE_RPC_RPC_H)
2813 #include <rpc/rpc.h>
2814 #endif],
2815 [int testvar;],
2816 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2817 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2818     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2819 fi
2820
2821 AC_MSG_CHECKING([for test routines])
2822 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2823            AC_MSG_RESULT(yes),
2824            AC_MSG_ERROR([cant find test code. Aborting config]),
2825            AC_MSG_WARN([cannot run when cross-compiling]))
2826
2827 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2828 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2829            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2830 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2831     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2832 fi
2833
2834 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2835 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2836            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2837            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2838            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2839 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2840 then
2841     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2842 fi
2843
2844 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2845 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2846            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2847 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2848     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2849 fi
2850
2851 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2852 AC_TRY_RUN([#include <stdlib.h>
2853 #include <sys/types.h>
2854 #include <sys/stat.h>
2855 #include <unistd.h>
2856 int main() {
2857   struct stat st;
2858   char tpl[20]="/tmp/test.XXXXXX";
2859   int fd = mkstemp(tpl);
2860   if (fd == -1) return 1;
2861   unlink(tpl);
2862   if (fstat(fd, &st) != 0) return 1;
2863   if ((st.st_mode & 0777) != 0600) return 1;
2864   return 0;
2865 }],
2866 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2867 samba_cv_HAVE_SECURE_MKSTEMP=no,
2868 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2869 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2870     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2871 fi
2872
2873 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
2874         AC_TRY_RUN([
2875 #include "${srcdir-.}/lib/replace/test/os2_delete.c"
2876 int main(void) {
2877     return test_readdir_os2_delete();
2878 }
2879 ],
2880                 [samba_cv_HAVE_BROKEN_READDIR=no],
2881                         [samba_cv_HAVE_BROKEN_READDIR=yes],
2882                         [samba_cv_HAVE_BROKEN_READDIR="assuming not"])])
2883
2884 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
2885 AC_CACHE_CHECK([for replacing readdir],samba_cv_REPLACE_READDIR,[
2886         AC_TRY_RUN([
2887 #include "${srcdir-.}/lib/repdir.c"
2888 #include "${srcdir-.}/lib/replace/test/os2_delete.c"
2889 int main(void) {
2890     return test_readdir_os2_delete();
2891 ],
2892         samba_cv_REPLACE_READDIR=yes,samba_cv_REPLACE_READDIR=no)])
2893 fi
2894
2895 if test x"$samba_cv_REPLACE_READDIR" = x"yes"; then
2896         AC_DEFINE(REPLACE_READDIR,1,[replace readdir])
2897 fi
2898
2899 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2900 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2901 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2902 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2903 AC_CHECK_FUNCS(getpagesize)
2904
2905 ##################
2906 # look for a method of finding the list of network interfaces
2907 iface=no;
2908 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2909 SAVE_CPPFLAGS="$CPPFLAGS"
2910 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2911 AC_TRY_RUN([
2912 #define HAVE_IFACE_AIX 1
2913 #define AUTOCONF_TEST 1
2914 #undef _XOPEN_SOURCE_EXTENDED
2915 #include "${srcdir-.}/lib/interfaces.c"],
2916            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2917 CPPFLAGS="$SAVE_CPPFLAGS"
2918 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2919     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2920 fi
2921
2922 if test $iface = no; then
2923 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2924 SAVE_CPPFLAGS="$CPPFLAGS"
2925 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2926 AC_TRY_RUN([
2927 #define HAVE_IFACE_IFCONF 1
2928 #define AUTOCONF_TEST 1
2929 #include "${srcdir-.}/lib/interfaces.c"],
2930            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2931 CPPFLAGS="$SAVE_CPPFLAGS"
2932 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2933     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2934 fi
2935 fi
2936
2937 if test $iface = no; then
2938 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2939 SAVE_CPPFLAGS="$CPPFLAGS"
2940 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
2941 AC_TRY_RUN([
2942 #define HAVE_IFACE_IFREQ 1
2943 #define AUTOCONF_TEST 1
2944 #include "${srcdir-.}/lib/interfaces.c"],
2945            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2946 CPPFLAGS="$SAVE_CPPFLAGS"
2947 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2948     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2949 fi
2950 fi
2951
2952
2953 ################################################
2954 # look for a method of setting the effective uid
2955 seteuid=no;
2956 if test $seteuid = no; then
2957 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2958 AC_TRY_RUN([
2959 #define AUTOCONF_TEST 1
2960 #define USE_SETRESUID 1
2961 #include "confdefs.h"
2962 #include "${srcdir-.}/lib/util_sec.c"],
2963            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2964 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2965     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2966 fi
2967 fi
2968
2969
2970 if test $seteuid = no; then
2971 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2972 AC_TRY_RUN([
2973 #define AUTOCONF_TEST 1
2974 #define USE_SETREUID 1
2975 #include "confdefs.h"
2976 #include "${srcdir-.}/lib/util_sec.c"],
2977            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2978 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2979     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2980 fi
2981 fi
2982
2983 if test $seteuid = no; then
2984 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2985 AC_TRY_RUN([
2986 #define AUTOCONF_TEST 1
2987 #define USE_SETEUID 1
2988 #include "confdefs.h"
2989 #include "${srcdir-.}/lib/util_sec.c"],
2990            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2991 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2992     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2993 fi
2994 fi
2995
2996 if test $seteuid = no; then
2997 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2998 AC_TRY_RUN([
2999 #define AUTOCONF_TEST 1
3000 #define USE_SETUIDX 1
3001 #include "confdefs.h"
3002 #include "${srcdir-.}/lib/util_sec.c"],
3003            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3004 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3005     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3006 fi
3007 fi
3008
3009
3010 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
3011 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
3012            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
3013 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
3014     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
3015 fi
3016
3017 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3018 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
3019            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3020 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3021     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3022 fi
3023
3024 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3025 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
3026            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3027 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3028     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3029
3030 else
3031
3032 dnl
3033 dnl Don't check for 64 bit fcntl locking if we know that the
3034 dnl glibc2.1 broken check has succeeded.
3035 dnl
3036
3037   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3038   AC_TRY_RUN([
3039 #if defined(HAVE_UNISTD_H)
3040 #include <unistd.h>
3041 #endif
3042 #include <stdio.h>
3043 #include <stdlib.h>
3044
3045 #ifdef HAVE_FCNTL_H
3046 #include <fcntl.h>
3047 #endif
3048
3049 #ifdef HAVE_SYS_FCNTL_H
3050 #include <sys/fcntl.h>
3051 #endif
3052 int main() { struct flock64 fl64;
3053 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3054 return 0;
3055 #else
3056 return 1;
3057 #endif
3058 }],
3059        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3060
3061   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3062       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3063   fi
3064 fi
3065
3066 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3067 AC_TRY_COMPILE([#include <sys/types.h>
3068 #include <sys/stat.h>
3069 #include <unistd.h>],
3070 [struct stat st;  st.st_blocks = 0;],
3071 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3072 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3073     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3074 fi
3075
3076 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3077 AC_TRY_COMPILE([#include <sys/types.h>
3078 #include <sys/stat.h>
3079 #include <unistd.h>],
3080 [struct stat st;  st.st_blksize = 0;],
3081 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3082 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3083     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3084 fi
3085
3086 AC_CACHE_CHECK([for st_flags in struct stat],
3087         samba_cv_HAVE_STAT_ST_FLAGS,
3088         [
3089             AC_TRY_COMPILE([#include <sys/types.h>
3090 #include <sys/stat.h>
3091 #include <unistd.h>],
3092             [struct stat st;  st.st_flags = 0;],
3093             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3094             samba_cv_HAVE_STAT_ST_FLAGS=no,
3095             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3096         ])
3097
3098 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3099     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3100                 [Whether the stat struct has a st_flags member])
3101 fi
3102
3103 case "$host_os" in
3104 *linux*)
3105 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
3106 AC_TRY_COMPILE([
3107 #ifdef HAVE_SYS_VFS_H
3108 #include <sys/vfs.h>
3109 #endif
3110 #ifdef HAVE_SYS_CAPABILITY_H
3111 #include <sys/capability.h>
3112 #endif
3113 ],[int i;],
3114    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
3115 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
3116    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
3117 fi
3118 ;;
3119 esac
3120
3121 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3122 AC_TRY_COMPILE([
3123 #include <sys/types.h>
3124 #include <sys/acl.h>
3125 #if defined(HAVE_RPCSVC_NIS_H)
3126 #include <rpcsvc/nis.h>
3127 #endif],
3128 [int i;],
3129 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3130 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3131         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3132 fi
3133
3134 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3135 AC_TRY_RUN([
3136 #include <stdio.h>
3137 #include <stdlib.h>
3138 #include <limits.h>
3139 int main() {
3140         char *newpath = realpath("/tmp", NULL);
3141         return (newpath != NULL) ? 0 : 1;
3142 }
3143 ],
3144 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3145 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3146     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3147 fi
3148
3149 #################################################
3150 # check for AFS clear-text auth support
3151 samba_cv_WITH_AFS=no
3152 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3153 AC_ARG_WITH(afs,
3154 [  --with-afs              Include AFS clear-text auth support (default=no) ],
3155 [ case "$withval" in
3156   yes|auto)
3157     AC_MSG_RESULT($withval)
3158     samba_cv_WITH_AFS=$withval
3159     ;;
3160   *)
3161     AC_MSG_RESULT(no)
3162     ;;
3163   esac ],
3164   AC_MSG_RESULT(no)
3165 )
3166
3167 ####################################################
3168 # check for Linux-specific AFS fake-kaserver support
3169 samba_cv_WITH_FAKE_KASERVER=no
3170 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3171 AC_ARG_WITH(fake-kaserver,
3172 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
3173 [ case "$withval" in
3174   yes|auto)
3175     AC_MSG_RESULT($withval)
3176     samba_cv_WITH_FAKE_KASERVER=$withval
3177     ;;
3178   *)
3179     AC_MSG_RESULT(no)
3180     ;;
3181   esac ],
3182   AC_MSG_RESULT(no)
3183 )
3184
3185 #################################################
3186 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3187 if test x"$samba_cv_WITH_AFS" != x"no" ||
3188    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3189
3190     # see if this box has the afs-headers in /usr/include/afs
3191     AC_MSG_CHECKING(for /usr/include/afs)
3192     if test -d /usr/include/afs; then
3193           CFLAGS="$CFLAGS -I/usr/include/afs"
3194           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
3195           AC_MSG_RESULT(yes)
3196     else
3197       AC_MSG_RESULT(no)
3198     fi
3199
3200     # check for afs.h
3201     have_afs_headers=no
3202     AC_CHECK_HEADERS(afs.h afs/afs.h)
3203     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3204         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3205            test x"$samba_cv_WITH_AFS" = x"auto"; then
3206                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3207         else
3208                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3209         fi
3210     else
3211         have_afs_headers=yes
3212     fi
3213 fi
3214
3215 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3216     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3217 fi
3218
3219 #################################################
3220 # check whether to compile AFS/NT ACL mapping module
3221 samba_cv_WITH_VFS_AFSACL=no
3222 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3223 AC_ARG_WITH(vfs-afsacl,
3224 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
3225 [ case "$withval" in
3226   yes|auto)
3227     AC_MSG_RESULT($withval)
3228     samba_cv_WITH_VFS_AFSACL=yes
3229     ;;
3230   *)
3231     AC_MSG_RESULT(no)
3232     ;;
3233   esac ],
3234   AC_MSG_RESULT(no)
3235 )
3236
3237 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3238    default_shared_modules="$default_shared_modules vfs_afsacl"
3239 fi
3240         
3241 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3242     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3243 fi
3244
3245 #################################################
3246 # check for the DFS clear-text auth system
3247 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3248 AC_ARG_WITH(dfs,
3249 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
3250 [ case "$withval" in
3251   yes)
3252     AC_MSG_RESULT(yes)
3253     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3254     ;;
3255   *)
3256     AC_MSG_RESULT(no)
3257     ;;
3258   esac ],
3259   AC_MSG_RESULT(no)
3260 )
3261
3262 ########################################################
3263 # Compile with LDAP support?
3264
3265 with_ldap_support=auto
3266 AC_MSG_CHECKING([for LDAP support])
3267
3268 AC_ARG_WITH(ldap,
3269 [  --with-ldap             LDAP support (default yes)],
3270 [ case "$withval" in
3271     yes|no)
3272         with_ldap_support=$withval
3273         ;;
3274   esac ])
3275
3276 AC_MSG_RESULT($with_ldap_support)
3277
3278 SMBLDAP=""
3279 AC_SUBST(SMBLDAP)
3280 SMBLDAPUTIL=""
3281 AC_SUBST(SMBLDAPUTIL)
3282 LDBLDAP=""
3283 AC_SUBST(LDBLDAP)
3284
3285 if test x"$with_ldap_support" != x"no"; then
3286
3287   ##################################################################
3288   # first test for ldap.h and lber.h
3289   # (ldap.h is required for this test)
3290   AC_CHECK_HEADERS(ldap.h lber.h)
3291
3292   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3293         if test x"$with_ldap_support" = x"yes"; then
3294          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3295         else
3296          AC_MSG_WARN(ldap.h is needed for LDAP support)
3297         fi
3298         
3299         with_ldap_support=no
3300   fi
3301
3302   ##################################################################
3303   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3304   # unsigned int in include/includes.h
3305   case $host_os in
3306         *hpux*)
3307          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3308          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3309         with_ldap_support=yes
3310         ;;
3311         *)
3312         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3313         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3314                 if test x"$with_ldap_support" = x"yes"; then
3315                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3316                 else
3317                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3318                 fi
3319                 with_ldap_support=no
3320         fi
3321         ;;
3322   esac
3323 fi
3324
3325 if test x"$with_ldap_support" != x"no"; then
3326   ac_save_LIBS=$LIBS
3327
3328   ##################################################################
3329   # we might need the lber lib on some systems. To avoid link errors
3330   # this test must be before the libldap test
3331   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3332
3333   ########################################################
3334   # now see if we can find the ldap libs in standard paths
3335   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3336
3337   ########################################################
3338   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3339   # Check found in pam_ldap 145.
3340   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3341
3342   LIBS="$LIBS $LDAP_LIBS"
3343   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3344     AC_TRY_COMPILE([
3345         #include <lber.h>
3346         #include <ldap.h>],
3347         [ldap_set_rebind_proc(0, 0, 0);],
3348         [smb_ldap_cv_ldap_set_rebind_proc=3],
3349         [smb_ldap_cv_ldap_set_rebind_proc=2]
3350     )
3351   ])
3352
3353   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3354
3355   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3356
3357   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3358     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3359     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3360     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3361     default_shared_modules="$default_shared_modules";
3362     SMBLDAP="lib/smbldap.o"
3363     SMBLDAPUTIL="lib/smbldap_util.o"
3364     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3365       AC_MSG_WARN(Disabling ldb_ldap support (requires ldap_initialize))
3366     else
3367       AC_DEFINE(HAVE_LDB_LDAP,1,[Whether ldb_ldap is available])
3368       LDBLDAP="lib/ldb/ldb_ldap/ldb_ldap.o"
3369     fi
3370     with_ldap_support=yes
3371     AC_MSG_CHECKING(whether LDAP support is used)
3372     AC_MSG_RESULT(yes)
3373   else
3374     if test x"$with_ldap_support" = x"yes"; then
3375         AC_MSG_ERROR(libldap is needed for LDAP support)
3376     else
3377         AC_MSG_WARN(libldap is needed for LDAP support)
3378     fi
3379
3380     LDAP_LIBS=""
3381     with_ldap_support=no
3382   fi
3383   LIBS=$ac_save_LIBS
3384 fi
3385
3386
3387 #################################################
3388 # active directory support
3389
3390 with_ads_support=auto
3391 AC_MSG_CHECKING([for Active Directory and krb5 support])
3392
3393 AC_ARG_WITH(ads,
3394 [  --with-ads              Active Directory support (default auto)],
3395 [ case "$withval" in
3396     yes|no)
3397         with_ads_support="$withval"
3398         ;;
3399   esac ])
3400
3401 AC_MSG_RESULT($with_ads_support)
3402
3403 FOUND_KRB5=no
3404 KRB5_LIBS=""
3405
3406 if test x"$with_ldap_support" != x"yes"; then
3407
3408     if test x"$with_ads_support" = x"yes"; then
3409         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3410     elif test x"$with_ads_support" = x"auto"; then
3411         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3412         with_ads_support=no
3413     fi
3414
3415 else
3416
3417     # Check to see whether there is enough LDAP functionality to be able
3418     # to build AD support.
3419
3420 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3421 case "$host_os" in
3422         *hpux*)
3423     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3424
3425     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3426         if test x"$with_ads_support" = x"yes"; then
3427             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3428