r9281: Fixes from Luke Mewburn <lukem@NetBSD.org> for misuses of
[samba.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(PRINT_LIBS)
223 AC_SUBST(AUTH_LIBS)
224 AC_SUBST(ACL_LIBS)
225 AC_SUBST(PASSDB_LIBS)
226 AC_SUBST(IDMAP_LIBS)
227 AC_SUBST(KRB5_LIBS)
228 AC_SUBST(LDAP_LIBS)
229 AC_SUBST(SHLIB_PROGS)
230 AC_SUBST(SMBWRAPPER)
231 AC_SUBST(SMBWRAP_OBJS)
232 AC_SUBST(SMBWRAP_INC)
233 AC_SUBST(EXTRA_BIN_PROGS)
234 AC_SUBST(EXTRA_SBIN_PROGS)
235 AC_SUBST(EXTRA_ALL_TARGETS)
236
237 # Set defaults
238 PIE_CFLAGS=""
239 PIE_LDFLAGS=""
240 AC_ARG_ENABLE(pie, [  --enable-pie            Turn on pie support if available (default=yes)])
241
242 if test "x$enable_pie" != xno
243 then
244         AC_CACHE_CHECK(for -fPIE, libc_cv_fpie, [dnl
245                 cat > conftest.c <<EOF
246 int foo;
247 main () { return 0;}
248 EOF
249                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
250                 then
251                         libc_cv_fpie=yes
252                         PIE_CFLAGS="-fPIE"
253                         PIE_LDFLAGS="-pie"
254                 fi
255                 rm -f conftest*])
256 fi
257 if test "x$PIE_CFLAGS" = x
258 then
259         libc_cv_fpie=no
260 fi
261
262 AC_ARG_ENABLE(debug, 
263 [  --enable-debug          Turn on compiler debugging information (default=no)],
264     [if eval "test x$enable_debug = xyes"; then
265         CFLAGS="${CFLAGS} -g"
266     fi])
267
268 AC_SUBST(SOCKWRAP)
269 AC_ARG_ENABLE(socket-wrapper, 
270 [  --enable-socket-wrapper         Turn on socket wrapper library (default=no)],
271     [if eval "test x$enable_socket_wrapper = xyes"; then
272         AC_DEFINE(SOCKET_WRAPPER,1,[Use socket wrapper library])
273         SOCKWRAP="\$(SOCKET_WRAPPER_OBJ)"
274     fi])
275
276 # compile with optimization and without debugging by default, but
277 # allow people to set their own preference.
278 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
279 # if it has no value.  This prevent *very* large debug binaries from occurring
280 # by default.
281 if test "x$CFLAGS" = x; then
282   CFLAGS="-O"
283 fi
284
285 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_"
286
287 AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
288     [if eval "test x$enable_developer = xyes"; then
289         developer=yes
290         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
291         # Add -Wdeclaration-after-statement if compiler supports it
292         AC_CACHE_CHECK(
293           [that the C compiler understands -Wdeclaration-after-statement],
294           samba_cv_HAVE_Wdeclaration_after_statement, [
295           AC_TRY_RUN_STRICT([
296             int main(void)
297             {
298                 return 0;
299             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
300             samba_cv_HAVE_Wdeclaration_after_statement=yes,
301             samba_cv_HAVE_Wdeclaration_after_statement=no,
302             samba_cv_HAVE_Wdeclaration_after_statement=cross)
303        ])
304        if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
305             CFLAGS="${CFLAGS} -Wdeclaration-after-statement"
306        fi
307     fi])
308
309 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
310     [if eval "test x$enable_krb5developer = xyes"; then
311         developer=yes
312         CFLAGS="${CFLAGS} -gstabs -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
313     fi])
314
315 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
316
317 if test "x$enable_dmalloc" = xyes
318 then
319         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
320         AC_DEFINE(DMALLOC_FUNC_CHECK, 1, 
321                   [Define to check invariants around some common functions])
322         LIBS="$LIBS -ldmalloc"  
323 fi
324
325 dnl Checks for programs.
326
327 ##
328 ## for some reason this macro resets the CFLAGS
329 ## so save and restore
330 ##
331 OLD_CFLAGS=${CFLAGS}
332 AC_PROG_CC
333 CFLAGS=${OLD_CFLAGS}
334
335 OLD_CFLAGS=${CFLAGS}
336 AC_PROG_CPP
337 CFLAGS=${OLD_CFLAGS}
338
339 AC_PROG_INSTALL
340 AC_PROG_AWK
341 AC_PATH_PROG(PERL, perl)
342
343 AC_CHECK_TOOL(AR, ar)
344
345 dnl Check if we use GNU ld
346 LD=ld
347 AC_PROG_LD_GNU
348
349 dnl Certain versions of GNU ld the default is not to have the 
350 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
351 dnl warnings when building modules.
352 if test "$ac_cv_prog_gnu_ld" = "yes"; then
353         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
354         AC_MSG_CHECKING(GNU ld release date)
355         changequote(,)dnl
356         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'`
357         changequote([,])dnl
358         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
359         if test -n "$ac_cv_gnu_ld_date"; then
360            if test "$ac_cv_gnu_ld_date" -lt 20030217; then
361               ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
362            fi
363         else
364            AC_MSG_CHECKING(GNU ld release version)
365            changequote(,)dnl
366            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
367            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
368            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
369            changequote([,])dnl
370            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
371            AC_MSG_CHECKING(GNU ld release version major)
372            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
373            AC_MSG_CHECKING(GNU ld release version minor)
374            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
375            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
376              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
377            fi
378         fi
379 fi
380
381 dnl needed before AC_TRY_COMPILE
382 AC_ISC_POSIX
383
384 dnl look for executable suffix
385 AC_EXEEXT
386
387 dnl Check if C compiler understands -c and -o at the same time
388 AC_PROG_CC_C_O
389 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
390       BROKEN_CC=
391 else
392       BROKEN_CC=#
393 fi
394 AC_SUBST(BROKEN_CC)
395
396 dnl Check if the C compiler understands -Werror
397 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
398  AC_TRY_RUN_STRICT([
399   int main(void)
400   {
401         return 0;
402   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
403   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
404 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
405    Werror_FLAGS="-Werror"
406 else 
407 dnl Check if the C compiler understands -w2
408 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
409  AC_TRY_RUN_STRICT([
410   int main(void)
411   {
412         return 0;
413   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
414   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
415 if test x"$samba_cv_HAVE_w2" = x"yes"; then
416    Werror_FLAGS="-w2"
417 fi
418 fi
419
420 dnl Check if the C compiler understands volatile (it should, being ANSI).
421 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
422     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
423         samba_cv_volatile=yes,samba_cv_volatile=no)])
424 if test x"$samba_cv_volatile" = x"yes"; then
425    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
426 fi
427
428 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
429 AC_MSG_CHECKING(uname -s)
430 AC_MSG_RESULT(${UNAME_S})
431
432 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
433 AC_MSG_CHECKING(uname -r)
434 AC_MSG_RESULT(${UNAME_R})
435
436 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
437 AC_MSG_CHECKING(uname -m)
438 AC_MSG_RESULT(${UNAME_M})
439
440 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
441 AC_MSG_CHECKING(uname -p)
442 AC_MSG_RESULT(${UNAME_P})
443
444 AC_CANONICAL_SYSTEM
445
446 dnl Add #include for broken IRIX header files
447   case "$host_os" in
448         *irix6*) AC_ADD_INCLUDE(<standards.h>)
449         ;;
450 esac
451
452 AC_VALIDATE_CACHE_SYSTEM_TYPE
453
454 DYNEXP=
455
456 dnl Add modules that have to be built by default here
457 dnl These have to be built static:
458 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsa rpc_samr rpc_reg rpc_lsa_ds rpc_wks rpc_svcctl rpc_net rpc_dfs rpc_srv rpc_spoolss rpc_eventlog auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin printerdb_file"
459
460 dnl These are preferably build shared, and static if dlopen() is not available
461 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"
462
463 if test "x$developer" = xyes; then
464    default_static_modules="$default_static_modules rpc_echo"
465    default_shared_modules="$default_shared_modules charset_weird"
466 fi
467
468 #
469 # Config CPPFLAG settings for strange OS's that must be set
470 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
471 # case statement; its first reference must be unconditional.
472 #
473 case "$host_os" in
474 # Try to work out if this is the native HPUX compiler that uses the -Ae flag.
475     *hpux*)
476     
477       AC_PROG_CC_FLAG(Ae)
478       # mmap on HPUX is completely broken...
479       AC_DEFINE(MMAP_BLACKLIST, 1, [Whether MMAP is broken])
480       if test $ac_cv_prog_cc_Ae = yes; then
481         CPPFLAGS="$CPPFLAGS -Ae"
482       fi
483 #
484 # Defines needed for HPUX support.
485 # HPUX has bigcrypt but (sometimes?) doesn't use it for
486 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
487 #
488       case `uname -r` in
489                         *9*|*10*)
490                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
491                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
492                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
493                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
494                                 AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
495                                 AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
496                                 ;;
497                         *11*)
498                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
499                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
500                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
501                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
502                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
503                                 AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
504                                 AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
505                                 ;;
506       esac
507       ;;
508
509 #
510 # CRAY Unicos has broken const handling
511        *unicos*)
512           AC_MSG_RESULT([disabling const])
513           CPPFLAGS="$CPPFLAGS -Dconst="
514           ;;
515         
516 #
517 # AIX4.x doesn't even admit to having large
518 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
519 #
520     *aix4*)
521           AC_MSG_RESULT([enabling large file support])
522       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
523           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
524       ;;    
525 #
526 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
527 # to the existance of large files..
528 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
529 # recommendations on large file support, however it makes the
530 # compile work using gcc 2.7 and 2.8, whereas using the Sun
531 # recommendation makes the compile fail on gcc2.7. JRA.
532 #
533 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
534 #
535         *solaris*)
536                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
537                 case `uname -r` in
538                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
539                                 AC_MSG_RESULT([no large file support])
540                                 ;;
541                         5.*)
542                         AC_MSG_RESULT([enabling large file support])
543                         if test "$ac_cv_prog_gcc" = yes; then
544                                 ${CC-cc} -v >conftest.c 2>&1
545                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
546                                 rm -fr conftest.c
547                                 case "$ac_cv_gcc_compiler_version_number" in
548                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
549                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
550                                                 LDFLAGS="$LDFLAGS -lthread"
551                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
552                                                 ;;
553                                         *)
554                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
555                                                 LDFLAGS="$LDFLAGS -lthread"
556                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
557                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
558                                                 ;;
559                                 esac
560                         else
561                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
562                                 LDFLAGS="$LDFLAGS -lthread"
563                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
564                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
565                         fi
566                         ;;
567                 esac
568                 ;;
569 #
570 # IRIX uses SYSV printing.  Make sure to set that here
571 #
572         *irix*)
573                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
574                 ;;
575         *freebsd*|*dragonfly*)
576                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
577                 ;;
578 #
579 # VOS may need to have POSIX support and System V compatibility enabled.
580 #
581     *vos*)
582     case "$CPPFLAGS" in
583           *-D_POSIX_C_SOURCE*)
584                 ;;
585           *)
586                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
587                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
588                 ;;
589     esac
590     case "$CPPFLAGS" in
591           *-D_SYSV*|*-D_SVID_SOURCE*)
592                 ;;
593           *)
594                 CPPFLAGS="$CPPFLAGS -D_SYSV"
595                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
596     esac
597     ;;
598 #
599 # Tests needed for SINIX large file support.
600 #
601     *sysv4*)
602       if test $host = mips-sni-sysv4 ; then
603         AC_MSG_CHECKING([for LFS support])
604         old_CPPFLAGS="$CPPFLAGS"
605         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
606         AC_TRY_RUN([
607 #include <unistd.h>
608 main () {
609 #if _LFS64_LARGEFILE == 1
610 exit(0);
611 #else
612 exit(1);
613 #endif
614 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
615         CPPFLAGS="$old_CPPFLAGS"
616         if test x$SINIX_LFS_SUPPORT = xyes ; then
617           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
618                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
619           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
620           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
621           LIBS="`getconf LFS64_LIBS` $LIBS"
622         fi
623       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
624       fi
625     ;;
626
627 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
628 #
629     *linux*)
630         AC_MSG_CHECKING([for LFS support])
631         old_CPPFLAGS="$CPPFLAGS"
632         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
633        AC_TRY_RUN([
634 #include <unistd.h>
635 #include <sys/utsname.h>
636 #include <string.h>
637 #include <stdlib.h>
638 main() {
639 #if _LFS64_LARGEFILE == 1
640        struct utsname uts;
641        char *release;
642        int major, minor;
643
644        /* Ensure this is glibc 2.2 or higher */
645 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
646        int libc_major = __GLIBC__;
647        int libc_minor = __GLIBC_MINOR__;
648
649        if (libc_major < 2)
650               exit(1);
651        if (libc_minor < 2)
652               exit(1);
653 #endif
654
655        /* Ensure this is kernel 2.4 or higher */
656
657        uname(&uts);
658        release = strdup(uts.release);
659        major = atoi(strsep(&release, "."));
660        minor = atoi(strsep(&release, "."));
661
662        if (major > 2 || (major == 2 && minor > 3))
663                exit(0);
664        exit(1);
665 #else
666        exit(1);
667 #endif
668 }
669 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
670         CPPFLAGS="$old_CPPFLAGS"
671         if test x$LINUX_LFS_SUPPORT = xyes ; then
672                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
673                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
674                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
675                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
676         fi
677         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
678         ;;
679
680 #
681 # MacOS X is the *only* system that uses compose character in utf8. This
682 # is so horribly broken....
683 #
684     *darwin*)
685         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
686 # Add Fink directories for various packages, like dlcompat.
687 # Note: iconv does that explicitly below, but other packages
688 # don't.
689         CPPFLAGS="$CPPFLAGS -I/sw/include"
690         LDFLAGS="$LDFLAGS -L/sw/lib"
691
692 # If we have dlsym_prepend_underscore (from Fink's dlcompat),
693 # use that instead of plain dlsym.
694
695         AC_CHECK_LIB(dl,dlopen)
696         AC_CHECK_FUNCS(dlsym_prepend_underscore,[CPPFLAGS="$CPPFLAGS -Ddlsym=dlsym_prepend_underscore"])
697
698 # Add a system specific charset module.
699
700         default_shared_modules="$default_shared_modules charset_macosxfs"
701         ;;
702     *hurd*)
703         AC_MSG_CHECKING([for LFS support])
704         old_CPPFLAGS="$CPPFLAGS"
705         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
706         AC_TRY_RUN([
707 #include <unistd.h>
708 main () {
709 #if _LFS64_LARGEFILE == 1
710 exit(0);
711 #else
712 exit(1);
713 #endif
714 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
715         CPPFLAGS="$old_CPPFLAGS"
716         if test x$GLIBC_LFS_SUPPORT = xyes ; then
717           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
718                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
719           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
720         fi
721       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
722     ;;
723
724 esac
725
726 AC_INLINE
727 AC_HEADER_STDC
728 AC_HEADER_DIRENT
729 AC_HEADER_TIME
730 AC_HEADER_SYS_WAIT
731 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)
732 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h limits.h memory.h)
733 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
734 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h)
735 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
736 AC_CHECK_HEADERS(sys/un.h)
737 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
738 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
739 AC_CHECK_HEADERS(sys/sysmacros.h security/_pam_macros.h dlfcn.h)
740 AC_CHECK_HEADERS(sys/syslog.h syslog.h execinfo.h)
741 AC_CHECK_HEADERS(langinfo.h locale.h)
742
743 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
744 #if HAVE_RPC_RPC_H
745 #include <rpc/rpc.h>
746 #endif
747 ]])
748
749 ## These fail to compile on IRIX so just check for their presence
750 AC_CHECK_HEADERS(sys/mode.h,,,)
751
752 # Look for Darwin headers
753 old_CPPFLAGS="$CPPFLAGS"
754 CPPFLAGS="-Iinclude $CPPFLAGS"
755 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
756 CPPFLAGS="$old_CPPFLAGS"
757
758 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
759 # subdirectory of headers.
760 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
761
762 /* check for linux on amd64 since valgrind is not quite there yet */
763 case "$host_os" in
764         *linux*)
765                 case "$UNAME_P" in
766                         *x86_64*)
767                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
768                                 ;;
769                 esac
770                 ;;
771 esac
772
773
774 #
775 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
776 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
777 #
778 case "$host_os" in
779     *hpux*)
780                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
781                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
782                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
783                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
784                 fi
785         ;;
786 esac
787 AC_CHECK_HEADERS(shadow.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
788 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h security/pam_appl.h)
789 AC_CHECK_HEADERS(stropts.h poll.h)
790 AC_CHECK_HEADERS(sys/capability.h syscall.h sys/syscall.h)
791 AC_CHECK_HEADERS(sys/acl.h sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
792 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
793
794 AC_CHECK_HEADERS(netinet/ip.h,,,[[
795 #include <sys/types.h>
796 #if HAVE_SYS_SOCKET_H
797 #include <sys/socket.h>
798 #endif
799 #include <netinet/in.h>
800 #if HAVE_NETINET_IN_SYSTM_H
801 #include <netinet/in_systm.h>
802 #endif
803 ]])
804
805 AC_CHECK_HEADERS(net/if.h,,,[[
806 #include <sys/types.h>
807 #if HAVE_SYS_SOCKET_H
808 #include <sys/socket.h>
809 #endif
810 ]])
811
812 AC_CHECK_HEADERS(security/pam_modules.h,,,[[
813 #if HAVE_SECURITY_PAM_APPL_H
814 #include <security/pam_appl.h>
815 #endif
816 ]])
817
818 # For experimental utmp support (lastlog on some BSD-like systems)
819 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
820  
821 AC_CHECK_SIZEOF(int,cross)
822 AC_CHECK_SIZEOF(long,cross)
823 AC_CHECK_SIZEOF(short,cross)
824
825 AC_C_CONST
826 AC_C_INLINE
827 AC_C_BIGENDIAN
828 AC_C_CHAR_UNSIGNED
829
830 AC_TYPE_SIGNAL
831 AC_TYPE_UID_T
832 AC_TYPE_MODE_T
833 AC_TYPE_OFF_T
834 AC_TYPE_SIZE_T
835 AC_TYPE_PID_T
836 AC_STRUCT_ST_RDEV
837 AC_DIRENT_D_OFF
838 AC_CHECK_TYPE(ino_t,unsigned)
839 AC_CHECK_TYPE(loff_t,off_t)
840 AC_CHECK_TYPE(offset_t,loff_t)
841 AC_CHECK_TYPE(ssize_t, int)
842 AC_CHECK_TYPE(wchar_t, unsigned short)
843
844 ############################################
845 # for cups support we need libcups, and a handful of header files
846
847 AC_ARG_ENABLE(cups,
848 [  --enable-cups           Turn on CUPS support (default=auto)])
849
850 if test x$enable_cups != xno; then
851         AC_PATH_PROG(CUPS_CONFIG, cups-config)
852
853         if test "x$CUPS_CONFIG" != x; then
854                 AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
855                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
856                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
857                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
858         elif test x"$enable_cups" = x"yes"; then
859                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
860         fi
861 fi
862
863 ############################################
864 # we need dlopen/dlclose/dlsym/dlerror for PAM, the password database plugins and the plugin loading code
865 AC_SEARCH_LIBS(dlopen, [dl])
866 # dlopen/dlclose/dlsym/dlerror will be checked again later and defines will be set then
867
868 ############################################
869 # check if the compiler can do immediate structures
870 AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
871     AC_TRY_COMPILE([
872 #include <stdio.h>],
873 [
874    typedef struct {unsigned x;} FOOBAR;
875    #define X_FOOBAR(x) ((FOOBAR) { x })
876    #define FOO_ONE X_FOOBAR(1)
877    FOOBAR f = FOO_ONE;   
878    static struct {
879         FOOBAR y; 
880         } f2[] = {
881                 {FOO_ONE}
882         };   
883 ],
884         samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
885 if test x"$samba_cv_immediate_structures" = x"yes"; then
886    AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
887 fi
888
889 ############################################
890 # check if the compiler can do immediate structures
891 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
892     AC_TRY_LINK([
893 #include <stdio.h>],
894 [
895                 if (0) {
896                    this_function_does_not_exist();
897                 } else {
898                   return 1;
899                 }
900
901 ],
902         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
903 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
904    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
905 fi
906
907 ############################################
908 # check for unix domain sockets
909 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
910     AC_TRY_COMPILE([
911 #include <sys/types.h>
912 #include <stdlib.h>
913 #include <stddef.h>
914 #include <sys/socket.h>
915 #include <sys/un.h>],
916 [
917   struct sockaddr_un sunaddr; 
918   sunaddr.sun_family = AF_UNIX;
919 ],
920         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
921 if test x"$samba_cv_unixsocket" = x"yes"; then
922    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
923 fi
924
925
926 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
927     AC_TRY_COMPILE([
928 #include <sys/types.h>
929 #if STDC_HEADERS
930 #include <stdlib.h>
931 #include <stddef.h>
932 #endif
933 #include <sys/socket.h>],[socklen_t i = 0],
934         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
935 if test x"$samba_cv_socklen_t" = x"yes"; then
936    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
937 fi
938
939 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
940     AC_TRY_COMPILE([
941 #include <sys/types.h>
942 #if STDC_HEADERS
943 #include <stdlib.h>
944 #include <stddef.h>
945 #endif
946 #include <signal.h>],[sig_atomic_t i = 0],
947         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
948 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
949    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
950 fi
951
952 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
953     AC_TRY_COMPILE([
954 #include <sys/types.h>
955 #if STDC_HEADERS
956 #include <stdlib.h>
957 #include <stddef.h>
958 #endif
959 #include <time.h>
960 #if HAVE_AIO_H
961 #include <aio.h>
962 #endif
963 ],[struct timespec ts;],
964         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
965 if test x"$samba_cv_struct_timespec" = x"yes"; then
966    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
967 fi
968
969 # stupid headers have the functions but no declaration. grrrr.
970 AC_HAVE_DECL(errno, [#include <errno.h>])
971 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
972 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
973 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
974 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
975 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
976 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
977
978 # and glibc has setresuid under linux but the function does
979 # nothing until kernel 2.1.44! very dumb.
980 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
981     AC_TRY_RUN([#include <errno.h>
982 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
983         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
984 if test x"$samba_cv_have_setresuid" = x"yes"; then
985     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
986 fi
987
988 # Do the same check for setresguid...
989 #
990 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
991     AC_TRY_RUN([#include <unistd.h>
992 #include <errno.h>
993 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
994         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
995 if test x"$samba_cv_have_setresgid" = x"yes"; then
996     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
997 fi
998
999 AC_FUNC_MEMCMP
1000
1001 ###############################################
1002 # Readline included by default unless explicitly asked not to
1003 test "${with_readline+set}" != "set" && with_readline=yes
1004
1005 # test for where we get readline() from
1006 AC_MSG_CHECKING(whether to use readline)
1007 AC_ARG_WITH(readline,
1008 [  --with-readline[=DIR]     Look for readline include/libs in DIR (default=auto) ],
1009 [  case "$with_readline" in
1010   yes)
1011     AC_MSG_RESULT(yes)
1012
1013     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1014     AC_CHECK_HEADERS(readline/history.h)
1015
1016     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1017       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1018        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1019       done
1020       AC_CHECK_LIB(readline, rl_callback_handler_install,
1021        [TERMLIBS="-lreadline $TERMLIBS"
1022        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1023        break], [TERMLIBS=], $TERMLIBS)])
1024     ;;
1025   no)
1026     AC_MSG_RESULT(no)
1027     ;;
1028   *)
1029     AC_MSG_RESULT(yes)
1030
1031     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1032     # alternate readline path
1033     _ldflags=${LDFLAGS}
1034     _cppflags=${CPPFLAGS}
1035
1036     # Add additional search path
1037     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1038     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1039
1040     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1041     AC_CHECK_HEADERS(readline/history.h)
1042
1043     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1044       for termlib in ncurses curses termcap terminfo termlib; do
1045        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1046       done
1047       AC_CHECK_LIB(readline, rl_callback_handler_install,
1048        [TERMLDFLAGS="-L$with_readline/lib"
1049        TERMCPPFLAGS="-I$with_readline/include"
1050        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1051        TERMLIBS="-lreadline $TERMLIBS"
1052        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1053        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1054
1055     LDFLAGS=$_ldflags
1056     ;;
1057   esac],
1058   AC_MSG_RESULT(no)
1059 )
1060 AC_SUBST(TERMLIBS)
1061 AC_SUBST(TERMLDFLAGS)
1062
1063 # The readline API changed slightly from readline3 to readline4, so
1064 # code will generate warnings on one of them unless we have a few
1065 # special cases.
1066 AC_CHECK_LIB(readline, rl_completion_matches,
1067              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, 
1068                         [Do we have rl_completion_matches?])],
1069              [],
1070              [$TERMLIBS])
1071
1072 # The following test taken from the cvs sources
1073 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
1074 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
1075 # libsocket.so which has a bad implementation of gethostbyname (it
1076 # only looks in /etc/hosts), so we only look for -lsocket if we need
1077 # it.
1078 AC_CHECK_FUNCS(connect)
1079 if test x"$ac_cv_func_connect" = x"no"; then
1080     case "$LIBS" in
1081     *-lnsl*) ;;
1082     *) AC_CHECK_LIB(nsl_s, printf) ;;
1083     esac
1084     case "$LIBS" in
1085     *-lnsl*) ;;
1086     *) AC_CHECK_LIB(nsl, printf) ;;
1087     esac
1088     case "$LIBS" in
1089     *-lsocket*) ;;
1090     *) AC_CHECK_LIB(socket, connect) ;;
1091     esac
1092     case "$LIBS" in
1093     *-linet*) ;;
1094     *) AC_CHECK_LIB(inet, connect) ;;
1095     esac
1096     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
1097     dnl has been cached.
1098     if test x"$ac_cv_lib_socket_connect" = x"yes" || 
1099        test x"$ac_cv_lib_inet_connect" = x"yes"; then
1100         # ac_cv_func_connect=yes
1101         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
1102         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
1103     fi
1104 fi
1105
1106 ###############################################
1107 # test for where we get yp_get_default_domain() from
1108 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1109 AC_CHECK_FUNCS(yp_get_default_domain)
1110
1111 # Check if we have execl, if not we need to compile smbrun.
1112 AC_CHECK_FUNCS(execl)
1113 if test x"$ac_cv_func_execl" = x"no"; then
1114     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1115 fi
1116
1117 AC_CHECK_FUNCS(dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64)
1118 AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync memset strlcpy strlcat setpgid)
1119 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
1120 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1121 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1122 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1123 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64)
1124 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1125 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1126 AC_CHECK_FUNCS(syslog vsyslog timegm)
1127 AC_CHECK_FUNCS(setlocale nl_langinfo)
1128 AC_CHECK_FUNCS(nanosleep)
1129 # setbuffer, shmget, shm_open are needed for smbtorture
1130 AC_CHECK_FUNCS(setbuffer shmget shm_open backtrace_symbols)
1131 AC_CHECK_HEADERS(libexc.h)
1132 AC_CHECK_LIB(exc, trace_back_stack)
1133
1134 # syscall() is needed for smbwrapper.
1135 AC_CHECK_FUNCS(syscall)
1136
1137 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1138 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1139 AC_CHECK_FUNCS(__getcwd _getcwd)
1140 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1141 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1142 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1143 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1144 AC_CHECK_FUNCS(getdents _getdents __getdents _lseek __lseek _read __read)
1145 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1146 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1147 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1148 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1149 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1150 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1151
1152 #
1153
1154 #
1155 case "$host_os" in
1156     *linux*)
1157        # glibc <= 2.3.2 has a broken getgrouplist
1158        AC_TRY_RUN([
1159 #include <unistd.h>
1160 #include <sys/utsname.h>
1161 main() {
1162        /* glibc up to 2.3 has a broken getgrouplist */
1163 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1164        int libc_major = __GLIBC__;
1165        int libc_minor = __GLIBC_MINOR__;
1166
1167        if (libc_major < 2)
1168               exit(1);
1169        if ((libc_major == 2) && (libc_minor <= 3))
1170               exit(1);
1171 #endif
1172        exit(0);
1173 }
1174 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1175        if test x"$linux_getgrouplist_ok" = x"yes"; then
1176           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1177        fi
1178        ;;
1179     *)
1180        AC_CHECK_FUNCS(getgrouplist)
1181        ;;
1182 esac
1183
1184 #
1185 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1186 #
1187
1188 if test x$ac_cv_func_stat64 = xno ; then
1189   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1190   AC_TRY_LINK([
1191 #if defined(HAVE_UNISTD_H)
1192 #include <unistd.h>
1193 #endif
1194 #include <sys/stat.h>
1195 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1196   AC_MSG_RESULT([$ac_cv_func_stat64])
1197   if test x$ac_cv_func_stat64 = xyes ; then
1198     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1199   fi
1200 fi
1201
1202 if test x$ac_cv_func_lstat64 = xno ; then
1203   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1204   AC_TRY_LINK([
1205 #if defined(HAVE_UNISTD_H)
1206 #include <unistd.h>
1207 #endif
1208 #include <sys/stat.h>
1209 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1210   AC_MSG_RESULT([$ac_cv_func_lstat64])
1211   if test x$ac_cv_func_lstat64 = xyes ; then
1212     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1213   fi
1214 fi
1215
1216 if test x$ac_cv_func_fstat64 = xno ; then
1217   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1218   AC_TRY_LINK([
1219 #if defined(HAVE_UNISTD_H)
1220 #include <unistd.h>
1221 #endif
1222 #include <sys/stat.h>
1223 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1224   AC_MSG_RESULT([$ac_cv_func_fstat64])
1225   if test x$ac_cv_func_fstat64 = xyes ; then
1226     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1227   fi
1228 fi
1229
1230 #################################################
1231 # Check whether struct stat has timestamps with sub-second resolution.
1232 # At least IRIX and Solaris have these.
1233 #
1234 # We check that 
1235 #       all of st_mtim, st_atim and st_ctim exist
1236 #       all of the members are in fact of type struct timespec
1237 #
1238 # There is some conflicting standards weirdness about whether we should use
1239 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1240 # prefer struct timespec.
1241
1242 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_stat_hires,
1243     [
1244         AC_TRY_COMPILE(
1245             [
1246 #if TIME_WITH_SYS_TIME
1247 # include <sys/time.h>
1248 # include <time.h>
1249 #else
1250 # if HAVE_SYS_TIME_H
1251 #  include <sys/time.h>
1252 # else
1253 #  include <time.h>
1254 # endif
1255 #endif
1256 #ifdef HAVE_SYS_STAT_H
1257 #include <sys/stat.h>
1258 #endif
1259             ],
1260             [
1261                 struct timespec t;
1262                 struct stat s = {0};
1263                 t.tv_sec = s.st_mtim.tv_sec;
1264                 t.tv_nsec = s.st_mtim.tv_nsec;
1265                 t.tv_sec = s.st_ctim.tv_sec;
1266                 t.tv_nsec = s.st_ctim.tv_nsec;
1267                 t.tv_sec = s.st_atim.tv_sec;
1268                 t.tv_nsec = s.st_atim.tv_nsec;
1269             ],
1270             samba_stat_hires=yes, samba_stat_hires=no)
1271     ])
1272
1273 if test x"$samba_stat_hires" = x"yes" ; then
1274     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1275     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1276     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1277     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1278             [whether struct stat has sub-second timestamps])
1279 fi
1280
1281 #####################################
1282 # we might need the resolv library on some systems
1283 AC_CHECK_LIB(resolv, dn_expand)
1284
1285 #
1286 # Check for the functions putprpwnam, set_auth_parameters,
1287 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1288 # Needed for OSF1 and HPUX.
1289 #
1290
1291 AC_LIBTESTFUNC(security, putprpwnam)
1292 AC_LIBTESTFUNC(sec, putprpwnam)
1293
1294 AC_LIBTESTFUNC(security, set_auth_parameters)
1295 AC_LIBTESTFUNC(sec, set_auth_parameters)
1296
1297 # UnixWare 7.x has its getspnam in -lgen
1298 AC_LIBTESTFUNC(gen, getspnam)
1299
1300 AC_LIBTESTFUNC(security, getspnam)
1301 AC_LIBTESTFUNC(sec, getspnam)
1302
1303 AC_LIBTESTFUNC(security, bigcrypt)
1304 AC_LIBTESTFUNC(sec, bigcrypt)
1305
1306 AC_LIBTESTFUNC(security, getprpwnam)
1307 AC_LIBTESTFUNC(sec, getprpwnam)
1308
1309 ############################################
1310 # Check if we have libattr
1311 AC_SEARCH_LIBS(getxattr, [attr])
1312 AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1313 AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1314 AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1315 AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1316 AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1317 # Check if we have extattr
1318 case "$host_os" in
1319   *freebsd4* | *dragonfly* )
1320     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1321     ;;
1322   *)
1323     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1324     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1325     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1326     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1327     ;;
1328 esac
1329
1330 # Assume non-shared by default and override below
1331 BLDSHARED="false"
1332
1333 # these are the defaults, good for lots of systems
1334 HOST_OS="$host_os"
1335 LDSHFLAGS="-shared"
1336 SONAMEFLAG="#"
1337 SHLD="\${CC} \${CFLAGS}"
1338 PICFLAGS=""
1339 PICSUFFIX="po"
1340 SHLIBEXT="so"
1341
1342 if test "$enable_shared" = "yes"; then
1343   # this bit needs to be modified for each OS that is suported by
1344   # smbwrapper. You need to specify how to create a shared library and
1345   # how to compile C code to produce PIC object files
1346
1347   AC_MSG_CHECKING([ability to build shared libraries])
1348
1349   # and these are for particular systems
1350   case "$host_os" in
1351                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1352                         BLDSHARED="true"
1353                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1354                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined" 
1355                         else
1356                                 LDSHFLAGS="-shared -Wl,-Bsymbolic" 
1357                         fi
1358                         DYNEXP="-Wl,--export-dynamic"
1359                         PICFLAGS="-fPIC"
1360                         SONAMEFLAG="-Wl,-soname="
1361                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1362                         ;;
1363                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1364                         BLDSHARED="true"
1365                         LDSHFLAGS="-G"
1366                         SONAMEFLAG="-h "
1367                         if test "${GCC}" = "yes"; then
1368                                 PICFLAGS="-fPIC"
1369                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1370                                         DYNEXP="-Wl,-E"
1371                                 fi
1372                         else
1373                                 PICFLAGS="-KPIC"
1374                                 ## ${CFLAGS} added for building 64-bit shared 
1375                                 ## libs using Sun's Compiler
1376                                 LDSHFLAGS="-G \${CFLAGS}"
1377                                 PICSUFFIX="po.o"
1378                         fi
1379                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1380                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1381                         ;;
1382                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1383                         BLDSHARED="true"
1384                         LDSHFLAGS="-G"
1385                         SONAMEFLAG="-Wl,-h,"
1386                         PICFLAGS="-KPIC"   # Is this correct for SunOS
1387                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1388                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1389                         ;;
1390                 *netbsd* | *freebsd* | *dragonfly* )  
1391                         BLDSHARED="true"
1392                         LDSHFLAGS="-shared"
1393                         DYNEXP="-Wl,--export-dynamic"
1394                         SONAMEFLAG="-Wl,-soname,"
1395                         PICFLAGS="-fPIC -DPIC"
1396                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1397                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1398                         ;;
1399                 *openbsd*)  BLDSHARED="true"
1400                         LDSHFLAGS="-shared"
1401                         DYNEXP="-Wl,-Bdynamic"
1402                         SONAMEFLAG="-Wl,-soname,"
1403                         PICFLAGS="-fPIC"
1404                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1405                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1406                         ;;
1407                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1408                         case "$host_os" in
1409                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1410                         ;;
1411                         esac
1412                         BLDSHARED="true"
1413                         LDSHFLAGS="-set_version sgi1.0 -shared"
1414                         SONAMEFLAG="-soname "
1415                         SHLD="\${LD}"
1416                         if test "${GCC}" = "yes"; then
1417                                 PICFLAGS="-fPIC"
1418                         else 
1419                                 PICFLAGS="-KPIC"
1420                         fi
1421                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1422                         ;;
1423                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1424                         BLDSHARED="true"
1425                         LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry,-berok"
1426                         DYNEXP="-Wl,-brtl,-bexpall"
1427                         PICFLAGS="-O2"
1428                         if test "${GCC}" != "yes"; then
1429                                 ## for funky AIX compiler using strncpy()
1430                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1431                         fi
1432
1433                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1434                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1435                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1436                         ;;
1437                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1438                         # Use special PIC flags for the native HP-UX compiler.
1439                         if test $ac_cv_prog_cc_Ae = yes; then
1440                                 BLDSHARED="true"
1441                                 SHLD="cc"
1442                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1443                                 SONAMEFLAG="-Wl,+h "
1444                                 PICFLAGS="+z"
1445                         elif test "${GCC}" = "yes"; then
1446                                 PICFLAGS="-fPIC"
1447                         fi
1448                         if test "$host_cpu" = "ia64"; then
1449                                 SHLIBEXT="so"
1450                                 DYNEXP="-Wl,-E,+b /usr/local/lib/hpux32:/usr/lib/hpux32"
1451                         else
1452                                 SHLIBEXT="sl"
1453                                 DYNEXP="-Wl,-E,+b /usr/local/lib:/usr/lib"
1454                         fi
1455                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1456                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1457                         ;;
1458                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1459                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1460                         ;;
1461                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1462                         BLDSHARED="true"
1463                         LDSHFLAGS="-shared"
1464                         SONAMEFLAG="-Wl,-soname,"
1465                         PICFLAGS="-fPIC"
1466                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1467                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1468                         ;;
1469                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1470                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1471                         ;;
1472                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1473                         BLDSHARED="true"
1474                         LDSHFLAGS="-shared"
1475                         SONAMEFLAG="-Wl,-soname,"
1476                         PICFLAGS="-KPIC"
1477                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1478                         ;;
1479                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1480                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1481                         ;;
1482                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1483                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1484                         ;;
1485                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1486                         case "$host" in
1487                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1488                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1489                                         fi
1490                                         LDSHFLAGS="-G"
1491                                         DYNEXP="-Bexport"
1492                                 ;;
1493                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1494                         esac
1495                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1496                         ;;
1497
1498                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1499                         if [ test "$GCC" != yes ]; then
1500                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1501                         fi
1502                         LDSHFLAGS="-G"
1503                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1504                         ;;
1505                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1506                         BLDSHARED="false"
1507                         LDSHFLAGS=""
1508                         ;;
1509
1510                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1511                         BLDSHARED="true"
1512                         LDSHFLAGS="-bundle -flat_namespace -undefined suppress"
1513                         SHLIBEXT="dylib"
1514                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1515                         ;;
1516
1517                 *)
1518                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1519                         ;;
1520   esac
1521   AC_SUBST(DYNEXP)
1522   AC_MSG_RESULT($BLDSHARED)
1523   AC_MSG_CHECKING([linker flags for shared libraries])
1524   AC_MSG_RESULT([$LDSHFLAGS])
1525   AC_MSG_CHECKING([compiler flags for position-independent code])
1526   AC_MSG_RESULT([$PICFLAGS])
1527 fi
1528
1529 #######################################################
1530 # test whether building a shared library actually works
1531 if test $BLDSHARED = true; then
1532 AC_CACHE_CHECK([whether building shared libraries actually works], 
1533                [ac_cv_shlib_works],[
1534    # try building a trivial shared library
1535    ac_cv_shlib_works=no
1536    # The $SHLD and $LDSHFLAGS variables may contain references to other
1537    # variables so they need to be eval'ed.
1538    $CC $CPPFLAGS $CFLAGS $PICFLAGS -c -o \
1539         shlib.$PICSUFFIX ${srcdir-.}/tests/shlib.c && \
1540    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1541         shlib.$PICSUFFIX && ac_cv_shlib_works=yes
1542    rm -f "shlib.$SHLIBEXT" shlib.$PICSUFFIX
1543 ])
1544 if test $ac_cv_shlib_works = no; then
1545    BLDSHARED=false
1546 fi
1547 fi
1548
1549 ################
1550
1551 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1552 AC_TRY_RUN([#include <stdio.h>
1553 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1554 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1555 if test x"$samba_cv_have_longlong" = x"yes"; then
1556     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1557 fi
1558
1559 #
1560 # Check if the compiler supports the LL prefix on long long integers.
1561 # AIX needs this.
1562
1563 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1564     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1565         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1566 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1567    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1568 fi
1569
1570   
1571 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1572 AC_TRY_RUN([#include <stdio.h>
1573 #include <sys/stat.h>
1574 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1575 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1576 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1577     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1578 fi
1579
1580 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1581 AC_TRY_RUN([
1582 #if defined(HAVE_UNISTD_H)
1583 #include <unistd.h>
1584 #endif
1585 #include <stdio.h>
1586 #include <sys/stat.h>
1587 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1588 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1589 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1590     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1591 fi
1592
1593 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1594 AC_TRY_RUN([#include <stdio.h>
1595 #include <sys/stat.h>
1596 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1597 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1598 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1599     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1600 fi
1601
1602 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1603 AC_TRY_RUN([
1604 #if defined(HAVE_UNISTD_H)
1605 #include <unistd.h>
1606 #endif
1607 #include <stdio.h>
1608 #include <sys/stat.h>
1609 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1610 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1611 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1612     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1613 fi
1614
1615 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1616 AC_TRY_RUN([
1617 #if defined(HAVE_UNISTD_H)
1618 #include <unistd.h>
1619 #endif
1620 #include <stdio.h>
1621 #include <sys/stat.h>
1622 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1623 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1624 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1625     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1626 fi
1627
1628 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1629 AC_TRY_COMPILE([
1630 #if defined(HAVE_UNISTD_H)
1631 #include <unistd.h>
1632 #endif
1633 #include <sys/types.h>
1634 #include <dirent.h>],
1635 [struct dirent64 de;],
1636 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1637 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1638     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1639 fi
1640
1641 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1642 AC_TRY_RUN([
1643 #if defined(HAVE_UNISTD_H)
1644 #include <unistd.h>
1645 #endif
1646 #include <sys/types.h>
1647 main() { dev_t dev; int i = major(dev); return 0; }],
1648 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1649 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1650     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1651 fi
1652
1653 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1654 AC_TRY_RUN([
1655 #if defined(HAVE_UNISTD_H)
1656 #include <unistd.h>
1657 #endif
1658 #include <sys/types.h>
1659 main() { dev_t dev; int i = minor(dev); return 0; }],
1660 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1661 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1662     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1663 fi
1664
1665 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
1666 AC_TRY_RUN([
1667 #if defined(HAVE_UNISTD_H)
1668 #include <unistd.h>
1669 #endif
1670 #include <sys/types.h>
1671 main() { dev_t dev = makedev(1,2); return 0; }],
1672 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
1673 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
1674     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
1675 fi
1676
1677 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
1678 AC_TRY_RUN([#include <stdio.h>
1679 main() { char c; c=250; exit((c > 0)?0:1); }],
1680 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
1681 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
1682     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
1683 fi
1684
1685 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
1686 AC_TRY_COMPILE([#include <sys/types.h>
1687 #include <sys/socket.h>
1688 #include <netinet/in.h>],
1689 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
1690 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
1691 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
1692     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
1693 fi
1694
1695 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1696 AC_TRY_COMPILE([#include <sys/types.h>
1697 #include <dirent.h>
1698 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1699 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1700 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1701     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1702 fi
1703
1704 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1705 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1706 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1707 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1708     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1709 fi
1710
1711 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1712 AC_TRY_RUN([
1713 #include <sys/time.h>
1714 #include <unistd.h>
1715 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
1716            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
1717 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1718     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
1719 fi
1720
1721 AC_CACHE_CHECK([for va_copy],samba_cv_HAVE_VA_COPY,[
1722 AC_TRY_LINK([#include <stdarg.h>
1723 va_list ap1,ap2;], [va_copy(ap1,ap2);],
1724 samba_cv_HAVE_VA_COPY=yes,
1725 samba_cv_HAVE_VA_COPY=no)])
1726 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
1727     AC_DEFINE(HAVE_VA_COPY,1,[Whether va_copy() is available])
1728 else
1729     AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE___VA_COPY,[
1730     AC_TRY_LINK([#include <stdarg.h>
1731     va_list ap1,ap2;], [__va_copy(ap1,ap2);],
1732     samba_cv_HAVE___VA_COPY=yes,
1733     samba_cv_HAVE___VA_COPY=no)])
1734     if test x"$samba_cv_HAVE___VA_COPY" = x"yes"; then
1735         AC_DEFINE(HAVE___VA_COPY,1,[Whether __va_copy() is available])
1736     fi
1737 fi
1738
1739 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
1740 AC_TRY_RUN([
1741 #include <sys/types.h>
1742 #include <stdarg.h>
1743 void foo(const char *format, ...) { 
1744        va_list ap;
1745        int len;
1746        char buf[5];
1747
1748        va_start(ap, format);
1749        len = vsnprintf(buf, 0, format, ap);
1750        va_end(ap);
1751        if (len != 5) exit(1);
1752
1753        va_start(ap, format);
1754        len = vsnprintf(0, 0, format, ap);
1755        va_end(ap);
1756        if (len != 5) exit(1);
1757
1758        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
1759
1760        exit(0);
1761 }
1762 main() { foo("hello"); }
1763 ],
1764 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
1765 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
1766     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
1767 fi
1768
1769 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
1770 AC_TRY_RUN([#include <sys/types.h>
1771 #include <dirent.h>
1772 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
1773 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
1774 di->d_name[0] == 0) exit(0); exit(1);} ],
1775 samba_cv_HAVE_BROKEN_READDIR=yes,samba_cv_HAVE_BROKEN_READDIR=no,samba_cv_HAVE_BROKEN_READDIR=cross)])
1776 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
1777     AC_DEFINE(HAVE_BROKEN_READDIR,1,[Whether readdir() is broken])
1778 fi
1779
1780 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
1781 AC_TRY_COMPILE([#include <sys/types.h>
1782 #include <utime.h>],
1783 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
1784 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
1785 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
1786     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
1787 fi
1788
1789 ##############
1790 # Check utmp details, but only if our OS offers utmp.h
1791 if test x"$ac_cv_header_utmp_h" = x"yes"; then
1792 dnl  utmp and utmpx come in many flavours
1793 dnl  We need to check for many of them
1794 dnl  But we don't need to do each and every one, because our code uses
1795 dnl  mostly just the utmp (not utmpx) fields.
1796
1797 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
1798
1799 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
1800 AC_TRY_COMPILE([#include <sys/types.h>
1801 #include <utmp.h>],
1802 [struct utmp ut;  ut.ut_name[0] = 'a';],
1803 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
1804 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
1805     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
1806 fi 
1807
1808 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
1809 AC_TRY_COMPILE([#include <sys/types.h>
1810 #include <utmp.h>],
1811 [struct utmp ut;  ut.ut_user[0] = 'a';],
1812 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
1813 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
1814     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
1815 fi 
1816
1817 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
1818 AC_TRY_COMPILE([#include <sys/types.h>
1819 #include <utmp.h>],
1820 [struct utmp ut;  ut.ut_id[0] = 'a';],
1821 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
1822 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
1823     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
1824 fi 
1825
1826 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
1827 AC_TRY_COMPILE([#include <sys/types.h>
1828 #include <utmp.h>],
1829 [struct utmp ut;  ut.ut_host[0] = 'a';],
1830 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
1831 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
1832     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
1833 fi 
1834
1835 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
1836 AC_TRY_COMPILE([#include <sys/types.h>
1837 #include <utmp.h>],
1838 [struct utmp ut;  time_t t; ut.ut_time = t;],
1839 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
1840 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
1841     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
1842 fi 
1843
1844 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
1845 AC_TRY_COMPILE([#include <sys/types.h>
1846 #include <utmp.h>],
1847 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
1848 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
1849 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
1850     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
1851 fi 
1852
1853 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
1854 AC_TRY_COMPILE([#include <sys/types.h>
1855 #include <utmp.h>],
1856 [struct utmp ut;  ut.ut_type = 0;],
1857 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
1858 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
1859     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
1860 fi 
1861
1862 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
1863 AC_TRY_COMPILE([#include <sys/types.h>
1864 #include <utmp.h>],
1865 [struct utmp ut;  ut.ut_pid = 0;],
1866 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
1867 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
1868     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
1869 fi 
1870
1871 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
1872 AC_TRY_COMPILE([#include <sys/types.h>
1873 #include <utmp.h>],
1874 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
1875 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
1876 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
1877     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
1878 fi 
1879
1880 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
1881 AC_TRY_COMPILE([#include <sys/types.h>
1882 #include <utmp.h>],
1883 [struct utmp ut;  ut.ut_addr = 0;],
1884 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
1885 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
1886     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
1887 fi 
1888
1889 if test x$ac_cv_func_pututline = xyes ; then
1890   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
1891   AC_TRY_COMPILE([#include <sys/types.h>
1892 #include <utmp.h>],
1893   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
1894   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
1895   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
1896       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
1897   fi
1898 fi
1899
1900 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
1901 AC_TRY_COMPILE([#include <sys/types.h>
1902 #include <utmpx.h>],
1903 [struct utmpx ux;  ux.ut_syslen = 0;],
1904 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
1905 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
1906     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
1907 fi 
1908
1909 fi
1910 # end utmp details
1911
1912
1913 ICONV_LOCATION=standard
1914 LOOK_DIRS="/usr /usr/local /sw /opt"
1915 AC_ARG_WITH(libiconv,
1916 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
1917 [
1918   if test "$withval" = "no" ; then
1919     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
1920   else
1921      if test "$withval" != "yes" ; then
1922         ICONV_PATH_SPEC=yes
1923         LOOK_DIRS="$withval"
1924      fi
1925   fi
1926 ])
1927
1928 for i in $LOOK_DIRS ; do
1929     save_LIBS=$LIBS
1930     save_LDFLAGS=$LDFLAGS
1931     save_CPPFLAGS=$CPPFLAGS
1932     ICONV_FOUND="no"
1933     unset libext
1934     CPPFLAGS="$CPPFLAGS -I$i/include"
1935 dnl This is here to handle -withval stuff for --with-libiconv
1936 dnl Perhaps we should always add a -L
1937
1938 dnl Check lib and lib32 library variants to cater for IRIX ABI-specific
1939 dnl installation paths. This gets a little tricky since we might have iconv
1940 dnl in both libiconv and in libc. In this case the jm_ICONV test will always
1941 dnl succeed when the header is found. To counter this, make sure the 
1942 dnl library directory is there and check the ABI directory first (which
1943 dnl should be harmless on other systems.
1944 dnl For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
1945     for l in "lib32" "lib" "lib/hpux32"; do
1946         if test -d "$i/$l" ; then
1947                 LDFLAGS="$save_LDFLAGS -L$i/$l"
1948                 LIBS=
1949                 export LDFLAGS LIBS CPPFLAGS
1950 dnl Try to find iconv(3)
1951                 jm_ICONV($i/$l)
1952                 if test x"$ICONV_FOUND" = "xyes" ; then
1953                     libext="$l"
1954                     break;
1955                 fi
1956         fi
1957     done
1958
1959     if test x"$ICONV_FOUND" = "xyes" ; then
1960         LDFLAGS=$save_LDFLAGS
1961         LIB_ADD_DIR(LDFLAGS, "$i/$libext")
1962         CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
1963         LIBS="$save_LIBS"
1964         ICONV_LOCATION=$i
1965         export LDFLAGS LIBS CPPFLAGS
1966 dnl Now, check for a working iconv ... we want to do it here because
1967 dnl there might be a working iconv further down the list of LOOK_DIRS
1968
1969         ############
1970         # check for iconv in libc
1971         ic_save_LIBS="$LIBS"
1972         if test x"$ICONV_PATH_SPEC" = "xyes" ; then
1973            LIBS="$LIBS -L$ICONV_LOCATION/$libext"
1974         fi
1975         if test x"$jm_cv_lib_iconv" != x; then
1976            LIBS="$LIBS -l$jm_cv_lib_iconv"
1977         fi
1978 dnl        AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
1979         default_dos_charset=no
1980         default_display_charset=no
1981         default_unix_charset=no
1982
1983         # check for default dos charset name
1984         for j in CP850 IBM850 ; do
1985             rjs_CHARSET($j)
1986             if test x"$ICONV_CHARSET" = x"$j"; then
1987                 default_dos_charset="\"$j\""
1988                 break
1989             fi
1990         done
1991         # check for default display charset name
1992         for j in ASCII 646 ; do
1993             rjs_CHARSET($j)
1994             if test x"$ICONV_CHARSET" = x"$j"; then
1995                 default_display_charset="\"$j\""
1996                 break
1997             fi
1998         done
1999         # check for default unix charset name
2000         for j in UTF-8 UTF8 ; do
2001             rjs_CHARSET($j)
2002             if test x"$ICONV_CHARSET" = x"$j"; then
2003                 default_unix_charset="\"$j\""
2004                 break
2005             fi
2006         done
2007         
2008         if test "$default_dos_charset" != "no" -a \
2009                 "$default_dos_charset" != "cross" -a \
2010                 "$default_display_charset" != "no" -a \ 
2011                 "$default_display_charset" != "cross" -a \
2012                 "$default_unix_charset" != "no" -a \
2013                 "$default_unix_charset" != "cross"
2014         then
2015                 samba_cv_HAVE_NATIVE_ICONV=yes
2016         else if test "$default_dos_charset" = "cross" -o \
2017                      "$default_display_charset" = "cross" -o \
2018                      "$default_unix_charset" = "cross"
2019         then
2020                 samba_cv_HAVE_NATIVE_ICONV=cross
2021         else
2022                 samba_cv_HAVE_NATIVE_ICONV=no
2023         fi
2024         fi
2025 dnl ])
2026
2027         LIBS="$ic_save_LIBS"
2028         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
2029            CPPFLAGS=$save_CPPFLAGS
2030            LDFLAGS=$save_LDFLAGS
2031            LIBS=$save_LIBS
2032            if test x"$jm_cv_lib_iconv" != x; then
2033               LIBS="$LIBS -l$jm_cv_lib_iconv"
2034            fi
2035            dnl Add the flags we need to CPPFLAGS and LDFLAGS
2036            CFLAGS_ADD_DIR(CPPFLAGS, "$i/include")
2037            LIB_ADD_DIR(LDFLAGS, "$i/$libext")
2038            export CPPFLAGS
2039            AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2040            AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2041            AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2042            AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2043            break
2044         fi
2045 dnl We didn't find a working iconv, so keep going
2046     fi
2047 dnl We only need to clean these up here for the next pass through the loop
2048     CPPFLAGS=$save_CPPFLAGS
2049     LDFLAGS=$save_LDFLAGS
2050     LIBS=$save_LIBS
2051     export LDFLAGS LIBS CPPFLAGS
2052 done
2053 unset libext
2054
2055
2056 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2057     AC_MSG_WARN([Sufficient support for iconv function was not found. 
2058     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2059    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2060    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2061    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2062 fi
2063
2064
2065 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2066 AC_TRY_RUN([
2067 #include <sys/types.h>
2068 #include <fcntl.h>
2069 #ifndef F_GETLEASE
2070 #define F_GETLEASE      1025
2071 #endif
2072 main() {
2073        int fd = open("/dev/null", O_RDONLY);
2074        return fcntl(fd, F_GETLEASE, 0) == -1;
2075 }
2076 ],
2077 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2078 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2079     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2080 fi
2081
2082 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2083 AC_TRY_RUN([
2084 #include <sys/types.h>
2085 #include <fcntl.h>
2086 #include <signal.h>
2087 #ifndef F_NOTIFY
2088 #define F_NOTIFY 1026
2089 #endif
2090 main() {
2091         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2092 }
2093 ],
2094 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2095 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2096     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2097 fi
2098
2099 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2100 AC_TRY_RUN([
2101 #include <sys/types.h>
2102 #include <fcntl.h>
2103 #include <signal.h>
2104 #include <sys/file.h>
2105 #ifndef LOCK_MAND
2106 #define LOCK_MAND       32
2107 #define LOCK_READ       64
2108 #endif
2109 main() {
2110         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2111 }
2112 ],
2113 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2114 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2115     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2116 fi
2117
2118
2119
2120
2121 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2122 AC_TRY_COMPILE([#include <sys/types.h>
2123 #include <fcntl.h>],
2124 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2125 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2126 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2127     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2128 fi
2129
2130 AC_CACHE_CHECK([for irix specific capabilities],samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES,[
2131 AC_TRY_RUN([#include <sys/types.h>
2132 #include <sys/capability.h>
2133 main() {
2134  cap_t cap;
2135  if ((cap = cap_get_proc()) == NULL)
2136    exit(1);
2137  cap->cap_effective |= CAP_NETWORK_MGT;
2138  cap->cap_inheritable |= CAP_NETWORK_MGT;
2139  cap_set_proc(cap);
2140  exit(0);
2141 }
2142 ],
2143 samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross)])
2144 if test x"$samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES" = x"yes"; then
2145     AC_DEFINE(HAVE_IRIX_SPECIFIC_CAPABILITIES,1,[Whether IRIX specific capabilities are available])
2146 fi
2147
2148 #
2149 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2150 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2151 #
2152
2153 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2154 AC_TRY_COMPILE([#include <sys/types.h>
2155 #if defined(HAVE_RPC_RPC_H)
2156 #include <rpc/rpc.h>
2157 #endif],
2158 [int16 testvar;],
2159 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2160 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2161     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2162 fi
2163
2164 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2165 AC_TRY_COMPILE([#include <sys/types.h>
2166 #if defined(HAVE_RPC_RPC_H)
2167 #include <rpc/rpc.h>
2168 #endif],
2169 [uint16 testvar;],
2170 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2171 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2172     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2173 fi
2174
2175 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2176 AC_TRY_COMPILE([#include <sys/types.h>
2177 #if defined(HAVE_RPC_RPC_H)
2178 #include <rpc/rpc.h>
2179 #endif],
2180 [int32 testvar;],
2181 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2182 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2183     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2184 fi
2185
2186 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2187 AC_TRY_COMPILE([#include <sys/types.h>
2188 #if defined(HAVE_RPC_RPC_H)
2189 #include <rpc/rpc.h>
2190 #endif],
2191 [uint32 testvar;],
2192 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2193 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2194     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2195 fi
2196
2197 dnl
2198 dnl Some systems (SCO) have a problem including
2199 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2200 dnl as a #define in <prot.h> and as part of an enum
2201 dnl in <rpc/rpc.h>.
2202 dnl
2203
2204 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2205 AC_TRY_COMPILE([#include <sys/types.h>
2206 #ifdef HAVE_SYS_SECURITY_H
2207 #include <sys/security.h>
2208 #include <prot.h>
2209 #endif  /* HAVE_SYS_SECURITY_H */
2210 #if defined(HAVE_RPC_RPC_H)
2211 #include <rpc/rpc.h>
2212 #endif],
2213 [int testvar;],
2214 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2215 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2216     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2217 fi
2218
2219 AC_MSG_CHECKING([for test routines])
2220 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2221            AC_MSG_RESULT(yes),
2222            AC_MSG_ERROR([cant find test code. Aborting config]),
2223            AC_MSG_WARN([cannot run when cross-compiling]))
2224
2225 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2226 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2227            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2228 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2229     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2230 fi
2231
2232 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
2233 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
2234            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
2235            samba_cv_HAVE_WORKING_AF_LOCAL=no,
2236            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
2237 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
2238 then
2239     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
2240 fi
2241
2242 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2243 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2244            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2245 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2246     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2247 fi
2248
2249 AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
2250 SAVE_CPPFLAGS="$CPPFLAGS"
2251 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt"
2252 AC_TRY_COMPILE([
2253 #define REPLACE_GETPASS 1
2254 #define NO_PROTO_H 1
2255 #define NO_CONFIG_H 1
2256 #define main dont_declare_main
2257 #include "${srcdir-.}/lib/getsmbpass.c"
2258 #undef main
2259 ],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
2260 CPPFLAGS="$SAVE_CPPFLAGS"
2261 ])
2262 if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
2263         AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
2264 fi
2265
2266 AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
2267 AC_TRY_RUN([
2268 #include <stdio.h>
2269 #include <sys/types.h>
2270 #include <netinet/in.h>
2271 #ifdef HAVE_ARPA_INET_H
2272 #include <arpa/inet.h>
2273 #endif
2274 main() { struct in_addr ip; ip.s_addr = 0x12345678;
2275 if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
2276     strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
2277 exit(1);}],
2278            samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
2279 if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
2280     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
2281 fi
2282
2283 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
2284 AC_TRY_RUN([#include <stdlib.h>
2285 #include <sys/types.h>
2286 #include <sys/stat.h>
2287 #include <unistd.h>
2288 main() { 
2289   struct stat st;
2290   char tpl[20]="/tmp/test.XXXXXX"; 
2291   int fd = mkstemp(tpl); 
2292   if (fd == -1) exit(1);
2293   unlink(tpl);
2294   if (fstat(fd, &st) != 0) exit(1);
2295   if ((st.st_mode & 0777) != 0600) exit(1);
2296   exit(0);
2297 }],
2298 samba_cv_HAVE_SECURE_MKSTEMP=yes,
2299 samba_cv_HAVE_SECURE_MKSTEMP=no,
2300 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
2301 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
2302     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
2303 fi
2304
2305 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
2306 AC_TRY_RUN([#include <unistd.h>
2307 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
2308 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
2309 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
2310     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
2311 fi
2312
2313 AC_CACHE_CHECK([for sysconf(_SC_NPROC_ONLN)],samba_cv_SYSCONF_SC_NPROC_ONLN,[
2314 AC_TRY_RUN([#include <unistd.h>
2315 main() { exit(sysconf(_SC_NPROC_ONLN) == -1 ? 1 : 0); }],
2316 samba_cv_SYSCONF_SC_NPROC_ONLN=yes,samba_cv_SYSCONF_SC_NPROC_ONLN=no,samba_cv_SYSCONF_SC_NPROC_ONLN=cross)])
2317 if test x"$samba_cv_SYSCONF_SC_NPROC_ONLN" = x"yes"; then
2318     AC_DEFINE(SYSCONF_SC_NPROC_ONLN,1,[Whether sysconf(_SC_NPROC_ONLN) is available])
2319 fi
2320
2321 AC_CACHE_CHECK([for root],samba_cv_HAVE_ROOT,[
2322 AC_TRY_RUN([main() { exit(getuid() != 0); }],
2323            samba_cv_HAVE_ROOT=yes,samba_cv_HAVE_ROOT=no,samba_cv_HAVE_ROOT=cross)])
2324 if test x"$samba_cv_HAVE_ROOT" = x"yes"; then
2325     AC_DEFINE(HAVE_ROOT,1,[Whether current user is root])
2326 else
2327     AC_MSG_WARN(running as non-root will disable some tests)
2328 fi
2329
2330 ##################
2331 # look for a method of finding the list of network interfaces
2332 iface=no;
2333 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
2334 AC_TRY_RUN([
2335 #define HAVE_IFACE_AIX 1
2336 #define AUTOCONF_TEST 1
2337 #include "confdefs.h"
2338 #include "${srcdir-.}/lib/interfaces.c"],
2339            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
2340 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
2341     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
2342 fi
2343
2344 if test $iface = no; then
2345 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
2346 AC_TRY_RUN([
2347 #define HAVE_IFACE_IFCONF 1
2348 #define AUTOCONF_TEST 1
2349 #include "confdefs.h"
2350 #include "${srcdir-.}/lib/interfaces.c"],
2351            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
2352 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
2353     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
2354 fi
2355 fi
2356
2357 if test $iface = no; then
2358 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
2359 AC_TRY_RUN([
2360 #define HAVE_IFACE_IFREQ 1
2361 #define AUTOCONF_TEST 1
2362 #include "confdefs.h"
2363 #include "${srcdir-.}/lib/interfaces.c"],
2364            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
2365 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
2366     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
2367 fi
2368 fi
2369
2370
2371 ################################################
2372 # look for a method of setting the effective uid
2373 seteuid=no;
2374 if test $seteuid = no; then
2375 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2376 AC_TRY_RUN([
2377 #define AUTOCONF_TEST 1
2378 #define USE_SETRESUID 1
2379 #include "confdefs.h"
2380 #include "${srcdir-.}/lib/util_sec.c"],
2381            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2382 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2383     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2384 fi
2385 fi
2386
2387
2388 if test $seteuid = no; then
2389 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2390 AC_TRY_RUN([
2391 #define AUTOCONF_TEST 1
2392 #define USE_SETREUID 1
2393 #include "confdefs.h"
2394 #include "${srcdir-.}/lib/util_sec.c"],
2395            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2396 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2397     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2398 fi
2399 fi
2400
2401 if test $seteuid = no; then
2402 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2403 AC_TRY_RUN([
2404 #define AUTOCONF_TEST 1
2405 #define USE_SETEUID 1
2406 #include "confdefs.h"
2407 #include "${srcdir-.}/lib/util_sec.c"],
2408            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2409 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2410     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2411 fi
2412 fi
2413
2414 if test $seteuid = no; then
2415 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2416 AC_TRY_RUN([
2417 #define AUTOCONF_TEST 1
2418 #define USE_SETUIDX 1
2419 #include "confdefs.h"
2420 #include "${srcdir-.}/lib/util_sec.c"],
2421            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2422 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2423     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2424 fi
2425 fi
2426
2427
2428 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
2429 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
2430            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
2431 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
2432     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
2433 fi
2434
2435 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2436 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2437            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2438 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2439     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2440 fi
2441
2442 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2443 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2444            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2445 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2446     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2447
2448 else
2449
2450 dnl
2451 dnl Don't check for 64 bit fcntl locking if we know that the
2452 dnl glibc2.1 broken check has succeeded.
2453 dnl 
2454
2455   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2456   AC_TRY_RUN([
2457 #if defined(HAVE_UNISTD_H)
2458 #include <unistd.h>
2459 #endif
2460 #include <stdio.h>
2461 #include <stdlib.h>
2462
2463 #ifdef HAVE_FCNTL_H
2464 #include <fcntl.h>
2465 #endif
2466
2467 #ifdef HAVE_SYS_FCNTL_H
2468 #include <sys/fcntl.h>
2469 #endif
2470 main() { struct flock64 fl64;
2471 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2472 exit(0);
2473 #else
2474 exit(1);
2475 #endif
2476 }],
2477        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2478
2479   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2480       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2481   fi
2482 fi
2483
2484 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2485 AC_TRY_COMPILE([#include <sys/types.h>
2486 #include <sys/stat.h>
2487 #include <unistd.h>],
2488 [struct stat st;  st.st_blocks = 0;],
2489 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2490 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2491     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2492 fi 
2493
2494 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2495 AC_TRY_COMPILE([#include <sys/types.h>
2496 #include <sys/stat.h>
2497 #include <unistd.h>],
2498 [struct stat st;  st.st_blksize = 0;],
2499 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2500 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2501     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2502 fi
2503
2504 case "$host_os" in
2505 *linux*)
2506 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
2507 AC_TRY_COMPILE([
2508 #ifdef HAVE_SYS_VFS_H
2509 #include <sys/vfs.h>
2510 #endif
2511 #ifdef HAVE_SYS_CAPABILITY_H
2512 #include <sys/capability.h>
2513 #endif
2514 ],[int i;],
2515    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
2516 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
2517    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
2518 fi
2519 ;;
2520 esac
2521
2522 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2523 AC_TRY_COMPILE([
2524 #include <sys/types.h>
2525 #include <sys/acl.h>
2526 #if defined(HAVE_RPCSVC_NIS_H)
2527 #include <rpcsvc/nis.h>
2528 #endif],
2529 [int i;],
2530 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2531 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2532         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2533 fi
2534
2535 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2536 AC_TRY_RUN([
2537 #include <stdio.h>
2538 #include <limits.h>
2539 main() {
2540         char *newpath = realpath("/tmp", NULL);
2541         exit ((newpath != NULL) ? 0 : 1);
2542 }
2543 ],
2544 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2545 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2546     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2547 fi
2548
2549 #################################################
2550 # check for smbwrapper support
2551 AC_MSG_CHECKING(whether to use smbwrapper)
2552 AC_ARG_WITH(smbwrapper,
2553 [  --with-smbwrapper       Include SMB wrapper support (default=no) ],
2554 [ case "$withval" in
2555   yes)
2556     AC_MSG_RESULT(yes)
2557     AC_DEFINE(WITH_SMBWRAPPER,1,[Whether to include smbwrapper support])
2558         WRAPPROG="bin/smbsh\$(EXEEXT)"
2559         WRAP="bin/smbwrapper.$SHLIBEXT"
2560         WRAP_OBJS="\$(SMBW_OBJ1) \$(SMBWRAPPER_OBJ1)"
2561         WRAP_INC="-I\$(srcdir)/smbwrapper"
2562
2563 # Conditions under which smbwrapper should not be built.
2564
2565         if test x$PICFLAGS = x; then
2566            echo No support for PIC code - disabling smbwrapper and smbsh
2567            WRAPPROG=""
2568            WRAP=""
2569            WRAP_OBJS=""
2570            WRAP_INC=""
2571         elif test x$ac_cv_func_syscall = xno; then
2572            AC_MSG_RESULT([No syscall() -- disabling smbwrapper and smbsh])
2573            WRAPPROG=""
2574            WRAP=""
2575            WRAP_OBJS=""
2576            WRAP_INC=""
2577         fi
2578         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WRAPPROG $WRAP"
2579         SMBWRAPPER="$WRAPPROG $WRAP"
2580         SMBWRAP_OBJS="$WRAP_OBJS"
2581         SMBWRAP_INC="$WRAP_INC"
2582     ;;
2583   *)
2584     AC_MSG_RESULT(no)
2585     ;;
2586   esac ],
2587   AC_MSG_RESULT(no)
2588 )
2589
2590 #################################################
2591 # check for AFS clear-text auth support
2592 samba_cv_WITH_AFS=no
2593 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2594 AC_ARG_WITH(afs,
2595 [  --with-afs              Include AFS clear-text auth support (default=no) ],
2596 [ case "$withval" in
2597   yes|auto)
2598     AC_MSG_RESULT($withval)
2599     samba_cv_WITH_AFS=$withval
2600     ;;
2601   *)
2602     AC_MSG_RESULT(no)
2603     ;;
2604   esac ],
2605   AC_MSG_RESULT(no)
2606 )
2607
2608 ####################################################
2609 # check for Linux-specific AFS fake-kaserver support
2610 samba_cv_WITH_FAKE_KASERVER=no
2611 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2612 AC_ARG_WITH(fake-kaserver,
2613 [  --with-fake-kaserver    Include AFS fake-kaserver support (default=no) ],
2614 [ case "$withval" in
2615   yes|auto)
2616     AC_MSG_RESULT($withval)
2617     samba_cv_WITH_FAKE_KASERVER=$withval
2618     ;;
2619   *)
2620     AC_MSG_RESULT(no)
2621     ;;
2622   esac ],
2623   AC_MSG_RESULT(no)
2624 )
2625
2626 #################################################
2627 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2628 if test x"$samba_cv_WITH_AFS" != x"no" ||
2629    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2630
2631     # see if this box has the afs-headers in /usr/include/afs
2632     AC_MSG_CHECKING(for /usr/include/afs)
2633     if test -d /usr/include/afs; then
2634           CFLAGS="$CFLAGS -I/usr/include/afs"
2635           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2636           AC_MSG_RESULT(yes)
2637     else
2638       AC_MSG_RESULT(no)
2639     fi
2640    
2641     # check for afs.h
2642     have_afs_headers=no
2643     AC_CHECK_HEADERS(afs.h afs/afs.h)
2644     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2645         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2646            test x"$samba_cv_WITH_AFS" = x"auto"; then
2647                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2648         else
2649                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2650         fi
2651     else
2652         have_afs_headers=yes
2653     fi
2654 fi
2655
2656 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2657     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2658 fi
2659
2660 #################################################
2661 # check whether to compile AFS/NT ACL mapping module
2662 samba_cv_WITH_VFS_AFSACL=no
2663 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2664 AC_ARG_WITH(vfs-afsacl,
2665 [  --with-vfs-afsacl       Include AFS to NT ACL mapping module (default=no) ],
2666 [ case "$withval" in
2667   yes|auto)
2668     AC_MSG_RESULT($withval)
2669     samba_cv_WITH_VFS_AFSACL=yes
2670     ;;
2671   *)
2672     AC_MSG_RESULT(no)
2673     ;;
2674   esac ],
2675   AC_MSG_RESULT(no)
2676 )
2677
2678 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
2679    default_shared_modules="$default_shared_modules vfs_afsacl"
2680 fi
2681         
2682 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
2683     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
2684 fi
2685
2686 #################################################
2687 # check for the DFS clear-text auth system
2688 AC_MSG_CHECKING(whether to use DFS clear-text auth)
2689 AC_ARG_WITH(dfs,
2690 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
2691 [ case "$withval" in
2692   yes)
2693     AC_MSG_RESULT(yes)
2694     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
2695     ;;
2696   *)
2697     AC_MSG_RESULT(no)
2698     ;;
2699   esac ],
2700   AC_MSG_RESULT(no)
2701 )
2702
2703 ########################################################
2704 # Compile with LDAP support?
2705
2706 with_ldap_support=auto
2707 AC_MSG_CHECKING([for LDAP support])
2708
2709 AC_ARG_WITH(ldap,
2710 [  --with-ldap             LDAP support (default yes)],
2711 [ case "$withval" in
2712     yes|no)
2713         with_ldap_support=$withval
2714         ;;
2715   esac ])
2716
2717 AC_MSG_RESULT($with_ldap_support)
2718
2719 SMBLDAP=""
2720 AC_SUBST(SMBLDAP)
2721 SMBLDAPUTIL=""
2722 AC_SUBST(SMBLDAPUTIL)
2723 if test x"$with_ldap_support" != x"no"; then
2724
2725   ##################################################################
2726   # first test for ldap.h and lber.h
2727   # (ldap.h is required for this test)
2728   AC_CHECK_HEADERS(ldap.h lber.h)
2729   
2730   if test x"$ac_cv_header_ldap_h" != x"yes"; then
2731         if test x"$with_ldap_support" = x"yes"; then
2732          AC_MSG_ERROR(ldap.h is needed for LDAP support)
2733         else
2734          AC_MSG_WARN(ldap.h is needed for LDAP support)
2735         fi
2736         
2737         with_ldap_support=no
2738   fi
2739 fi
2740
2741 if test x"$with_ldap_support" != x"no"; then
2742   ac_save_LIBS=$LIBS
2743
2744   ##################################################################
2745   # we might need the lber lib on some systems. To avoid link errors
2746   # this test must be before the libldap test
2747   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
2748
2749   ########################################################
2750   # now see if we can find the ldap libs in standard paths
2751   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
2752
2753   AC_CHECK_FUNC_EXT(ldap_domain2hostlist,$LDAP_LIBS)
2754   
2755   ########################################################
2756   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
2757   # Check found in pam_ldap 145.
2758   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
2759
2760   LIBS="$LIBS $LDAP_LIBS"
2761   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
2762     AC_TRY_COMPILE([
2763         #include <lber.h>
2764         #include <ldap.h>], 
2765         [ldap_set_rebind_proc(0, 0, 0);], 
2766         [smb_ldap_cv_ldap_set_rebind_proc=3], 
2767         [smb_ldap_cv_ldap_set_rebind_proc=2]
2768     ) 
2769   ])
2770   
2771   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
2772
2773   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS) 
2774   
2775   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes" -a x"$ac_cv_func_ext_ldap_domain2hostlist" = x"yes"; then
2776     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
2777     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
2778     SMBLDAP="lib/smbldap.o"
2779     SMBLDAPUTIL="lib/smbldap_util.o"
2780     with_ldap_support=yes
2781     AC_MSG_CHECKING(whether LDAP support is used)
2782     AC_MSG_RESULT(yes)
2783   else
2784     if test x"$with_ldap_support" = x"yes"; then
2785         AC_MSG_ERROR(libldap is needed for LDAP support)
2786     else
2787         AC_MSG_WARN(libldap is needed for LDAP support)
2788     fi
2789     
2790     LDAP_LIBS=""
2791     with_ldap_support=no
2792   fi
2793   LIBS=$ac_save_LIBS
2794 fi
2795
2796
2797 #################################################
2798 # active directory support
2799
2800 with_ads_support=auto
2801 AC_MSG_CHECKING([for Active Directory and krb5 support])
2802
2803 AC_ARG_WITH(ads,
2804 [  --with-ads              Active Directory support (default auto)],
2805 [ case "$withval" in
2806     yes|no)
2807         with_ads_support="$withval"
2808         ;;
2809   esac ])
2810
2811 AC_MSG_RESULT($with_ads_support)
2812
2813 FOUND_KRB5=no
2814 KRB5_LIBS=""
2815
2816 if test x"$with_ldap_support" != x"yes"; then
2817     if test x"$with_ads_support" = x"yes"; then
2818         AC_MSG_ERROR(Active Directory Support requires LDAP support)
2819     elif test x"$with_ads_support" != x"no"; then
2820         AC_MSG_WARN(Active Directory Support requires LDAP support)
2821     fi
2822     with_ads_support=no
2823 fi
2824
2825 if test x"$with_ads_support" != x"no"; then
2826
2827   # Do no harm to the values of CFLAGS and LIBS while testing for
2828   # Kerberos support.
2829  
2830   if test x$FOUND_KRB5 = x"no"; then
2831     #################################################
2832     # check for location of Kerberos 5 install
2833     AC_MSG_CHECKING(for kerberos 5 install path)
2834     AC_ARG_WITH(krb5,
2835     [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
2836     [ case "$withval" in
2837       no)
2838         AC_MSG_RESULT(no krb5-path given)
2839         ;;
2840       yes)
2841         AC_MSG_RESULT(/usr)
2842         FOUND_KRB5=yes
2843         ;;
2844       *)
2845         AC_MSG_RESULT($withval)
2846         KRB5_CFLAGS="-I$withval/include"
2847         KRB5_CPPFLAGS="-I$withval/include"
2848         KRB5_LDFLAGS="-L$withval/lib"
2849         FOUND_KRB5=yes
2850         if test -x "$withval/bin/krb5-config"; then
2851                 KRB5CONFIG=$withval/bin/krb5-config
2852         fi
2853         ;;
2854       esac ],
2855       AC_MSG_RESULT(no krb5-path given)
2856     )
2857   fi
2858
2859   #################################################
2860   # check for krb5-config from recent MIT and Heimdal kerberos 5
2861   AC_PATH_PROG(KRB5CONFIG, krb5-config)
2862   AC_MSG_CHECKING(for working krb5-config)
2863   if test -x "$KRB5CONFIG"; then
2864     ac_save_CFLAGS=$CFLAGS
2865     CFLAGS="";export CFLAGS
2866     ac_save_LDFLAGS=$LDFLAGS
2867     LDFLAGS="";export LDFLAGS
2868     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
2869     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
2870     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`" 
2871     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
2872     CFLAGS=$ac_save_CFLAGS;export CFLAGS
2873     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
2874     FOUND_KRB5=yes
2875     AC_MSG_RESULT(yes)
2876   else
2877     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
2878   fi
2879  
2880   if test x$FOUND_KRB5 = x"no"; then
2881     #################################################
2882     # see if this box has the SuSE location for the heimdal krb implementation
2883     AC_MSG_CHECKING(for /usr/include/heimdal)
2884     if test -d /usr/include/heimdal; then
2885       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
2886           KRB5_CFLAGS="-I/usr/include/heimdal"
2887           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2888           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
2889           AC_MSG_RESULT(yes)
2890       else
2891           KRB5_CFLAGS="-I/usr/include/heimdal"
2892           KRB5_CPPFLAGS="-I/usr/include/heimdal"
2893           AC_MSG_RESULT(yes)
2894       fi
2895     else
2896       AC_MSG_RESULT(no)
2897     fi
2898   fi
2899
2900   if test x$FOUND_KRB5 = x"no"; then
2901     #################################################
2902     # see if this box has the RedHat location for kerberos
2903     AC_MSG_CHECKING(for /usr/kerberos)
2904     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
2905       KRB5_LDFLAGS="-L/usr/kerberos/lib"
2906       KRB5_CFLAGS="-I/usr/kerberos/include"
2907       KRB5_CPPFLAGS="-I/usr/kerberos/include"
2908       AC_MSG_RESULT(yes)
2909     else
2910       AC_MSG_RESULT(no)
2911     fi
2912   fi
2913
2914   ac_save_CFLAGS=$CFLAGS
2915   ac_save_CPPFLAGS=$CPPFLAGS
2916   ac_save_LDFLAGS=$LDFLAGS
2917
2918   CFLAGS="$KRB5_CFLAGS $CFLAGS"
2919   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
2920   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
2921
2922   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
2923
2924   # now check for krb5.h. Some systems have the libraries without the headers!
2925   # note that this check is done here to allow for different kerberos
2926   # include paths
2927   AC_CHECK_HEADERS(krb5.h)
2928
2929   if test x"$ac_cv_header_krb5_h" = x"no"; then
2930
2931     # Give a warning if AD support was not explicitly requested,
2932     # i.e with_ads_support = auto, otherwise die with an error.
2933
2934     if test x"$with_ads_support" = x"yes"; then
2935       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
2936     else
2937       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
2938     fi
2939
2940     # Turn off AD support and restore CFLAGS and LIBS variables
2941
2942     with_ads_support="no"
2943     
2944     CFLAGS=$ac_save_CFLAGS
2945     CPPFLAGS=$ac_save_CPPFLAGS
2946     LDFLAGS=$ac_save_LDFLAGS
2947   fi
2948 fi
2949
2950 # Now we have determined whether we really want ADS support
2951
2952 if test x"$with_ads_support" != x"no"; then
2953   ac_save_LIBS=$LIBS
2954
2955   # now check for gssapi headers.  This is also done here to allow for
2956   # different kerberos include paths
2957   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
2958
2959   ##################################################################
2960   # we might need the k5crypto and com_err libraries on some systems
2961   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
2962   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
2963
2964   # Heimdal checks.
2965   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
2966   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
2967   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
2968
2969   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
2970   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],
2971                                 AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
2972
2973   ########################################################
2974   # now see if we can find the krb5 libs in standard paths
2975   # or as specified above
2976   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
2977   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
2978
2979   ########################################################
2980   # now see if we can find the gssapi libs in standard paths
2981   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],
2982             AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available]))
2983
2984   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
2985   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
2986   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
2987   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
2988   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
2989   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS) 
2990   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
2991   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS) 
2992   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
2993   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS) 
2994   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
2995   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS) 
2996   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS) 
2997   AC_CHECK_FUNC_EXT(krb5_free_ktypes, $KRB5_LIBS)
2998   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
2999   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3000   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3001   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3002   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3003   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3004   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3005   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3006
3007   LIBS="$KRB5_LIBS $LIBS"
3008   
3009   AC_CACHE_CHECK([for krb5_encrypt_block type],
3010                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3011     AC_TRY_COMPILE([#include <krb5.h>],
3012       [krb5_encrypt_block block;],
3013       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3014       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3015
3016   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3017     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3018                [Whether the type krb5_encrypt_block exists])
3019   fi
3020
3021   AC_CACHE_CHECK([for addrtype in krb5_address],
3022                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3023     AC_TRY_COMPILE([#include <krb5.h>],
3024       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3025       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3026       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3027
3028   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3029     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3030                [Whether the krb5_address struct has a addrtype property])
3031   fi
3032
3033   AC_CACHE_CHECK([for addr_type in krb5_address],
3034                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3035     AC_TRY_COMPILE([#include <krb5.h>],
3036       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3037       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3038       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3039
3040   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3041     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3042               [Whether the krb5_address struct has a addr_type property])
3043   fi
3044
3045   AC_CACHE_CHECK([for enc_part2 in krb5_ticket], 
3046                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3047                  [AC_TRY_COMPILE([#include <krb5.h>],
3048     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3049     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3050
3051   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3052     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3053               [Whether the krb5_ticket struct has a enc_part2 property])
3054   fi
3055
3056   AC_CACHE_CHECK([for keyblock in krb5_creds],
3057                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3058     AC_TRY_COMPILE([#include <krb5.h>],
3059       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3060       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3061       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3062
3063   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3064     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3065               [Whether the krb5_creds struct has a keyblock property])
3066   fi
3067
3068   AC_CACHE_CHECK([for session in krb5_creds],
3069                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3070     AC_TRY_COMPILE([#include <krb5.h>],
3071       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3072       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3073       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3074
3075   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3076     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3077               [Whether the krb5_creds struct has a session property])
3078   fi
3079
3080   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3081                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3082     AC_TRY_COMPILE([#include <krb5.h>],
3083       [krb5_keyblock key; key.keyvalue.data = NULL;],
3084       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3085       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3086
3087   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3088     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3089               [Whether the krb5_keyblock struct has a keyvalue property])
3090   fi
3091
3092   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3093                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3094     AC_TRY_COMPILE([#include <krb5.h>],
3095       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3096       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3097       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3098   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3099                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3100     AC_TRY_COMPILE([#include <krb5.h>],
3101       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3102       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3103       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3104 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3105 # w.r.t. arcfour and windows, so we must not enable it here
3106   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3107           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3108     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3109               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3110   fi
3111
3112   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3113                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3114     AC_TRY_COMPILE([#include <krb5.h>],
3115       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3116       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3117       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3118
3119   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3120     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3121               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3122   fi
3123
3124   AC_CACHE_CHECK([for KV5M_KEYTAB],
3125                  samba_cv_HAVE_KV5M_KEYTAB,[
3126     AC_TRY_COMPILE([#include <krb5.h>],
3127       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3128       samba_cv_HAVE_KV5M_KEYTAB=yes,
3129       samba_cv_HAVE_KV5M_KEYTAB=no)])
3130
3131   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3132       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3133              [Whether the KV5M_KEYTAB option is available])
3134   fi
3135
3136   AC_CACHE_CHECK([for the krb5_princ_component macro],
3137                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3138     AC_TRY_LINK([#include <krb5.h>],
3139       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3140       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3141       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3142
3143   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3144     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3145                [Whether krb5_princ_component is available])
3146   fi
3147
3148   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3149                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3150     AC_TRY_COMPILE([#include <krb5.h>],
3151       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3152       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3153       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3154
3155   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3156     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3157               [Whether krb5_keytab_entry has key member])
3158   fi
3159
3160   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3161                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3162     AC_TRY_COMPILE([#include <krb5.h>],
3163       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3164       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3165       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3166
3167   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3168     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3169               [Whether krb5_keytab_entry has keyblock member])
3170   fi
3171
3172   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" = x"yes"; then
3173     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3174     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3175     AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
3176     AC_MSG_RESULT(yes)
3177   else
3178     if test x"$with_ads_support" = x"yes"; then
3179         AC_MSG_ERROR(libkrb5 is needed for Active Directory support)
3180     else
3181         AC_MSG_WARN(libkrb5 is needed for Active Directory support)
3182     fi
3183     KRB5_LIBS=""
3184     with_ads_support=no 
3185   fi
3186
3187   AC_CACHE_CHECK([for WRFILE: keytab support],
3188                 samba_cv_HAVE_WRFILE_KEYTAB,[
3189     AC_TRY_RUN([
3190 #include<krb5.h>
3191   main()
3192   {
3193     krb5_context context;
3194     krb5_keytab keytab;
3195
3196     krb5_init_context(&context);
3197     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3198   }],
3199   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3200   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3201
3202   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3203       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3204                [Whether the WRFILE:-keytab is supported])
3205   fi
3206
3207   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3208                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3209     AC_TRY_COMPILE([#include <krb5.h>],
3210     [
3211     krb5_context context;
3212     krb5_principal principal;
3213     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3214     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3215     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3216
3217   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3218     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3219               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3220   fi
3221
3222 LIBS="$ac_save_LIBS"
3223 fi
3224
3225 ########################################################
3226 # Compile experimental passdb backends?
3227 # (pdb_xml, pdb_mysql, pdb_pgsql)
3228 AC_MSG_CHECKING(whether to build experimental passdb libraries)
3229 AC_ARG_WITH(expsam,
3230 [  --with-expsam=<list>    Include experimental passdb libraries (default=no)]
3231 [                          Valid choices include (comma separated list): ]
3232 [                              xml, mysql & pgsql],
3233 [ expsam_pdb_modules=`echo "$withval" | sed 's/,/ /g'`
3234   if test "z$expsam_pdb_modules" = "zyes"; then
3235     expsam_pdb_modules="xml mysql pgsql"
3236   fi
3237   AC_MSG_RESULT($expsam_pdb_modules)
3238   for i in $expsam_pdb_modules
3239   do 
3240     case "$i" in
3241     xml|all|yes)
3242       ## pdb_xml
3243           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])])
3244       CFLAGS="$CFLAGS $XML_CFLAGS"
3245       ;;
3246     mysql|all|yes)
3247       ## pdb_mysql
3248           AM_PATH_MYSQL([default_shared_modules="$default_shared_modules pdb_mysql"],[AC_MSG_ERROR([Can't find MySQL libraries while MySQL support is requested])])
3249       CFLAGS="$CFLAGS $MYSQL_CFLAGS"
3250       ;;
3251      pgsql|all|yes)
3252       ## pdb_pgsql
3253       AM_PATH_PGSQL([default_shared_modules="$default_shared_modules pdb_pgsql"],[])
3254       CFLAGS="$CFLAGS $PGSQL_CFLAGS"
3255       ;;
3256     no)
3257       ;;
3258     *)
3259       echo "Unknown module name \"$i\"!  Exiting..."
3260       exit 1
3261       ;;
3262     esac
3263   done ],
3264   AC_MSG_RESULT(no)
3265 )
3266
3267 #################################################
3268 # check for automount support
3269 AC_MSG_CHECKING(whether to use automount)
3270 AC_ARG_WITH(automount,
3271 [  --with-automount        Include automount support (default=no)],
3272 [ case "$withval" in
3273   yes)
3274     AC_MSG_RESULT(yes)
3275     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
3276     ;;
3277   *)
3278     AC_MSG_RESULT(no)
3279     ;;
3280   esac ],
3281   AC_MSG_RESULT(no)
3282 )
3283
3284 #################################################
3285 # check for smbmount support
3286 AC_MSG_CHECKING(whether to use smbmount)
3287 AC_ARG_WITH(smbmount,
3288 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
3289 [ case "$withval" in
3290   yes)
3291         case "$host_os" in
3292         *linux*)
3293                 AC_MSG_RESULT(yes)
3294                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
3295                 EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbmount bin/smbmnt bin/smbumount"
3296                 ;;
3297         *)
3298                 AC_MSG_ERROR(not on a linux system!)
3299                 ;;
3300         esac
3301     ;;
3302   *)
3303     AC_MSG_RESULT(no)
3304     ;;
3305   esac ],
3306   AC_MSG_RESULT(no)
3307 )
3308
3309
3310
3311 #################################################
3312 # check for a PAM clear-text auth, accounts, password and session support
3313 with_pam_for_crypt=no
3314 AC_MSG_CHECKING(whether to use PAM)
3315 AC_ARG_WITH(pam,
3316 [  --with-pam              Include PAM support (default=no)],
3317 [ case "$withval" in
3318   yes)
3319     AC_MSG_RESULT(yes)
3320     if test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
3321        if test x"$ac_cv_header_security_pam_modules_h" = x"no"; then
3322           if test x"$ac_cv_header_security__pam_macros_h" = x"no"; then
3323              AC_MSG_ERROR(--with-pam specified but no PAM headers found)
3324           fi
3325        fi
3326     fi
3327     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
3328     AUTH_LIBS="$AUTH_LIBS -lpam"
3329     with_pam_for_crypt=yes
3330     ;;
3331   *)
3332     AC_MSG_RESULT(no)
3333     ;;
3334   esac ],
3335   AC_MSG_RESULT(no)
3336 )
3337
3338 # we can't build a pam module if we don't have pam.
3339 AC_CHECK_LIB(pam, pam_get_data, [AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])])
3340
3341 #################################################
3342 # check for pam_smbpass support
3343 AC_MSG_CHECKING(whether to use pam_smbpass)
3344 AC_ARG_WITH(pam_smbpass,
3345 [  --with-pam_smbpass      Build PAM module for authenticating against passdb backends (default=no)],
3346 [ case "$withval" in
3347   yes)
3348     AC_MSG_RESULT(yes)
3349
3350        # Conditions under which pam_smbpass should not be built.
3351
3352        if test x$PICFLAGS = x; then
3353           AC_MSG_ERROR([No support for PIC code])
3354        elif test x"$ac_cv_header_security_pam_appl_h" = x"no"; then
3355           AC_MSG_ERROR([No security/pam_appl.h found])
3356        elif test x$ac_cv_lib_pam_pam_get_data = xno; then
3357           AC_MSG_ERROR([No libpam found])
3358        else
3359           AUTH_LIBS="$AUTH_LIBS -lpam"
3360           SHLIB_PROGS="$SHLIB_PROGS bin/pam_smbpass.$SHLIBEXT"
3361        fi
3362     ;;
3363   *)
3364     AC_MSG_RESULT(no)
3365     ;;
3366   esac ],
3367   AC_MSG_RESULT(no)
3368 )
3369
3370
3371 ###############################################
3372 # test for where we get crypt() from
3373 AC_SEARCH_LIBS(crypt, [crypt],
3374   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
3375   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
3376
3377 ##
3378 ## moved after the check for -lcrypt in order to
3379 ## ensure that the necessary libraries are included
3380 ## check checking for truncated salt.  Wrapped by the
3381 ## $with_pam_for_crypt variable as above   --jerry
3382 ##
3383 if test $with_pam_for_crypt = no; then
3384 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
3385 crypt_LIBS="$LIBS"
3386 LIBS="$AUTH_LIBS $LIBS"
3387 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
3388         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
3389 LIBS="$crypt_LIBS"])
3390 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
3391         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
3392 fi
3393 fi
3394
3395
3396 ########################################################################################
3397 ##
3398 ## TESTS FOR SAM BACKENDS.  KEEP THESE GROUPED TOGETHER
3399 ##
3400 ########################################################################################
3401
3402 #################################################
3403 # check for a LDAP password database configuration backwards compatibility
3404 AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration)
3405 AC_ARG_WITH(ldapsam,
3406 [  --with-ldapsam          Include LDAP SAM 2.2 compatible configuration (default=no)],
3407 [ case "$withval" in
3408   yes)
3409     AC_MSG_RESULT(yes)
3410     AC_DEFINE(WITH_LDAP_SAMCONFIG,1,[Whether to include 2.2 compatible LDAP SAM configuration])
3411     ;;
3412   *)
3413     AC_MSG_RESULT(no)
3414     ;;
3415   esac ],
3416   AC_MSG_RESULT(no)
3417 )
3418
3419 ########################################################################################
3420 ##
3421 ## END OF TESTS FOR SAM BACKENDS.  
3422 ##
3423 ########################################################################################
3424
3425 #################################################
3426 # check for a NISPLUS_HOME support 
3427 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
3428 AC_ARG_WITH(nisplus-home,
3429 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
3430 [ case "$withval" in
3431   yes)
3432     AC_MSG_RESULT(yes)
3433     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
3434     ;;
3435   *)
3436     AC_MSG_RESULT(no)
3437     ;;
3438   esac ],
3439   AC_MSG_RESULT(no)
3440 )
3441
3442 #################################################
3443 # check for syslog logging
3444 AC_MSG_CHECKING(whether to use syslog logging)
3445 AC_ARG_WITH(syslog,
3446 [  --with-syslog           Include experimental SYSLOG support (default=no)],
3447 [ case "$withval" in
3448   yes)
3449     AC_MSG_RESULT(yes)
3450     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
3451     ;;
3452   *)
3453     AC_MSG_RESULT(no)
3454     ;;
3455   esac ],
3456   AC_MSG_RESULT(no)
3457 )
3458
3459 #################################################
3460 # check for a shared memory profiling support
3461 AC_MSG_CHECKING(whether to use profiling)
3462 AC_ARG_WITH(profiling-data,
3463 [  --with-profiling-data   Include gathering source code profile information (default=no)],
3464 [ case "$withval" in
3465   yes)
3466     AC_MSG_RESULT(yes)
3467     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
3468     ;;
3469   *)
3470     AC_MSG_RESULT(no)
3471     ;;
3472   esac ],
3473   AC_MSG_RESULT(no)
3474 )
3475
3476
3477 #################################################
3478 # check for experimental disk-quotas support
3479
3480 samba_cv_WITH_QUOTAS=auto
3481 samba_cv_TRY_QUOTAS=no
3482 samba_cv_RUN_QUOTA_TESTS=auto
3483 samba_cv_WITH_SYS_QUOTAS=auto
3484 samba_cv_TRY_SYS_QUOTAS=no
3485 samba_cv_SYSQUOTA_FOUND=no;
3486
3487 AC_MSG_CHECKING(whether to try disk-quotas support)
3488 AC_ARG_WITH(quotas,
3489 [  --with-quotas           Include disk-quota support (default=no)],
3490 [ case "$withval" in
3491   yes)
3492     AC_MSG_RESULT(yes)
3493     samba_cv_WITH_QUOTAS=yes
3494     samba_cv_TRY_QUOTAS=yes
3495     samba_cv_RUN_QUOTA_TESTS=yes
3496     #set sys quotas to auto in this case
3497     samba_cv_TRY_SYS_QUOTAS=auto
3498     ;;
3499   auto)
3500     AC_MSG_RESULT(auto)
3501     samba_cv_WITH_QUOTAS=auto
3502     samba_cv_TRY_QUOTAS=auto
3503     samba_cv_RUN_QUOTA_TESTS=auto
3504     #set sys quotas to auto in this case
3505     samba_cv_TRY_SYS_QUOTAS=auto
3506     ;;
3507   no)
3508     AC_MSG_RESULT(no)
3509     samba_cv_WITH_QUOTAS=no
3510     samba_cv_TRY_QUOTAS=no
3511     samba_cv_RUN_QUOTA_TESTS=no
3512     ;;
3513   *)
3514     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
3515     ;;
3516   esac ],
3517   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
3518 )
3519
3520 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
3521 AC_ARG_WITH(sys-quotas,
3522 [  --with-sys-quotas       Include lib/sysquotas.c support (default=auto)],
3523 [ case "$withval" in
3524   yes)
3525     AC_MSG_RESULT(yes)
3526     samba_cv_WITH_SYS_QUOTAS=yes
3527     samba_cv_TRY_SYS_QUOTAS=yes
3528     samba_cv_RUN_QUOTA_TESTS=yes
3529     ;;
3530   auto)
3531     AC_MSG_RESULT(auto)
3532     samba_cv_WITH_SYS_QUOTAS=auto
3533     samba_cv_TRY_SYS_QUOTAS=auto
3534     samba_cv_RUN_QUOTA_TESTS=auto
3535     ;;
3536   no)
3537     AC_MSG_RESULT(no)
3538     samba_cv_WITH_SYS_QUOTAS=no
3539     samba_cv_TRY_SYS_QUOTAS=no
3540     ;;
3541   *)
3542     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
3543     ;;
3544   esac ],
3545   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
3546 )
3547
3548 if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
3549 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
3550   case "$host_os" in
3551         *linux*)
3552             AC_MSG_RESULT(yes)
3553             samba_cv_TRY_SYS_QUOTAS=yes
3554             samba_cv_RUN_QUOTA_TESTS=yes
3555             samba_cv_SYSQUOTA_FOUND=yes
3556             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
3557             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
3558             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
3559             samba_cv_found_xfs_header=yes
3560             ;;
3561         *)
3562             AC_MSG_RESULT(no)
3563             samba_cv_TRY_SYS_QUOTAS=no
3564             ;;
3565   esac
3566 fi
3567
3568 #############################################
3569 # only check for quota stuff if --with-quotas
3570 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
3571
3572 # some broken header files need this
3573 AC_CHECK_HEADER(asm/types.h,[
3574             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
3575             AC_ADD_INCLUDE(<asm/types.h>)
3576             ])
3577
3578 # For quotas on Veritas VxFS filesystems
3579 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
3580
3581 # For sys/quota.h and linux/quota.h
3582 AC_CHECK_HEADERS(sys/quota.h)
3583
3584 if test x"$samba_cv_found_xfs_header" != x"yes"; then
3585 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
3586 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
3587 AC_TRY_COMPILE([
3588 #include "confdefs.h"
3589 #ifdef HAVE_SYS_TYPES_H
3590 #include <sys/types.h>
3591 #endif
3592 #ifdef HAVE_ASM_TYPES_H
3593 #include <asm/types.h>
3594 #endif
3595 #include <sys/quota.h>
3596 ],[int i = Q_XGETQUOTA;],
3597 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
3598 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
3599         samba_cv_found_xfs_header=yes
3600 fi
3601 fi
3602
3603 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX 
3604 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
3605 AC_TRY_COMPILE([
3606 #include "confdefs.h"
3607 #ifdef HAVE_SYS_QUOTA_H
3608 #include <sys/quota.h>
3609 #endif
3610 ],[
3611 struct dqblk D;
3612 D.dqb_fsoftlimit = 0;],
3613 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
3614 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
3615         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
3616 fi
3617
3618 ##################
3619 # look for a working quota system
3620
3621 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3622 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
3623 AC_TRY_RUN_STRICT([
3624 #define HAVE_QUOTACTL_4A 1
3625 #define AUTOCONF_TEST 1
3626 #include "confdefs.h"
3627 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3628            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
3629 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
3630     samba_cv_SYSQUOTA_FOUND=yes;
3631     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
3632     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
3633 fi
3634 fi
3635
3636 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3637 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
3638 AC_TRY_RUN_STRICT([
3639 #define HAVE_QUOTACTL_4B 1
3640 #define AUTOCONF_TEST 1
3641 #include "confdefs.h"
3642 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3643            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
3644 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
3645     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
3646     samba_cv_SYSQUOTA_FOUND=yes;
3647     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
3648     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
3649 fi
3650 fi
3651
3652 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3653 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
3654 AC_TRY_RUN_STRICT([
3655 #define HAVE_QUOTACTL_3 1
3656 #define AUTOCONF_TEST 1
3657 #include "confdefs.h"
3658 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3659            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
3660 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
3661     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
3662     samba_cv_SYSQUOTA_FOUND=yes;
3663     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
3664     samba_cv_sysquotas_file="lib/sysquotas_3.c"
3665 fi
3666 fi
3667
3668 #################################################
3669 # check for mntent.h and struct mntent
3670 AC_CHECK_HEADERS(mntent.h)
3671 #################################################
3672 # check for setmntent,getmntent,endmntent
3673 AC_CHECK_FUNCS(setmntent getmntent endmntent)
3674
3675 #################################################
3676 # check for devnm.h and struct mntent
3677 AC_CHECK_HEADERS(devnm.h)
3678 #################################################
3679 # check for devnm
3680 AC_CHECK_FUNCS(devnm)
3681
3682 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
3683     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
3684         # if --with-sys-quotas=yes then build it 
3685         # you have can use the get/set quota command smb.conf
3686         # options then
3687         samba_cv_SYSQUOTA_FOUND=auto
3688     fi
3689     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
3690         # if --with-sys-quotas=yes then build it 
3691         # you have can use the get/set quota command smb.conf
3692         # options then
3693         samba_cv_TRY_SYS_QUOTAS=auto
3694     fi
3695 fi
3696
3697 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
3698 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
3699 SAVE_CPPFLAGS="$CPPFLAGS"
3700 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/nsswitch"
3701 AC_TRY_COMPILE([
3702 #include "confdefs.h"
3703 #define NO_PROTO_H 1
3704 #define NO_CONFIG_H 1
3705 #define HAVE_SYS_QUOTAS 1
3706 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
3707 #include "${srcdir-.}/lib/sysquotas.c"
3708 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
3709 CPPFLAGS="$SAVE_CPPFLAGS"
3710 ])
3711 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
3712 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
3713     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then 
3714         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
3715         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
3716         samba_cv_WE_USE_SYS_QUOTAS=yes
3717         AC_MSG_RESULT(yes)
3718     else
3719         AC_MSG_RESULT(no)
3720     fi
3721 fi
3722 fi
3723
3724 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
3725 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
3726 SAVE_CPPFLAGS="$CPPFLAGS"
3727 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/nsswitch"
3728 AC_TRY_COMPILE([
3729 #include "confdefs.h"
3730 #define NO_PROTO_H 1
3731 #define NO_CONFIG_H 1
3732 #define HAVE_SYS_QUOTAS 1
3733 #define HAVE_XFS_QUOTAS 1
3734 #include "${srcdir-.}/lib/sysquotas_xfs.c"
3735 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
3736 CPPFLAGS="$SAVE_CPPFLAGS"
3737 ])
3738 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
3739     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
3740         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
3741     fi
3742 fi
3743 fi
3744
3745 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
3746 SAVE_CPPFLAGS="$CPPFLAGS"
3747 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I. -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt -I${srcdir-.}/nsswitch"
3748 AC_TRY_COMPILE([
3749 #include "confdefs.h"
3750 #define NO_PROTO_H 1
3751 #define NO_CONFIG_H 1
3752 #include "${srcdir-.}/smbd/quotas.c"
3753 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
3754 CPPFLAGS="$SAVE_CPPFLAGS"
3755 ])
3756 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
3757 AC_MSG_CHECKING(whether to use the old quota support)
3758     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
3759       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
3760         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
3761         AC_MSG_RESULT(yes)
3762       else
3763         AC_MSG_RESULT(no)
3764       fi
3765     else
3766       AC_MSG_RESULT(no)
3767     fi
3768 fi
3769
3770 ####################
3771 # End of quota check samba_cv_RUN_QUOTA_TESTS
3772 fi
3773
3774 #################################################
3775 # check for experimental utmp accounting
3776
3777 AC_MSG_CHECKING(whether to support utmp accounting)
3778 WITH_UTMP=yes
3779 AC_ARG_WITH(utmp,
3780 [  --with-utmp             Include utmp accounting (default, if supported by OS)],
3781 [ case "$withval" in
3782   no)
3783                 WITH_UTMP=no
3784                 ;;
3785   *)
3786                 WITH_UTMP=yes
3787                 ;;
3788   esac ],
3789 )
3790
3791 # utmp requires utmp.h
3792 # Note similar check earlier, when checking utmp details.
3793
3794 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
3795         utmp_no_reason=", no utmp.h on $host_os"
3796         WITH_UTMP=no
3797 fi
3798
3799 # Display test results
3800
3801 if test x"$WITH_UTMP" = x"yes"; then
3802         AC_MSG_RESULT(yes)
3803         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
3804 else
3805         AC_MSG_RESULT(no$utmp_no_reason)
3806 fi
3807
3808 #################################################
3809 # should we build libsmbclient?
3810
3811 INSTALLCLIENTCMD_SH=:
3812 INSTALLCLIENTCMD_A=:
3813 INSTALLCLIENT=
3814 LIBSMBCLIENT_SHARED=
3815 LIBSMBCLIENT=
3816 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
3817 AC_ARG_WITH(libsmbclient,
3818 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes if shared libs supported)],
3819 [ case "$withval" in
3820   no) 
3821      AC_MSG_RESULT(no)
3822      ;;
3823   *)
3824      if test $BLDSHARED = true; then
3825         INSTALLCLIENTCMD_SH="\$(INSTALLCMD)"
3826         ## build the static version of libsmbclient as well
3827         INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3828         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
3829         LIBSMBCLIENT=libsmbclient
3830         AC_MSG_RESULT(yes)
3831      else
3832         enable_static=yes
3833         AC_MSG_RESULT(no shared library support -- will supply static library)
3834      fi
3835      if test $enable_static = yes; then
3836         INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3837         LIBSMBCLIENT=libsmbclient
3838      fi
3839      INSTALLCLIENT=installclientlib
3840      ;;
3841   esac ],
3842 [
3843 # if unspecified, default is to built it iff possible.
3844   if test $BLDSHARED = true; then
3845      INSTALLCLIENTCMD_SH="\$(INSTALLCMD)"
3846      LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
3847      LIBSMBCLIENT=libsmbclient
3848      AC_MSG_RESULT(yes)
3849    else
3850      enable_static=yes
3851      AC_MSG_RESULT(no shared library support -- will supply static library)
3852    fi
3853    if test $enable_static = yes; then
3854      INSTALLCLIENTCMD_A="\$(INSTALLCMD)"
3855      LIBSMBCLIENT=libsmbclient
3856   fi]
3857   INSTALLCLIENT=installclientlib
3858 )
3859
3860
3861 #################################################
3862 # these tests are taken from the GNU fileutils package
3863 AC_CHECKING(how to get filesystem space usage)
3864 space=no
3865
3866 # Test for statvfs64.
3867 if test $space = no; then
3868   # SVR4
3869   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
3870   [AC_TRY_RUN([
3871 #if defined(HAVE_UNISTD_H)
3872 #include <unistd.h>
3873 #endif
3874 #include <sys/types.h>
3875 #include <sys/statvfs.h>
3876   main ()
3877   {
3878     struct statvfs64 fsd;
3879     exit (statvfs64 (".", &fsd));
3880   }],
3881   fu_cv_sys_stat_statvfs64=yes,
3882   fu_cv_sys_stat_statvfs64=no,
3883   fu_cv_sys_stat_statvfs64=cross)])
3884   if test $fu_cv_sys_stat_statvfs64 = yes; then
3885     space=yes
3886     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
3887   fi
3888 fi
3889
3890 # Perform only the link test since it seems there are no variants of the
3891 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
3892 # because that got a false positive on SCO OSR5.  Adding the declaration
3893 # of a `struct statvfs' causes this test to fail (as it should) on such
3894 # systems.  That system is reported to work fine with STAT_STATFS4 which
3895 # is what it gets when this test fails.
3896 if test $space = no; then
3897   # SVR4
3898   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
3899                  [AC_TRY_LINK([#include <sys/types.h>
3900 #include <sys/statvfs.h>],
3901                               [struct statvfs fsd; statvfs (0, &fsd);],
3902                               fu_cv_sys_stat_statvfs=yes,
3903                               fu_cv_sys_stat_statvfs=no)])
3904   if test $fu_cv_sys_stat_statvfs = yes; then
3905     space=yes
3906     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
3907   fi
3908 fi
3909
3910 if test $space = no; then
3911   # DEC Alpha running OSF/1
3912   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
3913   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
3914   [AC_TRY_RUN([
3915 #include <sys/param.h>
3916 #include <sys/types.h>
3917 #include <sys/mount.h>
3918   main ()
3919   {
3920     struct statfs fsd;
3921     fsd.f_fsize = 0;
3922     exit (statfs (".", &fsd, sizeof (struct statfs)));
3923   }],
3924   fu_cv_sys_stat_statfs3_osf1=yes,
3925   fu_cv_sys_stat_statfs3_osf1=no,
3926   fu_cv_sys_stat_statfs3_osf1=no)])
3927   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
3928   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
3929     space=yes
3930     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
3931   fi
3932 fi
3933
3934 if test $space = no; then
3935 # AIX
3936   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
3937 member (AIX, 4.3BSD)])
3938   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
3939   [AC_TRY_RUN([
3940 #ifdef HAVE_SYS_PARAM_H
3941 #include <sys/param.h>
3942 #endif
3943 #ifdef HAVE_SYS_MOUNT_H
3944 #include <sys/mount.h>
3945 #endif
3946 #ifdef HAVE_SYS_VFS_H
3947 #include <sys/vfs.h>
3948 #endif
3949   main ()
3950   {
3951   struct statfs fsd;
3952   fsd.f_bsize = 0;
3953   exit (statfs (".", &fsd));
3954   }],
3955   fu_cv_sys_stat_statfs2_bsize=yes,
3956   fu_cv_sys_stat_statfs2_bsize=no,
3957   fu_cv_sys_stat_statfs2_bsize=no)])
3958   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
3959   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
3960     space=yes
3961     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
3962   fi
3963 fi
3964
3965 if test $space = no; then
3966 # SVR3
3967   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
3968   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
3969   [AC_TRY_RUN([#include <sys/types.h>
3970 #include <sys/statfs.h>
3971   main ()
3972   {
3973   struct statfs fsd;
3974   exit (statfs (".", &fsd, sizeof fsd, 0));
3975   }],
3976     fu_cv_sys_stat_statfs4=yes,
3977     fu_cv_sys_stat_statfs4=no,
3978     fu_cv_sys_stat_statfs4=no)])
3979   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
3980   if test $fu_cv_sys_stat_statfs4 = yes; then
3981     space=yes
3982     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
3983   fi
3984 fi
3985
3986 if test $space = no; then
3987 # 4.4BSD and NetBSD
3988   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
3989 member (4.4BSD and NetBSD)])
3990   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
3991   [AC_TRY_RUN([#include <sys/types.h>
3992 #ifdef HAVE_SYS_PARAM_H
3993 #include <sys/param.h>
3994 #endif
3995 #ifdef HAVE_SYS_MOUNT_H
3996 #include <sys/mount.h>
3997 #endif
3998   main ()
3999   {
4000   struct statfs fsd;
4001   fsd.f_fsize = 0;
4002   exit (statfs (".", &fsd));
4003   }],
4004   fu_cv_sys_stat_statfs2_fsize=yes,
4005   fu_cv_sys_stat_statfs2_fsize=no,
4006   fu_cv_sys_stat_statfs2_fsize=no)])
4007   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4008   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4009     space=yes
4010         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4011   fi
4012 fi
4013
4014 if test $space = no; then
4015   # Ultrix
4016   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
4017   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
4018   [AC_TRY_RUN([#include <sys/types.h>
4019 #ifdef HAVE_SYS_PARAM_H
4020 #include <sys/param.h>
4021 #endif
4022 #ifdef HAVE_SYS_MOUNT_H
4023 #include <sys/mount.h>
4024 #endif
4025 #ifdef HAVE_SYS_FS_TYPES_H
4026 #include <sys/fs_types.h>
4027 #endif
4028   main ()
4029   {
4030   struct fs_data fsd;
4031   /* Ultrix's statfs returns 1 for success,
4032      0 for not mounted, -1 for failure.  */
4033   exit (statfs (".", &fsd) != 1);
4034   }],
4035   fu_cv_sys_stat_fs_data=yes,
4036   fu_cv_sys_stat_fs_data=no,
4037   fu_cv_sys_stat_fs_data=no)])
4038   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
4039   if test $fu_cv_sys_stat_fs_data = yes; then
4040     space=yes
4041     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
4042   fi
4043 fi
4044
4045 #
4046 # As a gating factor for large file support, in order to
4047 # use <4GB files we must have the following minimal support
4048 # available.
4049 # long long, and a 64 bit off_t or off64_t.
4050 # If we don't have all of these then disable large
4051 # file support.
4052 #
4053 AC_MSG_CHECKING([if large file support can be enabled])
4054 AC_TRY_COMPILE([
4055 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
4056 #include <sys/types.h>
4057 #else
4058 __COMPILE_ERROR_
4059 #endif
4060 ],
4061 [int i],
4062 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
4063 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
4064         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
4065 fi
4066 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
4067
4068 AC_ARG_WITH(spinlocks, 
4069 [  --with-spinlocks        Use spin locks instead of fcntl locks (default=no) ])
4070 if test "x$with_spinlocks" = "xyes"; then
4071     AC_DEFINE(USE_SPINLOCKS,1,[Whether to use spin locks instead of fcntl locks])
4072
4073     case "$host_cpu" in
4074         sparc)
4075             AC_DEFINE(SPARC_SPINLOCKS,1,[Whether to use sparc spinlocks])
4076             ;;
4077
4078         i386|i486|i586|i686)
4079             AC_DEFINE(INTEL_SPINLOCKS,1,[Whether to use intel spinlocks])
4080             ;;
4081
4082         mips)
4083             AC_DEFINE(MIPS_SPINLOCKS,1,[Whether to use mips spinlocks])
4084             ;;
4085
4086         powerpc)
4087             AC_DEFINE(POWERPC_SPINLOCKS,1,[Whether to use powerpc spinlocks])
4088             ;;
4089     esac
4090 fi
4091
4092 #################################################
4093 # check for ACL support
4094
4095 AC_MSG_CHECKING(whether to support ACLs)
4096 AC_ARG_WITH(acl-support,
4097 [  --with-acl-support      Include ACL support (default=no)],
4098 [ case "$withval" in
4099   yes)
4100
4101         case "$host_os" in
4102         *sysv5*)
4103                 AC_MSG_RESULT(Using UnixWare ACLs)
4104                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
4105                 ;;
4106         *solaris*)
4107                 AC_MSG_RESULT(Using solaris ACLs)
4108                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
4109                 ;;
4110         *hpux*)
4111                 AC_MSG_RESULT(Using HPUX ACLs)
4112                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
4113                 ;;
4114         *irix*)
4115                 AC_MSG_RESULT(Using IRIX ACLs)
4116                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
4117                 ;;
4118         *aix*)
4119                 AC_MSG_RESULT(Using AIX ACLs)
4120                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
4121                 ;;
4122         *osf*)
4123                 AC_MSG_RESULT(Using Tru64 ACLs)
4124                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
4125                 ACL_LIBS="$ACL_LIBS -lpacl"
4126                 ;;
4127         *freebsd[[5-9]]*)
4128                 AC_MSG_RESULT(Using FreeBSD posix ACLs)
4129                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether FreeBSD POSIX ACLs are available])
4130                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
4131                 ;;
4132         *linux*)
4133                 AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
4134                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
4135                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
4136                 acl_LIBS=$LIBS
4137                 LIBS="$LIBS -lacl"
4138                 AC_TRY_LINK([#include <sys/types.h>
4139 #include <sys/acl.h>],
4140 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
4141 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)
4142                 LIBS=$acl_LIBS])
4143                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
4144                                 AC_MSG_RESULT(Using posix ACLs)
4145                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
4146                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
4147                                 acl_LIBS=$LIBS
4148                                 LIBS="$LIBS -lacl"
4149                                 AC_TRY_LINK([#include <sys/types.h>
4150 #include <sys/acl.h>],
4151 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
4152 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)
4153                                 LIBS=$acl_LIBS])
4154                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
4155                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
4156                                 fi
4157                         fi
4158             ;;
4159          *)
4160                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
4161                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
4162                 acl_LIBS=$LIBS
4163                 LIBS="$LIBS -lacl"
4164                 AC_TRY_LINK([#include <sys/types.h>
4165 #include <sys/acl.h>],
4166 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
4167 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)
4168                 LIBS=$acl_LIBS])
4169                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
4170                                 AC_MSG_RESULT(Using posix ACLs)
4171                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
4172                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
4173                                 acl_LIBS=$LIBS
4174                                 LIBS="$LIBS -lacl"
4175                                 AC_TRY_LINK([#include <sys/types.h>
4176 #include <sys/acl.h>],
4177 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
4178 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)
4179                                 LIBS=$acl_LIBS])
4180                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
4181                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
4182                                 fi
4183                         fi
4184             ;;
4185         esac
4186         ;;
4187   *)
4188     AC_MSG_RESULT(no)
4189     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
4190     ;;
4191   esac ],
4192   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
4193   AC_MSG_RESULT(no)
4194 )
4195
4196 #################################################
4197 # check for AIO support
4198
4199 AC_MSG_CHECKING(whether to support asynchronous io)
4200 AC_ARG_WITH(aio-support,
4201 [  --with-aio-support      Include asynchronous io support (default=no)],
4202 [ case "$withval" in
4203   yes)
4204
4205         AC_MSG_RESULT(yes)
4206         case "$host_os" in
4207         *)
4208                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$ACL_LIBS -lrt"])
4209                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
4210                 aio_LIBS=$LIBS
4211                 LIBS="$LIBS -lrt"
4212                 AC_TRY_LINK([#include <sys/types.h>
4213 #include <aio.h>],
4214 [ struct aiocb a; return aio_read(&a);],
4215 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
4216                 LIBS=$aio_LIBS])
4217                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
4218                 aio_LIBS=$LIBS
4219                 LIBS="$LIBS -lrt"
4220                 AC_TRY_LINK([#include <sys/types.h>
4221 #include <aio.h>],
4222 [ struct aiocb64 a; return aio_read64(&a);],
4223 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
4224                 LIBS=$aio_LIBS])
4225                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
4226                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
4227                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
4228                         LIBS="$LIBS -lrt"
4229                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
4230                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
4231                         LIBS="$LIBS -lrt"
4232                 fi
4233
4234                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
4235                         AC_MSG_CHECKING(for aio_read)
4236                         AC_LINK_IFELSE([#include <aio.h>
4237 int main() { struct aiocb a; return aio_read(&a); }],
4238 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
4239 [AC_MSG_RESULT(no)])
4240
4241                         AC_MSG_CHECKING(for aio_write)
4242                         AC_LINK_IFELSE([#include <aio.h>
4243 int main() { struct aiocb a; return aio_write(&a); }],
4244 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
4245 [AC_MSG_RESULT(no)])
4246
4247                         AC_MSG_CHECKING(for aio_fsync)
4248                         AC_LINK_IFELSE([#include <aio.h>
4249 int main() { struct aiocb a; return aio_fsync(1, &a); }],
4250 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
4251 [AC_MSG_RESULT(no)])
4252
4253                         AC_MSG_CHECKING(for aio_return)
4254                         AC_LINK_IFELSE([#include <aio.h>
4255 int main() { struct aiocb a; return aio_return(&a); }],
4256 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
4257 [AC_MSG_RESULT(no)])
4258
4259                         AC_MSG_CHECKING(for aio_error)
4260                         AC_LINK_IFELSE([#include <aio.h>
4261 int main() { struct aiocb a; return aio_error(&a); }],
4262 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
4263 [AC_MSG_RESULT(no)])
4264
4265                         AC_MSG_CHECKING(for aio_cancel)
4266                         AC_LINK_IFELSE([#include <aio.h>
4267 int main() { struct aiocb a; return aio_cancel(1, &a); }],
4268 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
4269 [AC_MSG_RESULT(no)])
4270
4271                         AC_MSG_CHECKING(for aio_suspend)
4272                         AC_LINK_IFELSE([#include <aio.h>
4273 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
4274 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
4275 [AC_MSG_RESULT(no)])
4276                 fi
4277
4278                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
4279                         AC_MSG_CHECKING(for aio_read64)
4280                         AC_LINK_IFELSE([#include <aio.h>
4281 int main() { struct aiocb a; return aio_read64(&a); }],
4282 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
4283 [AC_MSG_RESULT(no)])
4284
4285                         AC_MSG_CHECKING(for aio_write64)
4286                         AC_LINK_IFELSE([#include <aio.h>
4287 int main() { struct aiocb a; return aio_write64(&a); }],
4288 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
4289 [AC_MSG_RESULT(no)])
4290
4291                         AC_MSG_CHECKING(for aio_fsync64)
4292                         AC_LINK_IFELSE([#include <aio.h>
4293 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
4294 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
4295 [AC_MSG_RESULT(no)])
4296
4297                         AC_MSG_CHECKING(for aio_return64)
4298                         AC_LINK_IFELSE([#include <aio.h>
4299 int main() { struct aiocb a; return aio_return64(&a); }],
4300 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
4301 [AC_MSG_RESULT(no)])
4302
4303                         AC_MSG_CHECKING(for aio_error64)
4304                         AC_LINK_IFELSE([#include <aio.h>
4305 int main() { struct aiocb a; return aio_error64(&a); }],
4306 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
4307 [AC_MSG_RESULT(no)])
4308
4309                         AC_MSG_CHECKING(for aio_cancel64)
4310                         AC_LINK_IFELSE([#include <aio.h>
4311 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
4312 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
4313 [AC_MSG_RESULT(no)])
4314
4315                         AC_MSG_CHECKING(for aio_suspend64)
4316                         AC_LINK_IFELSE([#include <aio.h>
4317 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
4318 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
4319 [AC_MSG_RESULT(no)])
4320                 fi
4321             ;;
4322         esac
4323         ;;
4324   *)
4325     AC_MSG_RESULT(no)
4326     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
4327     ;;
4328   esac ],
4329   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
4330   AC_MSG_RESULT(no)
4331 )
4332
4333 #################################################
4334 # check for sendfile support
4335
4336 with_sendfile_support=yes
4337 AC_MSG_CHECKING(whether to check to support sendfile)
4338 AC_ARG_WITH(sendfile-support,
4339 [  --with-sendfile-support Check for sendfile support (default=yes)],
4340 [ case "$withval" in
4341   yes)
4342
4343         AC_MSG_RESULT(yes);
4344
4345         case "$host_os" in
4346         *linux*)
4347                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
4348                 AC_TRY_LINK([#include <sys/sendfile.h>],
4349 [\
4350 int tofd, fromfd;
4351 off64_t offset;
4352 size_t total;
4353 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
4354 ],
4355 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
4356
4357                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
4358                 AC_TRY_LINK([#include <sys/sendfile.h>],
4359 [\
4360 int tofd, fromfd;
4361 off_t offset;
4362 size_t total;
4363 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
4364 ],
4365 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4366
4367 # Try and cope with broken Linux sendfile....
4368                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
4369                 AC_TRY_LINK([\
4370 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
4371 #undef _FILE_OFFSET_BITS
4372 #endif
4373 #include <sys/sendfile.h>],
4374 [\
4375 int tofd, fromfd;
4376 off_t offset;
4377 size_t total;
4378 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
4379 ],
4380 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
4381
4382         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
4383                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
4384                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
4385                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
4386         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4387                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
4388                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
4389                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
4390         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
4391                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
4392                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
4393         else
4394                 AC_MSG_RESULT(no);
4395         fi
4396
4397         ;;
4398         *freebsd* | *dragonfly* )
4399                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
4400                 AC_TRY_LINK([\
4401 #include <sys/types.h>
4402 #include <unistd.h>
4403 #include <sys/socket.h>
4404 #include <sys/uio.h>],
4405 [\
4406         int fromfd, tofd, ret, total=0;
4407         off_t offset, nwritten;
4408         struct sf_hdtr hdr;
4409         struct iovec hdtrl;
4410         hdr.headers = &hdtrl;
4411         hdr.hdr_cnt = 1;
4412         hdr.trailers = NULL;
4413         hdr.trl_cnt = 0;
4414         hdtrl.iov_base = NULL;
4415         hdtrl.iov_len = 0;
4416         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
4417 ],
4418 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4419
4420         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4421                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
4422                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
4423                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4424         else
4425                 AC_MSG_RESULT(no);
4426         fi
4427         ;;
4428
4429         *hpux*)
4430                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
4431                 AC_TRY_LINK([\
4432 #include <sys/socket.h>
4433 #include <sys/uio.h>],
4434 [\
4435         int fromfd, tofd;
4436         size_t total=0;
4437         struct iovec hdtrl[2];
4438         ssize_t nwritten;
4439         off64_t offset;
4440
4441         hdtrl[0].iov_base = 0;
4442         hdtrl[0].iov_len = 0;
4443
4444         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
4445 ],
4446 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
4447         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
4448                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
4449                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
4450                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4451         else
4452                 AC_MSG_RESULT(no);
4453         fi
4454
4455                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
4456                 AC_TRY_LINK([\
4457 #include <sys/socket.h>
4458 #include <sys/uio.h>],
4459 [\
4460         int fromfd, tofd;
4461         size_t total=0;
4462         struct iovec hdtrl[2];
4463         ssize_t nwritten;
4464         off_t offset;
4465
4466         hdtrl[0].iov_base = 0;
4467         hdtrl[0].iov_len = 0;
4468
4469         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
4470 ],
4471 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4472         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4473                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
4474                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
4475                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4476         else
4477                 AC_MSG_RESULT(no);
4478         fi
4479         ;;
4480
4481         *solaris*)
4482                 AC_CHECK_LIB(sendfile,sendfilev)
4483                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
4484                 AC_TRY_LINK([\
4485 #include <sys/sendfile.h>],
4486 [\
4487         int sfvcnt;
4488         size_t xferred;
4489         struct sendfilevec vec[2];
4490         ssize_t nwritten;
4491         int tofd;
4492
4493         sfvcnt = 2;
4494
4495         vec[0].sfv_fd = SFV_FD_SELF;
4496         vec[0].sfv_flag = 0;
4497         vec[0].sfv_off = 0;
4498         vec[0].sfv_len = 0;
4499
4500         vec[1].sfv_fd = 0;
4501         vec[1].sfv_flag = 0;
4502         vec[1].sfv_off = 0;
4503         vec[1].sfv_len = 0;
4504         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
4505 ],
4506 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
4507
4508         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
4509                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
4510                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
4511                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
4512         else
4513                 AC_MSG_RESULT(no);
4514         fi
4515
4516                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
4517                 AC_TRY_LINK([\
4518 #include <sys/sendfile.h>],
4519 [\
4520         int sfvcnt;
4521         size_t xferred;
4522         struct sendfilevec vec[2];
4523         ssize_t nwritten;
4524         int tofd;
4525
4526         sfvcnt = 2;
4527
4528         vec[0].sfv_fd = SFV_FD_SELF;
4529         vec[0].sfv_flag = 0;
4530         vec[0].sfv_off = 0;
4531         vec[0].sfv_len = 0;
4532
4533         vec[1].sfv_fd = 0;
4534         vec[1].sfv_flag = 0;
4535         vec[1].sfv_off = 0;
4536         vec[1].sfv_len = 0;
4537         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
4538 ],
4539 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
4540
4541         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
4542                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
4543                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
4544                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
4545         else
4546                 AC_MSG_RESULT(no);
4547         fi
4548         ;;
4549         *aix*)
4550                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
4551                 AC_TRY_LINK([\
4552 #include <sys/socket.h>],
4553 [\
4554         int fromfd, tofd;
4555         size_t total=0;
4556         struct sf_parms hdtrl;
4557         ssize_t nwritten;
4558         off64_t offset;
4559
4560         hdtrl.header_data = 0;
4561         hdtrl.header_length = 0;
4562         hdtrl.file_descriptor = fromfd;
4563         hdtrl.file_offset = 0;
4564         hdtrl.file_bytes = 0;
4565         hdtrl.trailer_data = 0;
4566         hdtrl.trailer_length = 0;
4567
4568         nwritten = send_file(&tofd, &hdtrl, 0);
4569 ],
4570 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
4571         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
4572                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
4573                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
4574                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
4575         else
4576                 AC_MSG_RESULT(no);
4577         fi
4578         ;;
4579         *)
4580         ;;
4581         esac
4582         ;;
4583   *)
4584     AC_MSG_RESULT(no)
4585     ;;
4586   esac ],
4587   AC_MSG_RESULT(yes)
4588 )
4589
4590
4591 #################################################
4592 # Check whether winbind is supported on this platform.  If so we need to
4593 # build and install client programs, sbin programs and shared libraries
4594
4595 AC_MSG_CHECKING(whether to build winbind)
4596
4597 # Initially, the value of $host_os decides whether winbind is supported
4598
4599 HAVE_WINBIND=yes
4600
4601 # Define the winbind shared library name and any specific linker flags
4602 # it needs to be built with.
4603
4604 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
4605 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
4606 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
4607
4608 case "$host_os" in
4609         *linux*)
4610                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
4611                 ;;
4612         *freebsd[[5-9]]*)
4613                 # FreeBSD winbind client is implemented as a wrapper around
4614                 # the Linux version.
4615                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
4616                     nsswitch/winbind_nss_linux.o"
4617                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
4618                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
4619                 ;;
4620         *irix*)
4621                 # IRIX has differently named shared libraries
4622                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
4623                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
4624                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
4625                 ;;
4626         *solaris*)
4627                 # Solaris winbind client is implemented as a wrapper around
4628                 # the Linux version.
4629                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
4630                     nsswitch/winbind_nss_linux.o"
4631                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
4632                 ;;
4633         *hpux11*)
4634                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
4635                 ;;
4636         *aix*)
4637                 # AIX has even differently named shared libraries.  No
4638                 # WINS support has been implemented yet.
4639                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
4640                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
4641                 WINBIND_NSS="nsswitch/WINBIND"
4642                 WINBIND_WINS_NSS=""
4643                 ;;
4644         *)
4645                 HAVE_WINBIND=no
4646                 winbind_no_reason=", unsupported on $host_os"
4647                 ;;
4648 esac
4649
4650 AC_SUBST(WINBIND_NSS)
4651 AC_SUBST(WINBIND_WINS_NSS)
4652 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
4653 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
4654 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
4655
4656 # Check the setting of --with-winbind
4657
4658 AC_ARG_WITH(winbind,
4659 [  --with-winbind          Build winbind (default, if supported by OS)],
4660
4661   case "$withval" in
4662         yes)
4663                 HAVE_WINBIND=yes
4664                 ;;
4665         no)
4666                 HAVE_WINBIND=no
4667                 winbind_reason=""
4668                 ;;
4669   esac ],
4670 )
4671
4672 # We need unix domain sockets for winbind
4673
4674 if test x"$HAVE_WINBIND" = x"yes"; then
4675         if test x"$samba_cv_unixsocket" = x"no"; then
4676                 winbind_no_reason=", no unix domain socket support on $host_os"
4677                 HAVE_WINBIND=no
4678         fi
4679 fi
4680
4681 # Display test results
4682
4683 if test x"$HAVE_WINBIND" = x"yes"; then
4684         AC_MSG_RESULT(yes)
4685         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
4686
4687         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
4688         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
4689         if test $BLDSHARED = true; then
4690                 SHLIB_PROGS="$SHLIB_PROGS $WINBIND_NSS $WINBIND_WINS_NSS"
4691
4692                 if test x"$with_pam" = x"yes"; then
4693                         SHLIB_PROGS="$SHLIB_PROGS nsswitch/pam_winbind.$SHLIBEXT"
4694                 fi
4695         fi
4696 else
4697         AC_MSG_RESULT(no$winbind_no_reason)
4698 fi
4699
4700 # Solaris has some extra fields in struct passwd that need to be
4701 # initialised otherwise nscd crashes.  
4702  
4703 AC_CHECK_MEMBER(struct passwd.pw_comment,
4704                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
4705                 [#include <pwd.h>])
4706
4707 AC_CHECK_MEMBER(struct passwd.pw_age,
4708                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
4709                 [#include <pwd.h>])
4710
4711 # AIX 4.3.x and 5.1 do not have as many members in
4712 # struct secmethod_table as AIX 5.2
4713 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
4714        [#include <usersec.h>])
4715 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
4716        [#include <usersec.h>])
4717
4718
4719 #################################################
4720 # Check to see if we should use the included popt 
4721
4722 AC_ARG_WITH(included-popt,
4723 [  --with-included-popt    use bundled popt library, not from system],
4724
4725   case "$withval" in
4726         yes)
4727                 INCLUDED_POPT=yes
4728                 ;;
4729         no)
4730                 INCLUDED_POPT=no
4731                 ;;
4732   esac ],
4733 )
4734 if test x"$INCLUDED_POPT" != x"yes"; then
4735     AC_CHECK_LIB(popt, poptGetContext,
4736                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
4737 fi
4738
4739 AC_MSG_CHECKING(whether to use included popt)
4740 if test x"$INCLUDED_POPT" = x"yes"; then
4741     AC_MSG_RESULT(yes)
4742     BUILD_POPT='$(POPT_OBJS)'
4743         POPTLIBS='$(POPT_OBJS)'
4744     FLAGS1="-I$srcdir/popt"
4745 else
4746     AC_MSG_RESULT(no)
4747         BUILD_POPT=""
4748     POPTLIBS="-lpopt"
4749 fi
4750 AC_SUBST(BUILD_POPT)
4751 AC_SUBST(POPTLIBS)
4752 AC_SUBST(FLAGS1)
4753
4754 #################################################
4755 # Check if the user wants Python
4756
4757 # At the moment, you can use this to set which Python binary to link
4758 # against.  (Libraries built for Python2.2 can't be used by 2.1,
4759 # though they can coexist in different directories.)  In the future
4760 # this might make the Python stuff be built by default.
4761
4762 # Defaulting python breaks the clean target if python isn't installed
4763
4764 PYTHON=
4765
4766 AC_ARG_WITH(python,
4767 [  --with-python=PYTHONNAME  build Python libraries],
4768 [ case "${withval-python}" in
4769   yes)
4770         PYTHON=python
4771         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
4772         ;;
4773   no)
4774         PYTHON=
4775         ;;
4776   *)
4777         PYTHON=${withval-python}
4778         ;;
4779   esac ])
4780 AC_SUBST(PYTHON)
4781
4782 for i in `echo $default_static_modules | sed -e's/,/ /g'`
4783 do
4784         eval MODULE_DEFAULT_$i=STATIC
4785 done
4786
4787 for i in `echo $default_shared_modules | sed -e's/,/ /g'`
4788 do
4789         dnl Fall back to static if we cannot build shared libraries
4790         eval MODULE_DEFAULT_$i=STATIC
4791
4792         if test $BLDSHARED = true; then
4793                 eval MODULE_DEFAULT_$i=SHARED
4794         fi
4795 done
4796
4797 dnl Always built these modules static
4798 MODULE_pdb_guest=STATIC
4799 MODULE_rpc_spoolss=STATIC
4800 MODULE_rpc_srv=STATIC
4801 MODULE_idmap_tdb=STATIC
4802
4803 AC_ARG_WITH(static-modules,
4804 [  --with-static-modules=MODULES  Comma-seperated list of names of modules to statically link in],
4805 [ if test $withval; then
4806         for i in `echo $withval | sed -e's/,/ /g'`
4807         do
4808                 eval MODULE_$i=STATIC
4809         done
4810 fi ])
4811
4812 AC_ARG_WITH(shared-modules,
4813 [  --with-shared-modules=MODULES  Comma-seperated list of names of modules to build shared],
4814 [ if test $withval; then
4815         for i in `echo $withval | sed -e's/,/ /g'`
4816         do
4817                         eval MODULE_$i=SHARED
4818         done
4819 fi ])
4820
4821 ###########################################################################
4822 ## contributed pdb_modules
4823
4824 SMB_MODULE(pdb_xml, passdb/pdb_xml.o, "bin/xml.$SHLIBEXT", PDB,
4825                   [ PASSDB_LIBS="$PASSDB_LIBS $XML_LIBS" ] )
4826 SMB_MODULE(pdb_mysql, passdb/pdb_mysql.o, "bin/mysql.$SHLIBEXT", PDB, 
4827                    [ PASSDB_LIBS="$PASSDB_LIBS $MYSQL_LIBS" ]   )
4828 SMB_MODULE(pdb_pgsql, passdb/pdb_pgsql.o, "bin/pgsql.$SHLIBEXT", PDB, 
4829                    [ PASSDB_LIBS="$PASSDB_LIBS $PGSQL_LIBS" ]   )
4830
4831 ## end of contributed pdb_modules
4832 ###########################################################################
4833
4834 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB, 
4835                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
4836 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
4837 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
4838 SMB_MODULE(pdb_guest, passdb/pdb_guest.o, "bin/guest.$SHLIBEXT", PDB)
4839 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
4840
4841 SMB_MODULE(rpc_lsa, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
4842 SMB_MODULE(rpc_reg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
4843 SMB_MODULE(rpc_lsa_ds, \$(RPC_LSA_DS_OBJ), "bin/librpc_lsa_ds.$SHLIBEXT", RPC)
4844 SMB_MODULE(rpc_wks, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
4845 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
4846 SMB_MODULE(rpc_net, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
4847 SMB_MODULE(rpc_dfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
4848 SMB_MODULE(rpc_srv, \$(RPC_SVC_OBJ), "bin/librpc_srvsvc.$SHLIBEXT", RPC)
4849 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
4850 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
4851 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
4852 SMB_MODULE(rpc_echo, \$(RPC_ECHO_OBJ), "bin/librpc_echo.$SHLIBEXT", RPC)
4853 SMB_SUBSYSTEM(RPC,smbd/server.o)
4854
4855 SMB_MODULE(idmap_ldap, sam/idmap_ldap.o, "bin/idmap_ldap.$SHLIBEXT", IDMAP)
4856 SMB_MODULE(idmap_tdb, sam/idmap_tdb.o, "bin/idmap_tdb.$SHLIBEXT", IDMAP)
4857 SMB_MODULE(idmap_rid, sam/idmap_rid.o, "bin/idmap_rid.$SHLIBEXT", IDMAP)
4858 SMB_MODULE(idmap_ad, sam/idmap_ad.o, "bin/idmap_ad.$SHLIBEXT", IDMAP)
4859 SMB_SUBSYSTEM(IDMAP,sam/idmap.o)
4860
4861 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
4862 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
4863 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
4864 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
4865 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
4866
4867 SMB_MODULE(auth_rhosts, \$(AUTH_RHOSTS_OBJ), "bin/rhosts.$SHLIBEXT", AUTH)
4868 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
4869 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
4870 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
4871 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
4872 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
4873 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
4874 SMB_SUBSYSTEM(AUTH,auth/auth.o)
4875
4876 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
4877 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
4878 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
4879 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
4880 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
4881 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
4882 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
4883 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
4884 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
4885 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
4886 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
4887 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
4888 SMB_MODULE(vfs_catia, \$(VFS_AFSACL_OBJ), "bin/catia.$SHLIBEXT", VFS)
4889 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
4890
4891 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
4892
4893 #################################################
4894 # do extra things if we are running insure
4895
4896 if test "${ac_cv_prog_CC}" = "insure"; then
4897         CPPFLAGS="$CPPFLAGS -D__INSURE__"
4898 fi
4899
4900 #################################################
4901 # Display summary of libraries detected
4902
4903 AC_MSG_RESULT([Using libraries:])
4904 AC_MSG_RESULT([    LIBS = $LIBS])
4905 if test x"$with_ads_support" != x"no"; then
4906    AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
4907 fi
4908 if test x"$with_ldap_support" != x"no"; then
4909    AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
4910 fi
4911 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
4912
4913 #################################################
4914 # final configure stuff
4915
4916 AC_MSG_CHECKING([configure summary])
4917 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
4918            AC_MSG_RESULT(yes),
4919            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
4920            AC_MSG_WARN([cannot run when cross-compiling]))
4921
4922 builddir=`pwd`
4923 AC_SUBST(builddir)
4924
4925 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
4926 LIB_REMOVE_USR_LIB(LDFLAGS)
4927 LIB_REMOVE_USR_LIB(LIBS)
4928
4929 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
4930 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
4931 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
4932
4933 AC_OUTPUT(include/stamp-h Makefile script/findsmb smbadduser script/gen-8bit-gap.sh)
4934
4935 #################################################
4936 # Print very concise instructions on building/use
4937 if test "x$enable_dmalloc" = xyes
4938 then
4939         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
4940         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
4941 fi