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