Fixes for EXEEXT - must use \$ signs when you want an actual $ sign to
[kai/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 get_yp_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                 ;;
902                 *freebsd*)  BLDSHARED="true"
903                         LDSHFLAGS="-shared"
904                         DYNEXP="-Wl,--export-dynamic"
905                         SONAMEFLAG="-Wl,-soname,"
906                         PICFLAG="-fPIC -DPIC"
907                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
908                 ;;
909                 *openbsd*)  BLDSHARED="true"
910                         LDSHFLAGS="-shared"
911                         DYNEXP="-Wl,-Bdynamic"
912                         SONAMEFLAG="-Wl,-soname,"
913                         PICFLAG="-fPIC"
914                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
915                 ;;
916                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
917                         case "$host_os" in
918                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
919                         ;;
920                         esac
921                         ATTEMPT_WRAP32_BUILD=yes
922                         BLDSHARED="true"
923                         LDSHFLAGS="-set_version sgi1.0 -shared"
924                         SONAMEFLAG="-soname "
925                         SHLD="\${LD}"
926                         if test "${GCC}" = "yes"; then
927                                 PICFLAG="-fPIC"
928                         else 
929                                 PICFLAG="-KPIC"
930                         fi
931                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
932                 ;;
933                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
934                         BLDSHARED="true"
935                         LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry"
936                         DYNEXP="-Wl,-brtl,-bexpall"
937                         PICFLAG="-O2"
938                         if test "${GCC}" != "yes"; then
939                                 ## for funky AIX compiler using strncpy()
940                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
941                         fi
942
943                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
944                 ;;
945                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
946                         SHLIBEXT="sl"
947                         # Use special PIC flags for the native HP-UX compiler.
948                         if test $ac_cv_prog_cc_Ae = yes; then
949                                 BLDSHARED="true"
950                                 SHLD="/usr/bin/ld"
951                                 LDSHFLAGS="-B symbolic -b -z"
952                                 SONAMEFLAG="+h "
953                                 PICFLAG="+z"
954                         fi
955                         DYNEXP="-Wl,-E"
956                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
957                 ;;
958                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]);;
959                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
960                         BLDSHARED="true"
961                         LDSHFLAGS="-shared"
962                         SONAMEFLAG="-Wl,-soname,"
963                         PICFLAG="-fPIC"
964                 ;;
965                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix]);;
966                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
967                         BLDSHARED="true"
968                         LDSHFLAGS="-shared"
969                         SONAMEFLAG="-Wl,-soname,"
970                         PICFLAG="-KPIC"
971                 ;;
972                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2]);;
973                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man]);;
974                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
975                         case "$host" in
976                                 *-univel-*)     if [ test "$GCC" != yes ]; then
977                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
978                                         fi
979                                         LDSHFLAGS="-G"
980                                         DYNEXP="-Bexport"
981                                 ;;
982                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
983                         esac
984                 ;;
985
986                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
987                         if [ test "$GCC" != yes ]; then
988                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
989                         fi
990                         LDSHFLAGS="-G"
991                 ;;
992 esac
993 AC_SUBST(DYNEXP)
994 AC_MSG_RESULT($BLDSHARED)
995 AC_MSG_CHECKING([linker flags for shared libraries])
996 AC_MSG_RESULT([$LDSHFLAGS])
997 AC_MSG_CHECKING([compiler flags for position-independent code])
998 AC_MSG_RESULT([$PICFLAGS])
999
1000 #######################################################
1001 # test whether building a shared library actually works
1002 if test $BLDSHARED = true; then
1003 AC_CACHE_CHECK([whether building shared libraries actually works], 
1004                [ac_cv_shlib_works],[
1005    ac_cv_shlib_works=no
1006    # try building a trivial shared library
1007    if test "$PICSUFFIX" = "po"; then
1008      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.po ${srcdir-.}/tests/shlib.c &&
1009        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
1010        ac_cv_shlib_works=yes
1011    else
1012      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.$PICSUFFIX ${srcdir-.}/tests/shlib.c &&
1013        mv shlib.$PICSUFFIX shlib.po &&
1014        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
1015        ac_cv_shlib_works=yes
1016    fi
1017    rm -f shlib.so shlib.po
1018 ])
1019 if test $ac_cv_shlib_works = no; then
1020    BLDSHARED=false
1021 fi
1022 fi
1023
1024
1025 # this updates our target list if we can build shared libs
1026 if test $BLDSHARED = true; then
1027    LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
1028 else
1029    LIBSMBCLIENT_SHARED=
1030 fi
1031
1032 ################
1033
1034 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1035 AC_TRY_RUN([#include <stdio.h>
1036 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1037 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1038 if test x"$samba_cv_have_longlong" = x"yes"; then
1039     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1040 fi
1041
1042 #
1043 # Check if the compiler supports the LL prefix on long long integers.
1044 # AIX needs this.
1045
1046 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1047     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1048         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1049 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1050    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1051 fi
1052
1053   
1054 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1055 AC_TRY_RUN([#include <stdio.h>
1056 #include <sys/stat.h>
1057 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1058 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1059 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1060     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1061 fi
1062
1063 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1064 AC_TRY_RUN([
1065 #if defined(HAVE_UNISTD_H)
1066 #include <unistd.h>
1067 #endif
1068 #include <stdio.h>
1069 #include <sys/stat.h>
1070 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1071 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1072 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1073     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1074 fi
1075
1076 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1077 AC_TRY_RUN([#include <stdio.h>
1078 #include <sys/stat.h>
1079 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1080 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1081 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1082     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1083 fi
1084
1085 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1086 AC_TRY_RUN([
1087 #if defined(HAVE_UNISTD_H)
1088 #include <unistd.h>
1089 #endif
1090 #include <stdio.h>
1091 #include <sys/stat.h>
1092 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1093 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1094 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1095     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1096 fi
1097
1098 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1099 AC_TRY_RUN([
1100 #if defined(HAVE_UNISTD_H)
1101 #include <unistd.h>
1102 #endif
1103 #include <stdio.h>
1104 #include <sys/stat.h>
1105 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1106 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
1107 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
1108     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
1109 fi
1110
1111 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
1112 AC_TRY_COMPILE([
1113 #if defined(HAVE_UNISTD_H)
1114 #include <unistd.h>
1115 #endif
1116 #include <sys/types.h>
1117 #include <dirent.h>],
1118 [struct dirent64 de;],
1119 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
1120 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
1121     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
1122 fi
1123
1124 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
1125 AC_TRY_RUN([
1126 #if defined(HAVE_UNISTD_H)
1127 #include <unistd.h>
1128 #endif
1129 #include <sys/types.h>
1130 main() { dev_t dev; int i = major(dev); return 0; }],
1131 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
1132 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
1133     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
1134 fi
1135
1136 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
1137 AC_TRY_RUN([
1138 #if defined(HAVE_UNISTD_H)
1139 #include <unistd.h>
1140 #endif
1141 #include <sys/types.h>
1142 main() { dev_t dev; int i = minor(dev); return 0; }],
1143 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
1144 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
1145     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
1146 fi
1147
1148 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
1149 AC_TRY_RUN([#include <stdio.h>
1150 main() { char c; c=250; exit((c > 0)?0:1); }],
1151 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
1152 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
1153     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
1154 fi
1155
1156 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
1157 AC_TRY_COMPILE([#include <sys/types.h>
1158 #include <sys/socket.h>
1159 #include <netinet/in.h>],
1160 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
1161 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
1162 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
1163     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
1164 fi
1165
1166 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1167 AC_TRY_COMPILE([#include <sys/types.h>
1168 #include <dirent.h>
1169 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1170 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1171 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1172     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1173 fi
1174
1175 AC_CACHE_CHECK([for __FILE__ macro],samba_cv_HAVE_FILE_MACRO,[
1176 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FILE__);],
1177 samba_cv_HAVE_FILE_MACRO=yes,samba_cv_HAVE_FILE_MACRO=no)])
1178 if test x"$samba_cv_HAVE_FILE_MACRO" = x"yes"; then
1179     AC_DEFINE(HAVE_FILE_MACRO,1,[Whether there is a __FILE__ macro])
1180 fi
1181
1182 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1183 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1184 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1185 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1186     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1187 fi
1188
1189 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1190 AC_TRY_RUN([
1191 #include <sys/time.h>
1192 #include <unistd.h>
1193 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
1194            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
1195 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1196     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
1197 fi
1198
1199 AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE_VA_COPY,[
1200 AC_TRY_LINK([#include <stdarg.h>
1201 va_list ap1,ap2;], [__va_copy(ap1,ap2);],
1202 samba_cv_HAVE_VA_COPY=yes,samba_cv_HAVE_VA_COPY=no)])
1203 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
1204     AC_DEFINE(HAVE_VA_COPY,1,[Whether __va_copy() is available])
1205 fi
1206
1207 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
1208 AC_TRY_RUN([
1209 #include <sys/types.h>
1210 #include <stdarg.h>
1211 void foo(const char *format, ...) { 
1212        va_list ap;
1213        int len;
1214        char buf[5];
1215
1216        va_start(ap, format);
1217        len = vsnprintf(buf, 0, format, ap);
1218        va_end(ap);
1219        if (len != 5) exit(1);
1220
1221        va_start(ap, format);
1222        len = vsnprintf(0, 0, format, ap);
1223        va_end(ap);
1224        if (len != 5) exit(1);
1225
1226        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
1227
1228        exit(0);
1229 }
1230 main() { foo("hello"); }
1231 ],
1232 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
1233 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
1234     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
1235 fi
1236
1237 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
1238 AC_TRY_RUN([#include <sys/types.h>
1239 #include <dirent.h>
1240 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
1241 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
1242 di->d_name[0] == 0) exit(0); exit(1);} ],
1243 samba_cv_HAVE_BROKEN_READDIR=yes,samba_cv_HAVE_BROKEN_READDIR=no,samba_cv_HAVE_BROKEN_READDIR=cross)])
1244 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
1245     AC_DEFINE(HAVE_BROKEN_READDIR,1,[Whether readdir() is broken])
1246 fi
1247
1248 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
1249 AC_TRY_COMPILE([#include <sys/types.h>
1250 #include <utime.h>],
1251 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
1252 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
1253 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
1254     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
1255 fi
1256
1257 dnl  utmp and utmpx come in many flavours
1258 dnl  We need to check for many of them
1259 dnl  But we don't need to do each and every one, because our code uses
1260 dnl  mostly just the utmp (not utmpx) fields.
1261
1262 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
1263
1264 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
1265 AC_TRY_COMPILE([#include <sys/types.h>
1266 #include <utmp.h>],
1267 [struct utmp ut;  ut.ut_name[0] = 'a';],
1268 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
1269 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
1270     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
1271 fi 
1272
1273 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
1274 AC_TRY_COMPILE([#include <sys/types.h>
1275 #include <utmp.h>],
1276 [struct utmp ut;  ut.ut_user[0] = 'a';],
1277 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
1278 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
1279     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
1280 fi 
1281
1282 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
1283 AC_TRY_COMPILE([#include <sys/types.h>
1284 #include <utmp.h>],
1285 [struct utmp ut;  ut.ut_id[0] = 'a';],
1286 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
1287 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
1288     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
1289 fi 
1290
1291 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
1292 AC_TRY_COMPILE([#include <sys/types.h>
1293 #include <utmp.h>],
1294 [struct utmp ut;  ut.ut_host[0] = 'a';],
1295 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
1296 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
1297     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
1298 fi 
1299
1300 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
1301 AC_TRY_COMPILE([#include <sys/types.h>
1302 #include <utmp.h>],
1303 [struct utmp ut;  time_t t; ut.ut_time = t;],
1304 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
1305 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
1306     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
1307 fi 
1308
1309 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
1310 AC_TRY_COMPILE([#include <sys/types.h>
1311 #include <utmp.h>],
1312 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
1313 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
1314 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
1315     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
1316 fi 
1317
1318 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
1319 AC_TRY_COMPILE([#include <sys/types.h>
1320 #include <utmp.h>],
1321 [struct utmp ut;  ut.ut_type = 0;],
1322 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
1323 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
1324     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
1325 fi 
1326
1327 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
1328 AC_TRY_COMPILE([#include <sys/types.h>
1329 #include <utmp.h>],
1330 [struct utmp ut;  ut.ut_pid = 0;],
1331 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
1332 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
1333     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
1334 fi 
1335
1336 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
1337 AC_TRY_COMPILE([#include <sys/types.h>
1338 #include <utmp.h>],
1339 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
1340 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
1341 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
1342     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
1343 fi 
1344
1345 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
1346 AC_TRY_COMPILE([#include <sys/types.h>
1347 #include <utmp.h>],
1348 [struct utmp ut;  ut.ut_addr = 0;],
1349 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
1350 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
1351     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
1352 fi 
1353
1354 if test x$ac_cv_func_pututline = xyes ; then
1355   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
1356   AC_TRY_COMPILE([#include <sys/types.h>
1357 #include <utmp.h>],
1358   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
1359   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
1360   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
1361       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
1362   fi
1363 fi
1364
1365 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
1366 AC_TRY_COMPILE([#include <sys/types.h>
1367 #include <utmpx.h>],
1368 [struct utmpx ux;  ux.ut_syslen = 0;],
1369 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
1370 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
1371     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
1372 fi 
1373
1374
1375 #################################################
1376 # check for libiconv support
1377 AC_MSG_CHECKING(whether to use libiconv)
1378 AC_ARG_WITH(libiconv,
1379 [  --with-libiconv=BASEDIR Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto) ],
1380 [ case "$withval" in
1381   no)
1382     AC_MSG_RESULT(no)
1383     ;;
1384   *)
1385     AC_MSG_RESULT(yes)
1386     CFLAGS="$CFLAGS -I$withval/include"
1387     LDFLAGS="$LDFLAGS -L$withval/lib"
1388     AC_CHECK_LIB(iconv, iconv_open)
1389     AC_DEFINE_UNQUOTED(WITH_LIBICONV, "${withval}",[Path to iconv])
1390     ;;
1391   esac ],
1392   AC_MSG_RESULT(no)
1393 )
1394
1395
1396 ############
1397 # check for iconv in libc
1398 AC_CACHE_CHECK([for working iconv],samba_cv_HAVE_NATIVE_ICONV,[
1399 AC_TRY_RUN([
1400 #include <iconv.h>
1401 main() {
1402        iconv_t cd = iconv_open("ASCII", "UCS-2LE");
1403        if (cd == 0 || cd == (iconv_t)-1) return -1;
1404        return 0;
1405 }
1406 ],
1407 samba_cv_HAVE_NATIVE_ICONV=yes,samba_cv_HAVE_NATIVE_ICONV=no,samba_cv_HAVE_NATIVE_ICONV=cross)])
1408 if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes"; then
1409     AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
1410 fi
1411
1412
1413 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
1414 AC_TRY_RUN([
1415 #include <sys/types.h>
1416 #include <fcntl.h>
1417 #ifndef F_GETLEASE
1418 #define F_GETLEASE      1025
1419 #endif
1420 main() {
1421        int fd = open("/dev/null", O_RDONLY);
1422        return fcntl(fd, F_GETLEASE, 0) == -1;
1423 }
1424 ],
1425 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
1426 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
1427     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
1428 fi
1429
1430 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
1431 AC_TRY_RUN([
1432 #include <sys/types.h>
1433 #include <fcntl.h>
1434 #include <signal.h>
1435 #ifndef F_NOTIFY
1436 #define F_NOTIFY 1026
1437 #endif
1438 main() {
1439         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
1440 }
1441 ],
1442 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
1443 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
1444     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
1445 fi
1446
1447 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
1448 AC_TRY_RUN([
1449 #include <sys/types.h>
1450 #include <fcntl.h>
1451 #include <signal.h>
1452 #include <sys/file.h>
1453 #ifndef LOCK_MAND
1454 #define LOCK_MAND       32
1455 #define LOCK_READ       64
1456 #endif
1457 main() {
1458         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
1459 }
1460 ],
1461 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
1462 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
1463     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
1464 fi
1465
1466
1467
1468
1469 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
1470 AC_TRY_COMPILE([#include <sys/types.h>
1471 #include <fcntl.h>],
1472 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
1473 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
1474 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
1475     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
1476 fi
1477
1478 AC_CACHE_CHECK([for irix specific capabilities],samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES,[
1479 AC_TRY_RUN([#include <sys/types.h>
1480 #include <sys/capability.h>
1481 main() {
1482  cap_t cap;
1483  if ((cap = cap_get_proc()) == NULL)
1484    exit(1);
1485  cap->cap_effective |= CAP_NETWORK_MGT;
1486  cap->cap_inheritable |= CAP_NETWORK_MGT;
1487  cap_set_proc(cap);
1488  exit(0);
1489 }
1490 ],
1491 samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross)])
1492 if test x"$samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES" = x"yes"; then
1493     AC_DEFINE(HAVE_IRIX_SPECIFIC_CAPABILITIES,1,[Whether IRIX specific capabilities are available])
1494 fi
1495
1496 #
1497 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
1498 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
1499 #
1500
1501 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
1502 AC_TRY_COMPILE([#include <sys/types.h>
1503 #if defined(HAVE_RPC_RPC_H)
1504 #include <rpc/rpc.h>
1505 #endif],
1506 [int16 testvar;],
1507 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
1508 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
1509     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
1510 fi
1511
1512 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
1513 AC_TRY_COMPILE([#include <sys/types.h>
1514 #if defined(HAVE_RPC_RPC_H)
1515 #include <rpc/rpc.h>
1516 #endif],
1517 [uint16 testvar;],
1518 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
1519 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
1520     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
1521 fi
1522
1523 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
1524 AC_TRY_COMPILE([#include <sys/types.h>
1525 #if defined(HAVE_RPC_RPC_H)
1526 #include <rpc/rpc.h>
1527 #endif],
1528 [int32 testvar;],
1529 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
1530 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
1531     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
1532 fi
1533
1534 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
1535 AC_TRY_COMPILE([#include <sys/types.h>
1536 #if defined(HAVE_RPC_RPC_H)
1537 #include <rpc/rpc.h>
1538 #endif],
1539 [uint32 testvar;],
1540 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
1541 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
1542     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
1543 fi
1544
1545 dnl
1546 dnl Some systems (SCO) have a problem including
1547 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
1548 dnl as a #define in <prot.h> and as part of an enum
1549 dnl in <rpc/rpc.h>.
1550 dnl
1551
1552 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
1553 AC_TRY_COMPILE([#include <sys/types.h>
1554 #ifdef HAVE_SYS_SECURITY_H
1555 #include <sys/security.h>
1556 #include <prot.h>
1557 #endif  /* HAVE_SYS_SECURITY_H */
1558 #if defined(HAVE_RPC_RPC_H)
1559 #include <rpc/rpc.h>
1560 #endif],
1561 [int testvar;],
1562 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
1563 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
1564     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
1565 fi
1566
1567 AC_MSG_CHECKING([for test routines])
1568 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
1569            AC_MSG_RESULT(yes),
1570            AC_MSG_ERROR([cant find test code. Aborting config]),
1571            AC_MSG_WARN([cannot run when cross-compiling]))
1572
1573 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
1574 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
1575            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
1576 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
1577     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
1578 fi
1579
1580 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
1581 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
1582            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
1583            samba_cv_HAVE_WORKING_AF_LOCAL=no,
1584            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
1585 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
1586 then
1587     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
1588 fi
1589
1590 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
1591 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
1592            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
1593 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
1594     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
1595 fi
1596
1597 AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
1598 SAVE_CPPFLAGS="$CPPFLAGS"
1599 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt  -I${srcdir-.}/smbwrapper"
1600 AC_TRY_COMPILE([
1601 #define REPLACE_GETPASS 1
1602 #define NO_CONFIG_H 1
1603 #define main dont_declare_main
1604 #include "${srcdir-.}/lib/getsmbpass.c"
1605 #undef main
1606 ],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
1607 CPPFLAGS="$SAVE_CPPFLAGS"
1608 ])
1609 if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
1610         AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
1611 fi
1612
1613 AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
1614 AC_TRY_RUN([
1615 #include <stdio.h>
1616 #include <sys/types.h>
1617 #include <netinet/in.h>
1618 #ifdef HAVE_ARPA_INET_H
1619 #include <arpa/inet.h>
1620 #endif
1621 main() { struct in_addr ip; ip.s_addr = 0x12345678;
1622 if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
1623     strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
1624 exit(1);}],
1625            samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
1626 if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
1627     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
1628 fi
1629
1630 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
1631 AC_TRY_RUN([#include <stdlib.h>
1632 #include <sys/types.h>
1633 #include <sys/stat.h>
1634 #include <unistd.h>
1635 main() { 
1636   struct stat st;
1637   char tpl[20]="/tmp/test.XXXXXX"; 
1638   int fd = mkstemp(tpl); 
1639   if (fd == -1) exit(1);
1640   unlink(tpl);
1641   if (fstat(fd, &st) != 0) exit(1);
1642   if ((st.st_mode & 0777) != 0600) exit(1);
1643   exit(0);
1644 }],
1645 samba_cv_HAVE_SECURE_MKSTEMP=yes,
1646 samba_cv_HAVE_SECURE_MKSTEMP=no,
1647 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
1648 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
1649     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
1650 fi
1651
1652 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
1653 AC_TRY_RUN([#include <unistd.h>
1654 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
1655 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
1656 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
1657     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
1658 fi
1659
1660 AC_CACHE_CHECK([for root],samba_cv_HAVE_ROOT,[
1661 AC_TRY_RUN([main() { exit(getuid() != 0); }],
1662            samba_cv_HAVE_ROOT=yes,samba_cv_HAVE_ROOT=no,samba_cv_HAVE_ROOT=cross)])
1663 if test x"$samba_cv_HAVE_ROOT" = x"yes"; then
1664     AC_DEFINE(HAVE_ROOT,1,[Whether current user is root])
1665 else
1666     AC_MSG_WARN(running as non-root will disable some tests)
1667 fi
1668
1669 ##################
1670 # look for a method of finding the list of network interfaces
1671 iface=no;
1672 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
1673 AC_TRY_RUN([
1674 #define HAVE_IFACE_AIX 1
1675 #define AUTOCONF_TEST 1
1676 #include "confdefs.h"
1677 #include "${srcdir-.}/lib/interfaces.c"],
1678            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
1679 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
1680     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
1681 fi
1682
1683 if test $iface = no; then
1684 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
1685 AC_TRY_RUN([
1686 #define HAVE_IFACE_IFCONF 1
1687 #define AUTOCONF_TEST 1
1688 #include "confdefs.h"
1689 #include "${srcdir-.}/lib/interfaces.c"],
1690            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
1691 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
1692     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
1693 fi
1694 fi
1695
1696 if test $iface = no; then
1697 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
1698 AC_TRY_RUN([
1699 #define HAVE_IFACE_IFREQ 1
1700 #define AUTOCONF_TEST 1
1701 #include "confdefs.h"
1702 #include "${srcdir-.}/lib/interfaces.c"],
1703            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
1704 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
1705     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
1706 fi
1707 fi
1708
1709
1710 ################################################
1711 # look for a method of setting the effective uid
1712 seteuid=no;
1713 if test $seteuid = no; then
1714 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
1715 AC_TRY_RUN([
1716 #define AUTOCONF_TEST 1
1717 #define USE_SETRESUID 1
1718 #include "confdefs.h"
1719 #include "${srcdir-.}/lib/util_sec.c"],
1720            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
1721 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
1722     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
1723 fi
1724 fi
1725
1726
1727 if test $seteuid = no; then
1728 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
1729 AC_TRY_RUN([
1730 #define AUTOCONF_TEST 1
1731 #define USE_SETREUID 1
1732 #include "confdefs.h"
1733 #include "${srcdir-.}/lib/util_sec.c"],
1734            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
1735 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
1736     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
1737 fi
1738 fi
1739
1740 if test $seteuid = no; then
1741 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
1742 AC_TRY_RUN([
1743 #define AUTOCONF_TEST 1
1744 #define USE_SETEUID 1
1745 #include "confdefs.h"
1746 #include "${srcdir-.}/lib/util_sec.c"],
1747            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
1748 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
1749     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
1750 fi
1751 fi
1752
1753 if test $seteuid = no; then
1754 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
1755 AC_TRY_RUN([
1756 #define AUTOCONF_TEST 1
1757 #define USE_SETUIDX 1
1758 #include "confdefs.h"
1759 #include "${srcdir-.}/lib/util_sec.c"],
1760            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
1761 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
1762     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
1763 fi
1764 fi
1765
1766
1767 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
1768 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
1769            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
1770 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
1771     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
1772 fi
1773
1774 AC_CACHE_CHECK([for ftruncate needs root],samba_cv_FTRUNCATE_NEEDS_ROOT,[
1775 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncroot.c"],
1776            samba_cv_FTRUNCATE_NEEDS_ROOT=yes,samba_cv_FTRUNCATE_NEEDS_ROOT=no,samba_cv_FTRUNCATE_NEEDS_ROOT=cross)])
1777 if test x"$samba_cv_FTRUNCATE_NEEDS_ROOT" = x"yes"; then
1778     AC_DEFINE(FTRUNCATE_NEEDS_ROOT,1,[Whether ftruncate() needs root])
1779 fi
1780
1781 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
1782 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
1783            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
1784 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
1785     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
1786 fi
1787
1788 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
1789 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
1790            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
1791 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
1792     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
1793
1794 else
1795
1796 dnl
1797 dnl Don't check for 64 bit fcntl locking if we know that the
1798 dnl glibc2.1 broken check has succeeded.
1799 dnl 
1800
1801   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
1802   AC_TRY_RUN([
1803 #if defined(HAVE_UNISTD_H)
1804 #include <unistd.h>
1805 #endif
1806 #include <stdio.h>
1807 #include <stdlib.h>
1808
1809 #ifdef HAVE_FCNTL_H
1810 #include <fcntl.h>
1811 #endif
1812
1813 #ifdef HAVE_SYS_FCNTL_H
1814 #include <sys/fcntl.h>
1815 #endif
1816 main() { struct flock64 fl64;
1817 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
1818 exit(0);
1819 #else
1820 exit(1);
1821 #endif
1822 }],
1823        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
1824
1825   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
1826       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
1827   fi
1828 fi
1829
1830 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
1831 AC_TRY_COMPILE([#include <sys/types.h>
1832 #include <sys/stat.h>
1833 #include <unistd.h>],
1834 [struct stat st;  st.st_blocks = 0;],
1835 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
1836 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
1837     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
1838 fi 
1839
1840 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
1841 AC_TRY_COMPILE([#include <sys/types.h>
1842 #include <sys/stat.h>
1843 #include <unistd.h>],
1844 [struct stat st;  st.st_blksize = 0;],
1845 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
1846 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
1847     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
1848 fi
1849
1850 case "$host_os" in
1851 *linux*)
1852 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
1853 AC_TRY_COMPILE([
1854 #ifdef HAVE_SYS_VFS_H
1855 #include <sys/vfs.h>
1856 #endif
1857 #ifdef HAVE_SYS_CAPABILITY_H
1858 #include <sys/capability.h>
1859 #endif
1860 ],[int i;],
1861    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
1862 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
1863    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
1864 fi
1865 ;;
1866 esac
1867
1868 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
1869 AC_TRY_COMPILE([#include <sys/acl.h>
1870 #if defined(HAVE_RPCSVC_NIS_H)
1871 #include <rpcsvc/nis.h>
1872 #endif],
1873 [int i;],
1874 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
1875 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
1876         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
1877 fi
1878
1879
1880 #################################################
1881 # check for smbwrapper support
1882 AC_MSG_CHECKING(whether to use smbwrapper)
1883 AC_ARG_WITH(smbwrapper,
1884 [  --with-smbwrapper       Include SMB wrapper support (default=no) ],
1885 [ case "$withval" in
1886   yes)
1887     AC_MSG_RESULT(yes)
1888     AC_DEFINE(WITH_SMBWRAPPER,1,[Whether to include smbwrapper support])
1889         WRAPPROG="bin/smbsh\$(EXEEXT)"
1890         WRAP="bin/smbwrapper.$SHLIBEXT"
1891
1892         if test x$ATTEMPT_WRAP32_BUILD = x; then
1893                 WRAP32=""
1894         else
1895                         WRAP32=bin/smbwrapper.32.$SHLIBEXT
1896         fi
1897
1898 # Conditions under which smbwrapper should not be built.
1899
1900         if test x$PICFLAG = x; then
1901            echo No support for PIC code - disabling smbwrapper and smbsh
1902            WRAPPROG=""
1903            WRAP=""
1904            WRAP32=""
1905         elif test x$ac_cv_func_syscall = xno; then
1906            AC_MSG_RESULT([No syscall() -- disabling smbwrapper and smbsh])
1907            WRAPPROG=""
1908            WRAP=""
1909            WRAP32=""
1910         fi
1911         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WRAPPROG $WRAP $WRAP32"
1912         SMBWRAPPER="$WRAPPROG $WRAP $WRAP32"
1913     ;;
1914   *)
1915     AC_MSG_RESULT(no)
1916     ;;
1917   esac ],
1918   AC_MSG_RESULT(no)
1919 )
1920
1921 #################################################
1922 # check for AFS clear-text auth support
1923 AC_MSG_CHECKING(whether to use AFS clear-text auth)
1924 AC_ARG_WITH(afs,
1925 [  --with-afs              Include AFS clear-text auth support (default=no) ],
1926 [ case "$withval" in
1927   yes)
1928     AC_MSG_RESULT(yes)
1929     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
1930     ;;
1931   *)
1932     AC_MSG_RESULT(no)
1933     ;;
1934   esac ],
1935   AC_MSG_RESULT(no)
1936 )
1937
1938
1939 #################################################
1940 # check for the DFS clear-text auth system
1941 AC_MSG_CHECKING(whether to use DFS clear-text auth)
1942 AC_ARG_WITH(dfs,
1943 [  --with-dce-dfs          Include DCE/DFS clear-text auth support (default=no)],
1944 [ case "$withval" in
1945   yes)
1946     AC_MSG_RESULT(yes)
1947     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
1948     ;;
1949   *)
1950     AC_MSG_RESULT(no)
1951     ;;
1952   esac ],
1953   AC_MSG_RESULT(no)
1954 )
1955
1956 #################################################
1957 # active directory support
1958
1959 with_ads_support=yes
1960 AC_MSG_CHECKING([whether to use Active Directory])
1961
1962 AC_ARG_WITH(ads,
1963 [   --with-ads  Active Directory support (default yes)],
1964 [ case "$withval" in
1965     no)
1966         with_ads_support=no
1967         ;;
1968   esac ])
1969
1970 if test x"$with_ads_support" = x"yes"; then
1971    AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
1972 fi
1973
1974 AC_MSG_RESULT($with_ads_support)
1975
1976 FOUND_KRB5=no
1977 if test x"$with_ads_support" = x"yes"; then
1978
1979   #################################################
1980   # check for location of Kerberos 5 install
1981   AC_MSG_CHECKING(for kerberos 5 install path)
1982   AC_ARG_WITH(krb5,
1983   [  --with-krb5=base-dir    Locate Kerberos 5 support (default=/usr)],
1984   [ case "$withval" in
1985     no)
1986       AC_MSG_RESULT(no)
1987       ;;
1988     *)
1989       AC_MSG_RESULT(yes)
1990       LIBS="$LIBS -lkrb5"
1991       CFLAGS="$CFLAGS -I$withval/include"
1992       CPPFLAGS="$CPPFLAGS -I$withval/include"
1993       LDFLAGS="$LDFLAGS -L$withval/lib"
1994       FOUND_KRB5=yes
1995       ;;
1996     esac ],
1997     AC_MSG_RESULT(no)
1998   )
1999
2000
2001 if test x$FOUND_KRB5 = x"no"; then
2002 #################################################
2003 # see if this box has the SuSE location for the heimdal kerberos implementation
2004 AC_MSG_CHECKING(for /usr/include/heimdal)
2005 if test -d /usr/include/heimdal; then
2006     CFLAGS="$CFLAGS -I/usr/include/heimdal"
2007     CPPFLAGS="$CPPFLAGS -I/usr/include/heimdal"
2008     AC_MSG_RESULT(yes)
2009 else
2010     AC_MSG_RESULT(no)
2011 fi
2012 fi
2013
2014
2015 if test x$FOUND_KRB5 = x"no"; then
2016 #################################################
2017 # see if this box has the RedHat location for kerberos
2018 AC_MSG_CHECKING(for /usr/kerberos)
2019 if test -d /usr/kerberos; then
2020     LDFLAGS="$LDFLAGS -L/usr/kerberos/lib"
2021     CFLAGS="$CFLAGS -I/usr/kerberos/include"
2022     CPPFLAGS="$CPPFLAGS -I/usr/kerberos/include"
2023     AC_MSG_RESULT(yes)
2024 else
2025     AC_MSG_RESULT(no)
2026 fi
2027 fi
2028
2029
2030   # now check for krb5.h. Some systems have the libraries without the headers!
2031   # note that this check is done here to allow for different kerberos
2032   # include paths
2033   AC_CHECK_HEADERS(krb5.h)
2034
2035   # now check for gssapi headers.  This is also done here to allow for
2036   # different kerberos include paths
2037   AC_CHECK_HEADERS(gssapi/gssapi_generic.h gssapi/gssapi.h)
2038
2039   ##################################################################
2040   # we might need the k5crypto and com_err libraries on some systems
2041   AC_CHECK_LIB(com_err, _et_list, [LIBS="$LIBS -lcom_err"])
2042   AC_CHECK_LIB(k5crypto, krb5_encrypt_data, [LIBS="$LIBS -lk5crypto"])
2043
2044   ########################################################
2045   # now see if we can find the krb5 libs in standard paths
2046   # or as specified above
2047   AC_CHECK_LIB(krb5, krb5_mk_req_extended, [LIBS="$LIBS -lkrb5";
2048         AC_DEFINE(HAVE_KRB5,1,[Whether KRB5 is available])])
2049
2050   ########################################################
2051   # now see if we can find the gssapi libs in standard paths
2052   AC_CHECK_LIB(gssapi_krb5, gss_display_status, [LIBS="$LIBS -lgssapi_krb5";
2053         AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])])
2054 fi
2055
2056 ########################################################
2057 # Compile with LDAP support?
2058
2059 with_ldap_support=yes
2060 AC_MSG_CHECKING([whether to use LDAP])
2061
2062 AC_ARG_WITH(ldap,
2063 [   --with-ldap  LDAP support (default yes)],
2064 [ case "$withval" in
2065     no)
2066         with_ldap_support=no
2067         ;;
2068   esac ])
2069
2070 AC_MSG_RESULT($with_ldap_support)
2071
2072 if test x"$with_ldap_support" = x"yes"; then
2073
2074   ##################################################################
2075   # we might need the lber lib on some systems. To avoid link errors
2076   # this test must be before the libldap test
2077   AC_CHECK_LIB(lber, ber_scanf, [LIBS="$LIBS -llber"])
2078
2079   ########################################################
2080   # now see if we can find the ldap libs in standard paths
2081   if test x$have_ldap != xyes; then
2082   AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap";
2083         AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])])
2084
2085         ########################################################
2086         # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
2087         # Check found in pam_ldap 145.
2088         AC_CHECK_FUNCS(ldap_set_rebind_proc)
2089         AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, pam_ldap_cv_ldap_set_rebind_proc, [
2090         AC_TRY_COMPILE([
2091         #include <lber.h>
2092         #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]) ])
2093         AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $pam_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
2094   fi
2095 fi
2096
2097 ########################################################
2098 # Compile with MySQL support?
2099 AM_PATH_MYSQL([0.11.0],[MODULE_MYSQL=bin/mysql.so],[MODULE_MYSQL=])
2100 CFLAGS="$CFLAGS $MYSQL_CFLAGS"
2101 AC_SUBST(MODULE_MYSQL)
2102
2103 ########################################################
2104 # Compile with XML support?
2105 AM_PATH_XML2([2.0.0],[MODULE_XML=bin/xml.so],[MODULE_XML=])
2106 CFLAGS="$CFLAGS $XML_CFLAGS"
2107 AC_SUBST(MODULE_XML)
2108
2109 #################################################
2110 # check for automount support
2111 AC_MSG_CHECKING(whether to use automount)
2112 AC_ARG_WITH(automount,
2113 [  --with-automount        Include automount support (default=no)],
2114 [ case "$withval" in
2115   yes)
2116     AC_MSG_RESULT(yes)
2117     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
2118     ;;
2119   *)
2120     AC_MSG_RESULT(no)
2121     ;;
2122   esac ],
2123   AC_MSG_RESULT(no)
2124 )
2125
2126 #################################################
2127 # check for smbmount support
2128 AC_MSG_CHECKING(whether to use smbmount)
2129 AC_ARG_WITH(smbmount,
2130 [  --with-smbmount         Include smbmount (Linux only) support (default=no)],
2131 [ case "$withval" in
2132   yes)
2133         case "$host_os" in
2134         *linux*)
2135                 AC_MSG_RESULT(yes)
2136                 AC_DEFINE(WITH_SMBMOUNT,1,[Whether to build smbmount])
2137                 EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbmount bin/smbmnt bin/smbumount"
2138                 ;;
2139         *)
2140                 AC_MSG_ERROR(not on a linux system!)
2141                 ;;
2142         esac
2143     ;;
2144   *)
2145     AC_MSG_RESULT(no)
2146     ;;
2147   esac ],
2148   AC_MSG_RESULT(no)
2149 )
2150
2151
2152 #################################################
2153 # check for a PAM clear-text auth, accounts, password and session support
2154 with_pam_for_crypt=no
2155 AC_MSG_CHECKING(whether to use PAM)
2156 AC_ARG_WITH(pam,
2157 [  --with-pam              Include PAM support (default=no)],
2158 [ case "$withval" in
2159   yes)
2160     AC_MSG_RESULT(yes)
2161     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
2162     AUTHLIBS="$AUTHLIBS -lpam"
2163     with_pam_for_crypt=yes
2164     ;;
2165   *)
2166     AC_MSG_RESULT(no)
2167     ;;
2168   esac ],
2169   AC_MSG_RESULT(no)
2170 )
2171
2172 # we can't build a pam module if we don't have pam.
2173 AC_CHECK_LIB(pam, pam_get_data, [AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])])
2174
2175 #################################################
2176 # check for pam_smbpass support
2177 AC_MSG_CHECKING(whether to use pam_smbpass)
2178 AC_ARG_WITH(pam_smbpass,
2179 [  --with-pam_smbpass      Build a PAM module to allow other applications to use our smbpasswd file (default=no)],
2180 [ case "$withval" in
2181   yes)
2182     AC_MSG_RESULT(yes)
2183
2184 # Conditions under which pam_smbpass should not be built.
2185
2186        if test x$PICFLAG = x; then
2187           AC_MSG_RESULT([No support for PIC code - disabling pam_smbpass])
2188        elif test x$ac_cv_lib_pam_pam_get_data = xno; then
2189           AC_MSG_RESULT([No libpam found -- disabling pam_smbpass])
2190        else
2191           SHLIB_PROGS="$SHLIB_PROGS bin/pam_smbpass.so"
2192        fi
2193     ;;
2194   *)
2195     AC_MSG_RESULT(no)
2196     ;;
2197   esac ],
2198   AC_MSG_RESULT(no)
2199 )
2200
2201
2202 ###############################################
2203 # test for where we get crypt() from, but only
2204 # if not using PAM
2205 if test x"$with_pam_for_crypt" = x"no"; then
2206 AC_CHECK_FUNCS(crypt)
2207 if test x"$ac_cv_func_crypt" = x"no"; then
2208     AC_CHECK_LIB(crypt, crypt, [AUTHLIBS="$AUTHLIBS -lcrypt";
2209         AC_DEFINE(HAVE_CRYPT,1,[Whether crypt() is available])])
2210 fi
2211 fi
2212
2213 ##
2214 ## moved after the check for -lcrypt in order to
2215 ## ensure that the necessary libraries are included
2216 ## check checking for truncated salt.  Wrapped by the
2217 ## $with_pam_for_crypt variable as above   --jerry
2218 ##
2219 if test $with_pam_for_crypt = no; then
2220 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
2221 crypt_LIBS="$LIBS"
2222 LIBS="$AUTHLIBS $LIBS"
2223 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
2224         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
2225 LIBS="$crypt_LIBS"])
2226 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
2227         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
2228 fi
2229 fi
2230
2231 # New experimental SAM system
2232
2233 AC_MSG_CHECKING([whether to build the new (experimental) SAM database])
2234 AC_ARG_WITH(sam,
2235 [  --with-sam              Build new (experimental) SAM database (default=no)],
2236 [ case "$withval" in
2237   yes)
2238     AC_MSG_RESULT(yes)
2239     AC_DEFINE(WITH_SAM,1,[Whether to build the new (experimental) SAM database])
2240     ;;
2241   *)
2242     AC_MSG_RESULT(no)
2243     ;;
2244   esac ],
2245   AC_MSG_RESULT(no)
2246 )
2247
2248
2249 ########################################################################################
2250 ##
2251 ## TESTS FOR SAM BACKENDS.  KEEP THESE GROUPED TOGETHER
2252 ##
2253 ########################################################################################
2254
2255 #################################################
2256 # check for a LDAP password database configuration backwards compatibility
2257 AC_MSG_CHECKING(whether to use LDAP SAM 2.2 compatible configuration)
2258 AC_ARG_WITH(ldapsam,
2259 [  --with-ldapsam           Include LDAP SAM 2.2 compatible configuration (default=no)],
2260 [ case "$withval" in
2261   yes)
2262     AC_MSG_RESULT(yes)
2263     AC_DEFINE(WITH_LDAP_SAMCONFIG,1,[Whether to include 2.2 compatibel LDAP SAM configuration])
2264     ;;
2265   *)
2266     AC_MSG_RESULT(no)
2267     ;;
2268   esac ],
2269   AC_MSG_RESULT(no)
2270 )
2271
2272 #################################################
2273 # check for a TDB password database
2274 AC_MSG_CHECKING(whether to use TDB SAM database)
2275 AC_ARG_WITH(tdbsam,
2276 [  --with-tdbsam           Include experimental TDB SAM support (default=no)],
2277 [ case "$withval" in
2278   yes)
2279     AC_MSG_RESULT(yes)
2280     AC_DEFINE(WITH_TDB_SAM,1,[Whether to include experimental TDB SAM support])
2281     ;;
2282   *)
2283     AC_MSG_RESULT(no)
2284     ;;
2285   esac ],
2286   AC_MSG_RESULT(no)
2287 )
2288
2289 #################################################
2290 # check for a NISPLUS password database
2291 AC_MSG_CHECKING(whether to use NISPLUS SAM database)
2292 AC_ARG_WITH(nisplussam,
2293 [  --with-nisplussam       Include NISPLUS SAM support (default=no)],
2294 [ case "$withval" in
2295   yes)
2296     AC_MSG_RESULT(yes)
2297     AC_DEFINE(WITH_NISPLUS_SAM,1,[Whether to include nisplus SAM support])
2298     ;;
2299   *)
2300     AC_MSG_RESULT(no)
2301     ;;
2302   esac ],
2303   AC_MSG_RESULT(no)
2304 )
2305
2306 ########################################################################################
2307 ##
2308 ## END OF TESTS FOR SAM BACKENDS.  
2309 ##
2310 ########################################################################################
2311
2312 #################################################
2313 # check for a NISPLUS_HOME support 
2314 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
2315 AC_ARG_WITH(nisplus-home,
2316 [  --with-nisplus-home     Include NISPLUS_HOME support (default=no)],
2317 [ case "$withval" in
2318   yes)
2319     AC_MSG_RESULT(yes)
2320     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
2321     ;;
2322   *)
2323     AC_MSG_RESULT(no)
2324     ;;
2325   esac ],
2326   AC_MSG_RESULT(no)
2327 )
2328
2329 #################################################
2330 # check for syslog logging
2331 AC_MSG_CHECKING(whether to use syslog logging)
2332 AC_ARG_WITH(syslog,
2333 [  --with-syslog           Include experimental SYSLOG support (default=no)],
2334 [ case "$withval" in
2335   yes)
2336     AC_MSG_RESULT(yes)
2337     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
2338     ;;
2339   *)
2340     AC_MSG_RESULT(no)
2341     ;;
2342   esac ],
2343   AC_MSG_RESULT(no)
2344 )
2345
2346 #################################################
2347 # check for a shared memory profiling support
2348 AC_MSG_CHECKING(whether to use profiling)
2349 AC_ARG_WITH(profiling-data,
2350 [  --with-profiling-data   Include gathering source code profile information (default=no)],
2351 [ case "$withval" in
2352   yes)
2353     AC_MSG_RESULT(yes)
2354     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
2355     ;;
2356   *)
2357     AC_MSG_RESULT(no)
2358     ;;
2359   esac ],
2360   AC_MSG_RESULT(no)
2361 )
2362
2363
2364 #################################################
2365 # check for experimental disk-quotas support
2366 QUOTAOBJS=smbd/noquotas.o
2367
2368 AC_MSG_CHECKING(whether to support disk-quotas)
2369 AC_ARG_WITH(quotas,
2370 [  --with-quotas           Include experimental disk-quota support (default=no)],
2371 [ case "$withval" in
2372   yes)
2373     AC_MSG_RESULT(yes)
2374     case "$host_os" in
2375       *linux*)
2376         # Check for kernel 2.4.x quota braindamage...
2377         AC_CACHE_CHECK([for linux 2.4.x quota braindamage..],samba_cv_linux_2_4_quota_braindamage, [
2378         AC_TRY_COMPILE([#include <stdio.h>
2379 #include <sys/types.h>
2380 #include <asm/types.h>
2381 #include <linux/quota.h>
2382 #include <mntent.h>
2383 #include <linux/unistd.h>],[struct mem_dqblk D;],
2384       samba_cv_linux_2_4_quota_braindamage=yes,samba_cv_linux_2_4_quota_braindamage=no)])
2385 if test x"$samba_cv_linux_2_4_quota_braindamage" = x"yes"; then
2386         AC_DEFINE(LINUX_QUOTAS_2,1,[linux 2.4.x quota braindamage])
2387 else
2388         AC_DEFINE(LINUX_QUOTAS_1,1,[linux quotas])
2389 fi
2390         ;;
2391       *)
2392         ;;
2393     esac
2394     QUOTAOBJS=smbd/quotas.o
2395     AC_DEFINE(WITH_QUOTAS,1,[Whether to include experimental quota support])
2396     ;;
2397   *)
2398     AC_MSG_RESULT(no)
2399     ;;
2400   esac ],
2401   AC_MSG_RESULT(no)
2402 )
2403 AC_SUBST(QUOTAOBJS)
2404
2405 #################################################
2406 # check for experimental utmp accounting
2407
2408 AC_MSG_CHECKING(whether to support utmp accounting)
2409 AC_ARG_WITH(utmp,
2410 [  --with-utmp             Include experimental utmp accounting (default=no)],
2411 [ case "$withval" in
2412   yes)
2413     AC_MSG_RESULT(yes)
2414     AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
2415     ;;
2416   *)
2417     AC_MSG_RESULT(no)
2418     ;;
2419   esac ],
2420   AC_MSG_RESULT(no)
2421 )
2422
2423 #################################################
2424 # choose native language(s) of man pages
2425 AC_MSG_CHECKING(chosen man pages' language(s))
2426 AC_ARG_WITH(manpages-langs,
2427 [  --with-manpages-langs={en,ja,pl}  Choose man pages' language(s). (en)],
2428 [ case "$withval" in
2429   yes|no)
2430     AC_MSG_WARN(--with-manpages-langs called without argument - will use default)
2431     manlangs="en"
2432   ;;
2433   *)
2434     manlangs="$withval"
2435   ;;
2436   esac
2437
2438   AC_MSG_RESULT($manlangs)
2439   manlangs=`echo $manlangs | sed "s/,/ /g"`   # replacing commas with spaces to produce a list
2440   AC_SUBST(manlangs)],
2441
2442   [manlangs="en"
2443   AC_MSG_RESULT($manlangs)
2444   AC_SUBST(manlangs)]
2445 )
2446
2447 #################################################
2448 # should we build libsmbclient?
2449
2450 LIBSMBCLIENT_SHARED=
2451 LIBSMBCLIENT=
2452 AC_MSG_CHECKING(whether to build the libsmbclient shared library)
2453 AC_ARG_WITH(libsmbclient,
2454 [  --with-libsmbclient     Build the libsmbclient shared library (default=yes)],
2455 [ case "$withval" in
2456   no) 
2457      AC_MSG_RESULT(no)
2458      ;;
2459   *)
2460      if test $BLDSHARED = true; then
2461         LIBSMBCLIENT_SHARED=bin/libsmbclient.$SHLIBEXT
2462         LIBSMBCLIENT=libsmbclient
2463         AC_MSG_RESULT(yes)
2464      else
2465         AC_MSG_RESULT(no shared library support)
2466      fi
2467      ;;
2468   esac ],
2469   AC_MSG_RESULT(yes)
2470 )
2471
2472
2473 #################################################
2474 # these tests are taken from the GNU fileutils package
2475 AC_CHECKING(how to get filesystem space usage)
2476 space=no
2477
2478 # Test for statvfs64.
2479 if test $space = no; then
2480   # SVR4
2481   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
2482   [AC_TRY_RUN([
2483 #if defined(HAVE_UNISTD_H)
2484 #include <unistd.h>
2485 #endif
2486 #include <sys/types.h>
2487 #include <sys/statvfs.h>
2488   main ()
2489   {
2490     struct statvfs64 fsd;
2491     exit (statvfs64 (".", &fsd));
2492   }],
2493   fu_cv_sys_stat_statvfs64=yes,
2494   fu_cv_sys_stat_statvfs64=no,
2495   fu_cv_sys_stat_statvfs64=cross)])
2496   if test $fu_cv_sys_stat_statvfs64 = yes; then
2497     space=yes
2498     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
2499   fi
2500 fi
2501
2502 # Perform only the link test since it seems there are no variants of the
2503 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
2504 # because that got a false positive on SCO OSR5.  Adding the declaration
2505 # of a `struct statvfs' causes this test to fail (as it should) on such
2506 # systems.  That system is reported to work fine with STAT_STATFS4 which
2507 # is what it gets when this test fails.
2508 if test $space = no; then
2509   # SVR4
2510   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
2511                  [AC_TRY_LINK([#include <sys/types.h>
2512 #include <sys/statvfs.h>],
2513                               [struct statvfs fsd; statvfs (0, &fsd);],
2514                               fu_cv_sys_stat_statvfs=yes,
2515                               fu_cv_sys_stat_statvfs=no)])
2516   if test $fu_cv_sys_stat_statvfs = yes; then
2517     space=yes
2518     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
2519   fi
2520 fi
2521
2522 if test $space = no; then
2523   # DEC Alpha running OSF/1
2524   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
2525   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
2526   [AC_TRY_RUN([
2527 #include <sys/param.h>
2528 #include <sys/types.h>
2529 #include <sys/mount.h>
2530   main ()
2531   {
2532     struct statfs fsd;
2533     fsd.f_fsize = 0;
2534     exit (statfs (".", &fsd, sizeof (struct statfs)));
2535   }],
2536   fu_cv_sys_stat_statfs3_osf1=yes,
2537   fu_cv_sys_stat_statfs3_osf1=no,
2538   fu_cv_sys_stat_statfs3_osf1=no)])
2539   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
2540   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
2541     space=yes
2542     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
2543   fi
2544 fi
2545
2546 if test $space = no; then
2547 # AIX
2548   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
2549 member (AIX, 4.3BSD)])
2550   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
2551   [AC_TRY_RUN([
2552 #ifdef HAVE_SYS_PARAM_H
2553 #include <sys/param.h>
2554 #endif
2555 #ifdef HAVE_SYS_MOUNT_H
2556 #include <sys/mount.h>
2557 #endif
2558 #ifdef HAVE_SYS_VFS_H
2559 #include <sys/vfs.h>
2560 #endif
2561   main ()
2562   {
2563   struct statfs fsd;
2564   fsd.f_bsize = 0;
2565   exit (statfs (".", &fsd));
2566   }],
2567   fu_cv_sys_stat_statfs2_bsize=yes,
2568   fu_cv_sys_stat_statfs2_bsize=no,
2569   fu_cv_sys_stat_statfs2_bsize=no)])
2570   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
2571   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
2572     space=yes
2573     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
2574   fi
2575 fi
2576
2577 if test $space = no; then
2578 # SVR3
2579   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
2580   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
2581   [AC_TRY_RUN([#include <sys/types.h>
2582 #include <sys/statfs.h>
2583   main ()
2584   {
2585   struct statfs fsd;
2586   exit (statfs (".", &fsd, sizeof fsd, 0));
2587   }],
2588     fu_cv_sys_stat_statfs4=yes,
2589     fu_cv_sys_stat_statfs4=no,
2590     fu_cv_sys_stat_statfs4=no)])
2591   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
2592   if test $fu_cv_sys_stat_statfs4 = yes; then
2593     space=yes
2594     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
2595   fi
2596 fi
2597
2598 if test $space = no; then
2599 # 4.4BSD and NetBSD
2600   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
2601 member (4.4BSD and NetBSD)])
2602   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
2603   [AC_TRY_RUN([#include <sys/types.h>
2604 #ifdef HAVE_SYS_PARAM_H
2605 #include <sys/param.h>
2606 #endif
2607 #ifdef HAVE_SYS_MOUNT_H
2608 #include <sys/mount.h>
2609 #endif
2610   main ()
2611   {
2612   struct statfs fsd;
2613   fsd.f_fsize = 0;
2614   exit (statfs (".", &fsd));
2615   }],
2616   fu_cv_sys_stat_statfs2_fsize=yes,
2617   fu_cv_sys_stat_statfs2_fsize=no,
2618   fu_cv_sys_stat_statfs2_fsize=no)])
2619   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
2620   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
2621     space=yes
2622         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
2623   fi
2624 fi
2625
2626 if test $space = no; then
2627   # Ultrix
2628   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
2629   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
2630   [AC_TRY_RUN([#include <sys/types.h>
2631 #ifdef HAVE_SYS_PARAM_H
2632 #include <sys/param.h>
2633 #endif
2634 #ifdef HAVE_SYS_MOUNT_H
2635 #include <sys/mount.h>
2636 #endif
2637 #ifdef HAVE_SYS_FS_TYPES_H
2638 #include <sys/fs_types.h>
2639 #endif
2640   main ()
2641   {
2642   struct fs_data fsd;
2643   /* Ultrix's statfs returns 1 for success,
2644      0 for not mounted, -1 for failure.  */
2645   exit (statfs (".", &fsd) != 1);
2646   }],
2647   fu_cv_sys_stat_fs_data=yes,
2648   fu_cv_sys_stat_fs_data=no,
2649   fu_cv_sys_stat_fs_data=no)])
2650   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
2651   if test $fu_cv_sys_stat_fs_data = yes; then
2652     space=yes
2653     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
2654   fi
2655 fi
2656
2657 #
2658 # As a gating factor for large file support, in order to
2659 # use <4GB files we must have the following minimal support
2660 # available.
2661 # long long, and a 64 bit off_t or off64_t.
2662 # If we don't have all of these then disable large
2663 # file support.
2664 #
2665 AC_MSG_CHECKING([if large file support can be enabled])
2666 AC_TRY_COMPILE([
2667 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
2668 #include <sys/types.h>
2669 #else
2670 __COMPILE_ERROR_
2671 #endif
2672 ],
2673 [int i],
2674 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
2675 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
2676         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
2677 fi
2678 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
2679
2680 AC_ARG_WITH(spinlocks, 
2681 [  --with-spinlocks        Use spin locks instead of fcntl locks (default=no) ])
2682 if test "x$with_spinlocks" = "xyes"; then
2683     AC_DEFINE(USE_SPINLOCKS,1,[Whether to use spin locks instead of fcntl locks])
2684
2685     case "$host_cpu" in
2686         sparc)
2687             AC_DEFINE(SPARC_SPINLOCKS,1,[Whether to use sparc spinlocks])
2688             ;;
2689
2690         i386|i486|i586|i686)
2691             AC_DEFINE(INTEL_SPINLOCKS,1,[Whether to use intel spinlocks])
2692             ;;
2693
2694         mips)
2695             AC_DEFINE(MIPS_SPINLOCKS,1,[Whether to use mips spinlocks])
2696             ;;
2697
2698         powerpc)
2699             AC_DEFINE(POWERPC_SPINLOCKS,1,[Whether to use powerpc spinlocks])
2700             ;;
2701     esac
2702 fi
2703
2704 #################################################
2705 # check for ACL support
2706
2707 AC_MSG_CHECKING(whether to support ACLs)
2708 AC_ARG_WITH(acl-support,
2709 [  --with-acl-support      Include ACL support (default=no)],
2710 [ case "$withval" in
2711   yes)
2712
2713         case "$host_os" in
2714         *sysv5*)
2715                 AC_MSG_RESULT(Using UnixWare ACLs)
2716                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
2717                 ;;
2718         *solaris*)
2719                 AC_MSG_RESULT(Using solaris ACLs)
2720                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
2721                 ;;
2722         *hpux*)
2723                 AC_MSG_RESULT(Using HPUX ACLs)
2724                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
2725                 ;;
2726         *irix*)
2727                 AC_MSG_RESULT(Using IRIX ACLs)
2728                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
2729                 ;;
2730         *aix*)
2731                 AC_MSG_RESULT(Using AIX ACLs)
2732                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
2733                 ;;
2734         *osf*)
2735                 AC_MSG_RESULT(Using Tru64 ACLs)
2736                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
2737                 LIBS="$LIBS -lpacl"
2738                 ;;
2739         *)
2740                 AC_CHECK_LIB(acl,acl_get_file)
2741                 AC_CACHE_CHECK([for ACL support],samba_cv_HAVE_POSIX_ACLS,[
2742                 AC_TRY_LINK([#include <sys/types.h>
2743 #include <sys/acl.h>],
2744 [ acl_t acl; int entry_id; acl_entry_t *entry_p; return acl_get_entry( acl, entry_id, entry_p);],
2745 samba_cv_HAVE_POSIX_ACLS=yes,samba_cv_HAVE_POSIX_ACLS=no)])
2746                         if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
2747                                 AC_MSG_RESULT(Using posix ACLs)
2748                                 AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
2749                                 AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
2750                                 AC_TRY_LINK([#include <sys/types.h>
2751 #include <sys/acl.h>],
2752 [ acl_permset_t permset_d; acl_perm_t perm; return acl_get_perm_np( permset_d, perm);],
2753 samba_cv_HAVE_ACL_GET_PERM_NP=yes,samba_cv_HAVE_ACL_GET_PERM_NP=no)])
2754                                 if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
2755                                         AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
2756                                 fi
2757                         fi
2758             ;;
2759         esac
2760         ;;
2761   *)
2762     AC_MSG_RESULT(no)
2763     AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
2764     ;;
2765   esac ],
2766   AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
2767   AC_MSG_RESULT(no)
2768 )
2769
2770 #################################################
2771 # check for sendfile support
2772
2773 with_sendfile_support=yes
2774 AC_MSG_CHECKING(whether to check to support sendfile)
2775 AC_ARG_WITH(sendfile-support,
2776 [  --with-sendfile-support      Check for sendfile support (default=yes)],
2777 [ case "$withval" in
2778   yes)
2779
2780         AC_MSG_RESULT(yes);
2781
2782         case "$host_os" in
2783         *linux*)
2784                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
2785                 AC_TRY_LINK([#include <sys/sendfile.h>],
2786 [\
2787 int tofd, fromfd;
2788 off64_t offset;
2789 size_t total;
2790 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
2791 ],
2792 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
2793
2794                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
2795                 AC_TRY_LINK([#include <sys/sendfile.h>],
2796 [\
2797 int tofd, fromfd;
2798 off_t offset;
2799 size_t total;
2800 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
2801 ],
2802 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
2803
2804 # Try and cope with broken Linux sendfile....
2805                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
2806                 AC_TRY_LINK([\
2807 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
2808 #undef _FILE_OFFSET_BITS
2809 #endif
2810 #include <sys/sendfile.h>],
2811 [\
2812 int tofd, fromfd;
2813 off_t offset;
2814 size_t total;
2815 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
2816 ],
2817 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
2818
2819         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
2820                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
2821                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
2822                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
2823         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
2824                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
2825                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
2826                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
2827         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
2828                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
2829                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
2830         else
2831                 AC_MSG_RESULT(no);
2832         fi
2833
2834         ;;
2835         *freebsd*)
2836                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
2837                 AC_TRY_LINK([\
2838 #include <sys/types.h>
2839 #include <sys/socket.h>
2840 #include <sys/uio.h>],
2841 [\
2842         int fromfd, tofd;
2843         off_t offset, nwritten;
2844         struct sf_hdtr hdr;
2845         struct iovec hdtrl;
2846         hdr->headers = &hdtrl;
2847         hdr->hdr_cnt = 1;
2848         hdr->trailers = NULL;
2849         hdr->trl_cnt = 0;
2850         hdtrl.iov_base = NULL;
2851         hdtrl.iov_len = 0;
2852         int ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
2853 ],
2854 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
2855
2856         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
2857                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
2858                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
2859                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2860         else
2861                 AC_MSG_RESULT(no);
2862         fi
2863         ;;
2864
2865         *hpux*)
2866                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
2867                 AC_TRY_LINK([\
2868 #include <sys/socket.h>
2869 #include <sys/uio.h>],
2870 [\
2871         int fromfd, tofd;
2872         size_t total=0;
2873         struct iovec hdtrl[2];
2874         ssize_t nwritten;
2875         off64_t offset;
2876
2877         hdtrl[0].iov_base = 0;
2878         hdtrl[0].iov_len = 0;
2879
2880         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
2881 ],
2882 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
2883         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
2884                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
2885                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
2886                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2887         else
2888                 AC_MSG_RESULT(no);
2889         fi
2890
2891                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
2892                 AC_TRY_LINK([\
2893 #include <sys/socket.h>
2894 #include <sys/uio.h>],
2895 [\
2896         int fromfd, tofd;
2897         size_t total=0;
2898         struct iovec hdtrl[2];
2899         ssize_t nwritten;
2900         off_t offset;
2901
2902         hdtrl[0].iov_base = 0;
2903         hdtrl[0].iov_len = 0;
2904
2905         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
2906 ],
2907 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
2908         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
2909                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
2910                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
2911                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2912         else
2913                 AC_MSG_RESULT(no);
2914         fi
2915         ;;
2916
2917         *solaris*)
2918                 AC_CHECK_LIB(sendfile,sendfilev)
2919                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
2920                 AC_TRY_LINK([\
2921 #include <sys/sendfile.h>],
2922 [\
2923         int sfvcnt;
2924         size_t xferred;
2925         struct sendfilevec vec[2];
2926         ssize_t nwritten;
2927         int tofd;
2928
2929         sfvcnt = 2;
2930
2931         vec[0].sfv_fd = SFV_FD_SELF;
2932         vec[0].sfv_flag = 0;
2933         vec[0].sfv_off = 0;
2934         vec[0].sfv_len = 0;
2935
2936         vec[1].sfv_fd = 0;
2937         vec[1].sfv_flag = 0;
2938         vec[1].sfv_off = 0;
2939         vec[1].sfv_len = 0;
2940         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
2941 ],
2942 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
2943
2944         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
2945                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
2946                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
2947                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
2948         else
2949                 AC_MSG_RESULT(no);
2950         fi
2951
2952                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
2953                 AC_TRY_LINK([\
2954 #include <sys/sendfile.h>],
2955 [\
2956         int sfvcnt;
2957         size_t xferred;
2958         struct sendfilevec vec[2];
2959         ssize_t nwritten;
2960         int tofd;
2961
2962         sfvcnt = 2;
2963
2964         vec[0].sfv_fd = SFV_FD_SELF;
2965         vec[0].sfv_flag = 0;
2966         vec[0].sfv_off = 0;
2967         vec[0].sfv_len = 0;
2968
2969         vec[1].sfv_fd = 0;
2970         vec[1].sfv_flag = 0;
2971         vec[1].sfv_off = 0;
2972         vec[1].sfv_len = 0;
2973         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
2974 ],
2975 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
2976
2977         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
2978                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
2979                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
2980                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
2981         else
2982                 AC_MSG_RESULT(no);
2983         fi
2984         ;;
2985
2986         *)
2987         ;;
2988         esac
2989         ;;
2990   *)
2991     AC_MSG_RESULT(no)
2992     ;;
2993   esac ],
2994   AC_MSG_RESULT(yes)
2995 )
2996
2997
2998 #################################################
2999 # Check whether winbind is supported on this platform.  If so we need to
3000 # build and install client programs, sbin programs and shared libraries
3001
3002 AC_MSG_CHECKING(whether to build winbind)
3003
3004 # Initially, the value of $host_os decides whether winbind is supported
3005
3006 case "$host_os" in
3007         *linux*|*irix*)
3008                 HAVE_WINBIND=yes
3009                 ;;
3010         *solaris*)
3011                 HAVE_WINBIND=yes
3012                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
3013                 WINBIND_NSS_EXTRA_LIBS="-lsocket"
3014                 ;;
3015         *hpux11*)
3016                 HAVE_WINBIND=yes
3017                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
3018                 ;;
3019         *)
3020                 HAVE_WINBIND=no
3021                 winbind_no_reason=", unsupported on $host_os"
3022                 ;;
3023 esac
3024
3025 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
3026 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
3027
3028 # Check the setting of --with-winbindd
3029
3030 AC_ARG_WITH(winbind,
3031 [  --with-winbind          Build winbind (default, if supported by OS)],
3032
3033   case "$withval" in
3034         yes)
3035                 HAVE_WINBIND=yes
3036                 ;;
3037         no)
3038                 HAVE_WINBIND=no
3039                 winbind_reason=""
3040                 ;;
3041   esac ],
3042 )
3043
3044 # We need unix domain sockets for winbind
3045
3046 if test x"$HAVE_WINBIND" = x"yes"; then
3047         if test x"$samba_cv_unixsocket" = x"no"; then
3048                 winbind_no_reason=", no unix domain socket support on $host_os"
3049                 HAVE_WINBIND=no
3050         fi
3051 fi
3052
3053 # Display test results
3054
3055 if test x"$HAVE_WINBIND" = x"yes"; then
3056         AC_MSG_RESULT(yes)
3057         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
3058
3059         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
3060         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
3061         if test x"$BLDSHARED" = x"true"; then
3062                 SHLIB_PROGS="$SHLIB_PROGS nsswitch/libnss_winbind.so"
3063                 if test x"$with_pam" = x"yes"; then
3064                         SHLIB_PROGS="$SHLIB_PROGS nsswitch/pam_winbind.so"
3065                 fi
3066         fi
3067 else
3068         AC_MSG_RESULT(no$winbind_no_reason)
3069 fi
3070
3071 # Solaris has some extra fields in struct passwd that need to be
3072 # initialised otherwise nscd crashes.  Unfortunately autoconf < 2.50
3073 # doesn't have the AC_CHECK_MEMBER macro which would be handy for checking
3074 # this. 
3075
3076 #AC_CHECK_MEMBER(struct passwd.pw_comment,
3077 #               AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),
3078 #               [#include <pwd.h>])
3079
3080 AC_CACHE_CHECK([whether struct passwd has pw_comment],samba_cv_passwd_pw_comment, [
3081     AC_TRY_COMPILE([#include <pwd.h>],[struct passwd p; p.pw_comment;],
3082         samba_cv_passwd_pw_comment=yes,samba_cv_passwd_pw_comment=no)])
3083 if test x"$samba_cv_passwd_pw_comment" = x"yes"; then
3084    AC_DEFINE(HAVE_PASSWD_PW_COMMENT,1,[Whether struct passwd has pw_comment])
3085 fi
3086
3087 #AC_CHECK_MEMBER(struct passwd.pw_age,
3088 #               AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),
3089 #               [#include <pwd.h>])
3090
3091 AC_CACHE_CHECK([whether struct passwd has pw_age],samba_cv_passwd_pw_age, [
3092     AC_TRY_COMPILE([#include <pwd.h>],[struct passwd p; p.pw_age;],
3093         samba_cv_passwd_pw_age=yes,samba_cv_passwd_pw_age=no)])
3094 if test x"$samba_cv_passwd_pw_age" = x"yes"; then
3095    AC_DEFINE(HAVE_PASSWD_PW_AGE,1,[Whether struct passwd has pw_age])
3096 fi
3097
3098 #################################################
3099 # Check to see if we should use the included popt 
3100
3101 AC_ARG_WITH(included-popt,
3102 [  --with-included-popt    use bundled popt library, not from system],
3103
3104   case "$withval" in
3105         yes)
3106                 INCLUDED_POPT=yes
3107                 ;;
3108         no)
3109                 INCLUDED_POPT=no
3110                 ;;
3111   esac ],
3112 )
3113 if test x"$INCLUDED_POPT" != x"yes"; then
3114     AC_CHECK_LIB(popt, poptGetContext,
3115                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
3116 fi
3117
3118 AC_MSG_CHECKING(whether to use included popt)
3119 if test x"$INCLUDED_POPT" = x"yes"; then
3120     AC_MSG_RESULT(yes)
3121     BUILD_POPT='$(POPT_OBJS)'
3122     FLAGS1="-I$srcdir/popt"
3123 else
3124     AC_MSG_RESULT(no)
3125     LIBS="$LIBS -lpopt"
3126 fi
3127 AC_SUBST(BUILD_POPT)
3128 AC_SUBST(FLAGS1)
3129
3130 #################################################
3131 # Check if the user wants Python
3132
3133 # At the moment, you can use this to set which Python binary to link
3134 # against.  (Libraries built for Python2.2 can't be used by 2.1,
3135 # though they can coexist in different directories.)  In the future
3136 # this might make the Python stuff be built by default.
3137
3138 # If you don't specify --with-python, we assume "python" anyhow,
3139 # because the extensions are not built until you specifically "make
3140 # python_ext".  --without-python turns them off.  Perhaps in the
3141 # future --with-python should make them automatically built by make
3142 # all.
3143
3144 PYTHON=python
3145
3146 AC_ARG_WITH(python,
3147 [  --with-python=PYTHONNAME  build Python libraries],
3148 [ case "${withval-python}" in
3149   yes)
3150         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS python_ext"
3151         ;;
3152   no)
3153         PYTHON=
3154         ;;
3155   *)
3156         PYTHON=${withval-python}
3157         ;;
3158   esac ])
3159 AC_SUBST(PYTHON)
3160
3161 #################################################
3162 # do extra things if we are running insure
3163
3164 if test "${ac_cv_prog_CC}" = "insure"; then
3165         CPPFLAGS="$CPPFLAGS -D__INSURE__"
3166 fi
3167
3168 #################################################
3169 # final configure stuff
3170
3171 AC_MSG_CHECKING([configure summary])
3172 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
3173            AC_MSG_RESULT(yes),
3174            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
3175            AC_MSG_WARN([cannot run when cross-compiling]))
3176
3177 builddir=`pwd`
3178 AC_SUBST(builddir)
3179
3180 AC_OUTPUT(include/stamp-h Makefile script/findsmb)
3181
3182 #################################################
3183 # Print very concise instructions on building/use
3184 if test "x$enable_dmalloc" = xyes
3185 then
3186         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
3187         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
3188 fi