r11167: -lsec should be include in $ACL_LIBS and not $LIBS on solaris
[ira/wip.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.53 or above
4 AC_PREREQ(2.53)
5 AC_INIT(include/includes.h)
6 AC_CONFIG_HEADER(include/config.h)
7
8 AC_DISABLE_STATIC
9 AC_ENABLE_SHARED
10
11 SMB_VERSION_STRING=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_OFFICIAL_STRING' | cut -d '"' -f2`
12 echo "SAMBA VERSION: ${SMB_VERSION_STRING}"
13
14 SAMBA_VERSION_SVN_REVISION=`cat $srcdir/include/version.h | grep 'SAMBA_VERSION_SVN_REVISION' | cut -d ' ' -f3-`
15 if test -n "${SAMBA_VERSION_SVN_REVISION}";then
16         echo "BUILD REVISION: ${SAMBA_VERSION_SVN_REVISION}"
17 fi
18
19 #################################################
20 # Directory handling stuff to support both the
21 # legacy SAMBA directories and FHS compliant
22 # ones...
23 AC_PREFIX_DEFAULT(/usr/local/samba)
24
25 lockdir="\${VARDIR}/locks"
26 piddir="\${VARDIR}/locks"
27 mandir="\${prefix}/man"
28 logfilebase="\${VARDIR}"
29 privatedir="\${prefix}/private"
30 libdir="\${prefix}/lib"
31 configdir="\${LIBDIR}"
32 swatdir="\${prefix}/swat"
33
34 AC_ARG_WITH(fhs, 
35 [  --with-fhs              Use FHS-compliant paths (default=no)],
36 [ case "$withval" in
37   yes)
38     lockdir="\${VARDIR}/lib/samba"
39     piddir="\${VARDIR}/run"
40     mandir="\${prefix}/share/man"
41     logfilebase="\${VARDIR}/log/samba"
42     privatedir="\${CONFIGDIR}/private"
43     libdir="\${prefix}/lib/samba"
44     configdir="${sysconfdir}/samba"
45     swatdir="\${DATADIR}/samba/swat"
46     ;;
47   esac])
48
49 #################################################
50 # set private directory location
51 AC_ARG_WITH(privatedir,
52 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
53 [ case "$withval" in
54   yes|no)
55   #
56   # Just in case anybody calls it without argument
57   #
58     AC_MSG_WARN([--with-privatedir called without argument - will use default])
59   ;;
60   * )
61     privatedir="$withval"
62     ;;
63   esac])
64
65 #################################################
66 # set lock directory location
67 AC_ARG_WITH(lockdir,
68 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
69 [ case "$withval" in
70   yes|no)
71   #
72   # Just in case anybody calls it without argument
73   #
74     AC_MSG_WARN([--with-lockdir called without argument - will use default])
75   ;;
76   * )
77     lockdir="$withval"
78     ;;
79   esac])
80
81 #################################################
82 # set pid directory location
83 AC_ARG_WITH(piddir,
84 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
85 [ case "$withval" in
86   yes|no)
87   #
88   # Just in case anybody calls it without argument
89   #
90     AC_MSG_WARN([--with-piddir called without argument - will use default])
91   ;;
92   * )
93     piddir="$withval"
94     ;;
95   esac])
96
97 #################################################
98 # set SWAT directory location
99 AC_ARG_WITH(swatdir,
100 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
101 [ case "$withval" in
102   yes|no)
103   #
104   # Just in case anybody does it
105   #
106     AC_MSG_WARN([--with-swatdir called without argument - will use default])
107   ;;
108   * )
109     swatdir="$withval"
110     ;;
111   esac])
112
113 #################################################
114 # set configuration directory location
115 AC_ARG_WITH(configdir,
116 [  --with-configdir=DIR    Where to put configuration files ($libdir)],
117 [ case "$withval" in
118   yes|no)
119   #
120   # Just in case anybody does it
121   #
122     AC_MSG_WARN([--with-configdir called without argument - will use default])
123   ;;
124   * )
125     configdir="$withval"
126     ;;
127   esac])
128
129 #################################################
130 # set log directory location
131 AC_ARG_WITH(logfilebase,
132 [  --with-logfilebase=DIR  Where to put log files ($VARDIR)],
133 [ case "$withval" in
134   yes|no)
135   #
136   # Just in case anybody does it
137   #
138     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
139   ;;
140   * )
141     logfilebase="$withval"
142     ;;
143   esac])
144
145 #################################################
146 # set lib directory location
147 AC_ARG_WITH(libdir,
148 [  --with-libdir=DIR       Where to put libdir ($libdir)],
149 [ case "$withval" in
150   yes|no)
151   #
152   # Just in case anybody does it
153   #
154     AC_MSG_WARN([--with-libdir without argument - will use default])
155   ;;
156   * )
157     libdir="$withval"
158     ;;
159   esac])
160
161 #################################################
162 # set lib directory location
163 AC_ARG_WITH(mandir,
164 [  --with-mandir=DIR       Where to put man pages ($mandir)],
165 [ case "$withval" in
166   yes|no)
167   #
168   # Just in case anybody does it
169   #
170     AC_MSG_WARN([--with-mandir without argument - will use default])
171   ;;
172   * )
173     mandir="$withval"
174     ;;
175   esac])
176
177 AC_ARG_WITH(cfenc,
178 [  --with-cfenc=HEADERDIR  Use internal CoreFoundation encoding API
179                           for optimization (Mac OS X/Darwin only)],
180 [
181 # May be in source $withval/CoreFoundation/StringEncodings.subproj.
182 # Should have been in framework $withval/CoreFoundation.framework/Headers.
183 for d in \
184     $withval/CoreFoundation/StringEncodings.subproj \
185     $withval/StringEncodings.subproj \
186     $withval/CoreFoundation.framework/Headers \
187     $withval/Headers \
188     $withval
189 do
190     if test -r $d/CFStringEncodingConverter.h; then
191         ln -sfh $d include/CoreFoundation
192     fi
193 done
194 ])
195
196 AC_SUBST(configdir)
197 AC_SUBST(lockdir)
198 AC_SUBST(piddir)
199 AC_SUBST(logfilebase)
200 AC_SUBST(privatedir)
201 AC_SUBST(swatdir)
202 AC_SUBST(bindir)
203 AC_SUBST(sbindir)
204
205 dnl Unique-to-Samba variables we'll be playing with.
206 AC_SUBST(SHELL)
207 AC_SUBST(LDSHFLAGS)
208 AC_SUBST(SONAMEFLAG)
209 AC_SUBST(SHLD)
210 AC_SUBST(HOST_OS)
211 AC_SUBST(PICFLAGS)
212 AC_SUBST(PICSUFFIX)
213 AC_SUBST(libc_cv_fpie)
214 AC_SUBST(PIE_CFLAGS)
215 AC_SUBST(PIE_LDFLAGS)
216 AC_SUBST(SHLIBEXT)
217 AC_SUBST(INSTALLCLIENT)
218 AC_SUBST(INSTALLCLIENTCMD_SH)
219 AC_SUBST(INSTALLCLIENTCMD_A)
220 AC_SUBST(LIBSMBCLIENT_SHARED)
221 AC_SUBST(LIBSMBCLIENT)
222 AC_SUBST(LIBSMBSHAREMODES_SHARED)
223 AC_SUBST(LIBSMBSHAREMODES)
224 AC_SUBST(PRINT_LIBS)
225 AC_SUBST(AUTH_LIBS)
226 AC_SUBST(ACL_LIBS)
227 AC_SUBST(PASSDB_LIBS)
228 AC_SUBST(IDMAP_LIBS)
229 AC_SUBST(KRB5_LIBS)
230 AC_SUBST(LDAP_LIBS)
231 AC_SUBST(SHLIB_PROGS)
232 AC_SUBST(SMBWRAPPER)
233 AC_SUBST(SMBWRAP_OBJS)
234 AC_SUBST(SMBWRAP_INC)
235 AC_SUBST(EXTRA_BIN_PROGS)
236 AC_SUBST(EXTRA_SBIN_PROGS)
237 AC_SUBST(EXTRA_ALL_TARGETS)
238 AC_SUBST(CONFIG_LIBS)
239
240 # Set defaults
241 PIE_CFLAGS=""
242 PIE_LDFLAGS=""
243 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
244
245 if test "x$enable_pie" != xno
246 then
247         AC_CACHE_CHECK(for -fPIE, libc_cv_fpie, [dnl
248                 cat > conftest.c <<EOF
249 int foo;
250 main () { return 0;}
251 EOF
252                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
253                 then
254                         libc_cv_fpie=yes
255                         PIE_CFLAGS="-fPIE"
256                         PIE_LDFLAGS="-pie"
257                 fi
258                 rm -f conftest*])
259 fi
260 if test "x$PIE_CFLAGS" = x
261 then
262         libc_cv_fpie=no
263 fi
264
265 AC_ARG_ENABLE(debug, 
266 [  --enable-debug          Turn on compiler debugging information (default=no)],
267     [if eval "test x$enable_debug = xyes"; then
268         CFLAGS="${CFLAGS} -g"
269     fi])
270
271 AC_SUBST(SOCKWRAP)
272 AC_ARG_ENABLE(socket-wrapper, 
273 [  --enable-socket-wrapper         Turn on socket wrapper library (default=no)],
274     [if eval "test x$enable_socket_wrapper = xyes"; then
275         AC_DEFINE(SOCKET_WRAPPER,1,[Use socket wrapper library])
276         SOCKWRAP="\$(SOCKET_WRAPPER_OBJ)"
277     fi])
278
279 # compile with optimization and without debugging by default, but
280 # allow people to set their own preference.
281 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
282 # if it has no value.  This prevent *very* large debug binaries from occurring
283 # by default.
284 if test "x$CFLAGS" = x; then
285   CFLAGS="-O"
286 fi
287
288 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_"
289
290 AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
291     [if eval "test x$enable_developer = xyes"; then
292         developer=yes
293         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
294         # Add -Wdeclaration-after-statement if compiler supports it
295         AC_CACHE_CHECK(
296           [that the C compiler understands -Wdeclaration-after-statement],
297           samba_cv_HAVE_Wdeclaration_after_statement, [
298           AC_TRY_RUN_STRICT([
299             int main(void)
300             {
301                 return 0;
302             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
303             samba_cv_HAVE_Wdeclaration_after_statement=yes,
304             samba_cv_HAVE_Wdeclaration_after_statement=no,
305             samba_cv_HAVE_Wdeclaration_after_statement=cross)
306        ])
307        if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
308             CFLAGS="${CFLAGS} -Wdeclaration-after-statement"
309        fi
310     fi])
311
312 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
313     [if eval "test x$enable_krb5developer = xyes"; then
314         developer=yes
315         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
316     fi])
317
318 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
319
320 if test "x$enable_dmalloc" = xyes
321 then
322         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
323         AC_DEFINE(DMALLOC_FUNC_CHECK, 1, 
324                   [Define to check invariants around some common functions])
325         LIBS="$LIBS -ldmalloc"  
326 fi
327
328 dnl Checks for programs.
329
330 ##
331 ## for some reason this macro resets the CFLAGS
332 ## so save and restore
333 ##
334 OLD_CFLAGS=${CFLAGS}
335 AC_PROG_CC
336 CFLAGS=${OLD_CFLAGS}
337
338 OLD_CFLAGS=${CFLAGS}
339 AC_PROG_CPP
340 CFLAGS=${OLD_CFLAGS}
341
342 AC_PROG_INSTALL
343 AC_PROG_AWK
344 AC_PATH_PROG(PERL, perl)
345
346 AC_CHECK_TOOL(AR, ar)
347
348 dnl Check if we use GNU ld
349 LD=ld
350 AC_PROG_LD_GNU
351
352 dnl Certain versions of GNU ld the default is not to have the 
353 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
354 dnl warnings when building modules.
355 if test "$ac_cv_prog_gnu_ld" = "yes"; then
356         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
357         AC_MSG_CHECKING(GNU ld release date)
358         changequote(,)dnl
359         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'`
360         changequote([,])dnl
361         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
362         if test -n "$ac_cv_gnu_ld_date"; then
363         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
364                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
365         fi
366         else
367            AC_MSG_CHECKING(GNU ld release version)
368            changequote(,)dnl
369            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
370            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
371            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
372            changequote([,])dnl
373            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
374            AC_MSG_CHECKING(GNU ld release version major)
375            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
376            AC_MSG_CHECKING(GNU ld release version minor)
377            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
378            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
379              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
380            fi
381         fi
382 fi
383
384 dnl needed before AC_TRY_COMPILE
385 AC_ISC_POSIX
386
387 dnl look for executable suffix
388 AC_EXEEXT
389
390 dnl Check if C compiler understands -c and -o at the same time
391 AC_PROG_CC_C_O
392 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
393       BROKEN_CC=
394 else
395       BROKEN_CC=#
396 fi
397 AC_SUBST(BROKEN_CC)
398
399 dnl Check if the C compiler understands -Werror
400 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
401  AC_TRY_RUN_STRICT([
402   int main(void)
403   {
404         return 0;
405   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
406   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
407 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
408    Werror_FLAGS="-Werror"
409 else 
410 dnl Check if the C compiler understands -w2
411 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
412  AC_TRY_RUN_STRICT([
413   int main(void)
414   {
415         return 0;
416   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
417   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
418 if test x"$samba_cv_HAVE_w2" = x"yes"; then
419    Werror_FLAGS="-w2"
420 fi
421 fi
422
423 dnl Check if the C compiler understands volatile (it should, being ANSI).
424 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
425     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
426         samba_cv_volatile=yes,samba_cv_volatile=no)])
427 if test x"$samba_cv_volatile" = x"yes"; then
428    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
429 fi
430
431 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
432 AC_MSG_CHECKING(uname -s)
433 AC_MSG_RESULT(${UNAME_S})
434
435 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
436 AC_MSG_CHECKING(uname -r)
437 AC_MSG_RESULT(${UNAME_R})
438
439 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
440 AC_MSG_CHECKING(uname -m)
441 AC_MSG_RESULT(${UNAME_M})
442
443 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
444 AC_MSG_CHECKING(uname -p)
445 AC_MSG_RESULT(${UNAME_P})
446
447 AC_CANONICAL_SYSTEM
448
449 dnl Add #include for broken IRIX header files
450   case "$host_os" in
451         *irix6*) AC_ADD_INCLUDE(<standards.h>)
452         ;;
453 esac
454
455 AC_VALIDATE_CACHE_SYSTEM_TYPE
456
457 DYNEXP=
458
459 dnl Add modules that have to be built by default here
460 dnl These have to be built static:
461 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_svcctl rpc_ntsvcs rpc_net rpc_dfs rpc_srv rpc_spoolss rpc_eventlog auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin"
462
463 dnl These are preferably build shared, and static if dlopen() is not available
464 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"
465
466 if test "x$developer" = xyes; then
467    default_static_modules="$default_static_modules rpc_echo"
468    default_shared_modules="$default_shared_modules charset_weird"
469 fi
470
471 #
472 # Config CPPFLAG settings for strange OS's that must be set
473 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
474 # case statement; its first reference must be unconditional.
475 #
476 case "$host_os" in
477 # Try to work out if this is the native HPUX compiler that uses the -Ae flag.
478     *hpux*)
479     
480       AC_PROG_CC_FLAG(Ae)
481       # mmap on HPUX is completely broken...
482       AC_DEFINE(MMAP_BLACKLIST, 1, [Whether MMAP is broken])
483       if test $ac_cv_prog_cc_Ae = yes; then
484         CPPFLAGS="$CPPFLAGS -Ae"
485       fi
486 #
487 # Defines needed for HPUX support.
488 # HPUX has bigcrypt but (sometimes?) doesn't use it for
489 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
490 #
491       case `uname -r` in
492                         *9*|*10*)
493                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
494                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
495                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
496                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
497                                 AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
498                                 AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
499                                 ;;
500                         *11*)
501                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
502                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
503                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
504                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
505                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
506                                 AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
507                                 AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
508                                 ;;
509       esac
510       ;;
511
512 #
513 # CRAY Unicos has broken const handling
514        *unicos*)
515           AC_MSG_RESULT([disabling const])
516           CPPFLAGS="$CPPFLAGS -Dconst="
517           ;;
518         
519 #
520 # AIX4.x doesn't even admit to having large
521 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
522 #
523     *aix4*)
524           AC_MSG_RESULT([enabling large file support])
525       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
526           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
527       ;;    
528 #
529 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
530 # to the existance of large files..
531 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
532 # recommendations on large file support, however it makes the
533 # compile work using gcc 2.7 and 2.8, whereas using the Sun
534 # recommendation makes the compile fail on gcc2.7. JRA.
535 #
536 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
537 #
538         *solaris*)
539                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
540                 case `uname -r` in
541                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
542                                 AC_MSG_RESULT([no large file support])
543                                 ;;
544                         5.*)
545                         AC_MSG_RESULT([enabling large file support])
546                         if test "$ac_cv_prog_gcc" = yes; then
547                                 ${CC-cc} -v >conftest.c 2>&1
548                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
549                                 rm -fr conftest.c
550                                 case "$ac_cv_gcc_compiler_version_number" in
551                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
552                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
553                                                 LDFLAGS="$LDFLAGS -lthread"
554                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
555                                                 ;;
556                                         *)
557                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
558                                                 LDFLAGS="$LDFLAGS -lthread"
559                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
560                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
561                                                 ;;
562                                 esac
563                         else
564                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
565                                 LDFLAGS="$LDFLAGS -lthread"
566                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
567                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
568                         fi
569                         ;;
570                 esac
571                 ;;
572 #
573 # IRIX uses SYSV printing.  Make sure to set that here
574 #
575         *irix*)
576                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
577                 ;;
578         *freebsd*|*dragonfly*)
579                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
580                 ;;
581 #
582 # VOS may need to have POSIX support and System V compatibility enabled.
583 #
584     *vos*)
585     case "$CPPFLAGS" in
586           *-D_POSIX_C_SOURCE*)
587                 ;;
588           *)
589                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
590                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
591                 ;;
592     esac
593     case "$CPPFLAGS" in
594           *-D_SYSV*|*-D_SVID_SOURCE*)
595                 ;;
596           *)
597                 CPPFLAGS="$CPPFLAGS -D_SYSV"
598                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
599     esac
600     ;;
601 #
602 # Tests needed for SINIX large file support.
603 #
604     *sysv4*)
605       if test $host = mips-sni-sysv4 ; then
606         AC_MSG_CHECKING([for LFS support])
607         old_CPPFLAGS="$CPPFLAGS"
608         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
609         AC_TRY_RUN([
610 #include <unistd.h>
611 main () {
612 #if _LFS64_LARGEFILE == 1
613 exit(0);
614 #else
615 exit(1);
616 #endif
617 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
618         CPPFLAGS="$old_CPPFLAGS"
619         if test x$SINIX_LFS_SUPPORT = xyes ; then
620           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
621                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
622           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
623           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
624           LIBS="`getconf LFS64_LIBS` $LIBS"
625         fi
626       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
627       fi
628     ;;
629
630 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
631 #
632     *linux*)
633         AC_MSG_CHECKING([for LFS support])
634         old_CPPFLAGS="$CPPFLAGS"
635         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
636        AC_TRY_RUN([
637 #include <unistd.h>
638 #include <sys/utsname.h>
639 #include <string.h>
640 #include <stdlib.h>
641 main() {
642 #if _LFS64_LARGEFILE == 1
643        struct utsname uts;
644        char *release;
645        int major, minor;
646
647        /* Ensure this is glibc 2.2 or higher */
648 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
649        int libc_major = __GLIBC__;
650        int libc_minor = __GLIBC_MINOR__;
651
652        if (libc_major < 2)
653               exit(1);
654        if (libc_minor < 2)
655               exit(1);
656 #endif
657
658        /* Ensure this is kernel 2.4 or higher */
659
660        uname(&uts);
661        release = strdup(uts.release);
662        major = atoi(strsep(&release, "."));
663        minor = atoi(strsep(&release, "."));
664
665        if (major > 2 || (major == 2 && minor > 3))
666                exit(0);
667        exit(1);
668 #else
669        exit(1);
670 #endif
671 }
672 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
673         CPPFLAGS="$old_CPPFLAGS"
674         if test x$LINUX_LFS_SUPPORT = xyes ; then
675                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
676                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
677                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
678                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
679         fi
680         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
681         ;;
682
683 #
684 # MacOS X is the *only* system that uses compose character in utf8. This
685 # is so horribly broken....
686 #
687     *darwin*)
688         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
689 # Add Fink directories for various packages, like dlcompat.
690 # Note: iconv does that explicitly below, but other packages
691 # don't.
692         CPPFLAGS="$CPPFLAGS -I/sw/include"
693         LDFLAGS="$LDFLAGS -L/sw/lib"
694
695 # If we have dlsym_prepend_underscore (from Fink's dlcompat),
696 # use that instead of plain dlsym.
697
698         AC_CHECK_LIB(dl,dlopen)
699         AC_CHECK_FUNCS(dlsym_prepend_underscore,[CPPFLAGS="$CPPFLAGS -Ddlsym=dlsym_prepend_underscore"])
700
701 # Add a system specific charset module.
702
703         default_shared_modules="$default_shared_modules charset_macosxfs"
704         ;;
705     *hurd*)
706         AC_MSG_CHECKING([for LFS support])
707         old_CPPFLAGS="$CPPFLAGS"
708         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
709         AC_TRY_RUN([
710 #include <unistd.h>
711 main () {
712 #if _LFS64_LARGEFILE == 1
713 exit(0);
714 #else
715 exit(1);
716 #endif
717 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
718         CPPFLAGS="$old_CPPFLAGS"
719         if test x$GLIBC_LFS_SUPPORT = xyes ; then
720           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
721                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
722           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
723         fi
724       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
725     ;;
726
727 esac
728
729 AC_INLINE
730 AC_HEADER_STDC
731 AC_HEADER_DIRENT
732 AC_HEADER_TIME
733 AC_HEADER_SYS_WAIT
734 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)
735 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h limits.h memory.h alloca.h)
736 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
737 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
738 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
739 AC_CHECK_HEADERS(sys/un.h)
740 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
741 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
742 AC_CHECK_HEADERS(sys/sysmacros.h security/_pam_macros.h dlfcn.h)
743 AC_CHECK_HEADERS(sys/syslog.h syslog.h execinfo.h)
744 AC_CHECK_HEADERS(langinfo.h locale.h)
745
746 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
747 #if HAVE_RPC_RPC_H
748 #include <rpc/rpc.h>
749 #endif
750 ]])
751
752 ## These fail to compile on IRIX so just check for their presence
753 AC_CHECK_HEADERS(sys/mode.h,,,)
754
755 # Look for Darwin headers
756 old_CPPFLAGS="$CPPFLAGS"
757 CPPFLAGS="-Iinclude $CPPFLAGS"
758 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
759 CPPFLAGS="$old_CPPFLAGS"
760
761 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
762 # subdirectory of headers.
763 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
764
765 # check for linux on amd64 since valgrind is not quite there yet
766 case "$host_os" in
767         *linux*)
768                 case "$UNAME_P" in
769                         *x86_64*)
770                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
771                                 ;;
772                 esac
773                 ;;
774 esac
775
776
777 #
778 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
779 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
780 #
781 case "$host_os" in
782     *hpux*)
783                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
784                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
785                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
786                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
787                 fi
788         ;;
789 esac
790 AC_CHECK_HEADERS(shadow.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
791 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h security/pam_appl.h)
792 AC_CHECK_HEADERS(stropts.h poll.h)
793 AC_CHECK_HEADERS(sys/capability.h syscall.h sys/syscall.h)
794 AC_CHECK_HEADERS(sys/acl.h sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
795 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
796
797 AC_CHECK_HEADERS(netinet/ip.h,,,[[
798 #include <sys/types.h>
799 #if HAVE_SYS_SOCKET_H
800 #include <sys/socket.h>
801 #endif
802 #include <netinet/in.h>
803 #if HAVE_NETINET_IN_SYSTM_H
804 #include <netinet/in_systm.h>
805 #endif
806 ]])
807
808 AC_CHECK_HEADERS(net/if.h,,,[[
809 #include <sys/types.h>
810 #if HAVE_SYS_SOCKET_H
811 #include <sys/socket.h>
812 #endif
813 ]])
814
815 AC_CHECK_HEADERS(security/pam_modules.h,,,[[
816 #if HAVE_SECURITY_PAM_APPL_H
817 #include <security/pam_appl.h>
818 #endif
819 ]])
820
821 # For experimental utmp support (lastlog on some BSD-like systems)
822 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
823  
824 AC_CHECK_SIZEOF(int,cross)
825 AC_CHECK_SIZEOF(long,cross)
826 AC_CHECK_SIZEOF(short,cross)
827
828 AC_C_CONST
829 AC_C_INLINE
830 AC_C_BIGENDIAN
831 AC_C_CHAR_UNSIGNED
832
833 AC_TYPE_SIGNAL
834 AC_TYPE_UID_T
835 AC_TYPE_MODE_T
836 AC_TYPE_OFF_T
837 AC_TYPE_SIZE_T
838 AC_TYPE_PID_T
839 AC_STRUCT_ST_RDEV
840 AC_DIRENT_D_OFF
841 AC_CHECK_TYPE(ino_t,unsigned)
842 AC_CHECK_TYPE(loff_t,off_t)
843 AC_CHECK_TYPE(offset_t,loff_t)
844 AC_CHECK_TYPE(ssize_t, int)
845 AC_CHECK_TYPE(wchar_t, unsigned short)
846
847 ############################################
848 # for cups support we need libcups, and a handful of header files
849
850 AC_ARG_ENABLE(cups,
851 [  --enable-cups           Turn on CUPS support (default=auto)])
852
853 if test x$enable_cups != xno; then
854         AC_PATH_PROG(CUPS_CONFIG, cups-config)
855
856         if test "x$CUPS_CONFIG" != x; then
857                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
858                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
859                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
860                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
861         elif test x"$enable_cups" = x"yes"; then
862                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
863         fi
864 fi
865
866 AC_ARG_ENABLE(iprint,
867 [  --enable-iprint         Turn on iPrint support (default=yes if cups is yes)])
868
869 if test x$enable_iprint != xno; then
870         if test "x$CUPS_CONFIG" != x; then
871                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
872         elif test x"$enable_iprint" = x"yes"; then
873                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
874         fi
875 fi
876
877 ############################################
878 # we need dlopen/dlclose/dlsym/dlerror for PAM, the password database plugins and the plugin loading code
879 AC_SEARCH_LIBS(dlopen, [dl])
880 # dlopen/dlclose/dlsym/dlerror will be checked again later and defines will be set then
881
882 ############################################
883 # check if the compiler can do immediate structures
884 AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
885     AC_TRY_COMPILE([
886 #include <stdio.h>],
887 [
888    typedef struct {unsigned x;} FOOBAR;
889    #define X_FOOBAR(x) ((FOOBAR) { x })
890    #define FOO_ONE X_FOOBAR(1)
891    FOOBAR f = FOO_ONE;   
892    static struct {
893         FOOBAR y; 
894         } f2[] = {
895                 {FOO_ONE}
896         };   
897 ],
898         samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
899 if test x"$samba_cv_immediate_structures" = x"yes"; then
900    AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
901 fi
902
903 ############################################
904 # check if the compiler can do immediate structures
905 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
906     AC_TRY_LINK([
907 #include <stdio.h>],
908 [
909                 if (0) {
910                    this_function_does_not_exist();
911                 } else {
912                   return 1;
913                 }
914
915 ],
916         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
917 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
918    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
919 fi
920
921 ############################################
922 # check for unix domain sockets
923 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
924     AC_TRY_COMPILE([
925 #include <sys/types.h>
926 #include <stdlib.h>
927 #include <stddef.h>
928 #include <sys/socket.h>
929 #include <sys/un.h>],
930 [
931   struct sockaddr_un sunaddr; 
932   sunaddr.sun_family = AF_UNIX;
933 ],
934         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
935 if test x"$samba_cv_unixsocket" = x"yes"; then
936    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
937 fi
938
939
940 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
941     AC_TRY_COMPILE([
942 #include <sys/types.h>
943 #if STDC_HEADERS
944 #include <stdlib.h>
945 #include <stddef.h>
946 #endif
947 #include <sys/socket.h>],[socklen_t i = 0],
948         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
949 if test x"$samba_cv_socklen_t" = x"yes"; then
950    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
951 fi
952
953 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
954     AC_TRY_COMPILE([
955 #include <sys/types.h>
956 #if STDC_HEADERS
957 #include <stdlib.h>
958 #include <stddef.h>
959 #endif
960 #include <signal.h>],[sig_atomic_t i = 0],
961         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
962 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
963    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
964 fi
965
966 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
967     AC_TRY_COMPILE([
968 #include <sys/types.h>
969 #if STDC_HEADERS
970 #include <stdlib.h>
971 #include <stddef.h>
972 #endif
973 #if TIME_WITH_SYS_TIME
974 # include <sys/time.h>
975 # include <time.h>
976 #else
977 # if HAVE_SYS_TIME_H
978 #  include <sys/time.h>
979 # else
980 #  include <time.h>
981 # endif
982 #endif
983 #if HAVE_AIO_H
984 #include <aio.h>
985 #endif
986 ],[struct timespec ts;],
987         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
988 if test x"$samba_cv_struct_timespec" = x"yes"; then
989    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
990 fi
991
992 # stupid headers have the functions but no declaration. grrrr.
993 AC_HAVE_DECL(errno, [#include <errno.h>])
994 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
995 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
996 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
997 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
998 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
999 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
1000
1001 # and glibc has setresuid under linux but the function does
1002 # nothing until kernel 2.1.44! very dumb.
1003 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
1004     AC_TRY_RUN([#include <errno.h>
1005 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
1006         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
1007 if test x"$samba_cv_have_setresuid" = x"yes"; then
1008     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
1009 fi
1010
1011 # Do the same check for setresguid...
1012 #
1013 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
1014     AC_TRY_RUN([#include <unistd.h>
1015 #include <errno.h>
1016 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
1017         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
1018 if test x"$samba_cv_have_setresgid" = x"yes"; then
1019     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
1020 fi
1021
1022 AC_FUNC_MEMCMP
1023
1024 ###############################################
1025 # Readline included by default unless explicitly asked not to
1026 test "${with_readline+set}" != "set" && with_readline=yes
1027
1028 # test for where we get readline() from
1029 AC_MSG_CHECKING(whether to use readline)
1030 AC_ARG_WITH(readline,
1031 [  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
1032 [  case "$with_readline" in
1033   yes)
1034     AC_MSG_RESULT(yes)
1035
1036     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1037     AC_CHECK_HEADERS(readline/history.h)
1038
1039     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1040       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1041        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1042       done
1043       AC_CHECK_LIB(readline, rl_callback_handler_install,
1044        [TERMLIBS="-lreadline $TERMLIBS"
1045        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1046        break], [TERMLIBS=], $TERMLIBS)])
1047     ;;
1048   no)
1049     AC_MSG_RESULT(no)
1050     ;;
1051   *)
1052     AC_MSG_RESULT(yes)
1053
1054     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1055     # alternate readline path
1056     _ldflags=${LDFLAGS}
1057     _cppflags=${CPPFLAGS}
1058
1059     # Add additional search path
1060     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1061     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1062
1063     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1064     AC_CHECK_HEADERS(readline/history.h)
1065
1066     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1067       for termlib in ncurses curses termcap terminfo termlib; do
1068        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1069       done
1070       AC_CHECK_LIB(readline, rl_callback_handler_install,
1071        [TERMLDFLAGS="-L$with_readline/lib"
1072        TERMCPPFLAGS="-I$with_readline/include"
1073        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1074        TERMLIBS="-lreadline $TERMLIBS"
1075        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1076        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1077
1078     LDFLAGS=$_ldflags
1079     ;;
1080   esac],
1081   AC_MSG_RESULT(no)
1082 )
1083 AC_SUBST(TERMLIBS)
1084 AC_SUBST(TERMLDFLAGS)
1085
1086 # The readline API changed slightly from readline3 to readline4, so
1087 # code will generate warnings on one of them unless we have a few
1088 # special cases.
1089 AC_CHECK_LIB(readline, rl_completion_matches,
1090              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, 
1091                         [Do we have rl_completion_matches?])],
1092              [],
1093              [$TERMLIBS])
1094
1095 # The following test taken from the cvs sources
1096 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
1097 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
1098 # libsocket.so which has a bad implementation of gethostbyname (it
1099 # only looks in /etc/hosts), so we only look for -lsocket if we need
1100 # it.
1101 AC_CHECK_FUNCS(connect)
1102 if test x"$ac_cv_func_connect" = x"no"; then
1103     case "$LIBS" in
1104     *-lnsl*) ;;
1105     *) AC_CHECK_LIB(nsl_s, printf) ;;
1106     esac
1107     case "$LIBS" in
1108     *-lnsl*) ;;
1109     *) AC_CHECK_LIB(nsl, printf) ;;
1110     esac
1111     case "$LIBS" in
1112     *-lsocket*) ;;
1113     *) AC_CHECK_LIB(socket, connect) ;;
1114     esac
1115     case "$LIBS" in
1116     *-linet*) ;;
1117     *) AC_CHECK_LIB(inet, connect) ;;
1118     esac
1119     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
1120     dnl has been cached.
1121     if test x"$ac_cv_lib_socket_connect" = x"yes" || 
1122        test x"$ac_cv_lib_inet_connect" = x"yes"; then
1123         # ac_cv_func_connect=yes
1124         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
1125         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
1126     fi
1127 fi
1128
1129 ###############################################
1130 # test for where we get yp_get_default_domain() from
1131 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1132 AC_CHECK_FUNCS(yp_get_default_domain)
1133
1134 # Check if we have execl, if not we need to compile smbrun.
1135 AC_CHECK_FUNCS(execl)
1136 if test x"$ac_cv_func_execl" = x"no"; then
1137     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1138 fi
1139
1140 AC_CHECK_FUNCS(dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64)
1141 AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync memset strlcpy strlcat setpgid)
1142 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
1143 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1144 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1145 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1146 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1147 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1148 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1149 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1150 AC_CHECK_FUNCS(syslog vsyslog timegm)
1151 AC_CHECK_FUNCS(setlocale nl_langinfo)
1152 AC_CHECK_FUNCS(nanosleep)
1153 # setbuffer, shmget, shm_open are needed for smbtorture
1154 AC_CHECK_FUNCS(setbuffer shmget shm_open backtrace_symbols)
1155 AC_CHECK_HEADERS(libexc.h)
1156 AC_CHECK_LIB(exc, trace_back_stack)
1157
1158 # syscall() is needed for smbwrapper.
1159 AC_CHECK_FUNCS(syscall)
1160
1161 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1162 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1163 AC_CHECK_FUNCS(__getcwd _getcwd)
1164 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1165 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1166 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1167 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1168 AC_CHECK_FUNCS(getdents _getdents __getdents _lseek __lseek _read __read)
1169 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1170 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1171 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1172 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1173 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1174 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1175 AC_CHECK_FUNCS(prctl)
1176
1177 AC_TRY_COMPILE([
1178 #ifdef HAVE_SYS_PRCTL_H
1179 #include <sys/prctl.h>
1180 #endif
1181 ],
1182 [int i; i = prtcl(0); ],
1183 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1184
1185 #
1186
1187 #
1188 case "$host_os" in
1189     *linux*)
1190        # glibc <= 2.3.2 has a broken getgrouplist
1191        AC_TRY_RUN([
1192 #include <unistd.h>
1193 #include <sys/utsname.h>
1194 main() {
1195        /* glibc up to 2.3 has a broken getgrouplist */
1196 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1197        int libc_major = __GLIBC__;
1198        int libc_minor = __GLIBC_MINOR__;
1199
1200        if (libc_major < 2)
1201               exit(1);
1202        if ((libc_major == 2) && (libc_minor <= 3))
1203               exit(1);
1204 #endif
1205        exit(0);
1206 }
1207 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1208        if test x"$linux_getgrouplist_ok" = x"yes"; then
1209           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1210        fi
1211        ;;
1212     *)
1213        AC_CHECK_FUNCS(getgrouplist)
1214        ;;
1215 esac
1216
1217 #
1218 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1219 #
1220
1221 if test x$ac_cv_func_stat64 = xno ; then
1222   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1223   AC_TRY_LINK([
1224 #if defined(HAVE_UNISTD_H)
1225 #include <unistd.h>
1226 #endif
1227 #include <sys/stat.h>
1228 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1229   AC_MSG_RESULT([$ac_cv_func_stat64])
1230   if test x$ac_cv_func_stat64 = xyes ; then
1231     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1232   fi
1233 fi
1234
1235 if test x$ac_cv_func_lstat64 = xno ; then
1236   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1237   AC_TRY_LINK([
1238 #if defined(HAVE_UNISTD_H)
1239 #include <unistd.h>
1240 #endif
1241 #include <sys/stat.h>
1242 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1243   AC_MSG_RESULT([$ac_cv_func_lstat64])
1244   if test x$ac_cv_func_lstat64 = xyes ; then
1245     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1246   fi
1247 fi
1248
1249 if test x$ac_cv_func_fstat64 = xno ; then
1250   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1251   AC_TRY_LINK([
1252 #if defined(HAVE_UNISTD_H)
1253 #include <unistd.h>
1254 #endif
1255 #include <sys/stat.h>
1256 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1257   AC_MSG_RESULT([$ac_cv_func_fstat64])
1258   if test x$ac_cv_func_fstat64 = xyes ; then
1259     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1260   fi
1261 fi
1262
1263 #################################################
1264 # Check whether struct stat has timestamps with sub-second resolution.
1265 # At least IRIX and Solaris have these.
1266 #
1267 # We check that 
1268 #       all of st_mtim, st_atim and st_ctim exist
1269 #       all of the members are in fact of type struct timespec
1270 #
1271 # There is some conflicting standards weirdness about whether we should use
1272 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1273 # prefer struct timespec.
1274
1275 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1276     [
1277         AC_TRY_COMPILE(
1278             [
1279 #if TIME_WITH_SYS_TIME
1280 # include <sys/time.h>
1281 # include <time.h>
1282 #else
1283 # if HAVE_SYS_TIME_H
1284 #  include <sys/time.h>
1285 # else
1286 #  include <time.h>
1287 # endif
1288 #endif
1289 #ifdef HAVE_SYS_STAT_H
1290 #include <sys/stat.h>
1291 #endif
1292             ],
1293             [
1294                 struct timespec t;
1295                 struct stat s = {0};
1296                 t.tv_sec = s.st_mtim.tv_sec;
1297                 t.tv_nsec = s.st_mtim.tv_nsec;
1298                 t.tv_sec = s.st_ctim.tv_sec;
1299                 t.tv_nsec = s.st_ctim.tv_nsec;
1300                 t.tv_sec = s.st_atim.tv_sec;
1301                 t.tv_nsec = s.st_atim.tv_nsec;
1302             ],
1303             samba_stat_hires=yes, samba_stat_hires=no)
1304     ])
1305
1306 if test x"$samba_stat_hires" = x"yes" ; then
1307     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1308     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1309     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1310     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1311             [whether struct stat has sub-second timestamps])
1312 fi
1313
1314 #####################################
1315 # we might need the resolv library on some systems
1316 AC_CHECK_LIB(resolv, dn_expand)
1317
1318 #
1319 # Check for the functions putprpwnam, set_auth_parameters,
1320 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1321 # Needed for OSF1 and HPUX.
1322 #
1323
1324 AC_LIBTESTFUNC(security, putprpwnam)
1325 AC_LIBTESTFUNC(sec, putprpwnam)
1326
1327 AC_LIBTESTFUNC(security, set_auth_parameters)
1328 AC_LIBTESTFUNC(sec, set_auth_parameters)
1329
1330 # UnixWare 7.x has its getspnam in -lgen
1331 AC_LIBTESTFUNC(gen, getspnam)
1332
1333 AC_LIBTESTFUNC(security, getspnam)
1334 AC_LIBTESTFUNC(sec, getspnam)
1335
1336 AC_LIBTESTFUNC(security, bigcrypt)
1337 AC_LIBTESTFUNC(sec, bigcrypt)
1338
1339 AC_LIBTESTFUNC(security, getprpwnam)
1340 AC_LIBTESTFUNC(sec, getprpwnam)
1341
1342 ############################################
1343 # Check if we have libattr
1344 AC_SEARCH_LIBS(getxattr, [attr])
1345 AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1346 AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1347 AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1348 AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1349 AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1350 # Check if we have extattr
1351 case "$host_os" in
1352   *freebsd4* | *dragonfly* )
1353     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1354     ;;
1355   *)
1356     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1357     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1358     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1359     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1360     ;;
1361 esac
1362
1363 # Assume non-shared by default and override below
1364 BLDSHARED="false"
1365
1366 # these are the defaults, good for lots of systems
1367 HOST_OS="$host_os"
1368 LDSHFLAGS="-shared"
1369 SONAMEFLAG="#"
1370 SHLD="\${CC} \${CFLAGS}"
1371 PICFLAGS=""
1372 PICSUFFIX="po"
1373 SHLIBEXT="so"
1374
1375 if test "$enable_shared" = "yes"; then
1376   # this bit needs to be modified for each OS that is suported by
1377   # smbwrapper. You need to specify how to create a shared library and
1378   # how to compile C code to produce PIC object files
1379
1380   AC_MSG_CHECKING([ability to build shared libraries])
1381
1382   # and these are for particular systems
1383   case "$host_os" in
1384                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1385                         BLDSHARED="true"
1386                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1387                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined" 
1388                         else
1389                                 LDSHFLAGS="-shared -Wl,-Bsymbolic" 
1390                         fi
1391                         DYNEXP="-Wl,--export-dynamic"
1392                         PICFLAGS="-fPIC"
1393                         SONAMEFLAG="-Wl,-soname="
1394                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1395                         ;;
1396                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1397                         BLDSHARED="true"
1398                         LDSHFLAGS="-G"
1399                         SONAMEFLAG="-h "
1400                         if test "${GCC}" = "yes"; then
1401                                 PICFLAGS="-fPIC"
1402                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1403                                         DYNEXP="-Wl,-E"
1404                                 fi
1405                         else
1406                                 PICFLAGS="-KPIC"
1407                                 ## ${CFLAGS} added for building 64-bit shared 
1408                                 ## libs using Sun's Compiler
1409                                 LDSHFLAGS="-G \${CFLAGS}"
1410                                 PICSUFFIX="po.o"
1411                         fi
1412                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1413                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1414                         ;;
1415                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1416                         BLDSHARED="true"
1417                         LDSHFLAGS="-G"
1418                         SONAMEFLAG="-Wl,-h,"
1419                         PICFLAGS="-KPIC"   # Is this correct for SunOS
1420                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1421                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1422                         ;;
1423                 *netbsd* | *freebsd* | *dragonfly* )  
1424                         BLDSHARED="true"
1425                         LDSHFLAGS="-shared"
1426                         DYNEXP="-Wl,--export-dynamic"
1427                         SONAMEFLAG="-Wl,-soname,"
1428                         PICFLAGS="-fPIC -DPIC"
1429                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1430                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1431                         ;;
1432                 *openbsd*)  BLDSHARED="true"
1433                         LDSHFLAGS="-shared"
1434                         DYNEXP="-Wl,-Bdynamic"
1435                         SONAMEFLAG="-Wl,-soname,"
1436                         PICFLAGS="-fPIC"
1437                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1438                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1439                         ;;
1440                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1441                         case "$host_os" in
1442                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1443                         ;;
1444                         esac
1445                         BLDSHARED="true"
1446                         LDSHFLAGS="-set_version sgi1.0 -shared"
1447                         SONAMEFLAG="-soname "
1448                         SHLD="\${LD}"
1449                         if test "${GCC}" = "yes"; then
1450                                 PICFLAGS="-fPIC"
1451                         else 
1452                                 PICFLAGS="-KPIC"
1453                         fi
1454                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1455                         ;;
1456                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1457                         BLDSHARED="true"
1458                         LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry,-berok"
1459                         DYNEXP="-Wl,-brtl,-bexpall"
1460                         PICFLAGS="-O2"
1461                         if test "${GCC}" != "yes"; then
1462                                 ## for funky AIX compiler using strncpy()
1463                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1464                         fi
1465
1466                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1467                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1468                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1469                         ;;
1470                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1471                         # Use special PIC flags for the native HP-UX compiler.
1472                         if test $ac_cv_prog_cc_Ae = yes; then
1473                                 BLDSHARED="true"
1474                                 SHLD="cc"
1475                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1476                                 SONAMEFLAG="-Wl,+h "
1477                                 PICFLAGS="+z"
1478                         elif test "${GCC}" = "yes"; then
1479                                 PICFLAGS="-fPIC"
1480                         fi
1481                         if test "$host_cpu" = "ia64"; then
1482                                 SHLIBEXT="so"
1483                                 DYNEXP="-Wl,-E,+b /usr/local/lib/hpux32:/usr/lib/hpux32"
1484                         else
1485                                 SHLIBEXT="sl"
1486                                 DYNEXP="-Wl,-E,+b /usr/local/lib:/usr/lib"
1487                         fi
1488                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1489                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1490                         ;;
1491                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1492                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1493                         ;;
1494                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1495                         BLDSHARED="true"
1496                         LDSHFLAGS="-shared"
1497                         SONAMEFLAG="-Wl,-soname,"
1498                         PICFLAGS="-fPIC"
1499                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1500                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1501                         ;;
1502                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1503                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1504                         ;;
1505                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1506                         BLDSHARED="true"
1507                         LDSHFLAGS="-shared"
1508                         SONAMEFLAG="-Wl,-soname,"
1509                         PICFLAGS="-KPIC"
1510                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1511                         ;;
1512                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1513                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1514                         ;;
1515                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1516                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1517                         ;;
1518                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1519                         case "$host" in
1520                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1521                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1522                                         fi
1523                                         LDSHFLAGS="-G"
1524                                         DYNEXP="-Bexport"
1525                                 ;;
1526                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1527                         esac
1528                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1529                         ;;
1530
1531                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1532                         if [ test "$GCC" != yes ]; then
1533                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1534                         fi
1535                         LDSHFLAGS="-G"
1536                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1537                         ;;
1538                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1539                         BLDSHARED="false"
1540                         LDSHFLAGS=""
1541                         ;;
1542
1543                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1544                         BLDSHARED="true"
1545                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1546                         SHLIBEXT="dylib"
1547                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1548                         ;;
1549
1550                 *)
1551                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1552                         ;;
1553   esac
1554   AC_SUBST(DYNEXP)
1555   AC_MSG_RESULT($BLDSHARED)
1556   AC_MSG_CHECKING([linker flags for shared libraries])
1557   AC_MSG_RESULT([$LDSHFLAGS])
1558   AC_MSG_CHECKING([compiler flags for position-independent code])
1559   AC_MSG_RESULT([$PICFLAGS])
1560 fi
1561
1562 #######################################################
1563 # test whether building a shared library actually works
1564 if test $BLDSHARED = true; then
1565 AC_CACHE_CHECK([whether building shared libraries actually works], 
1566                [ac_cv_shlib_works],[
1567    # try building a trivial shared library
1568    ac_cv_shlib_works=no
1569    # The $SHLD and $LDSHFLAGS variables may contain references to other
1570    # variables so they need to be eval'ed.
1571    $CC $CPPFLAGS $CFLAGS $PICFLAGS -c -o \
1572         shlib.$PICSUFFIX ${srcdir-.}/tests/shlib.c && \
1573    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1574         shlib.$PICSUFFIX && ac_cv_shlib_works=yes
1575    rm -f "shlib.$SHLIBEXT" shlib.$PICSUFFIX
1576 ])
1577 if test $ac_cv_shlib_works = no; then
1578    BLDSHARED=false
1579 fi
1580 fi
1581
1582 ################
1583
1584 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1585 AC_TRY_RUN([#include <stdio.h>
1586 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1587 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1588 if test x"$samba_cv_have_longlong" = x"yes"; then
1589     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1590 fi
1591
1592 #
1593 # Check if the compiler supports the LL prefix on long long integers.
1594 # AIX needs this.
1595
1596 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1597     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1598         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1599 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1600    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1601 fi
1602
1603   
1604 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1605 AC_TRY_RUN([#include <stdio.h>
1606 #include <sys/stat.h>
1607 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1608 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1609 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1610     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1611 fi
1612
1613 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1614 AC_TRY_RUN([
1615 #if defined(HAVE_UNISTD_H)
1616 #include <unistd.h>
1617 #endif
1618 #include <stdio.h>
1619 #include <sys/stat.h>
1620 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1621 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1622 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1623     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1624 fi
1625
1626 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1627 AC_TRY_RUN([#include <stdio.h>
1628 #include <sys/stat.h>
1629 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1630 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1631 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1632     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1633 fi
1634
1635 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1636 AC_TRY_RUN([
1637 #if defined(HAVE_UNISTD_H)
1638 #include <unistd.h>
1639 #endif
1640 #include <stdio.h>
1641 #include <sys/stat.h>
1642 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1643 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1644 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1645     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1646 fi
1647
1648 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1649 AC_TRY_RUN([
1650 #if defined(HAVE_UNISTD_H)
1651 #include <unistd.h>
1652 #endif
1653 #include <stdio.h>
1654 #include <sys/stat.h>
1655 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1656 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1657 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1658     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1659 fi
1660
1661 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
1662 AC_TRY_COMPILE([
1663 #if defined(HAVE_UNISTD_H)
1664 #include <unistd.h>
1665 #endif
1666 #include <sys/types.h>
1667 #include <dirent.h>],
1668 [DIR64 de;],
1669 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
1670 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1671     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
1672 fi
1673
1674 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1675 AC_TRY_COMPILE([
1676 #if defined(HAVE_UNISTD_H)
1677 #include <unistd.h>
1678 #endif
1679 #include <sys/types.h>
1680 #include <dirent.h>],
1681 [struct dirent64 de;],
1682 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1683 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1684     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1685 fi
1686
1687 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1688 AC_TRY_RUN([
1689 #if defined(HAVE_UNISTD_H)
1690 #include <unistd.h>
1691 #endif
1692 #include <sys/types.h>
1693 main() { dev_t dev; int i = major(dev); return 0; }],
1694 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1695 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1696     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1697 fi
1698
1699 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1700 AC_TRY_RUN([
1701 #if defined(HAVE_UNISTD_H)
1702 #include <unistd.h>
1703 #endif
1704 #include <sys/types.h>
1705 main() { dev_t dev; int i = minor(dev); return 0; }],
1706 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1707 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1708     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1709 fi
1710
1711 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
1712 AC_TRY_RUN([
1713 #if defined(HAVE_UNISTD_H)
1714 #include <unistd.h>
1715 #endif
1716 #include <sys/types.h>
1717 main() { dev_t dev = makedev(1,2); return 0; }],
1718 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
1719 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
1720     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
1721 fi
1722
1723 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
1724 AC_TRY_RUN([#include <stdio.h>
1725 main() { char c; c=250; exit((c > 0)?0:1); }],
1726 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
1727 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
1728     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
1729 fi
1730
1731 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
1732 AC_TRY_COMPILE([#include <sys/types.h>
1733 #include <sys/socket.h>
1734 #include <netinet/in.h>],
1735 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
1736 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
1737 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
1738     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
1739 fi
1740
1741 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1742 AC_TRY_COMPILE([#include <sys/types.h>
1743 #include <dirent.h>
1744 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1745 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1746 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1747     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1748 fi
1749
1750 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1751 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1752 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1753 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1754     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1755 fi
1756
1757 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1758 AC_TRY_RUN([
1759 #include <sys/time.h>
1760 #include <unistd.h>
1761 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
1762            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
1763 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1764     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
1765 fi
1766
1767 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
1768 AC_TRY_LINK([#include <stdarg.h>
1769 va_list ap1,ap2;], [va_copy(ap1,ap2);],
1770 samba_cv_HAVE_VA_COPY=yes,
1771 samba_cv_HAVE_VA_COPY=no)])
1772 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
1773     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
1774 else
1775     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
1776     AC_TRY_LINK([#include <stdarg.h>
1777     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
1778     samba_cv_HAVE___VA_COPY=yes,
1779     samba_cv_HAVE___VA_COPY=no)])
1780     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
1781         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
1782     fi
1783 fi
1784
1785 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
1786 AC_TRY_RUN([
1787 #include <sys/types.h>
1788 #include <stdarg.h>
1789 void foo(const char *format, ...) { 
1790        va_list ap;
1791        int len;
1792        char buf[5];
1793
1794        va_start(ap, format);
1795        len = vsnprintf(buf, 0, format, ap);
1796        va_end(ap);
1797        if (len != 5) exit(1);
1798
1799        va_start(ap, format);
1800        len = vsnprintf(0, 0, format, ap);
1801        va_end(ap);
1802        if (len != 5) exit(1);
1803
1804        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
1805
1806        exit(0);
1807 }
1808 main() { foo("hello"); }
1809 ],
1810 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
1811 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
1812     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
1813 fi
1814
1815 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
1816 AC_TRY_RUN([#include <sys/types.h>
1817 #include <dirent.h>
1818 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
1819 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
1820 di->d_name[0] == 0) exit(0); exit(1);} ],
1821 samba_cv_HAVE_BROKEN_READDIR=yes,samba_cv_HAVE_BROKEN_READDIR=no,samba_cv_HAVE_BROKEN_READDIR=cross)])
1822 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
1823     AC_DEFINE(HAVE_BROKEN_READDIR,1,[Whether readdir() is broken])
1824 fi
1825
1826 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
1827 AC_TRY_COMPILE([#include <sys/types.h>
1828 #include <utime.h>],
1829 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
1830 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
1831 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
1832     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
1833 fi
1834
1835 ##############
1836 # Check utmp details, but only if our OS offers utmp.h
1837 if test x"$ac_cv_header_utmp_h" = x"yes"; then
1838 dnl  utmp and utmpx come in many flavours
1839 dnl  We need to check for many of them
1840 dnl  But we don't need to do each and every one, because our code uses
1841 dnl  mostly just the utmp (not utmpx) fields.
1842
1843 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
1844
1845 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
1846 AC_TRY_COMPILE([#include <sys/types.h>
1847 #include <utmp.h>],
1848 [struct utmp ut;  ut.ut_name[0] = 'a';],
1849 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
1850 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
1851     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
1852 fi 
1853
1854 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
1855 AC_TRY_COMPILE([#include <sys/types.h>
1856 #include <utmp.h>],
1857 [struct utmp ut;  ut.ut_user[0] = 'a';],
1858 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
1859 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
1860     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
1861 fi 
1862
1863 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
1864 AC_TRY_COMPILE([#include <sys/types.h>
1865 #include <utmp.h>],
1866 [struct utmp ut;  ut.ut_id[0] = 'a';],
1867 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
1868 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
1869     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
1870 fi 
1871
1872 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
1873 AC_TRY_COMPILE([#include <sys/types.h>
1874 #include <utmp.h>],
1875 [struct utmp ut;  ut.ut_host[0] = 'a';],
1876 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
1877 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
1878     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
1879 fi 
1880
1881 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
1882 AC_TRY_COMPILE([#include <sys/types.h>
1883 #include <utmp.h>],
1884 [struct utmp ut;  time_t t; ut.ut_time = t;],
1885 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
1886 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
1887     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
1888 fi 
1889
1890 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
1891 AC_TRY_COMPILE([#include <sys/types.h>
1892 #include <utmp.h>],
1893 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
1894 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
1895 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
1896     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
1897 fi 
1898
1899 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
1900 AC_TRY_COMPILE([#include <sys/types.h>
1901 #include <utmp.h>],
1902 [struct utmp ut;  ut.ut_type = 0;],
1903 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
1904 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
1905     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
1906 fi 
1907
1908 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
1909 AC_TRY_COMPILE([#include <sys/types.h>
1910 #include <utmp.h>],
1911 [struct utmp ut;  ut.ut_pid = 0;],
1912 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
1913 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
1914     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
1915 fi 
1916
1917 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
1918 AC_TRY_COMPILE([#include <sys/types.h>
1919 #include <utmp.h>],
1920 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
1921 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
1922 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
1923     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
1924 fi 
1925
1926 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
1927 AC_TRY_COMPILE([#include <sys/types.h>
1928 #include <utmp.h>],
1929 [struct utmp ut;  ut.ut_addr = 0;],
1930 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
1931 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
1932     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
1933 fi 
1934
1935 if test x$ac_cv_func_pututline = xyes ; then
1936   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
1937   AC_TRY_COMPILE([#include <sys/types.h>
1938 #include <utmp.h>],
1939   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
1940   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
1941   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
1942       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
1943   fi
1944 fi
1945
1946 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
1947 AC_TRY_COMPILE([#include <sys/types.h>
1948 #include <utmpx.h>],
1949 [struct utmpx ux;  ux.ut_syslen = 0;],
1950 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
1951 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
1952     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
1953 fi 
1954
1955 fi
1956 # end utmp details
1957
1958
1959 ICONV_LOCATION=standard
1960 LOOK_DIRS="/usr /usr/local /sw /opt"
1961 AC_ARG_WITH(libiconv,
1962 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
1963 [
1964   if test "$withval" = "no" ; then
1965     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
1966   else
1967      if test "$withval" != "yes" ; then
1968         ICONV_PATH_SPEC=yes
1969         LOOK_DIRS="$withval"
1970      fi
1971   fi
1972 ])
1973
1974 for i in $LOOK_DIRS ; do
1975     save_LIBS=$LIBS
1976     save_LDFLAGS=$LDFLAGS
1977     save_CPPFLAGS=$CPPFLAGS
1978     ICONV_FOUND="no"
1979     unset libext
1980     CPPFLAGS="$CPPFLAGS -I$i/include"
1981 dnl This is here to handle -withval stuff for --with-libiconv
1982 dnl Perhaps we should always add a -L
1983
1984 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
1985 dnl installation paths. This gets a little tricky since we might have iconv
1986 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
1987 dnl succeed when the header is found. To counter this, make sure the 
1988 dnl library directory is there and check the ABI directory first (which
1989 dnl should be harmless on other systems.
1990 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
1991     for l in "lib32" "lib" "lib/hpux32"; do
1992         if test -d "$i/$l" ; then
1993                 LDFLAGS="$save_LDFLAGS -L$i/$l"
1994         LIBS=
1995         export LDFLAGS LIBS CPPFLAGS
1996 dnl Try to find iconv(3)
1997                 jm_ICONV($i/$l)
1998                 if test x"$ICONV_FOUND" = "xyes" ; then
1999             libext="$l"
2000             break;
2001         fi
2002         fi
2003     done
2004
2005     if test x"$ICONV_FOUND" = "xyes" ; then
2006         LDFLAGS=$save_LDFLAGS
2007         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2008         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2009         LIBS="$save_LIBS"
2010         ICONV_LOCATION=$i
2011         export LDFLAGS LIBS CPPFLAGS
2012 dnl Now, check for a working iconv ... we want to do it here because
2013 dnl there might be a working iconv further down the list of LOOK_DIRS
2014
2015         ############
2016         # check for iconv in libc
2017         ic_save_LIBS="$LIBS"
2018         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
2019            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
2020         fi
2021         if test x"$jm_cv_lib_iconv" != x; then
2022            LIBS="$LIBS -l$jm_cv_lib_iconv"
2023         fi
2024 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
2025         default_dos_charset=no
2026         default_display_charset=no
2027         default_unix_charset=no
2028
2029         # check for default dos charset name
2030         for j in CP850 IBM850 ; do
2031             rjs_CHARSET($j)
2032             if test x"$ICONV_CHARSET" = x"$j"; then
2033                 default_dos_charset="\"$j\""
2034                 break
2035             fi
2036         done
2037         # check for default display charset name
2038         for j in ASCII 646 ; do
2039             rjs_CHARSET($j)
2040             if test x"$ICONV_CHARSET" = x"$j"; then
2041                 default_display_charset="\"$j\""
2042                 break
2043             fi
2044         done
2045         # check for default unix charset name
2046         for j in UTF-8 UTF8 ; do
2047             rjs_CHARSET($j)
2048             if test x"$ICONV_CHARSET" = x"$j"; then
2049                 default_unix_charset="\"$j\""
2050                 break
2051             fi
2052         done
2053         
2054         if test "$default_dos_charset" != "no" -a \
2055                 "$default_dos_charset" != "cross" -a \
2056                 "$default_display_charset" != "no" -a \ 
2057                 "$default_display_charset" != "cross" -a \
2058                 "$default_unix_charset" != "no" -a \
2059                 "$default_unix_charset" != "cross"
2060         then
2061                 samba_cv_HAVE_NATIVE_ICONV=yes
2062         else if test "$default_dos_charset" = "cross" -o \
2063                      "$default_display_charset" = "cross" -o \
2064                      "$default_unix_charset" = "cross"
2065         then
2066                 samba_cv_HAVE_NATIVE_ICONV=cross
2067         else
2068                 samba_cv_HAVE_NATIVE_ICONV=no
2069         fi
2070         fi
2071 dnl ])
2072
2073         LIBS="$ic_save_LIBS"
2074         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2075            CPPFLAGS=$save_CPPFLAGS
2076            LDFLAGS=$save_LDFLAGS
2077            LIBS=$save_LIBS
2078            if test x"$jm_cv_lib_iconv" != x; then
2079               LIBS="$LIBS -l$jm_cv_lib_iconv"
2080            fi
2081            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2082            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2083            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2084            export CPPFLAGS
2085            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2086            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2087            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2088            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2089            break
2090         fi
2091 dnl We didn't find a working iconv, so keep going
2092     fi
2093 dnl We only need to clean these up here for the next pass through the loop
2094     CPPFLAGS=$save_CPPFLAGS
2095     LDFLAGS=$save_LDFLAGS
2096     LIBS=$save_LIBS
2097     export LDFLAGS LIBS CPPFLAGS
2098 done
2099 unset libext
2100
2101
2102 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2103     AC_MSG_WARN([Sufficient support for iconv function was not found. 
2104     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2105    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2106    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2107    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2108 fi
2109
2110
2111 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2112 AC_TRY_RUN([
2113 #include <sys/types.h>
2114 #include <fcntl.h>
2115 #ifndef F_GETLEASE
2116 #define F_GETLEASE      1025
2117 #endif
2118 main() {
2119        int fd = open("/dev/null", O_RDONLY);
2120        return fcntl(fd, F_GETLEASE, 0) == -1;
2121 }
2122 ],
2123 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2124 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2125     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2126 fi
2127
2128 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2129 AC_TRY_RUN([
2130 #include <sys/types.h>
2131 #include <fcntl.h>
2132 #include <signal.h>
2133 #ifndef F_NOTIFY
2134 #define F_NOTIFY 1026
2135 #endif
2136 main() {
2137         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2138 }
2139 ],
2140 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2141 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2142     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2143 fi
2144
2145 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2146 AC_TRY_RUN([
2147 #include <sys/types.h>
2148 #include <fcntl.h>
2149 #include <signal.h>
2150 #include <sys/file.h>
2151 #ifndef LOCK_MAND
2152 #define LOCK_MAND       32
2153 #define LOCK_READ       64
2154 #endif
2155 main() {
2156         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2157 }
2158 ],
2159 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2160 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2161     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2162 fi
2163
2164
2165
2166
2167 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2168 AC_TRY_COMPILE([#include <sys/types.h>
2169 #include <fcntl.h>],
2170 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2171 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2172 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2173     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2174 fi
2175
2176 AC_CACHE_CHECK([for irix specific capabilities],samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES,[
2177 AC_TRY_RUN([#include <sys/types.h>
2178 #include <sys/capability.h>
2179 main() {
2180  cap_t cap;
2181  if ((cap = cap_get_proc()) == NULL)
2182    exit(1);
2183  cap->cap_effective |= CAP_NETWORK_MGT;
2184  cap->cap_inheritable |= CAP_NETWORK_MGT;
2185  cap_set_proc(cap);
2186  exit(0);
2187 }
2188 ],
2189 samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross)])
2190 if test x"$samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES" = x"yes"; then
2191     AC_DEFINE(HAVE_IRIX_SPECIFIC_CAPABILITIES,1,[Whether IRIX specific capabilities are available])
2192 fi
2193
2194 #
2195 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2196 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2197 #
2198
2199 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2200 AC_TRY_COMPILE([#include <sys/types.h>
2201 #if defined(HAVE_RPC_RPC_H)
2202 #include <rpc/rpc.h>
2203 #endif],
2204 [int16 testvar;],
2205 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2206 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2207     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2208 fi
2209
2210 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2211 AC_TRY_COMPILE([#include <sys/types.h>
2212 #if defined(HAVE_RPC_RPC_H)
2213 #include <rpc/rpc.h>
2214 #endif],
2215 [uint16 testvar;],
2216 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2217 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2218     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2219 fi
2220
2221 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2222 AC_TRY_COMPILE([#include <sys/types.h>
2223 #if defined(HAVE_RPC_RPC_H)
2224 #include <rpc/rpc.h>
2225 #endif],
2226 [int32 testvar;],
2227 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2228 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2229     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2230 fi
2231
2232 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2233 AC_TRY_COMPILE([#include <sys/types.h>
2234 #if defined(HAVE_RPC_RPC_H)
2235 #include <rpc/rpc.h>
2236 #endif],
2237 [uint32 testvar;],
2238 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2239 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2240     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2241 fi
2242
2243 dnl
2244 dnl Some systems (SCO) have a problem including
2245 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2246 dnl as a #define in <prot.h> and as part of an enum
2247 dnl in <rpc/rpc.h>.
2248 dnl
2249
2250 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2251 AC_TRY_COMPILE([#include <sys/types.h>
2252 #ifdef HAVE_SYS_SECURITY_H
2253 #include <sys/security.h>
2254 #include <prot.h>
2255 #endif  /* HAVE_SYS_SECURITY_H */
2256 #if defined(HAVE_RPC_RPC_H)
2257 #include <rpc/rpc.h>
2258 #endif],
2259 [int testvar;],
2260 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2261 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2262     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2263 fi
2264
2265 AC_MSG_CHECKING([for test routines])
2266 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2267            AC_MSG_RESULT(yes),
2268            AC_MSG_ERROR([cant find test code. Aborting config]),
2269            AC_MSG_WARN([cannot run when cross-compiling]))
2270
2271 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2272 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2273            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2274 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2275     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2276 fi
2277
2278 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2279 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2280            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2281            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2282            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2283 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2284 then
2285     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2286 fi
2287
2288 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2289 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2290            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2291 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2292     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2293 fi
2294
2295 AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
2296 SAVE_CPPFLAGS="$CPPFLAGS"
2297 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt"
2298 AC_TRY_COMPILE([
2299 #define REPLACE_GETPASS 1
2300 #define NO_PROTO_H 1
2301 #define NO_CONFIG_H 1
2302 #define main dont_declare_main
2303 #include "${srcdir-.}/lib/getsmbpass.c"
2304 #undef main
2305 ],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
2306 CPPFLAGS="$SAVE_CPPFLAGS"
2307 ])
2308 if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
2309         AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
2310 fi
2311
2312 AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
2313 AC_TRY_RUN([
2314 #include <stdio.h>
2315 #include <sys/types.h>
2316 #include <netinet/in.h>
2317 #ifdef HAVE_ARPA_INET_H
2318 #include <arpa/inet.h>
2319 #endif
2320 main() { struct in_addr ip; ip.s_addr = 0x12345678;
2321 if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
2322     strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
2323 exit(1);}],
2324            samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
2325 if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
2326     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
2327 fi
2328
2329 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2330 AC_TRY_RUN([#include <stdlib.h>
2331 #include <sys/types.h>
2332 #include <sys/stat.h>
2333 #include <unistd.h>
2334 main() { 
2335   struct stat st;
2336   char tpl[20]="/tmp/test.XXXXXX"; 
2337   int fd = mkstemp(tpl); 
2338   if (fd == -1) exit(1);
2339   unlink(tpl);
2340   if (fstat(fd, &st) != 0) exit(1);
2341   if ((st.st_mode & 0777) != 0600) exit(1);
2342   exit(0);
2343 }],
2344 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2345 samba_cv_HAVE_SECURE_MKSTEMP=no,
2346 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2347 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2348     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2349 fi
2350
2351 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
2352 AC_TRY_RUN([#include <unistd.h>
2353 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
2354 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
2355 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
2356     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
2357 fi
2358
2359 AC_CACHE_CHECK([for sysconf(_SC_NPROC_ONLN)],samba_cv_SYSCONF_SC_NPROC_ONLN,[
2360 AC_TRY_RUN([#include <unistd.h>
2361 main() { exit(sysconf(_SC_NPROC_ONLN) == -1 ? 1 : 0); }],
2362 samba_cv_SYSCONF_SC_NPROC_ONLN=yes,samba_cv_SYSCONF_SC_NPROC_ONLN=no,samba_cv_SYSCONF_SC_NPROC_ONLN=cross)])
2363 if test x"$samba_cv_SYSCONF_SC_NPROC_ONLN" = x"yes"; then
2364     AC_DEFINE(SYSCONF_SC_NPROC_ONLN,1,[Whether sysconf(_SC_NPROC_ONLN) is available])
2365 fi
2366
2367 AC_CACHE_CHECK([for root],samba_cv_HAVE_ROOT,[
2368 AC_TRY_RUN([main() { exit(getuid() != 0); }],
2369            samba_cv_HAVE_ROOT=yes,samba_cv_HAVE_ROOT=no,samba_cv_HAVE_ROOT=cross)])
2370 if test x"$samba_cv_HAVE_ROOT" = x"yes"; then
2371     AC_DEFINE(HAVE_ROOT,1,[Whether current user is root])
2372 else
2373     AC_MSG_WARN(running as non-root will disable some tests)
2374 fi
2375
2376 ##################
2377 # look for a method of finding the list of network interfaces
2378 iface=no;
2379 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2380 AC_TRY_RUN([
2381 #define HAVE_IFACE_AIX 1
2382 #define AUTOCONF_TEST 1
2383 #include "confdefs.h"
2384 #include "${srcdir-.}/lib/interfaces.c"],
2385            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2386 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2387     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2388 fi
2389
2390 if test $iface = no; then
2391 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2392 AC_TRY_RUN([
2393 #define HAVE_IFACE_IFCONF 1
2394 #define AUTOCONF_TEST 1
2395 #include "confdefs.h"
2396 #include "${srcdir-.}/lib/interfaces.c"],
2397            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2398 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2399     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2400 fi
2401 fi
2402
2403 if test $iface = no; then
2404 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2405 AC_TRY_RUN([
2406 #define HAVE_IFACE_IFREQ 1
2407 #define AUTOCONF_TEST 1
2408 #include "confdefs.h"
2409 #include "${srcdir-.}/lib/interfaces.c"],
2410            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2411 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2412     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2413 fi
2414 fi
2415
2416
2417 ################################################
2418 # look for a method of setting the effective uid
2419 seteuid=no;
2420 if test $seteuid = no; then
2421 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2422 AC_TRY_RUN([
2423 #define AUTOCONF_TEST 1
2424 #define USE_SETRESUID 1
2425 #include "confdefs.h"
2426 #include "${srcdir-.}/lib/util_sec.c"],
2427            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2428 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2429     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2430 fi
2431 fi
2432
2433
2434 if test $seteuid = no; then
2435 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2436 AC_TRY_RUN([
2437 #define AUTOCONF_TEST 1
2438 #define USE_SETREUID 1
2439 #include "confdefs.h"
2440 #include "${srcdir-.}/lib/util_sec.c"],
2441            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2442 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2443     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2444 fi
2445 fi
2446
2447 if test $seteuid = no; then
2448 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2449 AC_TRY_RUN([
2450 #define AUTOCONF_TEST 1
2451 #define USE_SETEUID 1
2452 #include "confdefs.h"
2453 #include "${srcdir-.}/lib/util_sec.c"],
2454            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2455 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2456     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2457 fi
2458 fi
2459
2460 if test $seteuid = no; then
2461 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2462 AC_TRY_RUN([
2463 #define AUTOCONF_TEST 1
2464 #define USE_SETUIDX 1
2465 #include "confdefs.h"
2466 #include "${srcdir-.}/lib/util_sec.c"],
2467            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2468 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2469     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2470 fi
2471 fi
2472
2473
2474 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2475 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2476            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2477 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2478     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2479 fi
2480
2481 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2482 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2483            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2484 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2485     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2486 fi
2487
2488 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2489 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2490            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2491 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2492     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2493
2494 else
2495
2496 dnl
2497 dnl Don't check for 64 bit fcntl locking if we know that the
2498 dnl glibc2.1 broken check has succeeded.
2499 dnl 
2500
2501   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2502   AC_TRY_RUN([
2503 #if defined(HAVE_UNISTD_H)
2504 #include <unistd.h>
2505 #endif
2506 #include <stdio.h>
2507 #include <stdlib.h>
2508
2509 #ifdef HAVE_FCNTL_H
2510 #include <fcntl.h>
2511 #endif
2512
2513 #ifdef HAVE_SYS_FCNTL_H
2514 #include <sys/fcntl.h>
2515 #endif
2516 main() { struct flock64 fl64;
2517 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2518 exit(0);
2519 #else
2520 exit(1);
2521 #endif
2522 }],
2523        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2524
2525   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2526       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2527   fi
2528 fi
2529
2530 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2531 AC_TRY_COMPILE([#include <sys/types.h>
2532 #include <sys/stat.h>
2533 #include <unistd.h>],
2534 [struct stat st;  st.st_blocks = 0;],
2535 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2536 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2537     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2538 fi 
2539
2540 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2541 AC_TRY_COMPILE([#include <sys/types.h>
2542 #include <sys/stat.h>
2543 #include <unistd.h>],
2544 [struct stat st;  st.st_blksize = 0;],
2545 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2546 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2547     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2548 fi
2549
2550 case "$host_os" in
2551 *linux*)
2552 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2553 AC_TRY_COMPILE([
2554 #ifdef HAVE_SYS_VFS_H
2555 #include <sys/vfs.h>
2556 #endif
2557 #ifdef HAVE_SYS_CAPABILITY_H
2558 #include <sys/capability.h>
2559 #endif
2560 ],[int i;],
2561    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
2562 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
2563    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
2564 fi
2565 ;;
2566 esac
2567
2568 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2569 AC_TRY_COMPILE([
2570 #include <sys/types.h>
2571 #include <sys/acl.h>
2572 #if defined(HAVE_RPCSVC_NIS_H)
2573 #include <rpcsvc/nis.h>
2574 #endif],
2575 [int i;],
2576 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2577 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2578         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2579 fi
2580
2581 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2582 AC_TRY_RUN([
2583 #include <stdio.h>
2584 #include <limits.h>
2585 main() {
2586         char *newpath = realpath("/tmp", NULL);
2587         exit ((newpath != NULL) ? 0 : 1);
2588 }
2589 ],
2590 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2591 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2592     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2593 fi
2594
2595 #################################################
2596 # check for smbwrapper support
2597 AC_MSG_CHECKING(whether to use smbwrapper)
2598 AC_ARG_WITH(smbwrapper,
2599 [  --with-smbwrapper       Include SMB wrapper support (default=no) ],
2600 [ case "$withval" in
2601   yes)
2602     AC_MSG_RESULT(yes)
2603     AC_DEFINE(WITH_SMBWRAPPER,1,[Whether to include smbwrapper support])
2604         WRAPPROG="bin/smbsh\$(EXEEXT)"
2605         WRAP="bin/smbwrapper.$SHLIBEXT"
2606         WRAP_OBJS="\$(SMBW_OBJ1) \$(SMBWRAPPER_OBJ1)"
2607         WRAP_INC="-I\$(srcdir)/smbwrapper"
2608
2609 # Conditions under which smbwrapper should not be built.
2610
2611         if test x$PICFLAGS = x; then
2612            echo No support for PIC code - disabling smbwrapper and smbsh
2613            WRAPPROG=""
2614            WRAP=""
2615            WRAP_OBJS=""
2616            WRAP_INC=""
2617         elif test x$ac_cv_func_syscall = xno; then
2618            AC_MSG_RESULT([No syscall() -- disabling smbwrapper and smbsh])
2619            WRAPPROG=""
2620            WRAP=""
2621            WRAP_OBJS=""
2622            WRAP_INC=""
2623         fi
2624         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WRAPPROG $WRAP"
2625         SMBWRAPPER="$WRAPPROG $WRAP"
2626         SMBWRAP_OBJS="$WRAP_OBJS"
2627         SMBWRAP_INC="$WRAP_INC"
2628     ;;
2629   *)
2630     AC_MSG_RESULT(no)
2631     ;;
2632   esac ],
2633   AC_MSG_RESULT(no)
2634 )
2635
2636 #################################################
2637 # check for AFS clear-text auth support
2638 samba_cv_WITH_AFS=no
2639 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2640 AC_ARG_WITH(afs,
2641 [  --with-afs              Include AFS clear-text auth support (default=no) ],
2642 [ case "$withval" in
2643   yes|auto)
2644     AC_MSG_RESULT($withval)
2645     samba_cv_WITH_AFS=$withval
2646     ;;
2647   *)
2648     AC_MSG_RESULT(no)
2649     ;;
2650   esac ],
2651   AC_MSG_RESULT(no)
2652 )
2653
2654 ####################################################
2655 # check for Linux-specific AFS fake-kaserver support
2656 samba_cv_WITH_FAKE_KASERVER=no
2657 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2658 AC_ARG_WITH(fake-kaserver,
2659 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
2660 [ case "$withval" in
2661   yes|auto)
2662     AC_MSG_RESULT($withval)
2663     samba_cv_WITH_FAKE_KASERVER=$withval
2664     ;;
2665   *)
2666     AC_MSG_RESULT(no)
2667     ;;
2668   esac ],
2669   AC_MSG_RESULT(no)
2670 )
2671
2672 #################################################
2673 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2674 if test x"$samba_cv_WITH_AFS" != x"no" ||
2675    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2676
2677     # see if this box has the afs-headers in /usr/include/afs
2678     AC_MSG_CHECKING(for /usr/include/afs)
2679     if test -d /usr/include/afs; then
2680           CFLAGS="$CFLAGS -I/usr/include/afs"
2681           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2682           AC_MSG_RESULT(yes)
2683     else
2684       AC_MSG_RESULT(no)
2685     fi
2686    
2687     # check for afs.h
2688     have_afs_headers=no
2689     AC_CHECK_HEADERS(afs.h afs/afs.h)
2690     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2691         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2692            test x"$samba_cv_WITH_AFS" = x"auto"; then
2693                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2694         else
2695                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2696         fi
2697     else
2698         have_afs_headers=yes
2699     fi
2700 fi
2701
2702 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2703     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2704 fi
2705
2706 #################################################
2707 # check whether to compile AFS/NT ACL mapping module
2708 samba_cv_WITH_VFS_AFSACL=no
2709 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2710 AC_ARG_WITH(vfs-afsacl,
2711 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
2712 [ case "$withval" in
2713   yes|auto)
2714     AC_MSG_RESULT($withval)
2715     samba_cv_WITH_VFS_AFSACL=yes
2716     ;;
2717   *)
2718     AC_MSG_RESULT(no)
2719     ;;
2720   esac ],
2721   AC_MSG_RESULT(no)
2722 )
2723
2724 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2725    default_shared_modules="$default_shared_modules vfs_afsacl"
2726 fi
2727         
2728 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2729     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2730 fi
2731
2732 #################################################
2733 # check for the DFS clear-text auth system
2734 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2735 AC_ARG_WITH(dfs,
2736 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
2737 [ case "$withval" in
2738   yes)
2739     AC_MSG_RESULT(yes)
2740     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2741     ;;
2742   *)
2743     AC_MSG_RESULT(no)
2744     ;;
2745   esac ],
2746   AC_MSG_RESULT(no)
2747 )
2748
2749 ########################################################
2750 # Compile with LDAP support?
2751
2752 with_ldap_support=auto
2753 AC_MSG_CHECKING([for LDAP support])
2754
2755 AC_ARG_WITH(ldap,
2756 [  --with-ldap             LDAP support (default yes)],
2757 [ case "$withval" in
2758     yes|no)
2759         with_ldap_support=$withval
2760         ;;
2761   esac ])
2762
2763 AC_MSG_RESULT($with_ldap_support)
2764
2765 SMBLDAP=""
2766 AC_SUBST(SMBLDAP)
2767 SMBLDAPUTIL=""
2768 AC_SUBST(SMBLDAPUTIL)
2769 if test x"$with_ldap_support" != x"no"; then
2770
2771   ##################################################################
2772   # first test for ldap.h and lber.h
2773   # (ldap.h is required for this test)
2774   AC_CHECK_HEADERS(ldap.h lber.h)
2775   
2776   if test x"$ac_cv_header_ldap_h" != x"yes"; then
2777         if test x"$with_ldap_support" = x"yes"; then
2778          AC_MSG_ERROR(ldap.h is needed for LDAP support)
2779         else
2780          AC_MSG_WARN(ldap.h is needed for LDAP support)
2781         fi
2782         
2783         with_ldap_support=no
2784   fi
2785 fi
2786
2787 if test x"$with_ldap_support" != x"no"; then
2788   ac_save_LIBS=$LIBS
2789
2790   ##################################################################
2791   # we might need the lber lib on some systems. To avoid link errors
2792   # this test must be before the libldap test
2793   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
2794
2795   ########################################################
2796   # now see if we can find the ldap libs in standard paths
2797   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
2798
2799   AC_CHECK_FUNC_EXT(ldap_domain2hostlist,$LDAP_LIBS)
2800   
2801   ########################################################
2802   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
2803   # Check found in pam_ldap 145.
2804   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
2805
2806   LIBS="$LIBS $LDAP_LIBS"
2807   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
2808     AC_TRY_COMPILE([
2809         #include <lber.h>
2810         #include <ldap.h>], 
2811         [ldap_set_rebind_proc(0, 0, 0);], 
2812         [smb_ldap_cv_ldap_set_rebind_proc=3], 
2813         [smb_ldap_cv_ldap_set_rebind_proc=2]
2814     ) 
2815   ])
2816   
2817   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
2818
2819   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS) 
2820   
2821   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes" -a x"$ac_cv_func_ext_ldap_domain2hostlist" = x"yes"; then
2822     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
2823     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
2824     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
2825     default_shared_modules="$default_shared_modules";
2826     SMBLDAP="lib/smbldap.o"
2827     SMBLDAPUTIL="lib/smbldap_util.o"
2828     with_ldap_support=yes
2829     AC_MSG_CHECKING(whether LDAP support is used)
2830     AC_MSG_RESULT(yes)
2831   else
2832     if test x"$with_ldap_support" = x"yes"; then
2833         AC_MSG_ERROR(libldap is needed for LDAP support)
2834     else
2835         AC_MSG_WARN(libldap is needed for LDAP support)
2836     fi
2837     
2838     LDAP_LIBS=""
2839     with_ldap_support=no
2840   fi
2841   LIBS=$ac_save_LIBS
2842 fi
2843
2844
2845 #################################################
2846 # active directory support
2847
2848 with_ads_support=auto
2849 AC_MSG_CHECKING([for Active Directory and krb5 support])
2850
2851 AC_ARG_WITH(ads,
2852 [  --with-ads              Active Directory support (default auto)],
2853 [ case "$withval" in
2854     yes|no)
2855         with_ads_support="$withval"
2856         ;;
2857   esac ])
2858
2859 AC_MSG_RESULT($with_ads_support)
2860
2861 FOUND_KRB5=no
2862 KRB5_LIBS=""
2863
2864 if test x"$with_ldap_support" != x"yes"; then
2865     if test x"$with_ads_support" = x"yes"; then
2866         AC_MSG_ERROR(Active Directory Support requires LDAP support)
2867     elif test x"$with_ads_support" != x"no"; then
2868         AC_MSG_WARN(Active Directory Support requires LDAP support)
2869     fi
2870     with_ads_support=no
2871 fi
2872
2873 if test x"$with_ads_support" != x"no"; then
2874
2875   # Do no harm to the values of CFLAGS and LIBS while testing for
2876   # Kerberos support.
2877  
2878   if test x$FOUND_KRB5 = x"no"; then
2879     #################################################
2880     # check for location of Kerberos 5 install
2881     AC_MSG_CHECKING(for kerberos 5 install path)
2882     AC_ARG_WITH(krb5,
2883     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
2884     [ case "$withval" in
2885       no)
2886         AC_MSG_RESULT(no krb5-path given)
2887         ;;
2888       yes)
2889         AC_MSG_RESULT(/usr)
2890         FOUND_KRB5=yes
2891         ;;
2892       *)
2893         AC_MSG_RESULT($withval)
2894         KRB5_CFLAGS="-I$withval/include"
2895         KRB5_CPPFLAGS="-I$withval/include"
2896         KRB5_LDFLAGS="-L$withval/lib"
2897         FOUND_KRB5=yes
2898         if test -x "$withval/bin/krb5-config"; then
2899                 KRB5CONFIG=$withval/bin/krb5-config
2900         fi
2901         ;;
2902       esac ],
2903       AC_MSG_RESULT(no krb5-path given)
2904     )
2905   fi
2906
2907   #################################################
2908   # check for krb5-config from recent MIT and Heimdal kerberos 5
2909   AC_PATH_PROG(KRB5CONFIG, krb5-config)
2910   AC_MSG_CHECKING(for working krb5-config)
2911   if test -x "$KRB5CONFIG"; then
2912     ac_save_CFLAGS=$CFLAGS
2913     CFLAGS="";export CFLAGS
2914     ac_save_LDFLAGS=$LDFLAGS
2915     LDFLAGS="";export LDFLAGS
2916     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
2917     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
2918     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`" 
2919     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
2920     CFLAGS=$ac_save_CFLAGS;export CFLAGS
2921     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
2922     FOUND_KRB5=yes
2923     AC_MSG_RESULT(yes)
2924   else
2925     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
2926   fi
2927  
2928   if test x$FOUND_KRB5 = x"no"; then
2929     #################################################
2930     # see if this box has the SuSE location for the heimdal krb implementation
2931     AC_MSG_CHECKING(for /usr/include/heimdal)
2932     if test -d /usr/include/heimdal; then
2933       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
2934           KRB5_CFLAGS="-I/usr/include/heimdal"
2935           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2936           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
2937           AC_MSG_RESULT(yes)
2938       else
2939           KRB5_CFLAGS="-I/usr/include/heimdal"
2940           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2941           AC_MSG_RESULT(yes)
2942       fi
2943     else
2944       AC_MSG_RESULT(no)
2945     fi
2946   fi
2947
2948   if test x$FOUND_KRB5 = x"no"; then
2949     #################################################
2950     # see if this box has the RedHat location for kerberos
2951     AC_MSG_CHECKING(for /usr/kerberos)
2952     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
2953       KRB5_LDFLAGS="-L/usr/kerberos/lib"
2954       KRB5_CFLAGS="-I/usr/kerberos/include"
2955       KRB5_CPPFLAGS="-I/usr/kerberos/include"
2956       AC_MSG_RESULT(yes)
2957     else
2958       AC_MSG_RESULT(no)
2959     fi
2960   fi
2961
2962   ac_save_CFLAGS=$CFLAGS
2963   ac_save_CPPFLAGS=$CPPFLAGS
2964   ac_save_LDFLAGS=$LDFLAGS
2965
2966   CFLAGS="$KRB5_CFLAGS $CFLAGS"
2967   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
2968   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
2969
2970   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
2971
2972   # now check for krb5.h. Some systems have the libraries without the headers!
2973   # note that this check is done here to allow for different kerberos
2974   # include paths
2975   AC_CHECK_HEADERS(krb5.h)
2976
2977   if test x"$ac_cv_header_krb5_h" = x"no"; then
2978
2979     # Give a warning if AD support was not explicitly requested,
2980     # i.e with_ads_support = auto, otherwise die with an error.
2981
2982     if test x"$with_ads_support" = x"yes"; then
2983       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
2984     else
2985       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
2986     fi
2987
2988     # Turn off AD support and restore CFLAGS and LIBS variables
2989
2990     with_ads_support="no"
2991     
2992     CFLAGS=$ac_save_CFLAGS
2993     CPPFLAGS=$ac_save_CPPFLAGS
2994     LDFLAGS=$ac_save_LDFLAGS
2995   fi
2996 fi
2997
2998 # Now we have determined whether we really want ADS support
2999
3000 if test x"$with_ads_support" != x"no"; then
3001   ac_save_LIBS=$LIBS
3002
3003   # now check for gssapi headers.  This is also done here to allow for
3004   # different kerberos include paths
3005   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3006
3007   ##################################################################
3008   # we might need the k5crypto and com_err libraries on some systems
3009   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3010   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3011
3012   # Heimdal checks.
3013   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3014   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3015   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3016
3017   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3018   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],
3019                                 AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
3020
3021   ########################################################
3022   # now see if we can find the krb5 libs in standard paths
3023   # or as specified above
3024   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3025   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3026
3027   ########################################################
3028   # now see if we can find the gssapi libs in standard paths
3029   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],
3030             AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
3031
3032   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3033   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3034   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3035   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3036   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3037   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
3038   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3039   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
3040   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3041   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
3042   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3043   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
3044   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
3045   AC_CHECK_FUNC_EXT(krb5_free_ktypes, $KRB5_LIBS)
3046   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3047   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3048   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3049   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3050   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3051   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3052   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3053   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3054   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3055   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3056   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3057   AC_CHECK_FUNC_EXT(decode_krb5_ap_req, $KRB5_LIBS)
3058   AC_CHECK_FUNC_EXT(krb5_free_ap_req, $KRB5_LIBS)
3059   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3060   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3061   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3062   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3063   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3064
3065   LIBS="$KRB5_LIBS $LIBS"
3066
3067   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_verify_checksum, [
3068     AC_TRY_COMPILE([
3069         #include <krb5.h>], 
3070         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);], 
3071         [smb_krb5_verify_checksum=7], 
3072         [smb_krb5_verify_checksum=6], 
3073     ) 
3074   ])
3075   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_verify_checksum, [Number of arguments to krb5_verify_checksum])
3076
3077   AC_CACHE_CHECK([for checksum in krb5_checksum],
3078                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3079     AC_TRY_COMPILE([#include <krb5.h>],
3080       [krb5_checksum cksum; cksum.checksum.length = 0;],
3081       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3082       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3083
3084   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3085     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3086                [Whether the krb5_checksum struct has a checksum property])
3087   fi
3088
3089   AC_CACHE_CHECK([for etype in EncryptedData],
3090                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3091     AC_TRY_COMPILE([#include <krb5.h>],
3092       [EncryptedData edata; edata.etype = 0;],
3093       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3094       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3095
3096   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3097     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3098                [Whether the EncryptedData struct has a etype property])
3099   fi
3100
3101   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3102                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3103     AC_TRY_COMPILE([#include <krb5.h>],
3104       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3105       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3106       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3107
3108   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3109     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3110                [Whether the krb5_ap_req struct has a ticket pointer])
3111   fi
3112
3113   AC_CACHE_CHECK([for krb5_crypto type],
3114                 samba_cv_HAVE_KRB5_CRYPTO,[
3115     AC_TRY_COMPILE([#include <krb5.h>],
3116       [krb5_crypto crypto;],
3117       samba_cv_HAVE_KRB5_CRYPTO=yes,
3118       samba_cv_HAVE_KRB5_CRYPTO=no)])
3119
3120   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3121     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3122                [Whether the type krb5_crypto exists])
3123   fi
3124
3125   AC_CACHE_CHECK([for krb5_encrypt_block type],
3126                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3127     AC_TRY_COMPILE([#include <krb5.h>],
3128       [krb5_encrypt_block block;],
3129       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3130       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3131
3132   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3133     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3134                [Whether the type krb5_encrypt_block exists])
3135   fi
3136
3137   AC_CACHE_CHECK([for addrtype in krb5_address],
3138                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3139     AC_TRY_COMPILE([#include <krb5.h>],
3140       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3141       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3142       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3143
3144   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3145     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3146                [Whether the krb5_address struct has a addrtype property])
3147   fi
3148
3149   AC_CACHE_CHECK([for addr_type in krb5_address],
3150                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3151     AC_TRY_COMPILE([#include <krb5.h>],
3152       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3153       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3154       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3155
3156   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3157     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3158               [Whether the krb5_address struct has a addr_type property])
3159   fi
3160
3161   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3162                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3163                  [AC_TRY_COMPILE([#include <krb5.h>],
3164     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3165     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3166
3167   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3168     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3169               [Whether the krb5_ticket struct has a enc_part2 property])
3170   fi
3171
3172   AC_CACHE_CHECK([for keyblock in krb5_creds],
3173                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3174     AC_TRY_COMPILE([#include <krb5.h>],
3175       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3176       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3177       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3178
3179   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3180     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3181               [Whether the krb5_creds struct has a keyblock property])
3182   fi
3183
3184   AC_CACHE_CHECK([for session in krb5_creds],
3185                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3186     AC_TRY_COMPILE([#include <krb5.h>],
3187       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3188       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3189       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3190
3191   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3192     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3193               [Whether the krb5_creds struct has a session property])
3194   fi
3195
3196   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3197                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3198     AC_TRY_COMPILE([#include <krb5.h>],
3199       [krb5_keyblock key; key.keyvalue.data = NULL;],
3200       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3201       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3202
3203   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3204     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3205               [Whether the krb5_keyblock struct has a keyvalue property])
3206   fi
3207
3208   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3209                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3210     AC_TRY_COMPILE([#include <krb5.h>],
3211       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3212       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3213       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3214   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3215                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3216     AC_TRY_COMPILE([#include <krb5.h>],
3217       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3218       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3219       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3220 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3221 # w.r.t. arcfour and windows, so we must not enable it here
3222   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3223           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3224     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3225               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3226   fi
3227
3228   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3229                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3230     AC_TRY_COMPILE([#include <krb5.h>],
3231       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3232       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3233       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3234
3235   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3236     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3237               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3238   fi
3239
3240   AC_CACHE_CHECK([for KV5M_KEYTAB],
3241                  samba_cv_HAVE_KV5M_KEYTAB,[
3242     AC_TRY_COMPILE([#include <krb5.h>],
3243       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3244       samba_cv_HAVE_KV5M_KEYTAB=yes,
3245       samba_cv_HAVE_KV5M_KEYTAB=no)])
3246
3247   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3248       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3249              [Whether the KV5M_KEYTAB option is available])
3250   fi
3251
3252   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3253                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3254     AC_TRY_COMPILE([#include <krb5.h>],
3255       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3256       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3257       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3258
3259   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3260     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3261               [Whether KRB5_KU_OTHER_CKSUM is available])
3262   fi
3263   
3264   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3265                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3266     AC_TRY_COMPILE([#include <krb5.h>],
3267       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3268       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3269       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3270
3271   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3272     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3273               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3274   fi
3275
3276   AC_CACHE_CHECK([for the krb5_princ_component macro],
3277                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3278     AC_TRY_LINK([#include <krb5.h>],
3279       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3280       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3281       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3282
3283   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3284     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3285                [Whether krb5_princ_component is available])
3286   fi
3287
3288   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3289                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3290     AC_TRY_COMPILE([#include <krb5.h>],
3291       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3292       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3293       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3294
3295   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3296     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3297               [Whether krb5_keytab_entry has key member])
3298   fi
3299
3300   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3301                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3302     AC_TRY_COMPILE([#include <krb5.h>],
3303       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3304       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3305       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3306
3307   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3308     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3309               [Whether krb5_keytab_entry has keyblock member])
3310   fi
3311
3312   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" = x"yes"; then
3313     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3314     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3315     AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3316     AC_MSG_RESULT(yes)
3317   else
3318     if test x"$with_ads_support" = x"yes"; then
3319         AC_MSG_ERROR(libkrb5 is needed for Active Directory support)
3320     else
3321         AC_MSG_WARN(libkrb5 is needed for Active Directory support)
3322     fi
3323     KRB5_LIBS=""
3324     with_ads_support=no 
3325   fi
3326
3327   AC_CACHE_CHECK([for WRFILE: keytab support],
3328                 samba_cv_HAVE_WRFILE_KEYTAB,[
3329     AC_TRY_RUN([
3330 #include<krb5.h>
3331   main()
3332   {
3333     krb5_context context;
3334     krb5_keytab keytab;
3335
3336     krb5_init_context(&context);
3337     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3338   }],
3339   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3340   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3341
3342   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3343       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3344                [Whether the WRFILE:-keytab is supported])
3345   fi
3346
3347   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3348                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3349     AC_TRY_COMPILE([#include <krb5.h>],
3350     [
3351     krb5_context context;
3352     krb5_principal principal;
3353     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3354     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3355     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3356
3357   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3358     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3359               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3360   fi
3361
3362 LIBS="$ac_save_LIBS"
3363 fi
3364
3365 ########################################################
3366 # Compile experimental passdb backends?
3367 # (pdb_xml, pdb_mysql, pdb_pgsql)
3368 AC_MSG_CHECKING(whether to build experimental passdb libraries)
3369 AC_ARG_WITH(expsam,
3370 [  --with-expsam=<list>    Include experimental passdb libraries (default=no)]
3371 [                          Valid choices include (comma separated list): ]
3372 [                              xml, mysql & pgsql],
3373 [ expsam_pdb_modules=`echo "$withval" | sed 's/,/ /g'`
3374   if test "z$expsam_pdb_modules" = "zyes"; then
3375     expsam_pdb_modules="xml mysql pgsql"
3376   fi
3377   AC_MSG_RESULT($expsam_pdb_modules)
3378   for i in $expsam_pdb_modules
3379   do 
3380     case "$i" in
3381     xml|all|yes)
3382       ## pdb_xml
3383           AM_PATH_XML2([2.0.0],[default_shared_modules="$default_shared_modules pdb_xml"],[AC_MSG_ERROR([Can't find XML libraries while XML support is requested])])
3384       CFLAGS="$CFLAGS $XML_CFLAGS"
3385       ;;
3386     mysql|all|yes)
3387       ## pdb_mysql
3388           AM_PATH_MYSQL([default_shared_modules="$default_shared_modules pdb_mysql"],[AC_MSG_ERROR([Can't find MySQL libraries while MySQL support is requested])])
3389       CFLAGS="$CFLAGS $MYSQL_CFLAGS"
3390       ;;
3391      pgsql|all|yes)
3392       ## pdb_pgsql
3393       AM_PATH_PGSQL([default_shared_modules="$default_shared_modules pdb_pgsql"],[])
3394       CFLAGS="$CFLAGS $PGSQL_CFLAGS"
3395       ;;
3396     no)
3397       ;;
3398     *)
3399       echo "Unknown module name \"$i\"!  Exiting..."
3400       exit 1
3401       ;;
3402     esac
3403   done ],
3404   AC_MSG_RESULT(no)
3405 )
3406
3407 #################################################
3408 # check for automount support
3409 AC_MSG_CHECKING(whether to use automount)
3410 AC_ARG_WITH(automount,
3411 [  --with-automount        Include automount support (default=no)],
3412 [ case "$withval" in
3413   yes)
3414     AC_MSG_RESULT(yes)
3415     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
3416     ;;
3417   *)
3418     AC_MSG_RESULT(no)
3419     ;;
3420   esac ],
3421   AC_MSG_RESULT(no)
3422 )
3423
3424 #################################################
3425 # check for smbmount support
3426 AC_MSG_CHECKING(whether to use smbmount)
3427 AC_ARG_WITH(smbmount,
3428 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
3429 [ case "$withval" in
3430   yes)
3431         case "$host_os" in
3432         *linux*)
3433                 AC_MSG_RESULT(yes)
3434                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
3435                 EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbmount bin/smbmnt bin/smbumount"
3436                 ;;
3437         *)
3438                 AC_MSG_ERROR(not on a linux system!)
3439                 ;;
3440         esac
3441     ;;
3442   *)
3443     AC_MSG_RESULT(no)
3444     ;;
3445   esac ],
3446   AC_MSG_RESULT(no)
3447 )
3448
3449
3450
3451 #################################################
3452 # check for a PAM clear-text auth, accounts, password and session support
3453 with_pam_for_crypt=no
3454 AC_MSG_CHECKING(whether to use PAM)
3455 AC_ARG_WITH(pam,
3456 [  --with-pam              Include PAM support (default=no)],
3457 [ case "$withval" in
3458   yes)
3459     AC_MSG_RESULT(yes)
3460     if test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
3461        if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
3462           if test x"$ac_cv_header_security__pam_macros_h" = x"no"; then
3463              AC_MSG_ERROR(--with-pam specified but no PAM headers found)
3464           fi
3465        fi
3466     fi
3467     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
3468     AUTH_LIBS="$AUTH_LIBS -lpam"
3469     with_pam_for_crypt=yes
3470     ;;
3471   *)
3472     AC_MSG_RESULT(no)
3473     ;;
3474   esac ],
3475   AC_MSG_RESULT(no)
3476 )
3477
3478 # we can't build a pam module if we don't have pam.
3479 AC_CHECK_LIB(pam, pam_get_data, [AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])])
3480
3481 #################################################
3482 # check for pam_smbpass support
3483 AC_MSG_CHECKING(whether to use pam_smbpass)
3484 AC_ARG_WITH(pam_smbpass,
3485 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
3486 [ case "$withval" in
3487   yes)
3488     AC_MSG_RESULT(yes)
3489
3490        # Conditions under which pam_smbpass should not be built.
3491
3492        if test x$PICFLAGS = x; then
3493           AC_MSG_ERROR([No support for PIC code])
3494        elif test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
3495           AC_MSG_ERROR([No security/pam_appl.h found])
3496        elif test x$ac_cv_lib_pam_pam_get_data = xno; then
3497           AC_MSG_ERROR([No libpam found])
3498        else
3499           AUTH_LIBS="$AUTH_LIBS -lpam"
3500           SHLIB_PROGS="$SHLIB_PROGS bin/pam_smbpass.$SHLIBEXT"
3501        fi
3502     ;;
3503   *)
3504     AC_MSG_RESULT(no)
3505     ;;
3506   esac ],
3507   AC_MSG_RESULT(no)
3508 )
3509
3510
3511 ###############################################
3512 # test for where we get crypt() from
3513 AC_SEARCH_LIBS(crypt, [crypt],
3514   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
3515   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
3516
3517 ##
3518 ## moved after the check for -lcrypt in order to
3519 ## ensure that the necessary libraries are included
3520 ## check checking for truncated salt.  Wrapped by the
3521 ## $with_pam_for_crypt variable as above   --jerry
3522 ##
3523 if test $with_pam_for_crypt = no; then
3524 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
3525 crypt_LIBS="$LIBS"
3526 LIBS="$AUTH_LIBS $LIBS"
3527 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
3528         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
3529 LIBS="$crypt_LIBS"])
3530 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
3531         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
3532 fi
3533 fi
3534
3535
3536 ########################################################################################
3537 ##
3538 ## TESTS FOR SAM BACKENDS.  KEEP THESE GROUPED TOGETHER
3539 ##
3540 ########################################################################################
3541
3542 #################################################
3543 # check for a LDAP password database configuration backwards compatibility
3544 AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration)
3545 AC_ARG_WITH(ldapsam,
3546 [  --with-ldapsam          Include LDAP SAM 2.2 compatible configuration (default=no)],
3547 [ case "$withval" in
3548   yes)
3549     AC_MSG_RESULT(yes)
3550     AC_DEFINE(WITH_LDAP_SAMCONFIG,1,[Whether to include 2.2 compatible LDAP SAM configuration])
3551     ;;
3552   *)
3553     AC_MSG_RESULT(no)
3554     ;;
3555   esac ],
3556   AC_MSG_RESULT(no)
3557 )
3558
3559 ########################################################################################
3560 ##
3561 ## END OF TESTS FOR SAM BACKENDS.  
3562 ##
3563 ########################################################################################
3564
3565 #################################################
3566 # check for a NISPLUS_HOME support 
3567 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
3568 AC_ARG_WITH(nisplus-home,
3569 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
3570 [ case "$withval" in
3571   yes)
3572     AC_MSG_RESULT(yes)
3573     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
3574     ;;
3575   *)
3576     AC_MSG_RESULT(no)
3577     ;;
3578   esac ],
3579   AC_MSG_RESULT(no)
3580 )
3581
3582 #################################################
3583 # check for syslog logging
3584 AC_MSG_CHECKING(whether to use syslog logging)
3585 AC_ARG_WITH(syslog,
3586 [  --with-syslog           Include experimental SYSLOG support (default=no)],
3587 [ case "$withval" in
3588   yes)
3589     AC_MSG_RESULT(yes)
3590     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
3591     ;;
3592   *)
3593     AC_MSG_RESULT(no)
3594     ;;
3595   esac ],
3596   AC_MSG_RESULT(no)
3597 )
3598
3599 #################################################
3600 # check for a shared memory profiling support
3601 AC_MSG_CHECKING(whether to use profiling)
3602 AC_ARG_WITH(profiling-data,
3603 [  --with-profiling-data   Include gathering source code profile information (default=no)],
3604 [ case "$withval" in
3605   yes)
3606     AC_MSG_RESULT(yes)
3607     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
3608     ;;
3609   *)
3610     AC_MSG_RESULT(no)
3611     ;;
3612   esac ],
3613   AC_MSG_RESULT(no)
3614 )
3615
3616
3617 #################################################
3618 # check for experimental disk-quotas support
3619
3620 samba_cv_WITH_QUOTAS=auto
3621 samba_cv_TRY_QUOTAS=no
3622 samba_cv_RUN_QUOTA_TESTS=auto
3623 samba_cv_WITH_SYS_QUOTAS=auto
3624 samba_cv_TRY_SYS_QUOTAS=auto
3625 samba_cv_SYSQUOTA_FOUND=no
3626
3627 AC_MSG_CHECKING(whether to try disk-quotas support)
3628 AC_ARG_WITH(quotas,
3629 [  --with-quotas           Include disk-quota support (default=no)],
3630 [ case "$withval" in
3631   yes)
3632     AC_MSG_RESULT(yes)
3633     samba_cv_WITH_QUOTAS=yes
3634     samba_cv_TRY_QUOTAS=yes
3635     samba_cv_RUN_QUOTA_TESTS=yes
3636     #set sys quotas to auto in this case
3637     samba_cv_TRY_SYS_QUOTAS=auto
3638     ;;
3639   auto)
3640     AC_MSG_RESULT(auto)
3641     samba_cv_WITH_QUOTAS=auto
3642     samba_cv_TRY_QUOTAS=auto
3643     samba_cv_RUN_QUOTA_TESTS=auto
3644     #set sys quotas to auto in this case
3645     samba_cv_TRY_SYS_QUOTAS=auto
3646     ;;
3647   no)
3648     AC_MSG_RESULT(no)
3649     samba_cv_WITH_QUOTAS=no
3650     samba_cv_TRY_QUOTAS=no
3651     samba_cv_RUN_QUOTA_TESTS=no