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