Fix typo in comment.
[samba.git] / source3 / configure.in
1 dnl -*- mode: m4-mode -*-
2 dnl Process this file with autoconf to produce a configure script.
3 AC_INIT(include/includes.h)
4 AC_CONFIG_HEADER(include/config.h)
5
6 #################################################
7 # Directory handling stuff to support both the
8 # legacy SAMBA directories and FHS compliant
9 # ones...
10 AC_PREFIX_DEFAULT(/usr/local/samba)
11
12 AC_ARG_WITH(fhs, 
13 [  --with-fhs              Use FHS-compliant paths (default=no)],
14     configdir="${sysconfdir}/samba"
15     lockdir="\${VARDIR}/cache/samba"
16     piddir="\${VARDIR}/run/samba"
17     logfilebase="\${VARDIR}/log/samba"
18     privatedir="\${CONFIGDIR}/private"
19     libdir="\${prefix}/lib/samba"
20     swatdir="\${DATADIR}/samba/swat",
21     configdir="\${LIBDIR}"
22     logfilebase="\${VARDIR}"
23     lockdir="\${VARDIR}/locks"
24     piddir="\${VARDIR}/locks"
25     privatedir="\${prefix}/private"
26     swatdir="\${prefix}/swat")
27
28 #################################################
29 # set private directory location
30 AC_ARG_WITH(privatedir,
31 [  --with-privatedir=DIR   Where to put smbpasswd ($ac_default_prefix/private)],
32 [ case "$withval" in
33   yes|no)
34   #
35   # Just in case anybody calls it without argument
36   #
37     AC_MSG_WARN([--with-privatedir called without argument - will use default])
38   ;;
39   * )
40     privatedir="$withval"
41     ;;
42   esac])
43
44 #################################################
45 # set lock directory location
46 AC_ARG_WITH(lockdir,
47 [  --with-lockdir=DIR      Where to put lock files ($ac_default_prefix/var/locks)],
48 [ case "$withval" in
49   yes|no)
50   #
51   # Just in case anybody calls it without argument
52   #
53     AC_MSG_WARN([--with-lockdir called without argument - will use default])
54   ;;
55   * )
56     lockdir="$withval"
57     ;;
58   esac])
59
60 #################################################
61 # set pid directory location
62 AC_ARG_WITH(piddir,
63 [  --with-piddir=DIR       Where to put pid files ($ac_default_prefix/var/locks)],
64 [ case "$withval" in
65   yes|no)
66   #
67   # Just in case anybody calls it without argument
68   #
69     AC_MSG_WARN([--with-piddir called without argument - will use default])
70   ;;
71   * )
72     piddir="$withval"
73     ;;
74   esac])
75
76 #################################################
77 # set SWAT directory location
78 AC_ARG_WITH(swatdir,
79 [  --with-swatdir=DIR      Where to put SWAT files ($ac_default_prefix/swat)],
80 [ case "$withval" in
81   yes|no)
82   #
83   # Just in case anybody does it
84   #
85     AC_MSG_WARN([--with-swatdir called without argument - will use default])
86   ;;
87   * )
88     swatdir="$withval"
89     ;;
90   esac])
91
92 #################################################
93 # set configuration directory location
94 AC_ARG_WITH(configdir,
95 [  --with-configdir=DIR    Where to put configuration files (\$libdir)],
96 [ case "$withval" in
97   yes|no)
98   #
99   # Just in case anybody does it
100   #
101     AC_MSG_WARN([--with-configdir called without argument - will use default])
102   ;;
103   * )
104     configdir="$withval"
105     ;;
106   esac])
107
108 #################################################
109 # set log directory location
110 AC_ARG_WITH(logfilebase,
111 [  --with-logfilebase=DIR  Where to put log files (\$(VARDIR))],
112 [ case "$withval" in
113   yes|no)
114   #
115   # Just in case anybody does it
116   #
117     AC_MSG_WARN([--with-logfilebase called without argument - will use default])
118   ;;
119   * )
120     logfilebase="$withval"
121     ;;
122   esac])
123
124 AC_SUBST(configdir)
125 AC_SUBST(lockdir)
126 AC_SUBST(piddir)
127 AC_SUBST(logfilebase)
128 AC_SUBST(privatedir)
129 AC_SUBST(swatdir)
130 AC_SUBST(bindir)
131 AC_SUBST(sbindir)
132
133 dnl Unique-to-Samba variables we'll be playing with.
134 AC_SUBST(SHELL)
135 AC_SUBST(LDSHFLAGS)
136 AC_SUBST(SONAMEFLAG)
137 AC_SUBST(SHLD)
138 AC_SUBST(HOST_OS)
139 AC_SUBST(PICFLAG)
140 AC_SUBST(PICSUFFIX)
141 AC_SUBST(POBAD_CC)
142 AC_SUBST(SHLIBEXT)
143 AC_SUBST(LIBSMBCLIENT_SHARED)
144 AC_SUBST(LIBSMBCLIENT)
145 AC_SUBST(PRINTLIBS)
146 AC_SUBST(AUTHLIBS)
147 AC_SUBST(SHLIB_PROGS)
148 AC_SUBST(SMBWRAPPER)
149 AC_SUBST(EXTRA_BIN_PROGS)
150 AC_SUBST(EXTRA_SBIN_PROGS)
151 AC_SUBST(EXTRA_ALL_TARGETS)
152
153 # compile with optimization and without debugging by default
154 CFLAGS="-O ${CFLAGS}"
155
156 AC_ARG_ENABLE(debug, 
157 [  --enable-debug          Turn on compiler debugging information (default=no)],
158     [if eval "test x$enable_debug = xyes"; then
159         CFLAGS="${CFLAGS} -g"
160     fi])
161
162 AC_ARG_ENABLE(developer, [  --enable-developer      Turn on developer warnings and debugging (default=no)],
163     [if eval "test x$enable_developer = xyes"; then
164         CFLAGS="${CFLAGS} -g -Wall -Wshadow -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Wcast-align -DDEBUG_PASSWORD -DDEVELOPER"
165     fi])
166
167 AC_ARG_ENABLE(krb5developer, [  --enable-krb5developer  Turn on developer warnings and debugging, except -Wstrict-prototypes (default=no)],
168     [if eval "test x$enable_krb5developer = xyes"; then
169         CFLAGS="${CFLAGS} -g -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -DDEBUG_PASSWORD -DDEVELOPER"
170     fi])
171
172 AC_ARG_ENABLE(dmalloc, [  --enable-dmalloc        Enable heap debugging [default=no]])
173
174 if test "x$enable_dmalloc" = xyes
175 then
176         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
177         AC_DEFINE(DMALLOC_FUNC_CHECK, 1, 
178                   [Define to check invariants around some common functions])
179         LIBS="$LIBS -ldmalloc"  
180 fi
181
182 dnl Checks for programs.
183 AC_PROG_CC
184 AC_PROG_INSTALL
185 AC_PROG_AWK
186
187 dnl Check if we use GNU ld
188 LD=ld
189 AC_PROG_LD_GNU
190
191 dnl needed before AC_TRY_COMPILE
192 AC_ISC_POSIX
193
194 dnl look for executable suffix
195 AC_EXEEXT
196
197 dnl Check if C compiler understands -c and -o at the same time
198 AC_PROG_CC_C_O
199 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
200       BROKEN_CC=
201 else
202       BROKEN_CC=#
203 fi
204 AC_SUBST(BROKEN_CC)
205
206 dnl Check if the C compiler understands volatile (it should, being ANSI).
207 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
208     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
209         samba_cv_volatile=yes,samba_cv_volatile=no)])
210 if test x"$samba_cv_volatile" = x"yes"; then
211    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
212 fi
213
214
215 AC_CANONICAL_SYSTEM
216
217 dnl Add #include for broken IRIX header files
218   case "$host_os" in
219         *irix6*) AC_ADD_INCLUDE(<standards.h>)
220         ;;
221 esac
222
223 AC_VALIDATE_CACHE_SYSTEM_TYPE
224
225 DYNEXP=
226
227 #
228 # Config CPPFLAG settings for strange OS's that must be set
229 # before other tests.
230 #
231 case "$host_os" in
232 # Try to work out if this is the native HPUX compiler that uses the -Ae flag.
233     *hpux*)
234     
235       AC_PROG_CC_FLAG(Ae)
236       # mmap on HPUX is completely broken...
237       AC_DEFINE(MMAP_BLACKLIST, 1, [Whether MMAP is broken])
238       if test $ac_cv_prog_cc_Ae = yes; then
239         CPPFLAGS="$CPPFLAGS -Ae"
240       fi
241 #
242 # Defines needed for HPUX support.
243 # HPUX has bigcrypt but (sometimes?) doesn't use it for
244 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
245 #
246       case `uname -r` in
247                         *9*|*10*)
248                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4"
249                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
250                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
251                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
252                                 AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
253                                 AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
254                                 ;;
255                         *11*)
256                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4"
257                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
258                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
259                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
260                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
261                                 AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
262                                 AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
263                                 ;;
264       esac
265       DYNEXP="-Wl,-E"
266       ;;
267
268 #
269 # CRAY Unicos has broken const handling
270        *unicos*)
271           AC_MSG_RESULT([disabling const])
272           CPPFLAGS="$CPPFLAGS -Dconst="
273           ;;
274         
275 #
276 # AIX4.x doesn't even admit to having large
277 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
278 #
279     *aix4*)
280           AC_MSG_RESULT([enabling large file support])
281       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
282           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
283       ;;    
284 #
285 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
286 # to the existance of large files..
287 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
288 # recommendations on large file support, however it makes the
289 # compile work using gcc 2.7 and 2.8, whereas using the Sun
290 # recommendation makes the compile fail on gcc2.7. JRA.
291 #
292         *solaris*)
293                 case `uname -r` in
294                         5.0*|5.1*|5.2*|5.3*|5.5*)
295                                 AC_MSG_RESULT([no large file support])
296                                 ;;
297                         5.*)
298                         AC_MSG_RESULT([enabling large file support])
299                         if test "$ac_cv_prog_gcc" = yes; then
300                                 ${CC-cc} -v >conftest.c 2>&1
301                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
302                                 rm -fr conftest.c
303                                 case "$ac_cv_gcc_compiler_version_number" in
304                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
305                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE"
306                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
307                                                 ;;
308                                         *)
309                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
310                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
311                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
312                                                 ;;
313                                 esac
314                         else
315                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
316                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
317                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
318                         fi
319                         ;;
320                 esac
321                 ;;
322 #
323 # Tests needed for SINIX large file support.
324 #
325     *sysv4*)
326       if test $host = mips-sni-sysv4 ; then
327         AC_MSG_CHECKING([for LFS support])
328         old_CPPFLAGS="$CPPFLAGS"
329         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
330         AC_TRY_RUN([
331 #include <unistd.h>
332 main () {
333 #if _LFS64_LARGEFILE == 1
334 exit(0);
335 #else
336 exit(1);
337 #endif
338 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
339         CPPFLAGS="$old_CPPFLAGS"
340         if test x$SINIX_LFS_SUPPORT = xyes ; then
341           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
342                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
343           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
344           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
345           LIBS="`getconf LFS64_LIBS` $LIBS"
346         fi
347       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
348       fi
349     ;;
350
351 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
352 #
353     *linux*)
354         AC_MSG_CHECKING([for LFS support])
355         old_CPPFLAGS="$CPPFLAGS"
356         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
357        AC_TRY_RUN([
358 #include <unistd.h>
359 #include <sys/utsname.h>
360 main() {
361 #if _LFS64_LARGEFILE == 1
362        struct utsname uts;
363        char *release;
364        int major, minor;
365
366        /* Ensure this is glibc 2.2 or higher */
367 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
368        int libc_major = __GLIBC__;
369        int libc_minor = __GLIBC_MINOR__;
370
371        if (libc_major < 2)
372               exit(1);
373        if (libc_minor < 2)
374               exit(1);
375 #endif
376
377        /* Ensure this is kernel 2.4 or higher */
378
379        uname(&uts);
380        release = uts.release;
381        major = atoi(strsep(&release, "."));
382        minor = atoi(strsep(&release, "."));
383
384        if (major > 2 || (major == 2 && minor > 3))
385                exit(0);
386        exit(1);
387 #else
388        exit(1);
389 #endif
390 }
391 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
392         CPPFLAGS="$old_CPPFLAGS"
393         if test x$LINUX_LFS_SUPPORT = xyes ; then
394           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
395                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
396           AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
397           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
398         fi
399        AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
400                 ;;
401
402     *hurd*)
403         AC_MSG_CHECKING([for LFS support])
404         old_CPPFLAGS="$CPPFLAGS"
405         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
406         AC_TRY_RUN([
407 #include <unistd.h>
408 main () {
409 #if _LFS64_LARGEFILE == 1
410 exit(0);
411 #else
412 exit(1);
413 #endif
414 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
415         CPPFLAGS="$old_CPPFLAGS"
416         if test x$GLIBC_LFS_SUPPORT = xyes ; then
417           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
418                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
419           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
420         fi
421       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
422     ;;
423
424 esac
425
426 AC_INLINE
427 AC_HEADER_STDC
428 AC_HEADER_DIRENT
429 AC_HEADER_TIME
430 AC_HEADER_SYS_WAIT
431 AC_CHECK_HEADERS(arpa/inet.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h)
432 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h)
433 AC_CHECK_HEADERS(compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h)
434 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/mode.h)
435 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
436 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
437 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
438 AC_CHECK_HEADERS(security/pam_modules.h security/_pam_macros.h ldap.h lber.h dlfcn.h)
439 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
440
441 #
442 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
443 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
444 #
445 case "$host_os" in
446     *hpux*)
447                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
448                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
449                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
450                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
451                 fi
452         ;;
453 esac
454 AC_CHECK_HEADERS(shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
455 AC_CHECK_HEADERS(nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h security/pam_modules.h)
456 AC_CHECK_HEADERS(stropts.h poll.h)
457 AC_CHECK_HEADERS(sys/capability.h syscall.h sys/syscall.h)
458 AC_CHECK_HEADERS(sys/acl.h sys/cdefs.h glob.h)
459
460 # For experimental utmp support (lastlog on some BSD-like systems)
461 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
462  
463 # For quotas on Veritas VxFS filesystems
464 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
465
466 # For quotas on Linux XFS filesystems
467 AC_CHECK_HEADERS(linux/xqm.h)
468 AC_CHECK_HEADERS(xfs/xqm.h)
469
470 AC_CHECK_SIZEOF(int,cross)
471 AC_CHECK_SIZEOF(long,cross)
472 AC_CHECK_SIZEOF(short,cross)
473
474 AC_C_CONST
475 AC_C_INLINE
476 AC_C_BIGENDIAN
477 AC_C_CHAR_UNSIGNED
478
479 AC_TYPE_SIGNAL
480 AC_TYPE_UID_T
481 AC_TYPE_MODE_T
482 AC_TYPE_OFF_T
483 AC_TYPE_SIZE_T
484 AC_TYPE_PID_T
485 AC_STRUCT_ST_RDEV
486 AC_DIRENT_D_OFF
487 AC_CHECK_TYPE(ino_t,unsigned)
488 AC_CHECK_TYPE(loff_t,off_t)
489 AC_CHECK_TYPE(offset_t,loff_t)
490 AC_CHECK_TYPE(ssize_t, int)
491 AC_CHECK_TYPE(wchar_t, unsigned short)
492
493 ############################################
494 # for cups support we need libcups, and a handful of header files
495
496 AC_ARG_ENABLE(cups,
497 [  --enable-cups           Turn on CUPS support (default=auto)])
498
499 if test x$enable_cups != xno; then
500         AC_PATH_PROG(CUPS_CONFIG, cups-config)
501
502         if test "x$CUPS_CONFIG" != x; then
503                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
504                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
505                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
506                 PRINTLIBS="$PRINTLIBS `$CUPS_CONFIG --libs`"
507         fi
508 fi
509
510 ############################################
511 # we need dlopen/dlclose/dlsym/dlerror for PAM, the password database plugins and the plugin loading code
512 AC_CHECK_FUNCS(dlopen)
513 if test x"$ac_cv_func_dlopen" = x"no"; then
514     AC_CHECK_LIB(dl, dlopen, [LIBS="$LIBS -ldl";
515         AC_DEFINE(HAVE_DLOPEN,1,[Whether we have dlopen()])])
516 fi
517 # dlopen/dlclose/dlsym/dlerror will be checked again later and defines will be set then
518
519 ############################################
520 # check if the compiler can do immediate structures
521 AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
522     AC_TRY_COMPILE([
523 #include <stdio.h>],
524 [
525    typedef struct {unsigned x;} FOOBAR;
526    #define X_FOOBAR(x) ((FOOBAR) { x })
527    #define FOO_ONE X_FOOBAR(1)
528    FOOBAR f = FOO_ONE;   
529    static struct {
530         FOOBAR y; 
531         } f2[] = {
532                 {FOO_ONE}
533         };   
534 ],
535         samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
536 if test x"$samba_cv_immediate_structures" = x"yes"; then
537    AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
538 fi
539
540 ############################################
541 # check for unix domain sockets
542 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
543     AC_TRY_COMPILE([
544 #include <sys/types.h>
545 #include <stdlib.h>
546 #include <stddef.h>
547 #include <sys/socket.h>
548 #include <sys/un.h>],
549 [
550   struct sockaddr_un sunaddr; 
551   sunaddr.sun_family = AF_UNIX;
552 ],
553         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
554 if test x"$samba_cv_unixsocket" = x"yes"; then
555    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
556 fi
557
558
559 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
560     AC_TRY_COMPILE([
561 #include <sys/types.h>
562 #if STDC_HEADERS
563 #include <stdlib.h>
564 #include <stddef.h>
565 #endif
566 #include <sys/socket.h>],[socklen_t i = 0],
567         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
568 if test x"$samba_cv_socklen_t" = x"yes"; then
569    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
570 fi
571
572 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
573     AC_TRY_COMPILE([
574 #include <sys/types.h>
575 #if STDC_HEADERS
576 #include <stdlib.h>
577 #include <stddef.h>
578 #endif
579 #include <signal.h>],[sig_atomic_t i = 0],
580         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
581 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
582    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
583 fi
584
585 # stupid headers have the functions but no declaration. grrrr.
586 AC_HAVE_DECL(errno, [#include <errno.h>])
587 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
588 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
589 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
590 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
591 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
592 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
593
594 # and glibc has setresuid under linux but the function does
595 # nothing until kernel 2.1.44! very dumb.
596 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
597     AC_TRY_RUN([#include <errno.h>
598 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
599         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
600 if test x"$samba_cv_have_setresuid" = x"yes"; then
601     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
602 fi
603
604 # Do the same check for setresguid...
605 #
606 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
607     AC_TRY_RUN([#include <unistd.h>
608 #include <errno.h>
609 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
610         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
611 if test x"$samba_cv_have_setresgid" = x"yes"; then
612     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
613 fi
614
615 AC_FUNC_MEMCMP
616
617 ###############################################
618 # test for where we get crypt() from
619 AC_CHECK_FUNCS(crypt)
620 if test x"$ac_cv_func_crypt" = x"no"; then
621     AC_CHECK_LIB(crypt, crypt, [AUTHLIBS="$AUTHLIBS -lcrypt";
622         AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
623 fi
624
625
626 ###############################################
627 # Readline included by default unless explicitly asked not to
628 test "${with_readline+set}" != "set" && with_readline=yes
629
630 # test for where we get readline() from
631 AC_MSG_CHECKING(whether to use readline)
632 AC_ARG_WITH(readline,
633 [  --with-readline[=DIR]   Look for readline include/libs in DIR (default=auto) ],
634 [  case "$with_readline" in
635   yes)
636     AC_MSG_RESULT(yes)
637
638     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
639     AC_CHECK_HEADERS(readline/history.h)
640
641     AC_CHECK_HEADERS(readline.h readline/readline.h,[
642       for termlib in ncurses curses termcap terminfo termlib; do
643        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
644       done
645       AC_CHECK_LIB(readline, rl_callback_handler_install,
646        [TERMLIBS="-lreadline $TERMLIBS"
647        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
648        break], [TERMLIBS=], $TERMLIBS)])
649     ;;
650   no)
651     AC_MSG_RESULT(no)
652     ;;
653   *)
654     AC_MSG_RESULT(yes)
655
656     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
657     # alternate readline path
658     _ldflags=${LDFLAGS}
659     _cppflags=${CPPFLAGS}
660
661     # Add additional search path
662     LDFLAGS="-L$with_readline/lib $LDFLAGS"
663     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
664
665     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
666     AC_CHECK_HEADERS(readline/history.h)
667
668     AC_CHECK_HEADERS(readline.h readline/readline.h,[
669       for termlib in ncurses curses termcap terminfo termlib; do
670        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
671       done
672       AC_CHECK_LIB(readline, rl_callback_handler_install,
673        [TERMLDFLAGS="-L$with_readline/lib"
674        TERMCPPFLAGS="-I$with_readline/include"
675        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
676        TERMLIBS="-lreadline $TERMLIBS"
677        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
678        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
679
680     LDFLAGS=$_ldflags
681     ;;
682   esac],
683   AC_MSG_RESULT(no)
684 )
685 AC_SUBST(TERMLIBS)
686 AC_SUBST(TERMLDFLAGS)
687
688 # The readline API changed slightly from readline3 to readline4, so
689 # code will generate warnings on one of them unless we have a few
690 # special cases.
691 AC_CHECK_LIB(readline, rl_completion_matches,
692              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, 
693                         [Do we have rl_completion_matches?])],
694              [],
695              [$TERMLIBS])
696
697 # The following test taken from the cvs sources
698 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
699 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
700 # libsocket.so which has a bad implementation of gethostbyname (it
701 # only looks in /etc/hosts), so we only look for -lsocket if we need
702 # it.
703 AC_CHECK_FUNCS(connect)
704 if test x"$ac_cv_func_connect" = x"no"; then
705     case "$LIBS" in
706     *-lnsl*) ;;
707     *) AC_CHECK_LIB(nsl_s, printf) ;;
708     esac
709     case "$LIBS" in
710     *-lnsl*) ;;
711     *) AC_CHECK_LIB(nsl, printf) ;;
712     esac
713     case "$LIBS" in
714     *-lsocket*) ;;
715     *) AC_CHECK_LIB(socket, connect) ;;
716     esac
717     case "$LIBS" in
718     *-linet*) ;;
719     *) AC_CHECK_LIB(inet, connect) ;;
720     esac
721     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
722     dnl has been cached.
723     if test x"$ac_cv_lib_socket_connect" = x"yes" || 
724        test x"$ac_cv_lib_inet_connect" = x"yes"; then
725         # ac_cv_func_connect=yes
726         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
727         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
728     fi
729 fi
730
731 ###############################################
732 # test for where we get yp_get_default_domain() from
733 AC_CHECK_FUNCS(yp_get_default_domain)
734 if test x"$ac_cv_func_yp_get_default_domain" = x"no"; then
735         AC_CHECK_LIB(nsl, yp_get_default_domain, [LIBS="$LIBS -lnsl";
736         AC_DEFINE(HAVE_YP_GET_DEFAULT_DOMAIN,1,[Whether the system has yp_get_default_domain()])]) 
737 fi
738
739 # Check if we have execl, if not we need to compile smbrun.
740 AC_CHECK_FUNCS(execl)
741 if test x"$ac_cv_func_execl" = x"no"; then
742     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
743 fi
744
745 AC_CHECK_FUNCS(dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64)
746 AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid)
747 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
748 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
749 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
750 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64)
751 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64)
752 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
753 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
754 AC_CHECK_FUNCS(syslog vsyslog getgrouplist timegm)
755 # setbuffer, shmget, shm_open are needed for smbtorture
756 AC_CHECK_FUNCS(setbuffer shmget shm_open)
757
758 # syscall() is needed for smbwrapper.
759 AC_CHECK_FUNCS(syscall)
760
761 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
762 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
763 AC_CHECK_FUNCS(__getcwd _getcwd)
764 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
765 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
766 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
767 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
768 AC_CHECK_FUNCS(getdents _getdents __getdents _lseek __lseek _read __read)
769 AC_CHECK_FUNCS(_write __write _fork __fork)
770 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
771 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
772 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
773 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
774 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
775
776 #
777 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
778 #
779
780 if test x$ac_cv_func_stat64 = xno ; then
781   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
782   AC_TRY_LINK([
783 #if defined(HAVE_UNISTD_H)
784 #include <unistd.h>
785 #endif
786 #include <sys/stat.h>
787 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
788   AC_MSG_RESULT([$ac_cv_func_stat64])
789   if test x$ac_cv_func_stat64 = xyes ; then
790     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
791   fi
792 fi
793
794 if test x$ac_cv_func_lstat64 = xno ; then
795   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
796   AC_TRY_LINK([
797 #if defined(HAVE_UNISTD_H)
798 #include <unistd.h>
799 #endif
800 #include <sys/stat.h>
801 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
802   AC_MSG_RESULT([$ac_cv_func_lstat64])
803   if test x$ac_cv_func_lstat64 = xyes ; then
804     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
805   fi
806 fi
807
808 if test x$ac_cv_func_fstat64 = xno ; then
809   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
810   AC_TRY_LINK([
811 #if defined(HAVE_UNISTD_H)
812 #include <unistd.h>
813 #endif
814 #include <sys/stat.h>
815 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
816   AC_MSG_RESULT([$ac_cv_func_fstat64])
817   if test x$ac_cv_func_fstat64 = xyes ; then
818     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
819   fi
820 fi
821
822 #####################################
823 # we might need the resolv library on some systems
824 AC_CHECK_LIB(resolv, dn_expand)
825
826 #
827 # Check for the functions putprpwnam, set_auth_parameters,
828 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
829 # Needed for OSF1 and HPUX.
830 #
831
832 AC_LIBTESTFUNC(security, putprpwnam)
833 AC_LIBTESTFUNC(sec, putprpwnam)
834
835 AC_LIBTESTFUNC(security, set_auth_parameters)
836 AC_LIBTESTFUNC(sec, set_auth_parameters)
837
838 # UnixWare 7.x has its getspnam in -lgen
839 AC_LIBTESTFUNC(gen, getspnam)
840
841 AC_LIBTESTFUNC(security, getspnam)
842 AC_LIBTESTFUNC(sec, getspnam)
843
844 AC_LIBTESTFUNC(security, bigcrypt)
845 AC_LIBTESTFUNC(sec, bigcrypt)
846
847 AC_LIBTESTFUNC(security, getprpwnam)
848 AC_LIBTESTFUNC(sec, getprpwnam)
849
850 # this bit needs to be modified for each OS that is suported by
851 # smbwrapper. You need to specify how to created a shared library and
852 # how to compile C code to produce PIC object files
853
854 # these are the defaults, good for lots of systems
855 HOST_OS="$host_os"
856 LDSHFLAGS="-shared"
857 SONAMEFLAG="#"
858 SHLD="\${CC}"
859 PICFLAG=""
860 PICSUFFIX="po"
861 POBAD_CC="#"
862 SHLIBEXT="so"
863 # Assume non-shared by default and override below
864 BLDSHARED="false"
865 AC_MSG_CHECKING([ability to build shared libraries])
866
867 # and these are for particular systems
868 case "$host_os" in
869                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
870                         BLDSHARED="true"
871                         LDSHFLAGS="-shared" 
872                         DYNEXP="-Wl,--export-dynamic"
873                         PICFLAG="-fPIC"
874                         SONAMEFLAG="-Wl,-soname="
875                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
876                         ;;
877                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
878                         BLDSHARED="true"
879                         LDSHFLAGS="-G"
880                         SONAMEFLAG="-h "
881                         if test "${GCC}" = "yes"; then
882                                 PICFLAG="-fPIC"
883                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
884                                         DYNEXP="-Wl,-E"
885                                 fi
886                         else
887                                 PICFLAG="-KPIC"
888                                 ## ${CFLAGS} added for building 64-bit shared 
889                                 ## libs using Sun's Compiler
890                                 LDSHFLAGS="-G \${CFLAGS}"
891                                 POBAD_CC=""
892                                 PICSUFFIX="po.o"
893                         fi
894                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
895                         ;;
896                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
897                         BLDSHARED="true"
898                         LDSHFLAGS="-G"
899                         SONAMEFLAG="-Wl,-h,"
900                         PICFLAG="-KPIC"   # Is this correct for SunOS
901                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
902                         ;;
903                 *freebsd*)  BLDSHARED="true"
904                         LDSHFLAGS="-shared"
905                         DYNEXP="-Wl,--export-dynamic"
906                         SONAMEFLAG="-Wl,-soname,"
907                         PICFLAG="-fPIC -DPIC"
908                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
909                         ;;
910                 *openbsd*)  BLDSHARED="true"
911                         LDSHFLAGS="-shared"
912                         DYNEXP="-Wl,-Bdynamic"
913                         SONAMEFLAG="-Wl,-soname,"
914                         PICFLAG="-fPIC"
915                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
916                         ;;
917                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
918                         case "$host_os" in
919                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
920                         ;;
921                         esac
922                         ATTEMPT_WRAP32_BUILD=yes
923                         BLDSHARED="true"
924                         LDSHFLAGS="-set_version sgi1.0 -shared"
925                         SONAMEFLAG="-soname "
926                         SHLD="\${LD}"
927                         if test "${GCC}" = "yes"; then
928                                 PICFLAG="-fPIC"
929                         else 
930                                 PICFLAG="-KPIC"
931                         fi
932                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
933                         ;;
934                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
935                         BLDSHARED="true"
936                         LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry"
937                         DYNEXP="-Wl,-brtl,-bexpall"
938                         PICFLAG="-O2"
939                         if test "${GCC}" != "yes"; then
940                                 ## for funky AIX compiler using strncpy()
941                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
942                         fi
943
944                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
945                         ;;
946                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
947                         SHLIBEXT="sl"
948                         # Use special PIC flags for the native HP-UX compiler.
949                         if test $ac_cv_prog_cc_Ae = yes; then
950                                 BLDSHARED="true"
951                                 SHLD="/usr/bin/ld"
952                                 LDSHFLAGS="-B symbolic -b -z"
953                                 SONAMEFLAG="+h "
954                                 PICFLAG="+z"
955                         fi
956                         DYNEXP="-Wl,-E"
957                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
958                         ;;
959                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
960                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
961                         ;;
962                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
963                         BLDSHARED="true"
964                         LDSHFLAGS="-shared"
965                         SONAMEFLAG="-Wl,-soname,"
966                         PICFLAG="-fPIC"
967                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
968                         ;;
969                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
970                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
971                         ;;
972                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
973                         BLDSHARED="true"
974                         LDSHFLAGS="-shared"
975                         SONAMEFLAG="-Wl,-soname,"
976                         PICFLAG="-KPIC"
977                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
978                         ;;
979                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
980                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
981                         ;;
982                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
983                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
984                         ;;
985                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
986                         case "$host" in
987                                 *-univel-*)     if [ test "$GCC" != yes ]; then
988                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
989                                         fi
990                                         LDSHFLAGS="-G"
991                                         DYNEXP="-Bexport"
992                                 ;;
993                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
994                         esac
995                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
996                         ;;
997
998                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
999                         if [ test "$GCC" != yes ]; then
1000                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1001                         fi
1002                         LDSHFLAGS="-G"
1003                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1004                         ;;
1005                 *)
1006                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1007                         ;;
1008 esac
1009 AC_SUBST(DYNEXP)
1010 AC_MSG_RESULT($BLDSHARED)
1011 AC_MSG_CHECKING([linker flags for shared libraries])
1012 AC_MSG_RESULT([$LDSHFLAGS])
1013 AC_MSG_CHECKING([compiler flags for position-independent code])
1014 AC_MSG_RESULT([$PICFLAGS])
1015
1016 #######################################################
1017 # test whether building a shared library actually works
1018 if test $BLDSHARED = true; then
1019 AC_CACHE_CHECK([whether building shared libraries actually works], 
1020                [ac_cv_shlib_works],[
1021    ac_cv_shlib_works=no
1022    # try building a trivial shared library
1023    if test "$PICSUFFIX" = "po"; then
1024      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.po ${srcdir-.}/tests/shlib.c &&
1025        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
1026        ac_cv_shlib_works=yes
1027    else
1028      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.$PICSUFFIX ${srcdir-.}/tests/shlib.c &&
1029        mv shlib.$PICSUFFIX shlib.po &&
1030        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
1031        ac_cv_shlib_works=yes
1032    fi
1033    rm -f shlib.so shlib.po
1034 ])
1035 if test $ac_cv_shlib_works = no; then
1036    BLDSHARED=false
1037 fi
1038 fi
1039
1040
1041 # this updates our target list if we can build shared libs
1042 if test $BLDSHARED = true; then
1043    LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
1044 else
1045    LIBSMBCLIENT_SHARED=
1046 fi
1047
1048 ################
1049
1050 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1051 AC_TRY_RUN([#include <stdio.h>
1052 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1053 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1054 if test x"$samba_cv_have_longlong" = x"yes"; then
1055     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1056 fi
1057
1058 #
1059 # Check if the compiler supports the LL prefix on long long integers.
1060 # AIX needs this.
1061
1062 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1063     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1064         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1065 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1066    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1067 fi
1068
1069   
1070 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1071 AC_TRY_RUN([#include <stdio.h>
1072 #include <sys/stat.h>
1073 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1074 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1075 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1076     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1077 fi
1078
1079 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1080 AC_TRY_RUN([
1081 #if defined(HAVE_UNISTD_H)
1082 #include <unistd.h>
1083 #endif
1084 #include <stdio.h>
1085 #include <sys/stat.h>
1086 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1087 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1088 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1089     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1090 fi
1091
1092 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1093 AC_TRY_RUN([#include <stdio.h>
1094 #include <sys/stat.h>
1095 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1096 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1097 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1098     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1099 fi
1100
1101 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1102 AC_TRY_RUN([
1103 #if defined(HAVE_UNISTD_H)
1104 #include <unistd.h>
1105 #endif
1106 #include <stdio.h>
1107 #include <sys/stat.h>
1108 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1109 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1110 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1111     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1112 fi
1113
1114 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1115 AC_TRY_RUN([
1116 #if defined(HAVE_UNISTD_H)
1117 #include <unistd.h>
1118 #endif
1119 #include <stdio.h>
1120 #include <sys/stat.h>
1121 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1122 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1123 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1124     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1125 fi
1126
1127 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1128 AC_TRY_COMPILE([
1129 #if defined(HAVE_UNISTD_H)
1130 #include <unistd.h>
1131 #endif
1132 #include <sys/types.h>
1133 #include <dirent.h>],
1134 [struct dirent64 de;],
1135 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1136 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1137     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1138 fi
1139
1140 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1141 AC_TRY_RUN([
1142 #if defined(HAVE_UNISTD_H)
1143 #include <unistd.h>
1144 #endif
1145 #include <sys/types.h>
1146 main() { dev_t dev; int i = major(dev); return 0; }],
1147 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1148 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1149     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1150 fi
1151
1152 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1153 AC_TRY_RUN([
1154 #if defined(HAVE_UNISTD_H)
1155 #include <unistd.h>
1156 #endif
1157 #include <sys/types.h>
1158 main() { dev_t dev; int i = minor(dev); return 0; }],
1159 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1160 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1161     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1162 fi
1163
1164 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
1165 AC_TRY_RUN([#include <stdio.h>
1166 main() { char c; c=250; exit((c > 0)?0:1); }],
1167 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
1168 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
1169     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
1170 fi
1171
1172 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
1173 AC_TRY_COMPILE([#include <sys/types.h>
1174 #include <sys/socket.h>
1175 #include <netinet/in.h>],
1176 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
1177 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
1178 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
1179     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
1180 fi
1181
1182 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1183 AC_TRY_COMPILE([#include <sys/types.h>
1184 #include <dirent.h>
1185 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1186 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1187 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1188     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1189 fi
1190
1191 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1192 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1193 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1194 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1195     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1196 fi
1197
1198 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1199 AC_TRY_RUN([
1200 #include <sys/time.h>
1201 #include <unistd.h>
1202 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
1203            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
1204 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1205     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
1206 fi
1207
1208 AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE_VA_COPY,[
1209 AC_TRY_LINK([#include <stdarg.h>
1210 va_list ap1,ap2;], [__va_copy(ap1,ap2);],
1211 samba_cv_HAVE_VA_COPY=yes,samba_cv_HAVE_VA_COPY=no)])
1212 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
1213     AC_DEFINE(HAVE_VA_COPY,1,[Whether __va_copy() is available])
1214 fi
1215
1216 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
1217 AC_TRY_RUN([
1218 #include <sys/types.h>
1219 #include <stdarg.h>
1220 void foo(const char *format, ...) { 
1221        va_list ap;
1222        int len;
1223        char buf[5];
1224
1225        va_start(ap, format);
1226        len = vsnprintf(buf, 0, format, ap);
1227        va_end(ap);
1228        if (len != 5) exit(1);
1229
1230        va_start(ap, format);
1231        len = vsnprintf(0, 0, format, ap);
1232        va_end(ap);
1233        if (len != 5) exit(1);
1234
1235        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
1236
1237        exit(0);
1238 }
1239 main() { foo("hello"); }
1240 ],
1241 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
1242 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
1243     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
1244 fi
1245
1246 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
1247 AC_TRY_RUN([#include <sys/types.h>
1248 #include <dirent.h>
1249 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
1250 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
1251 di->d_name[0] == 0) exit(0); exit(1);} ],
1252 samba_cv_HAVE_BROKEN_READDIR=yes,samba_cv_HAVE_BROKEN_READDIR=no,samba_cv_HAVE_BROKEN_READDIR=cross)])
1253 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
1254     AC_DEFINE(HAVE_BROKEN_READDIR,1,[Whether readdir() is broken])
1255 fi
1256
1257 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
1258 AC_TRY_COMPILE([#include <sys/types.h>
1259 #include <utime.h>],
1260 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
1261 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
1262 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
1263     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
1264 fi
1265
1266 dnl  utmp and utmpx come in many flavours
1267 dnl  We need to check for many of them
1268 dnl  But we don't need to do each and every one, because our code uses
1269 dnl  mostly just the utmp (not utmpx) fields.
1270
1271 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
1272
1273 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
1274 AC_TRY_COMPILE([#include <sys/types.h>
1275 #include <utmp.h>],
1276 [struct utmp ut;  ut.ut_name[0] = 'a';],
1277 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
1278 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
1279     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
1280 fi 
1281
1282 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
1283 AC_TRY_COMPILE([#include <sys/types.h>
1284 #include <utmp.h>],
1285 [struct utmp ut;  ut.ut_user[0] = 'a';],
1286 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
1287 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
1288     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
1289 fi 
1290
1291 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
1292 AC_TRY_COMPILE([#include <sys/types.h>
1293 #include <utmp.h>],
1294 [struct utmp ut;  ut.ut_id[0] = 'a';],
1295 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
1296 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
1297     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
1298 fi 
1299
1300 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
1301 AC_TRY_COMPILE([#include <sys/types.h>
1302 #include <utmp.h>],
1303 [struct utmp ut;  ut.ut_host[0] = 'a';],
1304 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
1305 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
1306     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
1307 fi 
1308
1309 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
1310 AC_TRY_COMPILE([#include <sys/types.h>
1311 #include <utmp.h>],
1312 [struct utmp ut;  time_t t; ut.ut_time = t;],
1313 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
1314 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
1315     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
1316 fi 
1317
1318 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
1319 AC_TRY_COMPILE([#include <sys/types.h>
1320 #include <utmp.h>],
1321 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
1322 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
1323 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
1324     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
1325 fi 
1326
1327 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
1328 AC_TRY_COMPILE([#include <sys/types.h>
1329 #include <utmp.h>],
1330 [struct utmp ut;  ut.ut_type = 0;],
1331 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
1332 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
1333     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
1334 fi 
1335
1336 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
1337 AC_TRY_COMPILE([#include <sys/types.h>
1338 #include <utmp.h>],
1339 [struct utmp ut;  ut.ut_pid = 0;],
1340 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
1341 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
1342     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
1343 fi 
1344
1345 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
1346 AC_TRY_COMPILE([#include <sys/types.h>
1347 #include <utmp.h>],
1348 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
1349 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
1350 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
1351     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
1352 fi 
1353
1354 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
1355 AC_TRY_COMPILE([#include <sys/types.h>
1356 #include <utmp.h>],
1357 [struct utmp ut;  ut.ut_addr = 0;],
1358 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
1359 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
1360     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
1361 fi 
1362
1363 if test x$ac_cv_func_pututline = xyes ; then
1364   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
1365   AC_TRY_COMPILE([#include <sys/types.h>
1366 #include <utmp.h>],
1367   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
1368   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
1369   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
1370       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
1371   fi
1372 fi
1373
1374 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
1375 AC_TRY_COMPILE([#include <sys/types.h>
1376 #include <utmpx.h>],
1377 [struct utmpx ux;  ux.ut_syslen = 0;],
1378 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
1379 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
1380     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
1381 fi 
1382
1383
1384 #################################################
1385 # check for libiconv support
1386 AC_MSG_CHECKING(whether to use libiconv)
1387 AC_ARG_WITH(libiconv,
1388 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
1389 [ case "$withval" in
1390   no)
1391     AC_MSG_RESULT(no)
1392     ;;
1393   *)
1394     AC_MSG_RESULT(yes)
1395     CFLAGS="$CFLAGS -I$withval/include"
1396     LDFLAGS="$LDFLAGS -L$withval/lib"
1397     AC_CHECK_LIB(iconv, iconv_open)
1398     AC_DEFINE_UNQUOTED(WITH_LIBICONV, "${withval}",[Path to iconv])
1399     ;;
1400   esac ],
1401   AC_MSG_RESULT(no)
1402 )
1403
1404
1405 ############
1406 # check for iconv in libc
1407 AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
1408 AC_TRY_RUN([
1409 #include <iconv.h>
1410 main() {
1411        iconv_t cd = iconv_open("ASCII", "UCS-2LE");
1412        if (cd == 0 || cd == (iconv_t)-1) return -1;
1413        return 0;
1414 }
1415 ],
1416 samba_cv_HAVE_NATIVE_ICONV=yes,samba_cv_HAVE_NATIVE_ICONV=no,samba_cv_HAVE_NATIVE_ICONV=cross)])
1417 if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
1418     AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
1419 fi
1420
1421
1422 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
1423 AC_TRY_RUN([
1424 #include <sys/types.h>
1425 #include <fcntl.h>
1426 #ifndef F_GETLEASE
1427 #define F_GETLEASE      1025
1428 #endif
1429 main() {
1430        int fd = open("/dev/null", O_RDONLY);
1431        return fcntl(fd, F_GETLEASE, 0) == -1;
1432 }
1433 ],
1434 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
1435 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
1436     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
1437 fi
1438
1439 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
1440 AC_TRY_RUN([
1441 #include <sys/types.h>
1442 #include <fcntl.h>
1443 #include <signal.h>
1444 #ifndef F_NOTIFY
1445 #define F_NOTIFY 1026
1446 #endif
1447 main() {
1448         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
1449 }
1450 ],
1451 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
1452 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
1453     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
1454 fi
1455
1456 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
1457 AC_TRY_RUN([
1458 #include <sys/types.h>
1459 #include <fcntl.h>
1460 #include <signal.h>
1461 #include <sys/file.h>
1462 #ifndef LOCK_MAND
1463 #define LOCK_MAND       32
1464 #define LOCK_READ       64
1465 #endif
1466 main() {
1467         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
1468 }
1469 ],
1470 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
1471 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
1472     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
1473 fi
1474
1475
1476
1477
1478 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
1479 AC_TRY_COMPILE([#include <sys/types.h>
1480 #include <fcntl.h>],
1481 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
1482 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
1483 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
1484     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
1485 fi
1486
1487 AC_CACHE_CHECK([for irix specific capabilities],samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES,[
1488 AC_TRY_RUN([#include <sys/types.h>
1489 #include <sys/capability.h>
1490 main() {
1491  cap_t cap;
1492  if ((cap = cap_get_proc()) == NULL)
1493    exit(1);
1494  cap->cap_effective |= CAP_NETWORK_MGT;
1495  cap->cap_inheritable |= CAP_NETWORK_MGT;
1496  cap_set_proc(cap);
1497  exit(0);
1498 }
1499 ],
1500 samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross)])
1501 if test x"$samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES" = x"yes"; then
1502     AC_DEFINE(HAVE_IRIX_SPECIFIC_CAPABILITIES,1,[Whether IRIX specific capabilities are available])
1503 fi
1504
1505 #
1506 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
1507 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
1508 #
1509
1510 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
1511 AC_TRY_COMPILE([#include <sys/types.h>
1512 #if defined(HAVE_RPC_RPC_H)
1513 #include <rpc/rpc.h>
1514 #endif],
1515 [int16 testvar;],
1516 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
1517 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
1518     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
1519 fi
1520
1521 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
1522 AC_TRY_COMPILE([#include <sys/types.h>
1523 #if defined(HAVE_RPC_RPC_H)
1524 #include <rpc/rpc.h>
1525 #endif],
1526 [uint16 testvar;],
1527 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
1528 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
1529     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
1530 fi
1531
1532 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
1533 AC_TRY_COMPILE([#include <sys/types.h>
1534 #if defined(HAVE_RPC_RPC_H)
1535 #include <rpc/rpc.h>
1536 #endif],
1537 [int32 testvar;],
1538 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
1539 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
1540     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
1541 fi
1542
1543 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
1544 AC_TRY_COMPILE([#include <sys/types.h>
1545 #if defined(HAVE_RPC_RPC_H)
1546 #include <rpc/rpc.h>
1547 #endif],
1548 [uint32 testvar;],
1549 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
1550 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
1551     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
1552 fi
1553
1554 dnl
1555 dnl Some systems (SCO) have a problem including
1556 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
1557 dnl as a #define in <prot.h> and as part of an enum
1558 dnl in <rpc/rpc.h>.
1559 dnl
1560
1561 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
1562 AC_TRY_COMPILE([#include <sys/types.h>
1563 #ifdef HAVE_SYS_SECURITY_H
1564 #include <sys/security.h>
1565 #include <prot.h>
1566 #endif  /* HAVE_SYS_SECURITY_H */
1567 #if defined(HAVE_RPC_RPC_H)
1568 #include <rpc/rpc.h>
1569 #endif],
1570 [int testvar;],
1571 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
1572 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
1573     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
1574 fi
1575
1576 AC_MSG_CHECKING([for test routines])
1577 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
1578            AC_MSG_RESULT(yes),
1579            AC_MSG_ERROR([cant find test code. Aborting config]),
1580            AC_MSG_WARN([cannot run when cross-compiling]))
1581
1582 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
1583 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
1584            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
1585 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
1586     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
1587 fi
1588
1589 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
1590 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
1591            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
1592            samba_cv_HAVE_WORKING_AF_LOCAL=no,
1593            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
1594 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
1595 then
1596     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
1597 fi
1598
1599 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
1600 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
1601            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
1602 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
1603     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
1604 fi
1605
1606 AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
1607 SAVE_CPPFLAGS="$CPPFLAGS"
1608 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt  -I${srcdir-.}/smbwrapper"
1609 AC_TRY_COMPILE([
1610 #define REPLACE_GETPASS 1
1611 #define NO_CONFIG_H 1
1612 #define main dont_declare_main
1613 #include "${srcdir-.}/lib/getsmbpass.c"
1614 #undef main
1615 ],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
1616 CPPFLAGS="$SAVE_CPPFLAGS"
1617 ])
1618 if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
1619         AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
1620 fi
1621
1622 AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
1623 AC_TRY_RUN([
1624 #include <stdio.h>
1625 #include <sys/types.h>
1626 #include <netinet/in.h>
1627 #ifdef HAVE_ARPA_INET_H
1628 #include <arpa/inet.h>
1629 #endif
1630 main() { struct in_addr ip; ip.s_addr = 0x12345678;
1631 if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
1632     strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
1633 exit(1);}],
1634            samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
1635 if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
1636     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
1637 fi
1638
1639 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
1640 AC_TRY_RUN([#include <stdlib.h>
1641 #include <sys/types.h>
1642 #include <sys/stat.h>
1643 #include <unistd.h>
1644 main() { 
1645   struct stat st;
1646   char tpl[20]="/tmp/test.XXXXXX"; 
1647   int fd = mkstemp(tpl); 
1648   if (fd == -1) exit(1);
1649   unlink(tpl);
1650   if (fstat(fd, &st) != 0) exit(1);
1651   if ((st.st_mode & 0777) != 0600) exit(1);
1652   exit(0);
1653 }],
1654 samba_cv_HAVE_SECURE_MKSTEMP=yes,
1655 samba_cv_HAVE_SECURE_MKSTEMP=no,
1656 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
1657 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
1658     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
1659 fi
1660
1661 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
1662 AC_TRY_RUN([#include <unistd.h>
1663 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
1664 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
1665 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
1666     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
1667 fi
1668
1669 AC_CACHE_CHECK([for root],samba_cv_HAVE_ROOT,[
1670 AC_TRY_RUN([main() { exit(getuid() != 0); }],
1671            samba_cv_HAVE_ROOT=yes,samba_cv_HAVE_ROOT=no,samba_cv_HAVE_ROOT=cross)])
1672 if test x"$samba_cv_HAVE_ROOT" = x"yes"; then
1673     AC_DEFINE(HAVE_ROOT,1,[Whether current user is root])
1674 else
1675     AC_MSG_WARN(running as non-root will disable some tests)
1676 fi
1677
1678 ##################
1679 # look for a method of finding the list of network interfaces
1680 iface=no;
1681 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
1682 AC_TRY_RUN([
1683 #define HAVE_IFACE_AIX 1
1684 #define AUTOCONF_TEST 1
1685 #include "confdefs.h"
1686 #include "${srcdir-.}/lib/interfaces.c"],
1687            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
1688 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
1689     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
1690 fi
1691
1692 if test $iface = no; then
1693 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
1694 AC_TRY_RUN([
1695 #define HAVE_IFACE_IFCONF 1
1696 #define AUTOCONF_TEST 1
1697 #include "confdefs.h"
1698 #include "${srcdir-.}/lib/interfaces.c"],
1699            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
1700 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
1701     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
1702 fi
1703 fi
1704
1705 if test $iface = no; then
1706 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
1707 AC_TRY_RUN([
1708 #define HAVE_IFACE_IFREQ 1
1709 #define AUTOCONF_TEST 1
1710 #include "confdefs.h"
1711 #include "${srcdir-.}/lib/interfaces.c"],
1712            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
1713 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
1714     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
1715 fi
1716 fi
1717
1718
1719 ################################################
1720 # look for a method of setting the effective uid
1721 seteuid=no;
1722 if test $seteuid = no; then
1723 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
1724 AC_TRY_RUN([
1725 #define AUTOCONF_TEST 1
1726 #define USE_SETRESUID 1
1727 #include "confdefs.h"
1728 #include "${srcdir-.}/lib/util_sec.c"],
1729            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
1730 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
1731     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
1732 fi
1733 fi
1734
1735
1736 if test $seteuid = no; then
1737 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
1738 AC_TRY_RUN([
1739 #define AUTOCONF_TEST 1
1740 #define USE_SETREUID 1
1741 #include "confdefs.h"
1742 #include "${srcdir-.}/lib/util_sec.c"],
1743            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
1744 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
1745     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
1746 fi
1747 fi
1748
1749 if test $seteuid = no; then
1750 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
1751 AC_TRY_RUN([
1752 #define AUTOCONF_TEST 1
1753 #define USE_SETEUID 1
1754 #include "confdefs.h"
1755 #include "${srcdir-.}/lib/util_sec.c"],
1756            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
1757 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
1758     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
1759 fi
1760 fi
1761
1762 if test $seteuid = no; then
1763 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
1764 AC_TRY_RUN([
1765 #define AUTOCONF_TEST 1
1766 #define USE_SETUIDX 1
1767 #include "confdefs.h"
1768 #include "${srcdir-.}/lib/util_sec.c"],
1769            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
1770 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
1771     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
1772 fi
1773 fi
1774
1775
1776 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
1777 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
1778            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
1779 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
1780     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
1781 fi
1782
1783 AC_CACHE_CHECK([for ftruncate needs root],samba_cv_FTRUNCATE_NEEDS_ROOT,[
1784 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncroot.c"],
1785            samba_cv_FTRUNCATE_NEEDS_ROOT=yes,samba_cv_FTRUNCATE_NEEDS_ROOT=no,samba_cv_FTRUNCATE_NEEDS_ROOT=cross)])
1786 if test x"$samba_cv_FTRUNCATE_NEEDS_ROOT" = x"yes"; then
1787     AC_DEFINE(FTRUNCATE_NEEDS_ROOT,1,[Whether ftruncate() needs root])
1788 fi
1789
1790 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
1791 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
1792            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
1793 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
1794     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
1795 fi
1796
1797 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
1798 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
1799            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
1800 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
1801     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
1802
1803 else
1804
1805 dnl
1806 dnl Don't check for 64 bit fcntl locking if we know that the
1807 dnl glibc2.1 broken check has succeeded.
1808 dnl 
1809
1810   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
1811   AC_TRY_RUN([
1812 #if defined(HAVE_UNISTD_H)
1813 #include <unistd.h>
1814 #endif
1815 #include <stdio.h>
1816 #include <stdlib.h>
1817
1818 #ifdef HAVE_FCNTL_H
1819 #include <fcntl.h>
1820 #endif
1821
1822 #ifdef HAVE_SYS_FCNTL_H
1823 #include <sys/fcntl.h>
1824 #endif
1825 main() { struct flock64 fl64;
1826 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
1827 exit(0);
1828 #else
1829 exit(1);
1830 #endif
1831 }],
1832        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
1833
1834   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
1835       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
1836   fi
1837 fi
1838
1839 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
1840 AC_TRY_COMPILE([#include <sys/types.h>
1841 #include <sys/stat.h>
1842 #include <unistd.h>],
1843 [struct stat st;  st.st_blocks = 0;],
1844 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
1845 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
1846     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
1847 fi 
1848
1849 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
1850 AC_TRY_COMPILE([#include <sys/types.h>
1851 #include <sys/stat.h>
1852 #include <unistd.h>],
1853 [struct stat st;  st.st_blksize = 0;],
1854 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
1855 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
1856     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
1857 fi
1858
1859 case "$host_os" in
1860 *linux*)
1861 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
1862 AC_TRY_COMPILE([
1863 #ifdef HAVE_SYS_VFS_H
1864 #include <sys/vfs.h>
1865 #endif
1866 #ifdef HAVE_SYS_CAPABILITY_H
1867 #include <sys/capability.h>
1868 #endif
1869 ],[int i;],
1870    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
1871 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
1872    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
1873 fi
1874 ;;
1875 esac
1876
1877 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
1878 AC_TRY_COMPILE([#include <sys/acl.h>
1879 #if defined(HAVE_RPCSVC_NIS_H)
1880 #include <rpcsvc/nis.h>
1881 #endif],
1882 [int i;],
1883 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
1884 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
1885         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
1886 fi
1887
1888
1889 #################################################
1890 # check for smbwrapper support
1891 AC_MSG_CHECKING(whether to use smbwrapper)
1892 AC_ARG_WITH(smbwrapper,
1893 [  --with-smbwrapper       Include SMB wrapper support (default=no) ],
1894 [ case "$withval" in
1895   yes)
1896     AC_MSG_RESULT(yes)
1897     AC_DEFINE(WITH_SMBWRAPPER,1,[Whether to include smbwrapper support])
1898         WRAPPROG="bin/smbsh\$(EXEEXT)"
1899         WRAP="bin/smbwrapper.$SHLIBEXT"
1900
1901         if test x$ATTEMPT_WRAP32_BUILD = x; then
1902                 WRAP32=""
1903         else
1904                         WRAP32=bin/smbwrapper.32.$SHLIBEXT
1905         fi
1906
1907 # Conditions under which smbwrapper should not be built.
1908
1909         if test x$PICFLAG = x; then
1910            echo No support for PIC code - disabling smbwrapper and smbsh
1911            WRAPPROG=""
1912            WRAP=""
1913            WRAP32=""
1914         elif test x$ac_cv_func_syscall = xno; then
1915            AC_MSG_RESULT([No syscall() -- disabling smbwrapper and smbsh])
1916            WRAPPROG=""
1917            WRAP=""
1918            WRAP32=""
1919         fi
1920         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WRAPPROG $WRAP $WRAP32"
1921         SMBWRAPPER="$WRAPPROG $WRAP $WRAP32"
1922     ;;
1923   *)
1924     AC_MSG_RESULT(no)
1925     ;;
1926   esac ],
1927   AC_MSG_RESULT(no)
1928 )
1929
1930 #################################################
1931 # check for AFS clear-text auth support
1932 AC_MSG_CHECKING(whether to use AFS clear-text auth)
1933 AC_ARG_WITH(afs,
1934 [  --with-afs              Include AFS clear-text auth support (default=no) ],
1935 [ case "$withval" in
1936   yes)
1937     AC_MSG_RESULT(yes)
1938     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
1939     ;;
1940   *)
1941     AC_MSG_RESULT(no)
1942     ;;
1943   esac ],
1944   AC_MSG_RESULT(no)
1945 )
1946
1947
1948 #################################################
1949 # check for the DFS clear-text auth system
1950 AC_MSG_CHECKING(whether to use DFS clear-text auth)
1951 AC_ARG_WITH(dfs,
1952 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
1953 [ case "$withval" in
1954   yes)
1955     AC_MSG_RESULT(yes)
1956     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
1957     ;;
1958   *)
1959     AC_MSG_RESULT(no)
1960     ;;
1961   esac ],
1962   AC_MSG_RESULT(no)
1963 )
1964
1965 #################################################
1966 # active directory support
1967
1968 with_ads_support=yes
1969 AC_MSG_CHECKING([whether to use Active Directory])
1970
1971 AC_ARG_WITH(ads,
1972 [   --with-ads  Active Directory support (default yes)],
1973 [ case "$withval" in
1974     no)
1975         with_ads_support=no
1976         ;;
1977   esac ])
1978
1979 if test x"$with_ads_support" = x"yes"; then
1980    AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
1981 fi
1982
1983 AC_MSG_RESULT($with_ads_support)
1984
1985 FOUND_KRB5=no
1986 if test x"$with_ads_support" = x"yes"; then
1987
1988   #################################################
1989   # check for location of Kerberos 5 install
1990   AC_MSG_CHECKING(for kerberos 5 install path)
1991   AC_ARG_WITH(krb5,
1992   [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
1993   [ case "$withval" in
1994     no)
1995       AC_MSG_RESULT(no)
1996       ;;
1997     *)
1998       AC_MSG_RESULT(yes)
1999       LIBS="$LIBS -lkrb5"
2000       CFLAGS="$CFLAGS -I$withval/include"
2001       CPPFLAGS="$CPPFLAGS -I$withval/include"
2002       LDFLAGS="$LDFLAGS -L$withval/lib"
2003       FOUND_KRB5=yes
2004       ;;
2005     esac ],
2006     AC_MSG_RESULT(no)
2007   )
2008
2009
2010 if test x$FOUND_KRB5 = x"no"; then
2011 #################################################
2012 # see if this box has the SuSE location for the heimdal kerberos implementation
2013 AC_MSG_CHECKING(for /usr/include/heimdal)
2014 if test -d /usr/include/heimdal; then
2015     CFLAGS="$CFLAGS -I/usr/include/heimdal"
2016     CPPFLAGS="$CPPFLAGS -I/usr/include/heimdal"
2017     AC_MSG_RESULT(yes)
2018 else
2019     AC_MSG_RESULT(no)
2020 fi
2021 fi
2022
2023
2024 if test x$FOUND_KRB5 = x"no"; then
2025 #################################################
2026 # see if this box has the RedHat location for kerberos
2027 AC_MSG_CHECKING(for /usr/kerberos)
2028 if test -d /usr/kerberos; then
2029     LDFLAGS="$LDFLAGS -L/usr/kerberos/lib"
2030     CFLAGS="$CFLAGS -I/usr/kerberos/include"
2031     CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
2032     AC_MSG_RESULT(yes)
2033 else
2034     AC_MSG_RESULT(no)
2035 fi
2036 fi
2037
2038
2039   # now check for krb5.h. Some systems have the libraries without the headers!
2040   # note that this check is done here to allow for different kerberos
2041   # include paths
2042   AC_CHECK_HEADERS(krb5.h)
2043
2044   # now check for gssapi headers.  This is also done here to allow for
2045   # different kerberos include paths
2046   AC_CHECK_HEADERS(gssapi/gssapi_generic.h gssapi/gssapi.h)
2047
2048   ##################################################################
2049   # we might need the k5crypto and com_err libraries on some systems
2050   AC_CHECK_LIB(com_err, _et_list, [LIBS="$LIBS -lcom_err"])
2051   AC_CHECK_LIB(k5crypto, krb5_encrypt_data, [LIBS="$LIBS -lk5crypto"])
2052
2053   ########################################################
2054   # now see if we can find the krb5 libs in standard paths
2055   # or as specified above
2056   AC_CHECK_LIB(krb5, krb5_mk_req_extended, [LIBS="$LIBS -lkrb5";
2057         AC_DEFINE(HAVE_KRB5,1,[Whether KRB5 is available])])
2058
2059   ########################################################
2060   # now see if we can find the gssapi libs in standard paths
2061   AC_CHECK_LIB(gssapi_krb5, gss_display_status, [LIBS="$LIBS -lgssapi_krb5";
2062         AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])])
2063 fi
2064
2065 ########################################################
2066 # Compile with LDAP support?
2067
2068 with_ldap_support=yes
2069 AC_MSG_CHECKING([whether to use LDAP])
2070
2071 AC_ARG_WITH(ldap,
2072 [   --with-ldap  LDAP support (default yes)],
2073 [ case "$withval" in
2074     no)
2075         with_ldap_support=no
2076         ;;
2077   esac ])
2078
2079 AC_MSG_RESULT($with_ldap_support)
2080
2081 if test x"$with_ldap_support" = x"yes"; then
2082
2083   ##################################################################
2084   # we might need the lber lib on some systems. To avoid link errors
2085   # this test must be before the libldap test
2086   AC_CHECK_LIB(lber, ber_scanf, [LIBS="$LIBS -llber"])
2087
2088   ########################################################
2089   # now see if we can find the ldap libs in standard paths
2090   if test x$have_ldap != xyes; then
2091   AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap";
2092         AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])])
2093
2094         ########################################################
2095         # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
2096         # Check found in pam_ldap 145.
2097         AC_CHECK_FUNCS(ldap_set_rebind_proc)
2098         AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, pam_ldap_cv_ldap_set_rebind_proc, [
2099         AC_TRY_COMPILE([
2100         #include <lber.h>
2101         #include <ldap.h>], [ldap_set_rebind_proc(0, 0, 0);], [pam_ldap_cv_ldap_set_rebind_proc=3], [pam_ldap_cv_ldap_set_rebind_proc=2]) ])
2102         AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $pam_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
2103   fi
2104 fi
2105
2106 ########################################################
2107 # Compile with MySQL support?
2108 AM_PATH_MYSQL([0.11.0],[MODULE_MYSQL=bin/mysql.so],[MODULE_MYSQL=])
2109 CFLAGS="$CFLAGS $MYSQL_CFLAGS"
2110 AC_SUBST(MODULE_MYSQL)
2111
2112 ########################################################
2113 # Compile with XML support?
2114 AM_PATH_XML2([2.0.0],[MODULE_XML=bin/xml.so],[MODULE_XML=])
2115 CFLAGS="$CFLAGS $XML_CFLAGS"
2116 AC_SUBST(MODULE_XML)
2117
2118 #################################################
2119 # check for automount support
2120 AC_MSG_CHECKING(whether to use automount)
2121 AC_ARG_WITH(automount,
2122 [  --with-automount        Include automount support (default=no)],
2123 [ case "$withval" in
2124   yes)
2125     AC_MSG_RESULT(yes)
2126     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
2127     ;;
2128   *)
2129     AC_MSG_RESULT(no)
2130     ;;
2131   esac ],
2132   AC_MSG_RESULT(no)
2133 )
2134
2135 #################################################
2136 # check for smbmount support
2137 AC_MSG_CHECKING(whether to use smbmount)
2138 AC_ARG_WITH(smbmount,
2139 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
2140 [ case "$withval" in
2141   yes)
2142         case "$host_os" in
2143         *linux*)
2144                 AC_MSG_RESULT(yes)
2145                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
2146                 EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbmount bin/smbmnt bin/smbumount"
2147                 ;;
2148         *)
2149                 AC_MSG_ERROR(not on a linux system!)
2150                 ;;
2151         esac
2152     ;;
2153   *)
2154     AC_MSG_RESULT(no)
2155     ;;
2156   esac ],
2157   AC_MSG_RESULT(no)
2158 )
2159
2160
2161 #################################################
2162 # check for a PAM clear-text auth, accounts, password and session support
2163 with_pam_for_crypt=no
2164 AC_MSG_CHECKING(whether to use PAM)
2165 AC_ARG_WITH(pam,
2166 [  --with-pam              Include PAM support (default=no)],
2167 [ case "$withval" in
2168   yes)
2169     AC_MSG_RESULT(yes)
2170     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
2171     AUTHLIBS="$AUTHLIBS -lpam"
2172     with_pam_for_crypt=yes
2173     ;;
2174   *)
2175     AC_MSG_RESULT(no)
2176     ;;
2177   esac ],
2178   AC_MSG_RESULT(no)
2179 )
2180
2181 # we can't build a pam module if we don't have pam.
2182 AC_CHECK_LIB(pam, pam_get_data, [AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])])
2183
2184 #################################################
2185 # check for pam_smbpass support
2186 AC_MSG_CHECKING(whether to use pam_smbpass)
2187 AC_ARG_WITH(pam_smbpass,
2188 [  --with-pam_smbpass      Build a PAM module to allow other applications to use our smbpasswd file (default=no)],
2189 [ case "$withval" in
2190   yes)
2191     AC_MSG_RESULT(yes)
2192
2193 # Conditions under which pam_smbpass should not be built.
2194
2195        if test x$PICFLAG = x; then
2196           AC_MSG_RESULT([No support for PIC code - disabling pam_smbpass])
2197        elif test x$ac_cv_lib_pam_pam_get_data = xno; then
2198           AC_MSG_RESULT([No libpam found -- disabling pam_smbpass])
2199        else
2200           SHLIB_PROGS="$SHLIB_PROGS bin/pam_smbpass.so"
2201        fi
2202     ;;
2203   *)
2204     AC_MSG_RESULT(no)
2205     ;;
2206   esac ],
2207   AC_MSG_RESULT(no)
2208 )
2209
2210
2211 ###############################################
2212 # test for where we get crypt() from, but only
2213 # if not using PAM
2214 if test x"$with_pam_for_crypt" = x"no"; then
2215 AC_CHECK_FUNCS(crypt)
2216 if test x"$ac_cv_func_crypt" = x"no"; then
2217     AC_CHECK_LIB(crypt, crypt, [AUTHLIBS="$AUTHLIBS -lcrypt";
2218         AC_DEFINE(HAVE_CRYPT,1,[Whether crypt() is available])])
2219 fi
2220 fi
2221
2222 ##
2223 ## moved after the check for -lcrypt in order to
2224 ## ensure that the necessary libraries are included
2225 ## check checking for truncated salt.  Wrapped by the
2226 ## $with_pam_for_crypt variable as above   --jerry
2227 ##
2228 if test $with_pam_for_crypt = no; then
2229 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
2230 crypt_LIBS="$LIBS"
2231 LIBS="$AUTHLIBS $LIBS"
2232 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
2233         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
2234 LIBS="$crypt_LIBS"])
2235 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
2236         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
2237 fi
2238 fi
2239
2240 # New experimental SAM system
2241
2242 AC_MSG_CHECKING([whether to build the new (experimental) SAM database])
2243 AC_ARG_WITH(sam,
2244 [  --with-sam              Build new (experimental) SAM database (default=no)],
2245 [ case "$withval" in
2246   yes)
2247     AC_MSG_RESULT(yes)
2248     AC_DEFINE(WITH_SAM,1,[Whether to build the new (experimental) SAM database])
2249     ;;
2250   *)
2251     AC_MSG_RESULT(no)
2252     ;;
2253   esac ],
2254   AC_MSG_RESULT(no)
2255 )
2256
2257
2258 ########################################################################################
2259 ##
2260 ## TESTS FOR SAM BACKENDS.  KEEP THESE GROUPED TOGETHER
2261 ##
2262 ########################################################################################
2263
2264 #################################################
2265 # check for a LDAP password database configuration backwards compatibility
2266 AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration)
2267 AC_ARG_WITH(ldapsam,
2268 [  --with-ldapsam           Include LDAP SAM 2.2 compatible configuration (default=no)],
2269 [ case "$withval" in
2270   yes)
2271     AC_MSG_RESULT(yes)
2272     AC_DEFINE(WITH_LDAP_SAMCONFIG,1,[Whether to include 2.2 compatibel LDAP SAM configuration])
2273     ;;
2274   *)
2275     AC_MSG_RESULT(no)
2276     ;;
2277   esac ],
2278   AC_MSG_RESULT(no)
2279 )
2280
2281 #################################################
2282 # check for a TDB password database
2283 AC_MSG_CHECKING(whether to use TDB SAM database)
2284 AC_ARG_WITH(tdbsam,
2285 [  --with-tdbsam           Include experimental TDB SAM support (default=no)],
2286 [ case "$withval" in
2287   yes)
2288     AC_MSG_RESULT(yes)
2289     AC_DEFINE(WITH_TDB_SAM,1,[Whether to include experimental TDB SAM support])
2290     ;;
2291   *)
2292     AC_MSG_RESULT(no)
2293     ;;
2294   esac ],
2295   AC_MSG_RESULT(no)
2296 )
2297
2298 #################################################
2299 # check for a NISPLUS password database
2300 AC_MSG_CHECKING(whether to use NISPLUS SAM database)
2301 AC_ARG_WITH(nisplussam,
2302 [  --with-nisplussam       Include NISPLUS SAM support (default=no)],
2303 [ case "$withval" in
2304   yes)
2305     AC_MSG_RESULT(yes)
2306     AC_DEFINE(WITH_NISPLUS_SAM,1,[Whether to include nisplus SAM support])
2307     ;;
2308   *)
2309     AC_MSG_RESULT(no)
2310     ;;
2311   esac ],
2312   AC_MSG_RESULT(no)
2313 )
2314
2315 ########################################################################################
2316 ##
2317 ## END OF TESTS FOR SAM BACKENDS.  
2318 ##
2319 ########################################################################################
2320
2321 #################################################
2322 # check for a NISPLUS_HOME support 
2323 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
2324 AC_ARG_WITH(nisplus-home,
2325 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
2326 [ case "$withval" in
2327   yes)
2328     AC_MSG_RESULT(yes)
2329     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
2330     ;;
2331   *)
2332     AC_MSG_RESULT(no)
2333     ;;
2334   esac ],
2335   AC_MSG_RESULT(no)
2336 )
2337
2338 #################################################
2339 # check for syslog logging
2340 AC_MSG_CHECKING(whether to use syslog logging)
2341 AC_ARG_WITH(syslog,
2342 [  --with-syslog           Include experimental SYSLOG support (default=no)],
2343 [ case "$withval" in
2344   yes)
2345     AC_MSG_RESULT(yes)
2346     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
2347     ;;
2348   *)
2349     AC_MSG_RESULT(no)
2350     ;;
2351   esac ],
2352   AC_MSG_RESULT(no)
2353 )
2354
2355 #################################################
2356 # check for a shared memory profiling support
2357 AC_MSG_CHECKING(whether to use profiling)
2358 AC_ARG_WITH(profiling-data,
2359 [  --with-profiling-data   Include gathering source code profile information (default=no)],
2360 [ case "$withval" in
2361   yes)
2362     AC_MSG_RESULT(yes)
2363     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
2364     ;;
2365   *)
2366     AC_MSG_RESULT(no)
2367     ;;
2368   esac ],
2369   AC_MSG_RESULT(no)
2370 )
2371
2372
2373 #################################################
2374 # check for experimental disk-quotas support
2375 QUOTAOBJS=smbd/noquotas.o
2376
2377 AC_MSG_CHECKING(whether to support disk-quotas)
2378 AC_ARG_WITH(quotas,
2379 [  --with-quotas           Include experimental disk-quota support (default=no)],
2380 [ case "$withval" in
2381   yes)
2382     AC_MSG_RESULT(yes)
2383     case "$host_os" in
2384       *linux*)
2385         # Check for kernel 2.4.x quota braindamage...
2386         AC_CACHE_CHECK([for linux 2.4.x quota braindamage..],samba_cv_linux_2_4_quota_braindamage, [
2387         AC_TRY_COMPILE([#include <stdio.h>
2388 #include <sys/types.h>
2389 #include <asm/types.h>
2390 #include <linux/quota.h>
2391 #include <mntent.h>
2392 #include <linux/unistd.h>],[struct mem_dqblk D;],
2393       samba_cv_linux_2_4_quota_braindamage=yes,samba_cv_linux_2_4_quota_braindamage=no)])
2394 if test x"$samba_cv_linux_2_4_quota_braindamage" = x"yes"; then
2395         AC_DEFINE(LINUX_QUOTAS_2,1,[linux 2.4.x quota braindamage])
2396 else
2397         AC_DEFINE(LINUX_QUOTAS_1,1,[linux quotas])
2398 fi
2399         ;;
2400       *)
2401         ;;
2402     esac
2403     QUOTAOBJS=smbd/quotas.o
2404     AC_DEFINE(WITH_QUOTAS,1,[Whether to include experimental quota support])
2405     ;;
2406   *)
2407     AC_MSG_RESULT(no)
2408     ;;
2409   esac ],
2410   AC_MSG_RESULT(no)
2411 )
2412 AC_SUBST(QUOTAOBJS)
2413
2414 #################################################
2415 # check for experimental utmp accounting
2416
2417 AC_MSG_CHECKING(whether to support utmp accounting)
2418 AC_ARG_WITH(utmp,
2419 [  --with-utmp             Include experimental utmp accounting (default=no)],
2420 [ case "$withval" in
2421   yes)
2422     AC_MSG_RESULT(yes)
2423     AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
2424     ;;
2425   *)
2426     AC_MSG_RESULT(no)
2427     ;;
2428   esac ],
2429   AC_MSG_RESULT(no)
2430 )
2431
2432 #################################################
2433 # choose native language(s) of man pages
2434 AC_MSG_CHECKING(chosen man pages' language(s))
2435 AC_ARG_WITH(manpages-langs,
2436 [  --with-manpages-langs={en,ja,pl}  Choose man pages' language(s). (en)],
2437 [ case "$withval" in
2438   yes|no)
2439     AC_MSG_WARN(--with-manpages-langs called without argument - will use default)
2440     manlangs="en"
2441   ;;
2442   *)
2443     manlangs="$withval"
2444   ;;
2445   esac
2446
2447   AC_MSG_RESULT($manlangs)
2448   manlangs=`echo $manlangs | sed "s/,/ /g"`   # replacing commas with spaces to produce a list
2449   AC_SUBST(manlangs)],
2450
2451   [manlangs="en"
2452   AC_MSG_RESULT($manlangs)
2453   AC_SUBST(manlangs)]
2454 )
2455
2456 #################################################
2457 # should we build libsmbclient?
2458
2459 LIBSMBCLIENT_SHARED=
2460 LIBSMBCLIENT=
2461 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
2462 AC_ARG_WITH(libsmbclient,
2463 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes)],
2464 [ case "$withval" in
2465   no) 
2466      AC_MSG_RESULT(no)
2467      ;;
2468   *)
2469      if test $BLDSHARED = true; then
2470         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
2471         LIBSMBCLIENT=libsmbclient
2472         AC_MSG_RESULT(yes)
2473      else
2474         AC_MSG_RESULT(no shared library support)
2475      fi
2476      ;;
2477   esac ],
2478   AC_MSG_RESULT(yes)
2479 )
2480
2481
2482 #################################################
2483 # these tests are taken from the GNU fileutils package
2484 AC_CHECKING(how to get filesystem space usage)
2485 space=no
2486
2487 # Test for statvfs64.
2488 if test $space = no; then
2489   # SVR4
2490   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
2491   [AC_TRY_RUN([
2492 #if defined(HAVE_UNISTD_H)
2493 #include <unistd.h>
2494 #endif
2495 #include <sys/types.h>
2496 #include <sys/statvfs.h>
2497   main ()
2498   {
2499     struct statvfs64 fsd;
2500     exit (statvfs64 (".", &fsd));
2501   }],
2502   fu_cv_sys_stat_statvfs64=yes,
2503   fu_cv_sys_stat_statvfs64=no,
2504   fu_cv_sys_stat_statvfs64=cross)])
2505   if test $fu_cv_sys_stat_statvfs64 = yes; then
2506     space=yes
2507     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
2508   fi
2509 fi
2510
2511 # Perform only the link test since it seems there are no variants of the
2512 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
2513 # because that got a false positive on SCO OSR5.  Adding the declaration
2514 # of a `struct statvfs' causes this test to fail (as it should) on such
2515 # systems.  That system is reported to work fine with STAT_STATFS4 which
2516 # is what it gets when this test fails.
2517 if test $space = no; then
2518   # SVR4
2519   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
2520                  [AC_TRY_LINK([#include <sys/types.h>
2521 #include <sys/statvfs.h>],
2522                               [struct statvfs fsd; statvfs (0, &fsd);],
2523                               fu_cv_sys_stat_statvfs=yes,
2524                               fu_cv_sys_stat_statvfs=no)])
2525   if test $fu_cv_sys_stat_statvfs = yes; then
2526     space=yes
2527     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
2528   fi
2529 fi
2530
2531 if test $space = no; then
2532   # DEC Alpha running OSF/1
2533   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
2534   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
2535   [AC_TRY_RUN([
2536 #include <sys/param.h>
2537 #include <sys/types.h>
2538 #include <sys/mount.h>
2539   main ()
2540   {
2541     struct statfs fsd;
2542     fsd.f_fsize = 0;
2543     exit (statfs (".", &fsd, sizeof (struct statfs)));
2544   }],
2545   fu_cv_sys_stat_statfs3_osf1=yes,
2546   fu_cv_sys_stat_statfs3_osf1=no,
2547   fu_cv_sys_stat_statfs3_osf1=no)])
2548   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
2549   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
2550     space=yes
2551     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
2552   fi
2553 fi
2554
2555 if test $space = no; then
2556 # AIX
2557   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
2558 member (AIX, 4.3BSD)])
2559   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
2560   [AC_TRY_RUN([
2561 #ifdef HAVE_SYS_PARAM_H
2562 #include <sys/param.h>
2563 #endif
2564 #ifdef HAVE_SYS_MOUNT_H
2565 #include <sys/mount.h>
2566 #endif
2567 #ifdef HAVE_SYS_VFS_H
2568 #include <sys/vfs.h>
2569 #endif
2570   main ()
2571   {
2572   struct statfs fsd;
2573   fsd.f_bsize = 0;
2574   exit (statfs (".", &fsd));
2575   }],
2576   fu_cv_sys_stat_statfs2_bsize=yes,
2577   fu_cv_sys_stat_statfs2_bsize=no,
2578   fu_cv_sys_stat_statfs2_bsize=no)])
2579   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
2580   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
2581     space=yes
2582     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
2583   fi
2584 fi
2585
2586 if test $space = no; then
2587 # SVR3
2588   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
2589   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
2590   [AC_TRY_RUN([#include <sys/types.h>
2591 #include <sys/statfs.h>
2592   main ()
2593   {
2594   struct statfs fsd;
2595   exit (statfs (".", &fsd, sizeof fsd, 0));
2596   }],
2597     fu_cv_sys_stat_statfs4=yes,
2598     fu_cv_sys_stat_statfs4=no,
2599     fu_cv_sys_stat_statfs4=no)])
2600   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
2601   if test $fu_cv_sys_stat_statfs4 = yes; then
2602     space=yes
2603     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
2604   fi
2605 fi
2606
2607 if test $space = no; then
2608 # 4.4BSD and NetBSD
2609   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
2610 member (4.4BSD and NetBSD)])
2611   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
2612   [AC_TRY_RUN([#include <sys/types.h>
2613 #ifdef HAVE_SYS_PARAM_H
2614 #include <sys/param.h>
2615 #endif
2616 #ifdef HAVE_SYS_MOUNT_H
2617 #include <sys/mount.h>
2618 #endif
2619   main ()
2620   {
2621   struct statfs fsd;
2622   fsd.f_fsize = 0;
2623   exit (statfs (".", &fsd));
2624   }],
2625   fu_cv_sys_stat_statfs2_fsize=yes,
2626   fu_cv_sys_stat_statfs2_fsize=no,
2627   fu_cv_sys_stat_statfs2_fsize=no)])
2628   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
2629   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
2630     space=yes
2631         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
2632   fi
2633 fi
2634
2635 if test $space = no; then
2636   # Ultrix
2637   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
2638   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
2639   [AC_TRY_RUN([#include <sys/types.h>
2640 #ifdef HAVE_SYS_PARAM_H
2641 #include <sys/param.h>
2642 #endif
2643 #ifdef HAVE_SYS_MOUNT_H
2644 #include <sys/mount.h>
2645 #endif
2646 #ifdef HAVE_SYS_FS_TYPES_H
2647 #include <sys/fs_types.h>
2648 #endif
2649   main ()
2650   {
2651   struct fs_data fsd;
2652   /* Ultrix's statfs returns 1 for success,
2653      0 for not mounted, -1 for failure.  */
2654   exit (statfs (".", &fsd) != 1);
2655   }],
2656   fu_cv_sys_stat_fs_data=yes,
2657   fu_cv_sys_stat_fs_data=no,
2658   fu_cv_sys_stat_fs_data=no)])
2659   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
2660   if test $fu_cv_sys_stat_fs_data = yes; then
2661     space=yes
2662     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
2663   fi
2664 fi
2665
2666 #
2667 # As a gating factor for large file support, in order to
2668 # use <4GB files we must have the following minimal support
2669 # available.
2670 # long long, and a 64 bit off_t or off64_t.
2671 # If we don't have all of these then disable large
2672 # file support.
2673 #
2674 AC_MSG_CHECKING([if large file support can be enabled])
2675 AC_TRY_COMPILE([
2676 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
2677 #include <sys/types.h>
2678 #else
2679 __COMPILE_ERROR_
2680 #endif
2681 ],
2682 [int i],
2683 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
2684 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
2685         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
2686 fi
2687 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
2688
2689 AC_ARG_WITH(spinlocks, 
2690 [  --with-spinlocks        Use spin locks instead of fcntl locks (default=no) ])
2691 if test "x$with_spinlocks" = "xyes"; then
2692     AC_DEFINE(USE_SPINLOCKS,1,[Whether to use spin locks instead of fcntl locks])
2693
2694     case "$host_cpu" in
2695         sparc)
2696             AC_DEFINE(SPARC_SPINLOCKS,1,[Whether to use sparc spinlocks])
2697             ;;
2698
2699         i386|i486|i586|i686)
2700             AC_DEFINE(INTEL_SPINLOCKS,1,[Whether to use intel spinlocks])
2701             ;;
2702
2703         mips)
2704             AC_DEFINE(MIPS_SPINLOCKS,1,[Whether to use mips spinlocks])
2705             ;;
2706
2707         powerpc)
2708             AC_DEFINE(POWERPC_SPINLOCKS,1,[Whether to use powerpc spinlocks])
2709             ;;
2710     esac
2711 fi
2712
2713 #################################################
2714 # check for ACL support
2715
2716 AC_MSG_CHECKING(whether to support ACLs)
2717 AC_ARG_WITH(acl-support,
2718 [  --with-acl-support      Include ACL support (default=no)],
2719 [ case "$withval" in
2720   yes)
2721
2722         case "$host_os" in
2723         *sysv5*)
2724                 AC_MSG_RESULT(Using UnixWare ACLs)
2725                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
2726                 ;;
2727         *solaris*)
2728                 AC_MSG_RESULT(Using solaris ACLs)
2729                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
2730                 ;;
2731         *hpux*)
2732                 AC_MSG_RESULT(Using HPUX ACLs)
2733                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
2734                 ;;
2735         *irix*)
2736                 AC_MSG_RESULT(Using IRIX ACLs)
2737                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
2738                 ;;
2739         *aix*)
2740                 AC_MSG_RESULT(Using AIX ACLs)
2741                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
2742                 ;;
2743         *osf*)
2744                 AC_MSG_RESULT(Using Tru64 ACLs)
2745                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
2746                 LIBS="$LIBS -lpacl"
2747                 ;;
2748         *)
2749                 AC_CHECK_LIB(acl,acl_get_file)
2750                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
2751                 AC_TRY_LINK([#include <sys/types.h>
2752 #include <sys/acl.h>],
2753 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
2754 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)])
2755                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
2756                                 AC_MSG_RESULT(Using posix ACLs)
2757                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
2758                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
2759                                 AC_TRY_LINK([#include <sys/types.h>
2760 #include <sys/acl.h>],
2761 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
2762 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)])
2763                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
2764                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
2765                                 fi
2766                         fi
2767             ;;
2768         esac
2769         ;;
2770   *)
2771     AC_MSG_RESULT(no)
2772     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
2773     ;;
2774   esac ],
2775   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
2776   AC_MSG_RESULT(no)
2777 )
2778
2779 #################################################
2780 # check for sendfile support
2781
2782 with_sendfile_support=yes
2783 AC_MSG_CHECKING(whether to check to support sendfile)
2784 AC_ARG_WITH(sendfile-support,
2785 [  --with-sendfile-support      Check for sendfile support (default=yes)],
2786 [ case "$withval" in
2787   yes)
2788
2789         AC_MSG_RESULT(yes);
2790
2791         case "$host_os" in
2792         *linux*)
2793                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
2794                 AC_TRY_LINK([#include <sys/sendfile.h>],
2795 [\
2796 int tofd, fromfd;
2797 off64_t offset;
2798 size_t total;
2799 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
2800 ],
2801 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
2802
2803                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
2804                 AC_TRY_LINK([#include <sys/sendfile.h>],
2805 [\
2806 int tofd, fromfd;
2807 off_t offset;
2808 size_t total;
2809 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
2810 ],
2811 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
2812
2813 # Try and cope with broken Linux sendfile....
2814                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
2815                 AC_TRY_LINK([\
2816 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
2817 #undef _FILE_OFFSET_BITS
2818 #endif
2819 #include <sys/sendfile.h>],
2820 [\
2821 int tofd, fromfd;
2822 off_t offset;
2823 size_t total;
2824 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
2825 ],
2826 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
2827
2828         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
2829                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
2830                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
2831                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
2832         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
2833                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
2834                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
2835                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
2836         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
2837                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
2838                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
2839         else
2840                 AC_MSG_RESULT(no);
2841         fi
2842
2843         ;;
2844         *freebsd*)
2845                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
2846                 AC_TRY_LINK([\
2847 #include <sys/types.h>
2848 #include <unistd.h>
2849 #include <sys/socket.h>
2850 #include <sys/uio.h>],
2851 [\
2852         int fromfd, tofd, ret, total=0;
2853         off_t offset, nwritten;
2854         struct sf_hdtr hdr;
2855         struct iovec hdtrl;
2856         hdr.headers = &hdtrl;
2857         hdr.hdr_cnt = 1;
2858         hdr.trailers = NULL;
2859         hdr.trl_cnt = 0;
2860         hdtrl.iov_base = NULL;
2861         hdtrl.iov_len = 0;
2862         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
2863 ],
2864 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
2865
2866         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
2867                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
2868                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
2869                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2870         else
2871                 AC_MSG_RESULT(no);
2872         fi
2873         ;;
2874
2875         *hpux*)
2876                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
2877                 AC_TRY_LINK([\
2878 #include <sys/socket.h>
2879 #include <sys/uio.h>],
2880 [\
2881         int fromfd, tofd;
2882         size_t total=0;
2883         struct iovec hdtrl[2];
2884         ssize_t nwritten;
2885         off64_t offset;
2886
2887         hdtrl[0].iov_base = 0;
2888         hdtrl[0].iov_len = 0;
2889
2890         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
2891 ],
2892 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
2893         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
2894                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
2895                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
2896                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2897         else
2898                 AC_MSG_RESULT(no);
2899         fi
2900
2901                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
2902                 AC_TRY_LINK([\
2903 #include <sys/socket.h>
2904 #include <sys/uio.h>],
2905 [\
2906         int fromfd, tofd;
2907         size_t total=0;
2908         struct iovec hdtrl[2];
2909         ssize_t nwritten;
2910         off_t offset;
2911
2912         hdtrl[0].iov_base = 0;
2913         hdtrl[0].iov_len = 0;
2914
2915         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
2916 ],
2917 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
2918         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
2919                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
2920                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
2921                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2922         else
2923                 AC_MSG_RESULT(no);
2924         fi
2925         ;;
2926
2927         *solaris*)
2928                 AC_CHECK_LIB(sendfile,sendfilev)
2929                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
2930                 AC_TRY_LINK([\
2931 #include <sys/sendfile.h>],
2932 [\
2933         int sfvcnt;
2934         size_t xferred;
2935         struct sendfilevec vec[2];
2936         ssize_t nwritten;
2937         int tofd;
2938
2939         sfvcnt = 2;
2940
2941         vec[0].sfv_fd = SFV_FD_SELF;
2942         vec[0].sfv_flag = 0;
2943         vec[0].sfv_off = 0;
2944         vec[0].sfv_len = 0;
2945
2946         vec[1].sfv_fd = 0;
2947         vec[1].sfv_flag = 0;
2948         vec[1].sfv_off = 0;
2949         vec[1].sfv_len = 0;
2950         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
2951 ],
2952 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
2953
2954         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
2955                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
2956                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
2957                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2958         else
2959                 AC_MSG_RESULT(no);
2960         fi
2961
2962                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
2963                 AC_TRY_LINK([\
2964 #include <sys/sendfile.h>],
2965 [\
2966         int sfvcnt;
2967         size_t xferred;
2968         struct sendfilevec vec[2];
2969         ssize_t nwritten;
2970         int tofd;
2971
2972         sfvcnt = 2;
2973
2974         vec[0].sfv_fd = SFV_FD_SELF;
2975         vec[0].sfv_flag = 0;
2976         vec[0].sfv_off = 0;
2977         vec[0].sfv_len = 0;
2978
2979         vec[1].sfv_fd = 0;
2980         vec[1].sfv_flag = 0;
2981         vec[1].sfv_off = 0;
2982         vec[1].sfv_len = 0;
2983         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
2984 ],
2985 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
2986
2987         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
2988                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
2989                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
2990                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
2991         else
2992                 AC_MSG_RESULT(no);
2993         fi
2994         ;;
2995
2996         *)
2997         ;;
2998         esac
2999         ;;
3000   *)
3001     AC_MSG_RESULT(no)
3002     ;;
3003   esac ],
3004   AC_MSG_RESULT(yes)
3005 )
3006
3007
3008 #################################################
3009 # Check whether winbind is supported on this platform.  If so we need to
3010 # build and install client programs, sbin programs and shared libraries
3011
3012 AC_MSG_CHECKING(whether to build winbind)
3013
3014 # Initially, the value of $host_os decides whether winbind is supported
3015
3016 case "$host_os" in
3017         *linux*|*irix*)
3018                 HAVE_WINBIND=yes
3019                 ;;
3020         *solaris*)
3021                 HAVE_WINBIND=yes
3022                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
3023                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
3024                 ;;
3025         *hpux11*)
3026                 HAVE_WINBIND=yes
3027                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
3028                 ;;
3029         *)
3030                 HAVE_WINBIND=no
3031                 winbind_no_reason=", unsupported on $host_os"
3032                 ;;
3033 esac
3034
3035 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
3036 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
3037
3038 # Check the setting of --with-winbindd
3039
3040 AC_ARG_WITH(winbind,
3041 [  --with-winbind          Build winbind (default, if supported by OS)],
3042
3043   case "$withval" in
3044         yes)
3045                 HAVE_WINBIND=yes
3046                 ;;
3047         no)
3048                 HAVE_WINBIND=no
3049                 winbind_reason=""
3050                 ;;
3051   esac ],
3052 )
3053
3054 # We need unix domain sockets for winbind
3055
3056 if test x"$HAVE_WINBIND" = x"yes"; then
3057         if test x"$samba_cv_unixsocket" = x"no"; then
3058                 winbind_no_reason=", no unix domain socket support on $host_os"
3059                 HAVE_WINBIND=no
3060         fi
3061 fi
3062
3063 # Display test results
3064
3065 if test x"$HAVE_WINBIND" = x"yes"; then
3066         AC_MSG_RESULT(yes)
3067         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
3068
3069         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
3070         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
3071         if test x"$BLDSHARED" = x"true"; then
3072                 SHLIB_PROGS="$SHLIB_PROGS nsswitch/libnss_winbind.so"
3073                 if test x"$with_pam" = x"yes"; then
3074                         SHLIB_PROGS="$SHLIB_PROGS nsswitch/pam_winbind.so"
3075                 fi
3076         fi
3077 else
3078         AC_MSG_RESULT(no$winbind_no_reason)
3079 fi
3080
3081 # Solaris has some extra fields in struct passwd that need to be
3082 # initialised otherwise nscd crashes.  Unfortunately autoconf < 2.50
3083 # doesn't have the AC_CHECK_MEMBER macro which would be handy for checking
3084 # this. 
3085
3086 #AC_CHECK_MEMBER(struct passwd.pw_comment,
3087 #               AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),
3088 #               [#include <pwd.h>])
3089
3090 AC_CACHE_CHECK([whether struct passwd has pw_comment],samba_cv_passwd_pw_comment, [
3091     AC_TRY_COMPILE([#include <pwd.h>],[struct passwd p; p.pw_comment;],
3092         samba_cv_passwd_pw_comment=yes,samba_cv_passwd_pw_comment=no)])
3093 if test x"$samba_cv_passwd_pw_comment" = x"yes"; then
3094    AC_DEFINE(HAVE_PASSWD_PW_COMMENT,1,[Whether struct passwd has pw_comment])
3095 fi
3096
3097 #AC_CHECK_MEMBER(struct passwd.pw_age,
3098 #               AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),
3099 #               [#include <pwd.h>])
3100
3101 AC_CACHE_CHECK([whether struct passwd has pw_age],samba_cv_passwd_pw_age, [
3102     AC_TRY_COMPILE([#include <pwd.h>],[struct passwd p; p.pw_age;],
3103         samba_cv_passwd_pw_age=yes,samba_cv_passwd_pw_age=no)])
3104 if test x"$samba_cv_passwd_pw_age" = x"yes"; then
3105    AC_DEFINE(HAVE_PASSWD_PW_AGE,1,[Whether struct passwd has pw_age])
3106 fi
3107
3108 #################################################
3109 # Check to see if we should use the included popt 
3110
3111 AC_ARG_WITH(included-popt,
3112 [  --with-included-popt    use bundled popt library, not from system],
3113
3114   case "$withval" in
3115         yes)
3116                 INCLUDED_POPT=yes
3117                 ;;
3118         no)
3119                 INCLUDED_POPT=no
3120                 ;;
3121   esac ],
3122 )
3123 if test x"$INCLUDED_POPT" != x"yes"; then
3124     AC_CHECK_LIB(popt, poptGetContext,
3125                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
3126 fi
3127
3128 AC_MSG_CHECKING(whether to use included popt)
3129 if test x"$INCLUDED_POPT" = x"yes"; then
3130     AC_MSG_RESULT(yes)
3131     BUILD_POPT='$(POPT_OBJS)'
3132     FLAGS1="-I$srcdir/popt"
3133 else
3134     AC_MSG_RESULT(no)
3135     LIBS="$LIBS -lpopt"
3136 fi
3137 AC_SUBST(BUILD_POPT)
3138 AC_SUBST(FLAGS1)
3139
3140 #################################################
3141 # Check if the user wants Python
3142
3143 # At the moment, you can use this to set which Python binary to link
3144 # against.  (Libraries built for Python2.2 can't be used by 2.1,
3145 # though they can coexist in different directories.)  In the future
3146 # this might make the Python stuff be built by default.
3147
3148 # Defaulting python breaks the clean target if python isn't installed
3149
3150 PYTHON=
3151
3152 AC_ARG_WITH(python,
3153 [  --with-python=PYTHONNAME  build Python libraries],
3154 [ case "${withval-python}" in
3155   yes)
3156         PYTHON=python
3157         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
3158         ;;
3159   no)
3160         PYTHON=
3161         ;;
3162   *)
3163         PYTHON=${withval-python}
3164         ;;
3165   esac ])
3166 AC_SUBST(PYTHON)
3167
3168 #################################################
3169 # do extra things if we are running insure
3170
3171 if test "${ac_cv_prog_CC}" = "insure"; then
3172         CPPFLAGS="$CPPFLAGS -D__INSURE__"
3173 fi
3174
3175 #################################################
3176 # final configure stuff
3177
3178 AC_MSG_CHECKING([configure summary])
3179 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
3180            AC_MSG_RESULT(yes),
3181            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
3182            AC_MSG_WARN([cannot run when cross-compiling]))
3183
3184 builddir=`pwd`
3185 AC_SUBST(builddir)
3186
3187 AC_OUTPUT(include/stamp-h Makefile script/findsmb)
3188
3189 #################################################
3190 # Print very concise instructions on building/use
3191 if test "x$enable_dmalloc" = xyes
3192 then
3193         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
3194         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
3195 fi