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