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