idmap_hash: Add the idmap/nss-info provider from Likewise Open.
[samba.git] / source3 / configure.in
1 dnl Process this file with autoconf to produce a configure script.
2
3 dnl We must use autotools 2.54 or above
4 AC_PREREQ(2.54)
5
6 AC_INIT([Samba],[3],[samba-technical@samba.org])
7
8 AC_CONFIG_SRCDIR([include/includes.h])
9 AC_CONFIG_HEADER(include/config.h)
10 AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h])
11
12 case "$PATH" in
13     */usr/ucb*)
14         AC_MSG_WARN([\$PATH contains /usr/ucb - build errors may follow])
15         ;;
16 esac 
17
18 builddir=`pwd`
19 AC_SUBST(builddir)
20
21 m4_include(m4/samba_version.m4)
22 m4_include(m4/check_path.m4)
23
24 AC_LIBREPLACE_CC_CHECKS
25
26 m4_include(lib/talloc/libtalloc.m4)
27
28 LIBTALLOC_OBJ0=""
29 for obj in ${TALLOC_OBJ}; do
30         LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
31 done
32 AC_SUBST(LIBTALLOC_OBJ0)
33
34 # TODO: These should come from m4_include(lib/tdb/libtdb.m4)
35 # but currently this fails: things have to get merged from s4.
36 tdbdir="lib/tdb"
37 AC_SUBST(tdbdir)
38 TDB_CFLAGS="-I${srcdir-.}/$tdbdir/include"
39 AC_SUBST(TDB_CFLAGS)
40
41 LIBTDB_OBJ0=""
42 for o in common/tdb.o common/dump.o common/transaction.o common/error.o \
43              common/traverse.o common/freelist.o common/freelistcheck.o \
44                  common/io.o common/lock.o common/open.o; 
45 do 
46         LIBTDB_OBJ0="$LIBTDB_OBJ0 lib/tdb/$o"
47 done
48
49 AC_SUBST(LIBTDB_OBJ0)
50 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
51 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/lib/replace"
52 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
53 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
54 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
55 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
56
57 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/popt"
58
59 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
60 if test "x${srcdir-.}" != "x."; then
61         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
62 fi
63
64 dnl Unique-to-Samba variables we'll be playing with.
65 AC_SUBST(SAMBA_CPPFLAGS)
66 AC_SUBST(SHELL)
67 AC_SUBST(LDSHFLAGS)
68 AC_SUBST(SONAMEFLAG)
69 AC_SUBST(SHLD)
70 AC_SUBST(MODULE_EXPORTS)
71 AC_SUBST(DSO_EXPORTS)
72 AC_SUBST(HOST_OS)
73 AC_SUBST(PICFLAG)
74 AC_SUBST(PIE_CFLAGS)
75 AC_SUBST(PIE_LDFLAGS)
76 AC_SUBST(RELRO_LDFLAGS)
77 AC_SUBST(SHLIBEXT)
78 AC_SUBST(INSTALLLIBCMD_SH)
79 AC_SUBST(INSTALLLIBCMD_A)
80 AC_SUBST(UNINSTALLLIBCMD_SH)
81 AC_SUBST(UNINSTALLLIBCMD_A)
82
83 AC_SUBST(INSTALL_LIBWBCLIENT)
84 AC_SUBST(UNINSTALL_LIBWBCLIENT)
85 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
86 AC_SUBST(LIBWBCLIENT_SHARED)
87 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
88 AC_SUBST(LIBWBCLIENT_STATIC)
89 AC_SUBST(LIBWBCLIENT_SOVER)
90 AC_SUBST(LIBWBCLIENT)
91 AC_SUBST(WINBIND_LIBS)
92
93 AC_SUBST(LIBSAMBAUTIL_SHARED)
94
95 AC_SUBST(PRINT_LIBS)
96 AC_SUBST(AUTH_LIBS)
97 AC_SUBST(ACL_LIBS)
98 AC_SUBST(PASSDB_LIBS)
99 AC_SUBST(IDMAP_LIBS)
100 AC_SUBST(KRB5_LIBS)
101 AC_SUBST(UUID_LIBS)
102 AC_SUBST(LDAP_LIBS)
103 AC_SUBST(GPEXT_LIBS)
104 AC_SUBST(PAM_MODULES)
105 AC_SUBST(INSTALL_PAM_MODULES)
106 AC_SUBST(UNINSTALL_PAM_MODULES)
107 AC_SUBST(NSS_MODULES)
108 AC_SUBST(EXTRA_BIN_PROGS)
109 AC_SUBST(CIFSMOUNT_PROGS)
110 AC_SUBST(INSTALL_CIFSMOUNT)
111 AC_SUBST(UNINSTALL_CIFSMOUNT)
112 AC_SUBST(CIFSUPCALL_PROGS)
113 AC_SUBST(INSTALL_CIFSUPCALL)
114 AC_SUBST(UNINSTALL_CIFSUPCALL)
115 AC_SUBST(EXTRA_SBIN_PROGS)
116 AC_SUBST(EXTRA_ALL_TARGETS)
117 AC_SUBST(CONFIG_LIBS)
118 AC_SUBST(NSCD_LIBS)
119
120 # compile with optimization and without debugging by default, but
121 # allow people to set their own preference.
122 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
123 # if it has no value.  This prevent *very* large debug binaries from occurring
124 # by default.
125 if test "x$CFLAGS" = x; then
126   CFLAGS="-O"
127 fi
128 if test "x$debug" = "xyes" ; then
129         CFLAGS="${CFLAGS} -g"
130 else
131         CFLAGS="-O"
132 fi
133
134 m4_include(lib/socket_wrapper/config.m4)
135 m4_include(lib/nss_wrapper/config.m4)
136
137 m4_include(m4/swat.m4)
138
139 # Probe the gcc version for extra CFLAGS. We always stash these in
140 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
141 # Makefile edit, avoiding the need to re-run configure.
142 if test x"$ac_cv_prog_gcc" = x"yes" ; then
143         DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
144         # Add -Wdeclaration-after-statement if compiler supports it
145         AC_CACHE_CHECK(
146           [that the C compiler understands -Wdeclaration-after-statement],
147           samba_cv_HAVE_Wdeclaration_after_statement, [
148           AC_TRY_RUN_STRICT([
149             int main(void)
150             {
151                 return 0;
152             }],[-Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
153             samba_cv_HAVE_Wdeclaration_after_statement=yes,
154             samba_cv_HAVE_Wdeclaration_after_statement=no,
155             samba_cv_HAVE_Wdeclaration_after_statement=cross)
156        ])
157
158         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
159             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
160         fi
161
162         #-Werror-implicit-function-declaration
163         AC_CACHE_CHECK(
164           [that the C compiler understands -Werror-implicit-function-declaration],
165           samba_cv_HAVE_Werror_implicit_function_declaration, [
166           AC_TRY_RUN_STRICT([
167             int main(void)
168             {
169                 return 0;
170             }],[-Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
171             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
172             samba_cv_HAVE_Werror_implicit_function_declaration=no,
173             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
174        ])
175        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
176             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
177        fi
178
179         # krb5developer is like developer, except we don't get
180         # -Wstrict-prototypes.
181        if test x"$krb5_developer" != x"$yes" ; then
182             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
183        fi
184
185        if test x"$picky_developer" = x"yes"; then
186             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
187        fi
188 fi
189
190 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
191
192 if test "x$enable_dmalloc" = xyes
193 then
194         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
195         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
196                   [Define to check invariants around some common functions])
197         LIBS="$LIBS -ldmalloc"  
198 fi
199
200 #################################################
201 # check for a shared memory profiling support
202 AC_MSG_CHECKING(whether to use profiling)
203 AC_ARG_WITH(profiling-data,
204 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
205 [ case "$withval" in
206   yes)
207     AC_MSG_RESULT(yes)
208     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
209     samba_cv_WITH_PROFILE=yes
210     ;;
211   *)
212     AC_MSG_RESULT(no)
213     samba_cv_WITH_PROFILE=no
214     ;;
215   esac ],
216   AC_MSG_RESULT(no)
217 )
218
219 dnl Checks for programs.
220
221 AC_PROG_INSTALL
222 AC_PROG_AWK
223 AC_PATH_PROG(PERL, perl)
224
225 AC_CHECK_TOOL(AR, ar)
226
227 dnl Check if we use GNU ld
228 LD=ld
229 AC_PROG_LD_GNU
230
231 dnl Certain versions of GNU ld the default is not to have the
232 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
233 dnl warnings when building modules.
234 if test "$ac_cv_prog_gnu_ld" = "yes"; then
235         ac_cv_gnu_ld_version=`$LD -v 2>/dev/null | head -1`
236         AC_MSG_CHECKING(GNU ld release date)
237         changequote(,)dnl
238         ac_cv_gnu_ld_date=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([2-9][0-9][0-9][0-9]\)[-]*\([01][0-9]\)[-]*\([0-3][0-9]\).*$,\1\2\3,p'`
239         changequote([,])dnl
240         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
241         if test -n "$ac_cv_gnu_ld_date"; then
242         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
243                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
244         fi
245         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
246                 ac_cv_gnu_ld_version_script=yes
247         fi
248         else
249            AC_MSG_CHECKING(GNU ld release version)
250            changequote(,)dnl
251            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | sed -n 's,^.*\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
252            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
253            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
254            changequote([,])dnl
255            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
256            AC_MSG_CHECKING(GNU ld release version major)
257            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
258            AC_MSG_CHECKING(GNU ld release version minor)
259            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
260            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
261              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
262            fi
263            if test "$ac_cv_gnu_ld_vernr_major" -gt 2 || test "$ac_cv_gnu_ld_vernr_major"=2 && test "$ac_cv_gnu_ld_vernr_minor" -ge 12; then
264              ac_cv_gnu_ld_version_script=yes
265            fi
266         fi
267 fi
268
269 dnl look for executable suffix
270 AC_EXEEXT
271
272 dnl Check if C compiler understands -c and -o at the same time
273 AC_PROG_CC_C_O
274 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
275       BROKEN_CC=
276 else
277       BROKEN_CC=#
278 fi
279 AC_SUBST(BROKEN_CC)
280
281 dnl Check if the C compiler understands -Werror
282 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
283  AC_TRY_RUN_STRICT([
284   int main(void)
285   {
286         return 0;
287   }],[-Werror],[$CPPFLAGS],[$LDFLAGS],
288   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
289 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
290    Werror_FLAGS="-Werror"
291 else
292 dnl Check if the C compiler understands -w2
293 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
294  AC_TRY_RUN_STRICT([
295   int main(void)
296   {
297         return 0;
298   }],[-w2],[$CPPFLAGS],[$LDFLAGS],
299   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
300 if test x"$samba_cv_HAVE_w2" = x"yes"; then
301    Werror_FLAGS="-w2"
302 else
303 dnl Check if the C compiler understands -errwarn
304 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
305   AC_TRY_RUN_STRICT([
306    int main(void)
307    {
308         return 0;
309    }],[-errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
310    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
311 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
312    Werror_FLAGS="-errwarn=%all"
313 fi
314 fi
315 fi
316
317 dnl Check if the C compiler understands volatile (it should, being ANSI).
318 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
319     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
320         samba_cv_volatile=yes,samba_cv_volatile=no)])
321 if test x"$samba_cv_volatile" = x"yes"; then
322    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
323 fi
324
325 ############################################
326 # check if the compiler can handle negative enum values
327 # and don't truncate the values to INT_MAX
328 # a runtime test is needed here
329 AC_SUBST(PIDL_ARGS)
330 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
331     AC_TRY_RUN(
332 [
333         #include <stdio.h>
334         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
335         int main(void) {
336                 enum negative_values v1 = NEGATIVE_VALUE;
337                 unsigned v2 = NEGATIVE_VALUE;
338
339                 if (v1 != 0xFFFFFFFF) {
340                         printf("%u != 0xFFFFFFFF\n", v1);
341                         return 1;
342                 }
343                 if (v2 != 0xFFFFFFFF) {
344                         printf("%u != 0xFFFFFFFF\n", v2);
345                         return 1;
346                 }
347
348                 return 0;
349         }
350 ],
351         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
352 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
353         AC_MSG_WARN([using --unit-enums for pidl])
354         PIDL_ARGS="$PIDL_ARGS --uint-enums"
355 fi
356
357 dnl Figure out the flags to support named structure initializers
358
359 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
360
361 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
362 AC_MSG_CHECKING(uname -s)
363 AC_MSG_RESULT(${UNAME_S})
364
365 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
366 AC_MSG_CHECKING(uname -r)
367 AC_MSG_RESULT(${UNAME_R})
368
369 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
370 AC_MSG_CHECKING(uname -m)
371 AC_MSG_RESULT(${UNAME_M})
372
373 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
374 AC_MSG_CHECKING(uname -p)
375 AC_MSG_RESULT(${UNAME_P})
376
377 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
378 AC_MSG_CHECKING(uname -i)
379 AC_MSG_RESULT(${UNAME_I})
380
381 dnl Add #include for broken IRIX header files
382   case "$host_os" in
383         *irix6*)
384                 #TODO add to libreplace
385                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
386                         dnl Fix sensible defaults for MIPSPro compilers. The
387                         dnl error numbers are valid for the 7.3 compilers,
388                         dnl hopefully also valid for the 7.4 series.
389                         dnl
390                         dnl Bugzilla 3801. Force an error on warning 1035
391                         dnl so we don't incorrectly detect stdint.h. This
392                         dnl warning is emitted for #error directives.
393                         CFLAGS="$CFLAGS -diag_error 1035"
394                         dnl 1209: Controlling expression is constant
395                         dnl 1174: Function foo declared but never referenced
396                         dnl 3201: Parameter foo was never referenced
397                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
398                 fi
399         ;;
400 esac
401
402 DYNEXP=
403 AC_SUBST(DYNEXP)
404
405 dnl Add modules that have to be built by default here
406 dnl These have to be built static:
407 default_static_modules="pdb_smbpasswd pdb_tdbsam rpc_lsarpc rpc_samr rpc_winreg rpc_initshutdown rpc_dssetup rpc_wkssvc rpc_svcctl2 rpc_ntsvcs2 rpc_netlogon rpc_netdfs rpc_srvsvc rpc_spoolss rpc_eventlog2 auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin vfs_default nss_info_template"
408
409 dnl These are preferably build shared, and static if dlopen() is not available
410 default_shared_modules="vfs_recycle vfs_audit vfs_extd_audit vfs_full_audit vfs_netatalk vfs_fake_perms vfs_default_quota vfs_readonly vfs_cap vfs_expand_msdfs vfs_shadow_copy vfs_shadow_copy2 charset_CP850 charset_CP437 auth_script vfs_readahead vfs_xattr_tdb vfs_streams_xattr"
411
412 if test "x$developer" = xyes; then
413    default_static_modules="$default_static_modules rpc_rpcecho"
414    default_shared_modules="$default_shared_modules charset_weird"
415 fi
416
417 #
418 # Config CPPFLAG settings for strange OS's that must be set
419 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
420 # case statement; its first reference must be unconditional.
421 #
422 case "$host_os" in
423     *hpux*)
424 #
425 # Defines needed for HPUX support.
426 # HPUX has bigcrypt but (sometimes?) doesn't use it for
427 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
428 #
429       case `uname -r` in
430                 *9*|*10*|*11)
431                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
432                 ;;
433       esac
434       ;;
435
436 #
437 # CRAY Unicos has broken const handling
438        *unicos*)
439           AC_MSG_RESULT([disabling const])
440           CPPFLAGS="$CPPFLAGS -Dconst="
441           ;;
442         
443 #
444 # AIX4.x doesn't even admit to having large
445 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
446 #
447     *aix4*)
448           AC_MSG_RESULT([enabling large file support])
449       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
450           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
451       ;;
452 #
453 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
454 # to the existance of large files..
455 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
456 # recommendations on large file support, however it makes the
457 # compile work using gcc 2.7 and 2.8, whereas using the Sun
458 # recommendation makes the compile fail on gcc2.7. JRA.
459 #
460 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
461 #
462         *solaris*)
463                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
464                 case `uname -r` in
465                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
466                                 AC_MSG_RESULT([no large file support])
467                                 ;;
468                         5.*)
469                         AC_MSG_RESULT([enabling large file support])
470                         if test "$ac_cv_prog_gcc" = yes; then
471                                 ${CC-cc} -v >conftest.c 2>&1
472                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
473                                 rm -fr conftest.c
474                                 case "$ac_cv_gcc_compiler_version_number" in
475                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
476                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
477                                                 LDFLAGS="$LDFLAGS -lthread"
478                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
479                                                 ;;
480                                         *)
481                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
482                                                 LDFLAGS="$LDFLAGS -lthread"
483                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
484                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
485                                                 ;;
486                                 esac
487                         else
488                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
489                                 LDFLAGS="$LDFLAGS -lthread"
490                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
491                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
492                         fi
493                         ;;
494                 esac
495                 ;;
496 #
497 # IRIX uses SYSV printing.  Make sure to set that here
498 #
499         *irix*)
500                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
501                 ;;
502         *freebsd*|*dragonfly*)
503                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
504                 ;;
505 #
506 # VOS may need to have POSIX support and System V compatibility enabled.
507 #
508     *vos*)
509     case "$CPPFLAGS" in
510           *-D_POSIX_C_SOURCE*)
511                 ;;
512           *)
513                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
514                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
515                 ;;
516     esac
517     case "$CPPFLAGS" in
518           *-D_SYSV*|*-D_SVID_SOURCE*)
519                 ;;
520           *)
521                 CPPFLAGS="$CPPFLAGS -D_SYSV"
522                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
523     esac
524     ;;
525 #
526 # Tests needed for SINIX large file support.
527 #
528     *sysv4*)
529       if test $host = mips-sni-sysv4 ; then
530         AC_MSG_CHECKING([for LFS support])
531         old_CPPFLAGS="$CPPFLAGS"
532         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
533         AC_TRY_RUN([
534 #include <unistd.h>
535 main () {
536 #if _LFS64_LARGEFILE == 1
537 exit(0);
538 #else
539 exit(1);
540 #endif
541 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
542         CPPFLAGS="$old_CPPFLAGS"
543         if test x$SINIX_LFS_SUPPORT = xyes ; then
544           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
545                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
546           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
547           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
548           LIBS="`getconf LFS64_LIBS` $LIBS"
549         fi
550       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
551       fi
552     ;;
553
554 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
555 #
556     *linux*)
557         AC_MSG_CHECKING([for LFS support])
558         old_CPPFLAGS="$CPPFLAGS"
559         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
560        AC_TRY_RUN([
561 #include <unistd.h>
562 #include <sys/utsname.h>
563 #include <string.h>
564 #include <stdlib.h>
565 main() {
566 #if _LFS64_LARGEFILE == 1
567        struct utsname uts;
568        char *release;
569        int major, minor;
570
571        /* Ensure this is glibc 2.2 or higher */
572 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
573        int libc_major = __GLIBC__;
574        int libc_minor = __GLIBC_MINOR__;
575
576        if (libc_major < 2)
577               exit(1);
578        if (libc_minor < 2)
579               exit(1);
580 #endif
581
582        /* Ensure this is kernel 2.4 or higher */
583
584        uname(&uts);
585        release = strdup(uts.release);
586        major = atoi(strsep(&release, "."));
587        minor = atoi(strsep(&release, "."));
588
589        if (major > 2 || (major == 2 && minor > 3))
590                exit(0);
591        exit(1);
592 #else
593        exit(1);
594 #endif
595 }
596 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
597         CPPFLAGS="$old_CPPFLAGS"
598         if test x$LINUX_LFS_SUPPORT = xyes ; then
599                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
600                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
601                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
602                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
603         fi
604         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
605         ;;
606
607 #
608 # MacOS X is the *only* system that uses compose character in utf8. This
609 # is so horribly broken....
610 #
611     *darwin*)
612         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
613
614 # Add a system specific charset module.
615         default_shared_modules="$default_shared_modules charset_macosxfs"
616
617         ;;
618     *hurd*)
619         AC_MSG_CHECKING([for LFS support])
620         old_CPPFLAGS="$CPPFLAGS"
621         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
622         AC_TRY_RUN([
623 #include <unistd.h>
624 main () {
625 #if _LFS64_LARGEFILE == 1
626 exit(0);
627 #else
628 exit(1);
629 #endif
630 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
631         CPPFLAGS="$old_CPPFLAGS"
632         if test x$GLIBC_LFS_SUPPORT = xyes ; then
633           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
634                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
635           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
636         fi
637       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
638     ;;
639
640 esac
641
642 SAVE_CPPFLAGS="${CPPFLAGS}"
643 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
644
645 AC_LIBREPLACE_BROKEN_CHECKS
646 AC_LIBREPLACE_NETWORK_CHECKS
647
648 CPPFLAGS="${SAVE_CPPFLAGS}"
649
650 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
651
652 LIBREPLACE_OBJS=""
653 for obj in ${LIBREPLACEOBJ}; do
654         LIBREPLACE_OBJS="${LIBREPLACE_OBJS} ${LIBREPLACE_DIR}/${obj}"
655 done
656 AC_SUBST(LIBREPLACE_OBJS)
657
658 # add -ldl to the global LIBS
659 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
660
661 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
662 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h memory.h alloca.h)
663 AC_CHECK_HEADERS(limits.h float.h pthread.h)
664 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
665 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h)
666 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
667 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
668 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
669 AC_CHECK_HEADERS(sys/sysmacros.h)
670 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
671 AC_CHECK_HEADERS(langinfo.h locale.h)
672 AC_CHECK_HEADERS(xfs/libxfs.h)
673 AC_CHECK_HEADERS(netgroup.h)
674
675 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
676 #if HAVE_RPC_RPC_H
677 #include <rpc/rpc.h>
678 #endif
679 ]])
680
681 ## These fail to compile on IRIX so just check for their presence
682 AC_CHECK_HEADERS(sys/mode.h,,,)
683
684 # Look for Darwin headers
685 old_CPPFLAGS="$CPPFLAGS"
686 CPPFLAGS="-Iinclude $CPPFLAGS"
687 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
688 CPPFLAGS="$old_CPPFLAGS"
689
690 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
691 # subdirectory of headers.
692 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
693
694 # check for linux on amd64 since valgrind is not quite there yet
695 case "$host_os" in
696         *linux*)
697                 case "$UNAME_P" in
698                         *x86_64*)
699                                 AC_DEFINE(HAVE_64BIT_LINUX,1,[Whether we are running on 64bit linux])
700                                 ;;
701                 esac
702                 ;;
703 esac
704
705
706 #
707 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
708 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
709 #
710 case "$host_os" in
711     *hpux*)
712                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
713                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
714                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
715                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
716                 fi
717         ;;
718 esac
719 AC_CHECK_HEADERS(shadow.h)
720 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
721 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
722
723 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
724 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
725
726 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
727
728 # For experimental utmp support (lastlog on some BSD-like systems)
729 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
730
731 AC_CHECK_SIZEOF(int,cross)
732 AC_CHECK_SIZEOF(long,cross)
733 AC_CHECK_SIZEOF(long long,cross)
734 AC_CHECK_SIZEOF(short,cross)
735
736 AC_C_CONST
737 AC_C_INLINE
738 AC_C_BIGENDIAN
739 AC_C_CHAR_UNSIGNED
740
741 AC_TYPE_SIGNAL
742 AC_TYPE_UID_T
743 AC_TYPE_MODE_T
744 AC_TYPE_OFF_T
745 AC_TYPE_SIZE_T
746 AC_TYPE_PID_T
747 AC_STRUCT_ST_RDEV
748 AC_DIRENT_D_OFF
749 AC_CHECK_TYPE(ssize_t, int)
750 AC_CHECK_TYPE(wchar_t, unsigned short)
751
752 ############################################
753 # for cups support we need libcups, and a handful of header files
754
755 AC_ARG_ENABLE(cups,
756 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
757
758 if test x$enable_cups != xno; then
759         AC_PATH_PROG(CUPS_CONFIG, cups-config)
760
761         if test "x$CUPS_CONFIG" != x; then
762
763                 ac_save_CFLAGS=$CFLAGS
764                 ac_save_LDFLAGS=$LDFLAGS
765                 ac_save_PRINT_LIBS=$PRINT_LIBS
766                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
767                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
768                 PRINT_LIBS="$PRINT_LIBS `$CUPS_CONFIG --libs`"
769                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
770                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
771                         x"$ac_cv_header_cups_language_h" = xyes; then
772                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
773                         samba_cv_HAVE_CUPS=yes
774                 else
775                         AC_MSG_WARN([cups-config around but cups-devel not installed])
776                         CFLAGS=$ac_save_CFLAGS
777                         LDFLAGS=$ac_save_LDFLAGS
778                         PRINT_LIBS=$ac_save_PRINT_LIBS
779                 fi
780
781         elif test x"$enable_cups" = x"yes"; then
782                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
783         fi
784 fi
785
786 AC_ARG_ENABLE(iprint,
787 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
788
789 if test x$enable_iprint != xno; then
790         if test x"$samba_cv_HAVE_CUPS" = xyes; then
791                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
792         elif test x"$enable_iprint" = x"yes"; then
793                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
794         fi
795 fi
796
797 ############################################
798 # check if the compiler will optimize out function calls
799 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
800     AC_TRY_LINK([
801 #include <stdio.h>],
802 [
803                 if (0) {
804                    this_function_does_not_exist();
805                 } else {
806                   return 1;
807                 }
808
809 ],
810         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
811 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
812    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
813 fi
814
815 #############################################
816 # check for fd passing struct via msg_control
817 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
818     AC_TRY_COMPILE([
819 #include <sys/types.h>
820 #include <stdlib.h>
821 #include <stddef.h>
822 #include <sys/socket.h>
823 #include <sys/un.h>],
824 [
825         struct msghdr msg;
826         union {
827               struct cmsghdr cm;
828               char control[CMSG_SPACE(sizeof(int))];
829         } control_un;
830         msg.msg_control = control_un.control;
831         msg.msg_controllen = sizeof(control_un.control);
832 ],
833         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
834 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
835    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
836              [If we can use msg_control for passing file descriptors])
837 fi
838
839 #############################################
840 # check for fd passing struct via msg_acctrights
841 AC_CACHE_CHECK([for fd passing via msg_acctrights],
842                 samba_cv_msghdr_msg_acctrights, [
843     AC_TRY_COMPILE([
844 #include <sys/types.h>
845 #include <stdlib.h>
846 #include <stddef.h>
847 #include <sys/socket.h>
848 #include <sys/un.h>],
849 [
850         struct msghdr msg;
851         int fd;
852         msg.msg_acctrights = (caddr_t) &fd;
853         msg.msg_acctrightslen = sizeof(fd);
854 ],
855         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
856 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
857    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
858              [If we can use msg_acctrights for passing file descriptors])
859 fi
860
861 AC_CHECK_FUNCS(dirfd)
862 if test x"$ac_cv_func_dirfd" = x"yes"; then
863         default_shared_modules="$default_shared_modules vfs_syncops"
864 fi
865
866 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
867     AC_TRY_COMPILE([
868 #include <sys/types.h>
869 #if STDC_HEADERS
870 #include <stdlib.h>
871 #include <stddef.h>
872 #endif
873 #include <signal.h>],[sig_atomic_t i = 0],
874         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
875 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
876    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
877 fi
878
879 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
880     AC_TRY_COMPILE([
881 #include <sys/types.h>
882 #if STDC_HEADERS
883 #include <stdlib.h>
884 #include <stddef.h>
885 #endif
886 #include <signal.h>],[struct sigevent s;],
887         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
888 if test x"$samba_cv_struct_sigevent" = x"yes"; then
889    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
890    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
891         [#include <signal.h>])
892 fi
893
894 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
895     AC_TRY_COMPILE([
896 #include <sys/types.h>
897 #if STDC_HEADERS
898 #include <stdlib.h>
899 #include <stddef.h>
900 #endif
901 #if TIME_WITH_SYS_TIME
902 # include <sys/time.h>
903 # include <time.h>
904 #else
905 # if HAVE_SYS_TIME_H
906 #  include <sys/time.h>
907 # else
908 #  include <time.h>
909 # endif
910 #endif
911 ],[struct timespec ts;],
912         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
913 if test x"$samba_cv_struct_timespec" = x"yes"; then
914    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
915 fi
916
917 # stupid headers have the functions but no declaration. grrrr.
918 AC_HAVE_DECL(errno, [#include <errno.h>])
919 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
920 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
921
922 # and glibc has setresuid under linux but the function does
923 # nothing until kernel 2.1.44! very dumb.
924 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
925     AC_TRY_RUN([#include <errno.h>
926 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
927         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
928 if test x"$samba_cv_have_setresuid" = x"yes"; then
929     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
930 fi
931
932 # Do the same check for setresguid...
933 #
934 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
935     AC_TRY_RUN([#include <unistd.h>
936 #include <errno.h>
937 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
938         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
939 if test x"$samba_cv_have_setresgid" = x"yes"; then
940     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
941 fi
942
943 AC_FUNC_MEMCMP
944
945 ###############################################
946 # Readline included by default unless explicitly asked not to
947 test "${with_readline+set}" != "set" && with_readline=yes
948
949 # test for where we get readline() from
950 AC_MSG_CHECKING(whether to use readline)
951 AC_ARG_WITH(readline,
952 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
953 [  case "$with_readline" in
954   yes)
955     AC_MSG_RESULT(yes)
956
957     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
958     AC_CHECK_HEADERS(readline/history.h)
959
960     AC_CHECK_HEADERS(readline.h readline/readline.h,[
961       for termlib in ncurses curses termcap terminfo termlib tinfo; do
962        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
963       done
964       AC_CHECK_LIB(readline, rl_callback_handler_install,
965        [TERMLIBS="-lreadline $TERMLIBS"
966        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
967        break], [TERMLIBS=], $TERMLIBS)])
968     ;;
969   no)
970     AC_MSG_RESULT(no)
971     ;;
972   *)
973     AC_MSG_RESULT(yes)
974
975     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
976     # alternate readline path
977     _ldflags=${LDFLAGS}
978     _cppflags=${CPPFLAGS}
979
980     # Add additional search path
981     LDFLAGS="-L$with_readline/lib $LDFLAGS"
982     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
983
984     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
985     AC_CHECK_HEADERS(readline/history.h)
986
987     AC_CHECK_HEADERS(readline.h readline/readline.h,[
988       for termlib in ncurses curses termcap terminfo termlib; do
989        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
990       done
991       AC_CHECK_LIB(readline, rl_callback_handler_install,
992        [TERMLDFLAGS="-L$with_readline/lib"
993        TERMCPPFLAGS="-I$with_readline/include"
994        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
995        TERMLIBS="-lreadline $TERMLIBS"
996        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
997        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
998
999     LDFLAGS=$_ldflags
1000     ;;
1001   esac],
1002   AC_MSG_RESULT(no)
1003 )
1004 AC_SUBST(TERMLIBS)
1005 AC_SUBST(TERMLDFLAGS)
1006
1007 # The readline API changed slightly from readline3 to readline4, so
1008 # code will generate warnings on one of them unless we have a few
1009 # special cases.
1010 AC_CHECK_LIB(readline, rl_completion_matches,
1011              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1012                         [Do we have rl_completion_matches?])],
1013              [],
1014              [$TERMLIBS])
1015
1016 # not all readline libs have rl_event_hook or history_list
1017 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1018 AC_CHECK_LIB(readline, history_list,
1019              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1020              [],
1021              [$TERMLIBS])
1022
1023 ###############################################
1024 # test for where we get yp_get_default_domain() from
1025 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1026 AC_CHECK_FUNCS(yp_get_default_domain)
1027
1028 # Check if we have execl, if not we need to compile smbrun.
1029 AC_CHECK_FUNCS(execl)
1030 if test x"$ac_cv_func_execl" = x"no"; then
1031     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1032 fi
1033
1034 AC_CHECK_FUNCS(waitpid getcwd strdup strndup strnlen strerror chown fchown lchown chmod fchmod chroot link mknod mknod64)
1035 AC_CHECK_FUNCS(strtol strtoll strtoul strtoull strtouq __strtoull)
1036 AC_CHECK_FUNCS(fstat strchr utime utimes chflags)
1037 AC_CHECK_FUNCS(getrlimit fsync fdatasync memset strlcpy strlcat setpgid)
1038 AC_CHECK_FUNCS(memmove setsid glob strpbrk pipe crypt16 getauthuid)
1039 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1040 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf realpath)
1041 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate chsize stat64 fstat64)
1042 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64)
1043 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
1044 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1045 AC_CHECK_FUNCS(getpwent_r)
1046 AC_CHECK_FUNCS(getdents getdents64)
1047 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
1048 AC_CHECK_FUNCS(syslog vsyslog timegm)
1049 AC_CHECK_FUNCS(setlocale nl_langinfo)
1050 AC_CHECK_FUNCS(nanosleep)
1051 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1052 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1053 AC_CHECK_HEADERS(sys/mman.h)
1054 # setbuffer, shmget, shm_open are needed for smbtorture
1055 AC_CHECK_FUNCS(setbuffer shmget shm_open)
1056
1057 # Find a method of generating a stack trace
1058 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1059 AC_CHECK_FUNCS(backtrace_symbols)
1060 AC_CHECK_LIB(exc, trace_back_stack)
1061
1062 printf "%s" "checking for GPFS GPL libs... "
1063 save_LIBS="$LIBS"
1064 LIBS="$LIBS -lgpfs_gpl"
1065 AC_TRY_LINK([#include <gpfs_gpl.h>],
1066           [gpfs_set_share(0,GPFS_SHARE_READ,GPFS_DENY_NONE)],
1067           samba_cv_HAVE_GPFS=yes,
1068           samba_cv_HAVE_GPFS=no)
1069 echo $samba_cv_HAVE_GPFS
1070 if test x"$samba_cv_HAVE_GPFS" = x"yes"; then
1071     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL libs are available])
1072     default_shared_modules="$default_shared_modules vfs_gpfs"
1073 fi
1074 LIBS="$save_LIBS"
1075
1076 # Note that all the libunwind symbols in the API are defined to internal
1077 # platform-specific version, so we must include libunwind.h before checking
1078 # any of them.
1079 AC_MSG_CHECKING([for libunwind])
1080 save_LIBS=$LIBS
1081
1082 UNWIND_ARCH="unknown"
1083 if test x"$UNAME_I" != x"unknown"; then
1084         UNWIND_ARCH="$UNAME_I"
1085 elif test x"$UNAME_M" != x"unknown"; then
1086         UNWIND_ARCH="$UNAME_M"
1087 elif test x"$UNAME_P" != x"unknown"; then
1088         UNWIND_ARCH="$UNAME_P"
1089 fi
1090
1091 case "$UNWIND_ARCH" in
1092         unknown)
1093                 # This probably won't link without
1094                 # the platform-specific libunwind.
1095                 LIBS="$LIBS -lunwind"
1096                 ;;
1097         i386|i586|i686)
1098                 # Add the platform-specific libunwind module.
1099                 LIBS="$LIBS -lunwind -lunwind-x86"
1100                 ;;
1101         *)
1102                 # Add the platform-specific libunwind module.
1103                 # based on uname -i, uname -m or uname -p
1104                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1105                 ;;
1106 esac
1107
1108 AC_TRY_LINK(
1109     [
1110 #ifdef HAVE_LIBUNWIND_H
1111 #include <libunwind.h>
1112 #endif
1113     ],
1114     [
1115         unw_context_t ctx; unw_cursor_t cur;
1116         char buf[256]; unw_word_t off;
1117         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1118         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1119     ],
1120     [
1121         AC_MSG_RESULT(yes)
1122         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1123
1124         # If we have libunwind, test whether we also have libunwind-ptrace
1125         # which would let us unwind arbitrary processes.
1126         save_LIBS=$LIBS
1127         AC_CHECK_HEADERS(libunwind-ptrace.h)
1128         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1129             [
1130                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1131                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1132                     [Whether libunwind-ptrace.a is available.])
1133             ],
1134             [ LIBUNWIND_PTRACE="" ])
1135
1136         LIBS=$save_LIBS
1137     ],
1138     [
1139         AC_MSG_RESULT(no)
1140         LIBS=$save_LIBS
1141     ])
1142
1143 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1144 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1145     AC_CHECK_HEADERS(sys/ptrace.h)
1146     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1147     AC_TRY_LINK(
1148             [
1149 #if HAVE_SYS_TYPES_H
1150 #include <sys/types.h>
1151 #endif
1152 #if HAVE_SYS_PTRACE_H
1153 #include <sys/ptrace.h>
1154 #endif
1155             ],
1156             [
1157                 int main(int argc, const char ** argv)
1158                 {
1159                         pid_t me = (pid_t)-1;
1160                         ptrace(PTRACE_ATTACH, me, 0, 0);
1161                         ptrace(PTRACE_DETACH, me, 0, 0);
1162                         return 0;
1163                 }
1164             ],
1165             [
1166                 AC_MSG_RESULT(yes)
1167                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1168                     [Whether the Linux ptrace(2) interface is available.])
1169             ],
1170             [
1171                 AC_MSG_RESULT(no)
1172                 LIBUNWIND_PTRACE=""
1173             ])
1174 fi
1175
1176 AC_SUBST(LIBUNWIND_PTRACE)
1177
1178 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1179 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1180 AC_CHECK_FUNCS(__getcwd _getcwd)
1181 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1182 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1183 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1184 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1185 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1186 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1187 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1188 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1189 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1190 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1191 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1192 AC_CHECK_FUNCS(prctl)
1193
1194 AC_TRY_COMPILE([
1195 #ifdef HAVE_SYS_PRCTL_H
1196 #include <sys/prctl.h>
1197 #endif
1198 ],
1199 [int i; i = prtcl(0); ],
1200 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1201
1202 #
1203 #
1204 #
1205 case "$host_os" in
1206     *linux*)
1207        # glibc <= 2.3.2 has a broken getgrouplist
1208        AC_TRY_RUN([
1209 #include <unistd.h>
1210 #include <sys/utsname.h>
1211 main() {
1212        /* glibc up to 2.3 has a broken getgrouplist */
1213 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1214        int libc_major = __GLIBC__;
1215        int libc_minor = __GLIBC_MINOR__;
1216
1217        if (libc_major < 2)
1218               exit(1);
1219        if ((libc_major == 2) && (libc_minor <= 3))
1220               exit(1);
1221 #endif
1222        exit(0);
1223 }
1224 ], [linux_getgrouplist_ok=yes], [linux_getgrouplist_ok=no])
1225        if test x"$linux_getgrouplist_ok" = x"yes"; then
1226           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1227        fi
1228        ;;
1229     *)
1230        AC_CHECK_FUNCS(getgrouplist)
1231        ;;
1232 esac
1233
1234 #
1235 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1236 #
1237
1238 if test x$ac_cv_func_stat64 = xno ; then
1239   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1240   AC_TRY_LINK([
1241 #if defined(HAVE_UNISTD_H)
1242 #include <unistd.h>
1243 #endif
1244 #include <sys/stat.h>
1245 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1246   AC_MSG_RESULT([$ac_cv_func_stat64])
1247   if test x$ac_cv_func_stat64 = xyes ; then
1248     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1249   fi
1250 fi
1251
1252 if test x$ac_cv_func_lstat64 = xno ; then
1253   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1254   AC_TRY_LINK([
1255 #if defined(HAVE_UNISTD_H)
1256 #include <unistd.h>
1257 #endif
1258 #include <sys/stat.h>
1259 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1260   AC_MSG_RESULT([$ac_cv_func_lstat64])
1261   if test x$ac_cv_func_lstat64 = xyes ; then
1262     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1263   fi
1264 fi
1265
1266 if test x$ac_cv_func_fstat64 = xno ; then
1267   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1268   AC_TRY_LINK([
1269 #if defined(HAVE_UNISTD_H)
1270 #include <unistd.h>
1271 #endif
1272 #include <sys/stat.h>
1273 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1274   AC_MSG_RESULT([$ac_cv_func_fstat64])
1275   if test x$ac_cv_func_fstat64 = xyes ; then
1276     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1277   fi
1278 fi
1279
1280 #################################################
1281 # Check whether struct stat has timestamps with sub-second resolution.
1282 # At least IRIX and Solaris have these.
1283 #
1284 # We check that
1285 #       all of st_mtim, st_atim and st_ctim exist
1286 #       all of the members are in fact of type struct timespec
1287 #
1288 # There is some conflicting standards weirdness about whether we should use
1289 # "struct timespec" or "timespec_t". Linux doesn't have timespec_t, so we
1290 # prefer struct timespec.
1291
1292 AC_CACHE_CHECK([whether struct stat has sub-second timestamps], samba_cv_stat_hires,
1293     [
1294         AC_TRY_COMPILE(
1295             [
1296 #if TIME_WITH_SYS_TIME
1297 # include <sys/time.h>
1298 # include <time.h>
1299 #else
1300 # if HAVE_SYS_TIME_H
1301 #  include <sys/time.h>
1302 # else
1303 #  include <time.h>
1304 # endif
1305 #endif
1306 #ifdef HAVE_SYS_STAT_H
1307 #include <sys/stat.h>
1308 #endif
1309             ],
1310             [
1311                 struct timespec t;
1312                 struct stat s = {0};
1313                 t.tv_sec = s.st_mtim.tv_sec;
1314                 t.tv_nsec = s.st_mtim.tv_nsec;
1315                 t.tv_sec = s.st_ctim.tv_sec;
1316                 t.tv_nsec = s.st_ctim.tv_nsec;
1317                 t.tv_sec = s.st_atim.tv_sec;
1318                 t.tv_nsec = s.st_atim.tv_nsec;
1319             ],
1320             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1321     ])
1322
1323 if test x"$samba_cv_stat_hires" = x"yes" ; then
1324     AC_DEFINE(HAVE_STAT_ST_MTIM, 1, [whether struct stat contains st_mtim])
1325     AC_DEFINE(HAVE_STAT_ST_ATIM, 1, [whether struct stat contains st_atim])
1326     AC_DEFINE(HAVE_STAT_ST_CTIM, 1, [whether struct stat contains st_ctim])
1327     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1328             [whether struct stat has sub-second timestamps])
1329 fi
1330
1331 AC_CACHE_CHECK([whether struct stat has sub-second timestamps without struct timespec], samba_cv_stat_hires_notimespec,
1332     [
1333         AC_TRY_COMPILE(
1334             [
1335 #if TIME_WITH_SYS_TIME
1336 # include <sys/time.h>
1337 # include <time.h>
1338 #else
1339 # if HAVE_SYS_TIME_H
1340 #  include <sys/time.h>
1341 # else
1342 #  include <time.h>
1343 # endif
1344 #endif
1345 #ifdef HAVE_SYS_STAT_H
1346 #include <sys/stat.h>
1347 #endif
1348             ],
1349             [
1350                 struct timespec t;
1351                 struct stat s = {0};
1352                 t.tv_sec = s.st_mtime;
1353                 t.tv_nsec = s.st_mtimensec;
1354                 t.tv_sec = s.st_ctime;
1355                 t.tv_nsec = s.st_ctimensec;
1356                 t.tv_sec = s.st_atime;
1357                 t.tv_nsec = s.st_atimensec;
1358             ],
1359             samba_cv_stat_hires=yes, samba_cv_stat_hires=no)
1360     ])
1361
1362 if test x"$samba_cv_stat_hires_notimespec" = x"yes" ; then
1363     AC_DEFINE(HAVE_STAT_ST_MTIMENSEC, 1, [whether struct stat contains st_mtimensec])
1364     AC_DEFINE(HAVE_STAT_ST_ATIMENSEC, 1, [whether struct stat contains st_atimensec])
1365     AC_DEFINE(HAVE_STAT_ST_CTIMENSEC, 1, [whether struct stat contains st_ctimensec])
1366     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1367             [whether struct stat has sub-second timestamps without struct timespec])
1368 fi
1369
1370 AC_CACHE_CHECK([whether struct stat has st_birthtimespec], samba_cv_stat_st_birthtimespec,
1371     [
1372         AC_TRY_COMPILE(
1373             [
1374 #if TIME_WITH_SYS_TIME
1375 # include <sys/time.h>
1376 # include <time.h>
1377 #else
1378 # if HAVE_SYS_TIME_H
1379 #  include <sys/time.h>
1380 # else
1381 #  include <time.h>
1382 # endif
1383 #endif
1384 #ifdef HAVE_SYS_STAT_H
1385 #include <sys/stat.h>
1386 #endif
1387             ],
1388             [
1389                 struct timespec t;
1390                 struct stat s = {0};
1391                 t = s.st_birthtimespec;
1392             ],
1393             samba_cv_stat_st_birthtimespec=yes, samba_cv_stat_birthtimespec=no)
1394     ])
1395
1396 if test x"$samba_cv_stat_st_birthtimespec" = x"yes" ; then
1397     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMESPEC, 1, [whether struct stat contains st_birthtimespec])
1398 fi
1399
1400 AC_CACHE_CHECK([whether struct stat has st_birthtimensec], samba_cv_stat_st_birthtimensec,
1401     [
1402         AC_TRY_COMPILE(
1403             [
1404 #if TIME_WITH_SYS_TIME
1405 # include <sys/time.h>
1406 # include <time.h>
1407 #else
1408 # if HAVE_SYS_TIME_H
1409 #  include <sys/time.h>
1410 # else
1411 #  include <time.h>
1412 # endif
1413 #endif
1414 #ifdef HAVE_SYS_STAT_H
1415 #include <sys/stat.h>
1416 #endif
1417             ],
1418             [
1419                 struct timespec t;
1420                 struct stat s = {0};
1421                 t.tv_nsec = s.st_birthtimensec;
1422             ],
1423             samba_cv_stat_st_birthtimensec=yes, samba_cv_stat_birthtimensec=no)
1424     ])
1425
1426 if test x"$samba_cv_stat_st_birthtimensec" = x"yes" ; then
1427     AC_DEFINE(HAVE_STAT_ST_BIRTHTIMENSEC, 1, [whether struct stat contains st_birthtimensec])
1428 fi
1429
1430 AC_CACHE_CHECK([whether struct stat has st_birthtime], samba_cv_stat_st_birthtime,
1431     [
1432         AC_TRY_COMPILE(
1433             [
1434 #if TIME_WITH_SYS_TIME
1435 # include <sys/time.h>
1436 # include <time.h>
1437 #else
1438 # if HAVE_SYS_TIME_H
1439 #  include <sys/time.h>
1440 # else
1441 #  include <time.h>
1442 # endif
1443 #endif
1444 #ifdef HAVE_SYS_STAT_H
1445 #include <sys/stat.h>
1446 #endif
1447             ],
1448             [
1449                 struct time_t t;
1450                 struct stat s = {0};
1451                 t = s.st_birthtime;
1452             ],
1453             samba_cv_stat_st_birthtime=yes, samba_cv_stat_birthtime=no)
1454     ])
1455
1456 if test x"$samba_cv_stat_st_birthtime" = x"yes" ; then
1457     AC_DEFINE(HAVE_STAT_ST_BIRTHTIME, 1, [whether struct stat contains st_birthtime])
1458 fi
1459
1460 #####################################
1461 # needed for SRV lookups
1462 AC_CHECK_LIB(resolv, dn_expand)
1463 AC_CHECK_LIB(resolv, _dn_expand)
1464 AC_CHECK_LIB(resolv, __dn_expand)
1465
1466 #
1467 # Check for the functions putprpwnam, set_auth_parameters,
1468 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1469 # Needed for OSF1 and HPUX.
1470 #
1471
1472 AC_LIBTESTFUNC(security, putprpwnam)
1473 AC_LIBTESTFUNC(sec, putprpwnam)
1474
1475 AC_LIBTESTFUNC(security, set_auth_parameters)
1476 AC_LIBTESTFUNC(sec, set_auth_parameters)
1477
1478 # UnixWare 7.x has its getspnam in -lgen
1479 AC_LIBTESTFUNC(gen, getspnam)
1480
1481 AC_LIBTESTFUNC(security, getspnam)
1482 AC_LIBTESTFUNC(sec, getspnam)
1483
1484 AC_LIBTESTFUNC(security, bigcrypt)
1485 AC_LIBTESTFUNC(sec, bigcrypt)
1486
1487 AC_LIBTESTFUNC(security, getprpwnam)
1488 AC_LIBTESTFUNC(sec, getprpwnam)
1489
1490 AC_CHECK_FUNCS(strsignal)
1491
1492 ############################################
1493 # Check if we have libattr
1494 case "$host_os" in
1495   *osf*)
1496         AC_SEARCH_LIBS(getproplist, [proplist])
1497         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1498         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1499         AC_CHECK_FUNCS(sizeof_proplist_entry)
1500   ;;
1501   *)
1502         AC_SEARCH_LIBS(getxattr, [attr])
1503         AC_CHECK_FUNCS(getxattr lgetxattr fgetxattr listxattr llistxattr)
1504         AC_CHECK_FUNCS(getea fgetea lgetea listea flistea llistea)
1505         AC_CHECK_FUNCS(removeea fremoveea lremoveea setea fsetea lsetea)
1506         AC_CHECK_FUNCS(flistxattr removexattr lremovexattr fremovexattr)
1507         AC_CHECK_FUNCS(setxattr lsetxattr fsetxattr)
1508         AC_CHECK_FUNCS(attr_get attr_list attr_set attr_remove)
1509         AC_CHECK_FUNCS(attr_getf attr_listf attr_setf attr_removef)
1510   ;;
1511 esac
1512
1513 ########################################################
1514 # Check if attropen() is present if this is Solaris
1515 case "$host_os" in
1516   *solaris*)
1517         AC_CHECK_FUNCS(attropen)
1518   ;;
1519 esac
1520
1521 ########################################################
1522 # Do xattr functions take additional options like on Darwin?
1523 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1524         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1525                 old_LIBS=$LIBS
1526                 LIBS="$LIBS $ACL_LIBS"
1527                 AC_TRY_COMPILE([
1528                         #include <sys/types.h>
1529                         #if HAVE_ATTR_XATTR_H
1530                         #include <attr/xattr.h>
1531                         #elif HAVE_SYS_XATTR_H
1532                         #include <sys/xattr.h>
1533                         #endif
1534                 ],[
1535                         getxattr(0, 0, 0, 0, 0, 0);
1536                 ],
1537                 [smb_attr_cv_xattr_add_opt=yes],
1538                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1539         ])
1540         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1541                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1542         fi
1543 fi
1544
1545 # Check if we have extattr
1546 case "$host_os" in
1547   *freebsd4* | *dragonfly* )
1548     AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1549     ;;
1550   *)
1551     AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_file extattr_delete_link)
1552     AC_CHECK_FUNCS(extattr_get_fd extattr_get_file extattr_get_link)
1553     AC_CHECK_FUNCS(extattr_list_fd extattr_list_file extattr_list_link)
1554     AC_CHECK_FUNCS(extattr_set_fd extattr_set_file extattr_set_link)
1555     ;;
1556 esac
1557
1558 AC_DISABLE_STATIC
1559 AC_ENABLE_SHARED
1560
1561 # Set defaults
1562 PIE_CFLAGS=""
1563 PIE_LDFLAGS=""
1564 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1565
1566 if test "x$enable_pie" != xno
1567 then
1568         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1569         [
1570                 cat > conftest.c <<EOF
1571 int foo;
1572 main () { return 0;}
1573 EOF
1574                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1575                 then
1576                         samba_cv_fpie=yes
1577                 else
1578                         samba_cv_fpie=no
1579                 fi
1580                 rm -f conftest*
1581         ])
1582         if test x"${samba_cv_fpie}" = x"yes"
1583         then
1584                 PIE_CFLAGS="-fPIE"
1585                 PIE_LDFLAGS="-pie"
1586         fi
1587 fi
1588
1589 # Set defaults
1590 RELRO_LDFLAGS=""
1591 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1592
1593 if test "x$enable_relro" != xno
1594 then
1595         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1596         [
1597                 cat > conftest.c <<EOF
1598 int foo;
1599 main () { return 0;}
1600 EOF
1601                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1602                 then
1603                         samba_cv_relro=yes
1604                 else
1605                         samba_cv_relro=no
1606                 fi
1607                 rm -f conftest*
1608         ])
1609         if test x"${samba_cv_relro}" = x"yes"
1610         then
1611                 RELRO_LDFLAGS="-Wl,-z,relro"
1612         fi
1613 fi
1614
1615 # Set defaults
1616 SYMSEXT="syms"
1617 AC_SUBST(SYMSEXT)
1618
1619 # Assume non-shared by default and override below
1620 BLDSHARED="false"
1621
1622 # these are the defaults, good for lots of systems
1623 HOST_OS="$host_os"
1624 LDSHFLAGS="-shared"
1625 MODULE_EXPORTS=""
1626 SONAMEFLAG="#"
1627 SHLD="\${CC} \${CFLAGS}"
1628 PICFLAG="${PIE_CFLAGS}"
1629 SHLIBEXT="so"
1630 DSO_EXPORTS=""
1631
1632 # this bit needs to be modified for each OS that supports share libs
1633 # You need to specify how to create a shared library and
1634   # how to compile C code to produce PIC object files
1635
1636   AC_MSG_CHECKING([ability to build shared libraries])
1637
1638   # and these are for particular systems
1639   case "$host_os" in
1640                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
1641                         BLDSHARED="true"
1642                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1643                                 LDSHFLAGS="-shared -Wl,-Bsymbolic -Wl,--allow-shlib-undefined"
1644                         else
1645                                 LDSHFLAGS="-shared -Wl,-Bsymbolic"
1646                         fi
1647                         DYNEXP="-Wl,--export-dynamic"
1648                         PICFLAG="-fPIC"
1649                         SONAMEFLAG="-Wl,-soname="
1650                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1651                         ;;
1652                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1653                         BLDSHARED="true"
1654                         LDSHFLAGS="-G"
1655                         SONAMEFLAG="-h "
1656                         if test "${GCC}" = "yes"; then
1657                                 PICFLAG="-fPIC"
1658                                 SONAMEFLAG="-Wl,-soname="
1659                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1660                                         DYNEXP="-Wl,-E"
1661                                 fi
1662                         else
1663                                 PICFLAG="-KPIC"
1664                                 ## ${CFLAGS} added for building 64-bit shared
1665                                 ## libs using Sun's Compiler
1666                                 LDSHFLAGS="-G \${CFLAGS}"
1667                         fi
1668                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1669                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1670                         ;;
1671                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1672                         BLDSHARED="true"
1673                         LDSHFLAGS="-G"
1674                         SONAMEFLAG="-Wl,-h,"
1675                         PICFLAG="-KPIC"   # Is this correct for SunOS
1676                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1677                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1678                         ;;
1679                 *netbsd* | *freebsd* | *dragonfly* )
1680                         BLDSHARED="true"
1681                         LDSHFLAGS="-shared"
1682                         DYNEXP="-Wl,--export-dynamic"
1683                         SONAMEFLAG="-Wl,-soname,"
1684                         PICFLAG="-fPIC -DPIC"
1685                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1686                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1687                         ;;
1688                 *openbsd*)  BLDSHARED="true"
1689                         LDSHFLAGS="-shared"
1690                         DYNEXP="-Wl,-Bdynamic"
1691                         SONAMEFLAG="-Wl,-soname,"
1692                         PICFLAG="-fPIC"
1693                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1694                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1695                         ;;
1696                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1697                         case "$host_os" in
1698                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1699                         ;;
1700                         esac
1701                         BLDSHARED="true"
1702                         LDSHFLAGS="-set_version sgi1.0 -shared"
1703                         SONAMEFLAG="-soname "
1704                         SHLD="\${LD}"
1705                         if test "${GCC}" = "yes"; then
1706                                 PICFLAG="-fPIC"
1707                         else
1708                                 PICFLAG="-KPIC"
1709                         fi
1710                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1711                         ;;
1712                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1713                         BLDSHARED="true"
1714                         # use expfull to export underscored symbols
1715                         # add rtl to remove /lib/crt0.o warning
1716                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1717                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1718                         PICFLAG="-O2"
1719                         # as AIX code is always position independent...
1720                         # .po will just create compile warnings, use po.o:
1721                         if test "${GCC}" != "yes"; then
1722                                 ## for funky AIX compiler using strncpy()
1723                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1724                         fi
1725
1726                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1727                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1728                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1729                         ;;
1730                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1731                         # Use special PIC flags for the native HP-UX compiler.
1732                                 BLDSHARED="true"
1733                                 SHLD="cc"
1734                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1735                                 SONAMEFLAG="-Wl,+h "
1736                                 PICFLAG="+z"
1737                         if test "${GCC}" = "yes"; then
1738                                 PICFLAG="-fPIC"
1739                         else
1740                                 PICFLAG="+z +ESnolit"
1741                         fi
1742                         if test "$host_cpu" = "ia64"; then
1743                                 SHLIBEXT="so"
1744                               PICFLAG="+z"
1745                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1746                         else
1747                                 SHLIBEXT="sl"
1748                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1749                         fi
1750                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1751                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1752                         ;;
1753                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
1754                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1755                         ;;
1756                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1757                         BLDSHARED="true"
1758                         LDSHFLAGS="-shared"
1759                         SONAMEFLAG="-Wl,-soname,"
1760                         PICFLAG="-fPIC"
1761                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1762                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1763                         ;;
1764                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1765                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1766                         ;;
1767                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1768                         BLDSHARED="true"
1769                         LDSHFLAGS="-shared"
1770                         SONAMEFLAG="-Wl,-soname,"
1771                         PICFLAG="-KPIC"
1772                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1773                         ;;
1774                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1775                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1776                         ;;
1777                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1778                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1779                         ;;
1780                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1781                         case "$host" in
1782                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1783                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1784                                         fi
1785                                         LDSHFLAGS="-G"
1786                                         DYNEXP="-Bexport"
1787                                 ;;
1788                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1789                         esac
1790                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1791                         ;;
1792
1793                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1794                         if [ test "$GCC" != yes ]; then
1795                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1796                         fi
1797                         LDSHFLAGS="-G"
1798                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1799                         ;;
1800                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1801                         BLDSHARED="false"
1802                         LDSHFLAGS=""
1803                         ;;
1804
1805                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1806                         BLDSHARED="true"
1807                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1808                         CFLAGS="$CFLAGS -fno-common"
1809                         SHLD="\${CC}"
1810                         SHLIBEXT="dylib"
1811                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1812                         SHLIBEXT="dylib"
1813                         # Since gcc doesn't fail on unrecognised options, the
1814                         # PIE test incorrectly succeeds. Darwin gcc does not
1815                         # actually support the PIE stuff.
1816                         PIE_LDFLAGS=
1817                         PIE_CFLAGS=
1818                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1819                         ;;
1820
1821                 *)
1822                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1823                         ;;
1824   esac
1825
1826 if test "$enable_shared" != "yes"; then
1827         BLDSHARED=false
1828 fi
1829
1830 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1831         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1832 fi
1833
1834 if test x"$BLDSHARED" = x"true" ; then
1835         LDFLAGS="$LDFLAGS -L./bin"
1836 fi
1837
1838 AC_MSG_RESULT($BLDSHARED)
1839
1840 AC_MSG_CHECKING([LDFLAGS])
1841 AC_MSG_RESULT([$LDFLAGS])
1842 AC_MSG_CHECKING([DYNEXP])
1843 AC_MSG_RESULT([$DYNEXP])
1844
1845 #######################################################
1846 # test whether building a shared library actually works
1847 if test $BLDSHARED = true; then
1848
1849 AC_MSG_CHECKING([SHLD])
1850 AC_MSG_RESULT([$SHLD])
1851 AC_MSG_CHECKING([LDSHFLAGS])
1852 AC_MSG_RESULT([$LDSHFLAGS])
1853
1854 AC_MSG_CHECKING([SHLIBEXT])
1855 AC_MSG_RESULT([$SHLIBEXT])
1856 AC_MSG_CHECKING([SONAMEFLAG])
1857 AC_MSG_RESULT([$SONAMEFLAG])
1858
1859 AC_MSG_CHECKING([PICFLAG])
1860 AC_MSG_RESULT([$PICFLAG])
1861
1862 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1863 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1864
1865 AC_CACHE_CHECK([whether building shared libraries actually works],
1866                [ac_cv_shlib_works],[
1867    # try building a trivial shared library
1868    ac_cv_shlib_works=no
1869    # The $SHLD and $LDSHFLAGS variables may contain references to other
1870    # variables so they need to be eval'ed.
1871    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1872         shlib.o ${srcdir-.}/tests/shlib.c && \
1873    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1874         shlib.o && ac_cv_shlib_works=yes
1875    rm -f "shlib.$SHLIBEXT" shlib.o
1876
1877 ])
1878 if test $ac_cv_shlib_works = no; then
1879    BLDSHARED=false
1880 fi
1881 fi
1882
1883 if test x"$BLDSHARED" != x"true"; then
1884         LDSHFLAGS="shared-libraries-disabled"
1885         SONAMEFLAG="shared-libraries-disabled"
1886         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1887         SHLD="shared-libraries-disabled"
1888         PICFLAG="${PIE_CFLAGS}"
1889         SHLIBEXT="shared_libraries_disabled"
1890 fi
1891
1892 AC_MSG_CHECKING([used PICFLAG])
1893 AC_MSG_RESULT([$PICFLAG])
1894
1895 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1896
1897 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1898
1899 ################
1900
1901 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
1902 AC_TRY_RUN([#include <stdio.h>
1903 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
1904 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
1905 if test x"$samba_cv_have_longlong" = x"yes"; then
1906     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
1907     AC_CHECK_TYPE(intptr_t, unsigned long long)
1908 else
1909     AC_CHECK_TYPE(intptr_t, unsigned long)
1910 fi
1911
1912 #
1913 # Check if the compiler supports the LL prefix on long long integers.
1914 # AIX needs this.
1915
1916 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
1917     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
1918         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
1919 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
1920    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
1921 fi
1922
1923
1924 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
1925 AC_TRY_RUN([#include <time.h>
1926 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
1927 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
1928 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
1929     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
1930 fi
1931
1932 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
1933 AC_TRY_RUN([#include <stdio.h>
1934 #include <sys/stat.h>
1935 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
1936 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
1937 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
1938     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
1939 fi
1940
1941 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
1942 AC_TRY_RUN([
1943 #if defined(HAVE_UNISTD_H)
1944 #include <unistd.h>
1945 #endif
1946 #include <stdio.h>
1947 #include <sys/stat.h>
1948 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1949 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
1950 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
1951     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
1952 fi
1953
1954 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
1955 AC_TRY_RUN([
1956 #if defined(HAVE_UNISTD_H)
1957 #include <unistd.h>
1958 #endif
1959 #include <stdio.h>
1960 #include <sys/stat.h>
1961 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
1962 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
1963 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
1964     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
1965 fi
1966
1967 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
1968 AC_TRY_RUN([
1969 #if defined(HAVE_UNISTD_H)
1970 #include <unistd.h>
1971 #endif
1972 #include <stdio.h>
1973 #include <sys/stat.h>
1974 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
1975 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
1976 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
1977     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
1978 fi
1979
1980 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
1981 AC_TRY_RUN([
1982 #if defined(HAVE_UNISTD_H)
1983 #include <unistd.h>
1984 #endif
1985 #include <stdio.h>
1986 #include <sys/stat.h>
1987 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
1988 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
1989 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
1990     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
1991 fi
1992
1993 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
1994 AC_TRY_RUN([
1995 #if defined(HAVE_UNISTD_H)
1996 #include <unistd.h>
1997 #endif
1998 #include <stdio.h>
1999 #include <sys/stat.h>
2000 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2001 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2002 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2003     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2004 fi
2005
2006 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2007 AC_TRY_COMPILE([
2008 #if defined(HAVE_UNISTD_H)
2009 #include <unistd.h>
2010 #endif
2011 #include <sys/types.h>
2012 #include <dirent.h>],
2013 [DIR64 de;],
2014 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2015 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2016     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2017 fi
2018
2019 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2020 AC_TRY_COMPILE([
2021 #if defined(HAVE_UNISTD_H)
2022 #include <unistd.h>
2023 #endif
2024 #include <sys/types.h>
2025 #include <dirent.h>],
2026 [struct dirent64 de;],
2027 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2028 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2029     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2030 fi
2031
2032 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2033 AC_TRY_RUN([
2034 #if defined(HAVE_UNISTD_H)
2035 #include <unistd.h>
2036 #endif
2037 #include <sys/types.h>
2038 main() { dev_t dev; int i = major(dev); return 0; }],
2039 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2040 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2041     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2042 fi
2043
2044 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2045 AC_TRY_RUN([
2046 #if defined(HAVE_UNISTD_H)
2047 #include <unistd.h>
2048 #endif
2049 #include <sys/types.h>
2050 main() { dev_t dev; int i = minor(dev); return 0; }],
2051 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2052 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2053     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2054 fi
2055
2056 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2057 AC_TRY_RUN([
2058 #if defined(HAVE_UNISTD_H)
2059 #include <unistd.h>
2060 #endif
2061 #include <sys/types.h>
2062 main() { dev_t dev = makedev(1,2); return 0; }],
2063 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2064 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2065     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2066 fi
2067
2068 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2069 AC_TRY_RUN([#include <stdio.h>
2070 main() { char c; c=250; exit((c > 0)?0:1); }],
2071 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2072 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2073     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2074 fi
2075
2076 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2077 AC_TRY_COMPILE([#include <sys/types.h>
2078 #include <dirent.h>
2079 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2080 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2081 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2082     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2083 fi
2084
2085 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2086 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2087 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2088 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2089     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2090 fi
2091
2092 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
2093 AC_TRY_LINK([
2094 #include <sys/time.h>
2095 #include <unistd.h>], [struct timeval tv; return gettimeofday(&tv, NULL);],
2096            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,
2097            samba_cv_HAVE_GETTIMEOFDAY_TZ=no)])
2098 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
2099     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday takes a tz argument])
2100 fi
2101
2102 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2103
2104     # On some systems (eg. Linux) librt can pull in libpthread. We
2105     # don't want this to happen because libpthreads changes signal delivery
2106     # semantics in ways we are not prepared for. This breaks Linux oplocks
2107     # which rely on signals.
2108
2109     AC_LIBTESTFUNC(rt, clock_gettime,
2110             [
2111                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2112                                 [Whether clock_gettime is available])
2113                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2114                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2115                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2116                         ])
2117
2118 fi
2119
2120 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2121 AC_TRY_RUN([#include <sys/types.h>
2122 #include <dirent.h>
2123 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2124 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2125 di->d_name[0] == 0) exit(0); exit(1);} ],
2126 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2127 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2128     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2129 fi
2130
2131 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2132 AC_TRY_COMPILE([#include <sys/types.h>
2133 #include <utime.h>],
2134 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2135 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2136 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2137     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2138 fi
2139
2140 ##############
2141 # Check utmp details, but only if our OS offers utmp.h
2142 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2143 dnl  utmp and utmpx come in many flavours
2144 dnl  We need to check for many of them
2145 dnl  But we don't need to do each and every one, because our code uses
2146 dnl  mostly just the utmp (not utmpx) fields.
2147
2148 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx)
2149
2150 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2151 AC_TRY_COMPILE([#include <sys/types.h>
2152 #include <utmp.h>],
2153 [struct utmp ut;  ut.ut_name[0] = 'a';],
2154 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2155 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2156     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2157 fi
2158
2159 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2160 AC_TRY_COMPILE([#include <sys/types.h>
2161 #include <utmp.h>],
2162 [struct utmp ut;  ut.ut_user[0] = 'a';],
2163 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2164 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2165     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2166 fi
2167
2168 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2169 AC_TRY_COMPILE([#include <sys/types.h>
2170 #include <utmp.h>],
2171 [struct utmp ut;  ut.ut_id[0] = 'a';],
2172 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2173 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2174     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2175 fi
2176
2177 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2178 AC_TRY_COMPILE([#include <sys/types.h>
2179 #include <utmp.h>],
2180 [struct utmp ut;  ut.ut_host[0] = 'a';],
2181 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2182 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2183     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2184 fi
2185
2186 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2187 AC_TRY_COMPILE([#include <sys/types.h>
2188 #include <utmp.h>],
2189 [struct utmp ut;  time_t t; ut.ut_time = t;],
2190 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2191 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2192     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2193 fi
2194
2195 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2196 AC_TRY_COMPILE([#include <sys/types.h>
2197 #include <utmp.h>],
2198 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2199 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2200 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2201     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2202 fi
2203
2204 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2205 AC_TRY_COMPILE([#include <sys/types.h>
2206 #include <utmp.h>],
2207 [struct utmp ut;  ut.ut_type = 0;],
2208 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2209 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2210     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2211 fi
2212
2213 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2214 AC_TRY_COMPILE([#include <sys/types.h>
2215 #include <utmp.h>],
2216 [struct utmp ut;  ut.ut_pid = 0;],
2217 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2218 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2219     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2220 fi
2221
2222 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2223 AC_TRY_COMPILE([#include <sys/types.h>
2224 #include <utmp.h>],
2225 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2226 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2227 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2228     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2229 fi
2230
2231 dnl Look for the IPv6 varient by preference. Many systems have both.
2232 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2233 AC_TRY_COMPILE([#include <sys/types.h>
2234 #include <utmp.h>],
2235 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2236 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2237 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2238     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2239 fi
2240
2241 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2242 AC_TRY_COMPILE([#include <sys/types.h>
2243 #include <utmp.h>],
2244 [struct utmp ut;  ut.ut_addr = 0;],
2245 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2246 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2247     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2248 fi
2249
2250 if test x$ac_cv_func_pututline = xyes ; then
2251   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2252   AC_TRY_COMPILE([#include <sys/types.h>
2253 #include <utmp.h>],
2254   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2255   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2256   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2257       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2258   fi
2259 fi
2260
2261 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2262 AC_TRY_COMPILE([#include <sys/types.h>
2263 #include <utmpx.h>],
2264 [struct utmpx ux;  ux.ut_syslen = 0;],
2265 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2266 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2267     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2268 fi
2269
2270 fi
2271 # end utmp details
2272
2273
2274 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2275 AC_ARG_WITH(libiconv,
2276 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2277 [
2278   if test "$withval" = "no" ; then
2279     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2280   else
2281      if test "$withval" != "yes" ; then
2282         ICONV_PATH_SPEC=yes
2283         ICONV_LOOK_DIRS="$withval"
2284      fi
2285   fi
2286 ])
2287
2288 for i in $ICONV_LOOK_DIRS ; do
2289
2290     save_LIBS="$LIBS"
2291     save_LDFLAGS="$LDFLAGS"
2292     save_CPPFLAGS="$CPPFLAGS"
2293
2294     iconv_current_LIBS=""
2295     iconv_current_LDFLAGS=""
2296     iconv_current_CPPFLAGS=""
2297
2298     ICONV_FOUND="no"
2299     unset libext
2300
2301     #  This is here to handle -withval stuff for --with-libiconv
2302     #  Perhaps we should always add a -L
2303     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2304
2305     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2306     # installation paths. This gets a little tricky since we might have iconv
2307     # in both libiconv and in libc. In this case the jm_ICONV test will always
2308     # succeed when the header is found. To counter this, make sure the
2309     # library directory is there and check the ABI directory first (which
2310     # should be harmless on other systems, but causes tons of linker warnings on
2311     # 64bit Ubuntu systems).
2312     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2313     # installed, I've decided to fix the linker warnings.
2314     # -- Kai
2315     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2316     for l in "lib" "lib32" "lib/hpux32"; do
2317         if test -d "$i/$l" ; then
2318                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2319                 LIBS=
2320                 export LDFLAGS LIBS CPPFLAGS
2321                 # Try to find iconv(3)
2322                 jm_ICONV($i/$l)
2323                 if test x"$ICONV_FOUND" = "xyes" ; then
2324                     libext="$l"
2325                     break
2326                 fi
2327         fi
2328     done
2329
2330     if test x"$ICONV_FOUND" = "xyes" ; then
2331         iconv_current_LDFLAGS="-L$i/$libext"
2332         iconv_current_CPPFLAGS="-I$i/include"
2333
2334         if test x"$jm_cv_lib_iconv" != x; then
2335             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2336         else
2337             # We found iconv in libc.
2338             iconv_current_LIBS=""
2339         fi
2340
2341     fi
2342
2343     if test x"$ICONV_FOUND" = "xyes" ; then
2344
2345         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2346         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2347         LIBS="$save_LIBS $iconv_current_LIBS"
2348         export LDFLAGS LIBS CPPFLAGS
2349
2350         default_dos_charset=no
2351         default_display_charset=no
2352         default_unix_charset=no
2353
2354         # check for default dos charset name
2355         for j in CP850 IBM850 ; do
2356             rjs_CHARSET($j)
2357             default_dos_charset="$ICONV_CHARSET"
2358             if test x"$default_dos_charset" = x"$j"; then
2359                 break
2360             fi
2361         done
2362
2363         # check for default display charset name
2364         for j in ASCII 646 ; do
2365             rjs_CHARSET($j)
2366             default_display_charset="$ICONV_CHARSET"
2367             if test x"$default_display_charset" = x"$j"; then
2368                 break
2369             fi
2370         done
2371
2372         # check for default unix charset name
2373         for j in UTF-8 UTF8 ; do
2374             rjs_CHARSET($j)
2375             default_unix_charset="$ICONV_CHARSET"
2376             if test x"$default_unix_charset" = x"$j"; then
2377                 break
2378             fi
2379         done
2380
2381         if test "$default_dos_charset" != "no" -a \
2382                 "$default_dos_charset" != "cross" -a \
2383                 "$default_display_charset" != "no" -a \
2384                 "$default_display_charset" != "cross" -a \
2385                 "$default_unix_charset" != "no" -a \
2386                 "$default_unix_charset" != "cross"
2387         then
2388                 samba_cv_HAVE_NATIVE_ICONV=yes
2389         else
2390             if test "$default_dos_charset" = "cross" -o \
2391                      "$default_display_charset" = "cross" -o \
2392                      "$default_unix_charset" = "cross"
2393             then
2394                     samba_cv_HAVE_NATIVE_ICONV=cross
2395             else
2396                     samba_cv_HAVE_NATIVE_ICONV=no
2397             fi
2398         fi
2399
2400         # At this point, we have a libiconv candidate. We know that
2401         # we have the right headers and libraries, but we don't know
2402         # whether it does the conversions we want. We can't test this
2403         # because we are cross-compiling. This is not necessarily a big
2404         # deal, since we can't guarantee that the results we get now will
2405         # match the results we get at runtime anyway.
2406         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2407             default_dos_charset="CP850"
2408             default_display_charset="ASCII"
2409             default_unix_charset="UTF-8"
2410             samba_cv_HAVE_NATIVE_ICONV=yes
2411             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2412             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2413         fi
2414
2415         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2416
2417             CPPFLAGS=$save_CPPFLAGS
2418             LDFLAGS=$save_LDFLAGS
2419             LIBS=$save_LIBS
2420
2421             if test x"$iconv_current_LIBS" != x; then
2422                 LIBS="$LIBS $iconv_current_LIBS"
2423             fi
2424
2425             # Add the flags we need to CPPFLAGS and LDFLAGS
2426             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2427             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2428
2429             # Turn the #defines into string literals
2430             default_dos_charset="\"$default_dos_charset\""
2431             default_display_charset="\"$default_display_charset\""
2432             default_unix_charset="\"$default_unix_charset\""
2433
2434             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2435             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2436             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2437             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2438
2439            break
2440         fi
2441
2442     # We didn't find a working iconv, so keep going
2443     fi
2444
2445     #  We only need to clean these up here for the next pass through the loop
2446     CPPFLAGS=$save_CPPFLAGS
2447     LDFLAGS=$save_LDFLAGS
2448     LIBS=$save_LIBS
2449     export LDFLAGS LIBS CPPFLAGS
2450 done
2451 unset libext
2452
2453
2454 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2455     AC_MSG_WARN([Sufficient support for iconv function was not found.
2456     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2457    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2458    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2459    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2460 fi
2461
2462
2463 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2464 AC_TRY_RUN([
2465 #include <sys/types.h>
2466 #include <fcntl.h>
2467 #ifndef F_GETLEASE
2468 #define F_GETLEASE      1025
2469 #endif
2470 main() {
2471        int fd = open("/dev/null", O_RDONLY);
2472        return fcntl(fd, F_GETLEASE, 0) == -1;
2473 }
2474 ],
2475 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2476 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2477     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2478 fi
2479
2480 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2481 AC_TRY_RUN([
2482 #include <sys/types.h>
2483 #include <fcntl.h>
2484 #include <signal.h>
2485 #ifndef F_NOTIFY
2486 #define F_NOTIFY 1026
2487 #endif
2488 main() {
2489         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2490 }
2491 ],
2492 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2493 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2494     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2495 fi
2496
2497 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2498 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h)
2499 AC_CHECK_FUNCS(inotify_init)
2500 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2501 ],
2502 samba_cv_HAVE_INOTIFY=yes,
2503 samba_cv_HAVE_INOTIFY=no,
2504 samba_cv_HAVE_INOTIFY=cross)
2505
2506 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2507     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2508 fi
2509
2510 #################################################
2511 # Check if FAM notifications are available. For FAM info, see
2512 #       http://oss.sgi.com/projects/fam/
2513 #       http://savannah.nongnu.org/projects/fam/
2514 AC_ARG_ENABLE(fam,
2515 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2516
2517 if test x$enable_fam != xno; then
2518     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2519     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2520         # On IRIX, libfam requires libC, but other FAM implementations
2521         # might not need it.
2522         AC_CHECK_LIB(fam, FAMOpen2,
2523             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam"],
2524             [samba_cv_HAVE_LIBFAM=no])
2525
2526         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2527             samba_fam_xtra=-lC
2528             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2529                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC"],
2530                 [samba_cv_HAVE_LIBFAM=no])
2531             unset samba_fam_xtra
2532         fi
2533     fi
2534
2535     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2536         default_shared_modules="$default_shared_modules vfs_notify_fam"
2537         AC_TRY_COMPILE([#include <fam.h>],
2538                     [FAMCodes code = FAMChanged;],
2539                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2540                         [Whether fam.h contains a typedef for enum FAMCodes]),
2541                     [])
2542     fi
2543
2544     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2545         AC_MSG_ERROR(FAM support requested but FAM library not available )
2546     fi
2547 fi
2548
2549 AC_SUBST(SMB_FAM_LIBS)
2550
2551 #################################################
2552 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2553
2554 SMB_CHECK_DMAPI([], AC_MSG_NOTICE(DMAPI support not present) )
2555
2556 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2557 # Theoretically it should work with AIX JFS2 too but this needs testing
2558 if test x"$samba_cv_HAVE_GPFS" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2559     default_shared_modules="$default_shared_modules vfs_tsmsm"
2560 fi
2561
2562 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2563 AC_TRY_RUN([
2564 #include <sys/types.h>
2565 #include <fcntl.h>
2566 #include <signal.h>
2567 #include <sys/file.h>
2568 #ifndef LOCK_MAND
2569 #define LOCK_MAND       32
2570 #define LOCK_READ       64
2571 #endif
2572 main() {
2573         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2574 }
2575 ],
2576 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2577 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2578     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2579 fi
2580
2581
2582 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2583 AC_TRY_COMPILE([#include <sys/types.h>
2584 #include <fcntl.h>],
2585 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2586 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2587 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2588     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2589 fi
2590
2591 #################################################
2592 # Check for POSIX capability support
2593
2594 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2595     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2596     [], [])
2597
2598 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2599
2600     ac_save_LIBS=$LIBS
2601     AC_LIBTESTFUNC(cap, cap_get_proc)
2602
2603     AC_CACHE_CHECK([for POSIX capabilities],
2604             samba_cv_HAVE_POSIX_CAPABILITIES,
2605             [
2606                 AC_TRY_RUN([
2607 #include <sys/types.h>
2608 #include <sys/capability.h>
2609 main() {
2610  cap_t cap;
2611  cap_value_t vals[1];
2612  if (!(cap = cap_get_proc()))
2613    exit(1);
2614  vals[0] = CAP_CHOWN;
2615  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2616  cap_set_proc(cap);
2617  exit(0);
2618 }],
2619                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2620                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2621                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2622             ])
2623
2624 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2625     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2626             [Whether POSIX capabilities are available])
2627 else
2628     LIBS=$ac_save_LIBS
2629 fi
2630
2631 fi
2632
2633 #
2634 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2635 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2636 #
2637
2638 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2639 AC_TRY_COMPILE([#include <sys/types.h>
2640 #if defined(HAVE_RPC_RPC_H)
2641 #include <rpc/rpc.h>
2642 #endif],
2643 [int16 testvar;],
2644 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2645 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2646     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2647 fi
2648
2649 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2650 AC_TRY_COMPILE([#include <sys/types.h>
2651 #if defined(HAVE_RPC_RPC_H)
2652 #include <rpc/rpc.h>
2653 #endif],
2654 [uint16 testvar;],
2655 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2656 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2657     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2658 fi
2659
2660 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2661 AC_TRY_COMPILE([#include <sys/types.h>
2662 #if defined(HAVE_RPC_RPC_H)
2663 #include <rpc/rpc.h>
2664 #endif],
2665 [int32 testvar;],
2666 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2667 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2668     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2669 fi
2670
2671 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2672 AC_TRY_COMPILE([#include <sys/types.h>
2673 #if defined(HAVE_RPC_RPC_H)
2674 #include <rpc/rpc.h>
2675 #endif],
2676 [uint32 testvar;],
2677 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2678 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2679     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2680 fi
2681
2682 dnl
2683 dnl Some systems (SCO) have a problem including
2684 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2685 dnl as a #define in <prot.h> and as part of an enum
2686 dnl in <rpc/rpc.h>.
2687 dnl
2688
2689 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2690 AC_TRY_COMPILE([#include <sys/types.h>
2691 #ifdef HAVE_SYS_SECURITY_H
2692 #include <sys/security.h>
2693 #include <prot.h>
2694 #endif  /* HAVE_SYS_SECURITY_H */
2695 #if defined(HAVE_RPC_RPC_H)
2696 #include <rpc/rpc.h>
2697 #endif],
2698 [int testvar;],
2699 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2700 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2701     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2702 fi
2703
2704 AC_MSG_CHECKING([for test routines])
2705 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
2706            AC_MSG_RESULT(yes),
2707            AC_MSG_ERROR([cant find test code. Aborting config]),
2708            AC_MSG_WARN([cannot run when cross-compiling]))
2709
2710 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2711 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
2712            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2713 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2714     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2715 fi
2716
2717 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2718 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
2719            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2720 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2721     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2722 fi
2723
2724 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2725 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2726 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2727 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2728 AC_CHECK_FUNCS(getpagesize)
2729
2730 ################################################
2731 # look for a method of setting the effective uid
2732 seteuid=no;
2733
2734 if test $seteuid = no; then
2735 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2736 AC_TRY_RUN([
2737 #define AUTOCONF_TEST 1
2738 #define USE_SETREUID 1
2739 #include "confdefs.h"
2740 #include "${srcdir-.}/lib/util_sec.c"],
2741            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2742 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2743     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2744 fi
2745 fi
2746
2747 # we check for setresuid second as it conflicts with AIO on Linux. 
2748 # see http://samba.org/~tridge/junkcode/aio_uid.c
2749 if test $seteuid = no; then
2750 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2751 AC_TRY_RUN([
2752 #define AUTOCONF_TEST 1
2753 #define USE_SETRESUID 1
2754 #include "confdefs.h"
2755 #include "${srcdir-.}/lib/util_sec.c"],
2756            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2757 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2758     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2759 fi
2760 fi
2761
2762 if test $seteuid = no; then
2763 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2764 AC_TRY_RUN([
2765 #define AUTOCONF_TEST 1
2766 #define USE_SETEUID 1
2767 #include "confdefs.h"
2768 #include "${srcdir-.}/lib/util_sec.c"],
2769            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2770 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2771     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2772 fi
2773 fi
2774
2775 if test $seteuid = no; then
2776 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2777 AC_TRY_RUN([
2778 #define AUTOCONF_TEST 1
2779 #define USE_SETUIDX 1
2780 #include "confdefs.h"
2781 #include "${srcdir-.}/lib/util_sec.c"],
2782            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2783 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2784     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2785 fi
2786 fi
2787
2788 AC_CACHE_CHECK([for the Darwin initgroups system call],
2789         samba_cv_DARWIN_INITGROUPS,
2790         AC_TRY_LINK([
2791 #include <sys/syscall.h>
2792 #include <unistd.h>
2793         ],
2794         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2795         samba_cv_DARWIN_INITGROUPS=yes,
2796         samba_cv_DARWIN_INITGROUPS=no)
2797 )
2798
2799 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2800     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2801         [Whether to use the Darwin-specific initgroups system call])
2802 fi
2803
2804 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2805 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
2806            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2807 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2808     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2809 fi
2810
2811 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2812 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
2813            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2814 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2815     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2816
2817 else
2818
2819 dnl
2820 dnl Don't check for 64 bit fcntl locking if we know that the
2821 dnl glibc2.1 broken check has succeeded.
2822 dnl
2823
2824   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2825   AC_TRY_RUN([
2826 #if defined(HAVE_UNISTD_H)
2827 #include <unistd.h>
2828 #endif
2829 #include <stdio.h>
2830 #include <stdlib.h>
2831
2832 #ifdef HAVE_FCNTL_H
2833 #include <fcntl.h>
2834 #endif
2835
2836 #ifdef HAVE_SYS_FCNTL_H
2837 #include <sys/fcntl.h>
2838 #endif
2839 main() { struct flock64 fl64;
2840 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
2841 exit(0);
2842 #else
2843 exit(1);
2844 #endif
2845 }],
2846        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
2847
2848   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
2849       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
2850   fi
2851 fi
2852
2853 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
2854 AC_TRY_COMPILE([#include <sys/types.h>
2855 #include <sys/stat.h>
2856 #include <unistd.h>],
2857 [struct stat st;  st.st_blocks = 0;],
2858 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
2859 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
2860     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
2861 fi
2862
2863 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
2864 AC_TRY_COMPILE([#include <sys/types.h>
2865 #include <sys/stat.h>
2866 #include <unistd.h>],
2867 [struct stat st;  st.st_blksize = 0;],
2868 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
2869 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
2870     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
2871 fi
2872
2873 AC_CACHE_CHECK([for st_flags in struct stat],
2874         samba_cv_HAVE_STAT_ST_FLAGS,
2875         [
2876             AC_TRY_COMPILE([#include <sys/types.h>
2877 #include <sys/stat.h>
2878 #include <unistd.h>],
2879             [struct stat st;  st.st_flags = 0;],
2880             samba_cv_HAVE_STAT_ST_FLAGS=yes,
2881             samba_cv_HAVE_STAT_ST_FLAGS=no,
2882             samba_cv_HAVE_STAT_ST_FLAGS=cross)
2883         ])
2884
2885 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
2886     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
2887                 [Whether the stat struct has a st_flags member])
2888 fi
2889
2890 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
2891 AC_TRY_COMPILE([
2892 #include <sys/types.h>
2893 #include <sys/acl.h>
2894 #if defined(HAVE_RPCSVC_NIS_H)
2895 #include <rpcsvc/nis.h>
2896 #endif],
2897 [int i;],
2898 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
2899 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
2900         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
2901 fi
2902
2903 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
2904 AC_TRY_RUN([
2905 #include <stdio.h>
2906 #include <limits.h>
2907 #include <signal.h>
2908
2909 void exit_on_core(int ignored) {
2910         exit(1);
2911 }
2912
2913 main() {
2914         char *newpath;
2915         signal(SIGSEGV, exit_on_core);
2916         newpath = realpath("/tmp", NULL);
2917         exit((newpath != NULL) ? 0 : 1);
2918 }
2919 ],
2920 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
2921 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
2922     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
2923 fi
2924
2925 #################################################
2926 # check for AFS clear-text auth support
2927 samba_cv_WITH_AFS=no
2928 AC_MSG_CHECKING(whether to use AFS clear-text auth)
2929 AC_ARG_WITH(afs,
2930 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
2931 [ case "$withval" in
2932   yes|auto)
2933     AC_MSG_RESULT($withval)
2934     samba_cv_WITH_AFS=$withval
2935     ;;
2936   *)
2937     AC_MSG_RESULT(no)
2938     ;;
2939   esac ],
2940   AC_MSG_RESULT(no)
2941 )
2942
2943 ####################################################
2944 # check for Linux-specific AFS fake-kaserver support
2945 samba_cv_WITH_FAKE_KASERVER=no
2946 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
2947 AC_ARG_WITH(fake-kaserver,
2948 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
2949 [ case "$withval" in
2950   yes|auto)
2951     AC_MSG_RESULT($withval)
2952     samba_cv_WITH_FAKE_KASERVER=$withval
2953     ;;
2954   *)
2955     AC_MSG_RESULT(no)
2956     ;;
2957   esac ],
2958   AC_MSG_RESULT(no)
2959 )
2960
2961 #################################################
2962 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
2963 if test x"$samba_cv_WITH_AFS" != x"no" ||
2964    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
2965
2966     # see if this box has the afs-headers in /usr/include/afs
2967     AC_MSG_CHECKING(for /usr/include/afs)
2968     if test -d /usr/include/afs; then
2969           CFLAGS="$CFLAGS -I/usr/include/afs"
2970           CPPFLAGS="$CPPFLAGS -I/usr/include/afs"
2971           AC_MSG_RESULT(yes)
2972     else
2973       AC_MSG_RESULT(no)
2974     fi
2975
2976     # check for afs.h
2977     have_afs_headers=no
2978     AC_CHECK_HEADERS(afs.h afs/afs.h)
2979     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
2980         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
2981            test x"$samba_cv_WITH_AFS" = x"auto"; then
2982                 AC_MSG_WARN([AFS cannot be supported without afs.h])
2983         else
2984                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
2985         fi
2986     else
2987         have_afs_headers=yes
2988     fi
2989 fi
2990
2991 FAKE_KASERVER_OBJ=""
2992 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
2993     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
2994     FAKE_KASERVER_OBJ="utils/net_afs.o"
2995 fi
2996 AC_SUBST(FAKE_KASERVER_OBJ)
2997
2998 #################################################
2999 # check whether to compile AFS/NT ACL mapping module
3000 samba_cv_WITH_VFS_AFSACL=no
3001 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3002 AC_ARG_WITH(vfs-afsacl,
3003 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3004 [ case "$withval" in
3005   yes|auto)
3006     AC_MSG_RESULT($withval)
3007     samba_cv_WITH_VFS_AFSACL=yes
3008     ;;
3009   *)
3010     AC_MSG_RESULT(no)
3011     ;;
3012   esac ],
3013   AC_MSG_RESULT(no)
3014 )
3015
3016 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3017    default_shared_modules="$default_shared_modules vfs_afsacl"
3018 fi
3019         
3020 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3021     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3022 fi
3023
3024 #################################################
3025 # check for the DFS clear-text auth system
3026 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3027 AC_ARG_WITH(dfs,
3028 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3029 [ case "$withval" in
3030   yes)
3031     AC_MSG_RESULT(yes)
3032     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3033     ;;
3034   *)
3035     AC_MSG_RESULT(no)
3036     ;;
3037   esac ],
3038   AC_MSG_RESULT(no)
3039 )
3040
3041 ########################################################
3042 # Compile with LDAP support?
3043
3044 with_ldap_support=auto
3045 AC_MSG_CHECKING([for LDAP support])
3046
3047 AC_ARG_WITH(ldap,
3048 [AS_HELP_STRING([--with-ldap], [LDAP support (default yes)])],
3049 [ case "$withval" in
3050     yes|no)
3051         with_ldap_support=$withval
3052         ;;
3053   esac ])
3054
3055 AC_MSG_RESULT($with_ldap_support)
3056
3057 SMBLDAP=""
3058 AC_SUBST(SMBLDAP)
3059 SMBLDAPUTIL=""
3060 AC_SUBST(SMBLDAPUTIL)
3061 LDBLDAP=""
3062 AC_SUBST(LDBLDAP)
3063
3064 if test x"$with_ldap_support" != x"no"; then
3065
3066   ##################################################################
3067   # first test for ldap.h and lber.h
3068   # (ldap.h is required for this test)
3069   AC_CHECK_HEADERS(ldap.h lber.h)
3070
3071   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3072         if test x"$with_ldap_support" = x"yes"; then
3073          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3074         else
3075          AC_MSG_WARN(ldap.h is needed for LDAP support)
3076         fi
3077         
3078         with_ldap_support=no
3079   fi
3080
3081   ##################################################################
3082   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3083   # unsigned int in include/includes.h
3084   case $host_os in
3085         *hpux*)
3086          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3087          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3088         with_ldap_support=yes
3089         ;;
3090         *)
3091         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3092         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3093                 if test x"$with_ldap_support" = x"yes"; then
3094                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3095                 else
3096                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3097                 fi
3098                 with_ldap_support=no
3099         fi
3100         ;;
3101   esac
3102 fi
3103
3104 if test x"$with_ldap_support" != x"no"; then
3105   ac_save_LIBS=$LIBS
3106
3107   ##################################################################
3108   # we might need the lber lib on some systems. To avoid link errors
3109   # this test must be before the libldap test
3110   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3111
3112   ########################################################
3113   # If ber_sockbuf_add_io() is available we can add
3114   # SASL wrapping hooks
3115   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3116
3117   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3118                  AC_TRY_COMPILE([#include <ldap.h>],
3119                                 [int val = LDAP_OPT_SOCKBUF;],
3120                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3121                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3122
3123   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3124           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3125         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3126   fi
3127
3128   #######################################################
3129   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3130   # ldap logging and print it out in the samba logs
3131   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3132                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3133                  [AC_TRY_COMPILE([#include <lber.h>],
3134                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3135                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3136                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3137
3138   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3139         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3140                   [Support for LDAP/LBER logging interception])
3141   fi
3142
3143   ########################################################
3144   # now see if we can find the ldap libs in standard paths
3145   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3146
3147   ########################################################
3148   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3149   # Check found in pam_ldap 145.
3150   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3151
3152   LIBS="$LIBS $LDAP_LIBS"
3153   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3154     AC_TRY_COMPILE([
3155         #include <lber.h>
3156         #include <ldap.h>],
3157         [ldap_set_rebind_proc(0, 0, 0);],
3158         [smb_ldap_cv_ldap_set_rebind_proc=3],
3159         [smb_ldap_cv_ldap_set_rebind_proc=2]
3160     )
3161   ])
3162
3163   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3164
3165   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3166
3167   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3168     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3169     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3170     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3171     default_shared_modules="$default_shared_modules";
3172     SMBLDAP="lib/smbldap.o"
3173     SMBLDAPUTIL="lib/smbldap_util.o"
3174     with_ldap_support=yes
3175     AC_MSG_CHECKING(whether LDAP support is used)
3176     AC_MSG_RESULT(yes)
3177   else
3178     if test x"$with_ldap_support" = x"yes"; then
3179         AC_MSG_ERROR(libldap is needed for LDAP support)
3180     else
3181         AC_MSG_WARN(libldap is needed for LDAP support)
3182     fi
3183
3184     LDAP_LIBS=""
3185     with_ldap_support=no
3186   fi
3187   LIBS=$ac_save_LIBS
3188 fi
3189
3190
3191 #################################################
3192 # active directory support
3193
3194 with_ads_support=auto
3195 AC_MSG_CHECKING([for Active Directory and krb5 support])
3196
3197 AC_ARG_WITH(ads,
3198 [AS_HELP_STRING([--with-ads], [Active Directory support (default auto)])],
3199 [ case "$withval" in
3200     yes|no)
3201         with_ads_support="$withval"
3202         ;;
3203   esac ])
3204
3205 AC_MSG_RESULT($with_ads_support)
3206
3207 FOUND_KRB5=no
3208 KRB5_LIBS=""
3209
3210 if test x"$with_ldap_support" != x"yes"; then
3211
3212     if test x"$with_ads_support" = x"yes"; then
3213         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3214     elif test x"$with_ads_support" = x"auto"; then
3215         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3216         with_ads_support=no
3217     fi
3218
3219 else
3220
3221     # Check to see whether there is enough LDAP functionality to be able
3222     # to build AD support.
3223
3224 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3225 case "$host_os" in
3226         *hpux*)
3227     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3228
3229     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3230         if test x"$with_ads_support" = x"yes"; then
3231             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3232         elif test x"$with_ads_support" = x"auto"; then
3233             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3234             with_ads_support=no
3235         fi
3236     fi
3237     ;;
3238         *)
3239     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3240
3241     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3242         if test x"$with_ads_support" = x"yes"; then
3243             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3244         elif test x"$with_ads_support" = x"auto"; then
3245             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3246             with_ads_support=no
3247         fi
3248     fi
3249     ;;
3250 esac
3251
3252
3253     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3254
3255     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3256         if test x"$with_ads_support" = x"yes"; then
3257             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3258         elif test x"$with_ads_support" = x"auto"; then
3259             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3260             with_ads_support=no
3261         fi
3262     fi
3263
3264 fi
3265
3266 if test x"$with_ads_support" != x"no"; then
3267
3268   # Do no harm to the values of CFLAGS and LIBS while testing for
3269   # Kerberos support.
3270
3271   if test x$FOUND_KRB5 = x"no"; then
3272     #################################################
3273     # check for location of Kerberos 5 install
3274     AC_MSG_CHECKING(for kerberos 5 install path)
3275     AC_ARG_WITH(krb5,
3276     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3277     [ case "$withval" in
3278       no)
3279         AC_MSG_RESULT(no krb5-path given)
3280         ;;
3281       yes)
3282         AC_MSG_RESULT(/usr)
3283         FOUND_KRB5=yes
3284         ;;
3285       *)
3286         AC_MSG_RESULT($withval)
3287         KRB5_CFLAGS="-I$withval/include"
3288         KRB5_CPPFLAGS="-I$withval/include"
3289         KRB5_LDFLAGS="-L$withval/lib"
3290         FOUND_KRB5=yes
3291         if test -x "$withval/bin/krb5-config"; then
3292                 KRB5CONFIG=$withval/bin/krb5-config
3293         fi
3294         ;;
3295       esac ],
3296       AC_MSG_RESULT(no krb5-path given)
3297     )
3298   fi
3299
3300   #################################################
3301   # check for krb5-config from recent MIT and Heimdal kerberos 5
3302   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3303   AC_MSG_CHECKING(for working krb5-config)
3304   if test -x "$KRB5CONFIG"; then
3305     ac_save_CFLAGS=$CFLAGS
3306     CFLAGS="";export CFLAGS
3307     ac_save_LDFLAGS=$LDFLAGS
3308     LDFLAGS="";export LDFLAGS
3309     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3310     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3311     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3312     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3313     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3314     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3315     FOUND_KRB5=yes
3316     AC_MSG_RESULT(yes)
3317   else
3318     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3319   fi
3320
3321   if test x$FOUND_KRB5 = x"no"; then
3322     #################################################
3323     # see if this box has the SuSE location for the heimdal krb implementation
3324     AC_MSG_CHECKING(for /usr/include/heimdal)
3325     if test -d /usr/include/heimdal; then
3326       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3327           KRB5_CFLAGS="-I/usr/include/heimdal"
3328           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3329           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3330           FOUND_KRB5=yes
3331           AC_MSG_RESULT(yes)
3332       else
3333           KRB5_CFLAGS="-I/usr/include/heimdal"
3334           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3335           FOUND_KRB5=yes
3336           AC_MSG_RESULT(yes)
3337       fi
3338     else
3339       AC_MSG_RESULT(no)
3340     fi
3341   fi
3342
3343   if test x$FOUND_KRB5 = x"no"; then
3344     #################################################
3345     # see if this box has the RedHat location for kerberos
3346     AC_MSG_CHECKING(for /usr/kerberos)
3347     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3348       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3349       KRB5_CFLAGS="-I/usr/kerberos/include"
3350       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3351       FOUND_KRB5=yes
3352       AC_MSG_RESULT(yes)
3353     else
3354       AC_MSG_RESULT(no)
3355     fi
3356   fi
3357
3358   if test x$FOUND_KRB5 = x"no"; then
3359     #################################################
3360     # see if this box has the OpenBSD location for heimdal krb5
3361     AC_MSG_CHECKING(for /usr/include/kerberosV)
3362     if test -d /usr/include/kerberosV; then
3363       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3364       KRB5_LIBS="-lcrypto"
3365       FOUND_KRB5=yes
3366       AC_MSG_RESULT(yes)
3367     else
3368       AC_MSG_RESULT(no)
3369     fi
3370   fi
3371
3372   ac_save_CFLAGS=$CFLAGS
3373   ac_save_CPPFLAGS=$CPPFLAGS
3374   ac_save_LDFLAGS=$LDFLAGS
3375
3376   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3377   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3378   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3379
3380   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3381
3382   # now check for krb5.h. Some systems have the libraries without the headers!
3383   # note that this check is done here to allow for different kerberos
3384   # include paths
3385   AC_CHECK_HEADERS(krb5.h)
3386
3387   if test x"$ac_cv_header_krb5_h" = x"no"; then
3388
3389     # Give a warning if AD support was not explicitly requested,
3390     # i.e with_ads_support = auto, otherwise die with an error.
3391
3392     if test x"$with_ads_support" = x"yes"; then
3393       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3394     else
3395       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3396     fi
3397
3398     # Turn off AD support and restore CFLAGS and LIBS variables
3399
3400     with_ads_support="no"
3401
3402     CFLAGS=$ac_save_CFLAGS
3403     CPPFLAGS=$ac_save_CPPFLAGS
3404     LDFLAGS=$ac_save_LDFLAGS
3405   fi
3406   AC_CHECK_HEADERS(krb5/locate_plugin.h)
3407   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3408         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3409         EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3410   fi
3411 fi
3412
3413 # Now we have determined whether we really want ADS support
3414 use_ads=no
3415 if test x"$with_ads_support" != x"no"; then
3416   use_ads=yes
3417   have_gssapi=no
3418   ac_save_LIBS=$LIBS
3419
3420   # now check for gssapi headers.  This is also done here to allow for
3421   # different kerberos include paths
3422   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3423
3424   ##################################################################
3425   # we might need the k5crypto and com_err libraries on some systems
3426   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3427   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3428
3429   # Heimdal checks.
3430   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3431   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3432   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3433
3434   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3435   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3436
3437   ########################################################
3438   # now see if we can find the krb5 libs in standard paths
3439   # or as specified above
3440   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3441   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3442
3443   ########################################################
3444   # now see if we can find the gssapi libs in standard paths
3445   if test x"$have_gssapi" != x"yes"; then
3446      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3447   fi
3448
3449   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3450   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3451   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3452   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3453   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3454   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3455   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3456   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3457   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3458   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3459   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3460   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3461   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3462   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3463   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3464   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3465   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3466   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3467   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3468   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3469   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3470   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3471   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3472   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3473   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3474   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3475   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3476   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3477   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3478   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3479   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3480   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3481   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3482   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3483   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3484   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3485   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3486   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3487   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3488   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3489   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3490   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3491   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3492
3493   LIBS="$KRB5_LIBS $LIBS"
3494
3495   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3496         smb_krb5_cv_ticket_has_keyinfo,
3497         [
3498             AC_TRY_COMPILE(
3499             [
3500                 #include <krb5.h>
3501             ],
3502             [
3503                 krb5_ticket ticket;
3504                 krb5_kvno kvno;
3505                 krb5_enctype enctype;
3506
3507                 enctype = ticket.enc_part.enctype;
3508                 kvno = ticket.enc_part.kvno;
3509             ],
3510             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3511             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3512         ])
3513
3514   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3515         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3516             [Whether the krb5_ticket structure contains the kvno and enctype])
3517   fi
3518
3519   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3520           smb_krb5_cv_creds_opt_free_context,
3521           [
3522                 AC_TRY_COMPILE([
3523                     #include <krb5.h>],
3524                     [
3525                         krb5_context ctx;
3526                         krb5_get_init_creds_opt *opt = NULL;
3527                         krb5_get_init_creds_opt_free(ctx, opt);
3528                     ],
3529                     [smb_krb5_cv_creds_opt_free_context=yes],
3530                     [smb_krb5_cv_creds_opt_free_context=no]
3531                 )
3532           ])
3533
3534   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3535         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3536             [Whether krb5_get_init_creds_opt_free takes a context argument])
3537   fi
3538
3539   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3540     AC_TRY_COMPILE([
3541         #include <krb5.h>],
3542         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3543         [smb_krb5_cv_verify_checksum=7],
3544         [smb_krb5_cv_verify_checksum=6],
3545     )
3546   ])
3547   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3548
3549   AC_CACHE_CHECK([for checksum in krb5_checksum],
3550                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3551     AC_TRY_COMPILE([#include <krb5.h>],
3552       [krb5_checksum cksum; cksum.checksum.length = 0;],
3553       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3554       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3555
3556   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3557     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3558                [Whether the krb5_checksum struct has a checksum property])
3559   fi
3560
3561   AC_CACHE_CHECK([for etype in EncryptedData],
3562                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3563     AC_TRY_COMPILE([#include <krb5.h>],
3564       [EncryptedData edata; edata.etype = 0;],
3565       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3566       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3567
3568   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3569     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3570                [Whether the EncryptedData struct has a etype property])
3571   fi
3572
3573   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3574                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3575     AC_TRY_COMPILE([#include <krb5.h>],
3576       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3577       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3578       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3579
3580   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3581     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3582                [Whether the krb5_ap_req struct has a ticket pointer])
3583   fi
3584
3585   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3586                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3587     AC_TRY_COMPILE([#include <krb5.h>],
3588       [krb5_error err; err.e_data = NULL;],
3589       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3590       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3591
3592   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3593     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3594                [Whether the krb5_error struct has a e_data pointer])
3595   fi
3596
3597   AC_CACHE_CHECK([for krb5_crypto type],
3598                 samba_cv_HAVE_KRB5_CRYPTO,[
3599     AC_TRY_COMPILE([#include <krb5.h>],
3600       [krb5_crypto crypto;],
3601       samba_cv_HAVE_KRB5_CRYPTO=yes,
3602       samba_cv_HAVE_KRB5_CRYPTO=no)])
3603
3604   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3605     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3606                [Whether the type krb5_crypto exists])
3607   fi
3608
3609   AC_CACHE_CHECK([for krb5_encrypt_block type],
3610                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3611     AC_TRY_COMPILE([#include <krb5.h>],
3612       [krb5_encrypt_block block;],
3613       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3614       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3615
3616   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3617     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3618                [Whether the type krb5_encrypt_block exists])
3619   fi
3620
3621   AC_CACHE_CHECK([for addrtype in krb5_address],
3622                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3623     AC_TRY_COMPILE([#include <krb5.h>],
3624       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3625       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3626       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3627
3628   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3629     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3630                [Whether the krb5_address struct has a addrtype property])
3631   fi
3632
3633   AC_CACHE_CHECK([for addr_type in krb5_address],
3634                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3635     AC_TRY_COMPILE([#include <krb5.h>],
3636       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3637       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3638       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3639
3640   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3641     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3642               [Whether the krb5_address struct has a addr_type property])
3643   fi
3644
3645   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3646                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3647                  [AC_TRY_COMPILE([#include <krb5.h>],
3648     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3649     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3650
3651   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3652     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3653               [Whether the krb5_ticket struct has a enc_part2 property])
3654   fi
3655
3656   AC_CACHE_CHECK([for keyblock in krb5_creds],
3657                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3658     AC_TRY_COMPILE([#include <krb5.h>],
3659       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3660       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3661       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3662
3663   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3664     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3665               [Whether the krb5_creds struct has a keyblock property])
3666   fi
3667
3668   AC_CACHE_CHECK([for session in krb5_creds],
3669                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3670     AC_TRY_COMPILE([#include <krb5.h>],
3671       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3672       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3673       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3674
3675   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3676     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3677               [Whether the krb5_creds struct has a session property])
3678   fi
3679
3680   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3681                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3682     AC_TRY_COMPILE([#include <krb5.h>],
3683       [krb5_keyblock key; key.keyvalue.data = NULL;],
3684       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3685       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3686
3687   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3688     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3689               [Whether the krb5_keyblock struct has a keyvalue property])
3690   fi
3691
3692   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3693                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3694     AC_TRY_COMPILE([#include <krb5.h>],
3695       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3696       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3697       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3698   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3699                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3700     AC_TRY_COMPILE([#include <krb5.h>],
3701       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3702       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3703       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3704 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3705 # w.r.t. arcfour and windows, so we must not enable it here
3706   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3707           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3708     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3709               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3710   fi
3711
3712   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3713                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3714     AC_TRY_COMPILE([#include <krb5.h>],
3715       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3716       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3717       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3718
3719   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3720     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3721               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3722   fi
3723
3724   AC_CACHE_CHECK([for KV5M_KEYTAB],
3725                  samba_cv_HAVE_KV5M_KEYTAB,[
3726     AC_TRY_COMPILE([#include <krb5.h>],
3727       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3728       samba_cv_HAVE_KV5M_KEYTAB=yes,
3729       samba_cv_HAVE_KV5M_KEYTAB=no)])
3730
3731   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3732       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3733              [Whether the KV5M_KEYTAB option is available])
3734   fi
3735
3736   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3737                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3738     AC_TRY_COMPILE([#include <krb5.h>],
3739       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3740       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3741       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3742
3743   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3744     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3745               [Whether KRB5_KU_OTHER_CKSUM is available])
3746   fi
3747
3748   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3749                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3750     AC_TRY_COMPILE([#include <krb5.h>],
3751       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3752       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3753       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3754
3755   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3756     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3757               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3758   fi
3759
3760   AC_CACHE_CHECK([for the krb5_princ_component macro],
3761                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3762     AC_TRY_LINK([#include <krb5.h>],
3763       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3764       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3765       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3766
3767   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3768     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3769                [Whether krb5_princ_component is available])
3770   fi
3771
3772   AC_CACHE_CHECK([for key in krb5_keytab_entry],
3773                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
3774     AC_TRY_COMPILE([#include <krb5.h>],
3775       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
3776       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
3777       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
3778
3779   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
3780     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
3781               [Whether krb5_keytab_entry has key member])
3782   fi
3783
3784   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
3785                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
3786     AC_TRY_COMPILE([#include <krb5.h>],
3787       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
3788       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
3789       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
3790
3791   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
3792     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
3793               [Whether krb5_keytab_entry has keyblock member])
3794   fi
3795
3796   AC_CACHE_CHECK([for magic in krb5_address],
3797                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
3798     AC_TRY_COMPILE([#include <krb5.h>],
3799       [krb5_address addr; addr.magic = 0;],
3800       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
3801       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
3802
3803   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
3804     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
3805               [Whether the krb5_address struct has a magic property])
3806   fi
3807
3808   AC_CACHE_CHECK([for WRFILE: keytab support],
3809                 samba_cv_HAVE_WRFILE_KEYTAB,[
3810     AC_TRY_RUN([
3811 #include<krb5.h>
3812   main()
3813   {
3814     krb5_context context;
3815     krb5_keytab keytab;
3816
3817     krb5_init_context(&context);
3818     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
3819   }],
3820   samba_cv_HAVE_WRFILE_KEYTAB=yes,
3821   samba_cv_HAVE_WRFILE_KEYTAB=no)])
3822
3823   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
3824       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
3825                [Whether the WRFILE:-keytab is supported])
3826   fi
3827
3828   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
3829                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
3830     AC_TRY_COMPILE([#include <krb5.h>],
3831     [
3832     krb5_context context;
3833     krb5_principal principal;
3834     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
3835     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
3836     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
3837
3838   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
3839     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
3840               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
3841   fi
3842
3843   AC_CACHE_CHECK([for krb5_addresses type],
3844                 samba_cv_HAVE_KRB5_ADDRESSES,[
3845     AC_TRY_COMPILE([#include <krb5.h>],
3846       [krb5_addresses addr;],
3847       samba_cv_HAVE_KRB5_ADDRESSES=yes,
3848       samba_cv_HAVE_KRB5_ADDRESSES=no)])
3849
3850   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
3851     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
3852                [Whether the type krb5_addresses type exists])
3853   fi
3854
3855   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
3856                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
3857     AC_TRY_COMPILE([#include <krb5.h>],
3858     [
3859     krb5_mk_error(0,0,0);],
3860     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
3861     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
3862
3863   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
3864     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
3865               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
3866   fi
3867
3868   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
3869     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
3870         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
3871         AC_TRY_RUN_STRICT([
3872                 #include <stdlib.h>
3873                 #include <krb5.h>
3874                 int main(void) {
3875                         krb5_context context = NULL;
3876                         char *str = NULL;
3877                         krb5_enctype_to_string(context, 1, &str);
3878                         if (str) free (str); 
3879                         return 0;
3880                 }
3881                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3882                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
3883                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
3884
3885     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
3886       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
3887                 [whether krb5_enctype_to_string takes krb5_context argument])
3888     fi
3889
3890     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
3891         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
3892         AC_TRY_RUN_STRICT([
3893                 #include <krb5.h>
3894                 int main(void) {
3895                         char buf[256];
3896                         krb5_enctype_to_string(1, buf, 256);
3897                         return 0;
3898                 }
3899                 ],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
3900                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
3901                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
3902
3903     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
3904       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
3905                 [whether krb5_enctype_to_string takes size_t argument])
3906     fi
3907   fi
3908
3909   AC_CACHE_CHECK([for krb5_principal_get_realm],
3910                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
3911     AC_TRY_LINK([#include <krb5.h>],
3912       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
3913       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
3914       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
3915
3916   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
3917     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
3918                [Whether the function krb5_principal_get_realm is defined])
3919   fi
3920
3921   AC_CACHE_CHECK([for krb5_princ_realm],
3922                 samba_cv_HAVE_KRB5_PRINC_REALM,[
3923     AC_TRY_LINK([#include <krb5.h>],
3924       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
3925       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
3926       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
3927
3928   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
3929     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
3930                [Whether the macro krb5_princ_realm is defined])
3931   fi
3932
3933   #
3934   #
3935   # Now the decisions whether we can support krb5
3936   #
3937   # NOTE: all tests should be done before this block!
3938   #
3939   #
3940   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
3941     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
3942     use_ads=no
3943   fi
3944
3945   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
3946           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
3947   then
3948     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
3949     use_ads=no
3950   fi
3951
3952   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
3953           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
3954   then
3955     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
3956     use_ads=no
3957   fi
3958
3959   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
3960           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
3961   then
3962     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
3963     use_ads=no
3964   fi
3965
3966   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
3967           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
3968   then
3969     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
3970     use_ads=no
3971   fi
3972
3973   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
3974
3975       # We only need the following functions if we can't get the enctype
3976       # and kvno out of the ticket directly (ie. on Heimdal).
3977
3978       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
3979       then
3980         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
3981         use_ads=no
3982       fi
3983
3984       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
3985       then
3986         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
3987         use_ads=no
3988       fi
3989
3990   fi
3991
3992   if test x"$use_ads" = x"yes"; then
3993     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
3994     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
3995     if test x"$have_gssapi" = x"yes"; then
3996       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
3997     fi
3998   else
3999     if test x"$with_ads_support" = x"yes"; then
4000         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4001     else
4002         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4003     fi
4004     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4005     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4006     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4007     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4008     KRB5_LIBS=""
4009     with_ads_support=no
4010   fi
4011   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4012   AC_MSG_RESULT([$use_ads])
4013
4014 LIBS="$ac_save_LIBS"
4015 fi
4016
4017 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4018 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4019
4020
4021 ########################################################
4022 # Compile with DNS Updates support?
4023
4024 with_dnsupdate_support=no
4025 AC_MSG_CHECKING([whether to enable DNS Updates support])
4026
4027 AC_ARG_WITH(dnsupdate,
4028 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default no)])],
4029 [ case "$withval" in
4030     yes|no)
4031         with_dnsupdate_support=$withval
4032         ;;
4033   esac ])
4034
4035 AC_MSG_RESULT($with_dnsupdate_support)
4036
4037 if test x"$with_dnsupdate_support" != x"no"; then
4038
4039   ################################################################
4040   # first test for Active Directory support being enabled
4041   #if test x"$with_ads_support" = x"no"; then
4042   #             AC_MSG_ERROR(Active Directory support is required to enable DNS Update support)
4043   #             with_dnsupdate_support=no
4044   #fi           
4045   ##################################################################
4046   # then test for uuid.h (necessary to generate unique DNS keynames
4047   # (uuid.h is required for this test)
4048   AC_CHECK_HEADERS(uuid/uuid.h)
4049
4050   if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4051         if test x"$with_dnsupdate_support" = x"yes"; then
4052          AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4053         else
4054          AC_MSG_WARN(uuid.h is needed to enable DNS Updates support)
4055         fi
4056         with_dnsupdate_support=no
4057   fi
4058 fi
4059
4060 if test x"$with_dnsupdate_support" != x"no"; then
4061
4062   ########################################################
4063   # Now see if we can find the uuid libs in standard paths
4064   # On some systems, the uuid API is in libc, so we have to
4065   # be careful not to insert a spurious -luuid.
4066
4067   UUID_LIBS=""
4068   AC_LIBTESTFUNC(uuid, uuid_generate,
4069           [
4070             case " $LIBS " in
4071                 *\ -luuid\ *)
4072                 UUID_LIBS="-luuid"
4073                 SMB_REMOVE_LIB(uuid)
4074                 ;;
4075             esac
4076
4077             with_dnsupdate_support=yes
4078             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4079         ],
4080         [
4081             if test x"$with_dnsupdate_support" = x"yes"; then
4082                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4083             else
4084                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4085             fi
4086             with_dnsupdate_support=no
4087         ])
4088 fi
4089
4090 #################################################
4091 # check for automount support
4092 AC_MSG_CHECKING(whether to use automount)
4093 AC_ARG_WITH(automount,
4094 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4095 [ case "$withval" in
4096   yes)
4097     AC_MSG_RESULT(yes)
4098     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4099     ;;
4100   *)
4101     AC_MSG_RESULT(no)
4102     ;;
4103   esac ],
4104   AC_MSG_RESULT(no)
4105 )
4106
4107 #################################################
4108 # check for mount- and umount.cifs support
4109 CIFSMOUNT_PROGS=""
4110 INSTALL_CIFSMOUNT=""
4111 UNINSTALL_CIFSMOUNT=""
4112 AC_MSG_CHECKING(whether to build mount.cifs and umount.cifs)
4113 AC_ARG_WITH(cifsmount,
4114 [AS_HELP_STRING([--with-cifsmount], [Include mount.cifs and umount.cifs (Linux only) support (default=yes)])],
4115 [ case "$withval" in
4116   no)
4117         AC_MSG_RESULT(no)
4118         ;;
4119   *)
4120         case "$host_os" in
4121         *linux*)
4122                 AC_MSG_RESULT(yes)
4123                 AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4124                 CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4125                 INSTALL_CIFSMOUNT="installcifsmount"
4126                 UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4127                 ;;
4128         *)
4129                 AC_MSG_ERROR(not on a linux system!)
4130                 ;;
4131         esac
4132     ;;
4133   esac ],
4134 [ case "$host_os" in
4135   *linux*)
4136         AC_MSG_RESULT(yes)
4137         AC_DEFINE(WITH_CIFSMOUNT,1,[Whether to build mount.cifs and umount.cifs])
4138         CIFSMOUNT_PROGS="bin/mount.cifs bin/umount.cifs"
4139         INSTALL_CIFSMOUNT="installcifsmount"
4140         UNINSTALL_CIFSMOUNT="uninstallcifsmount"
4141         ;;
4142   *)
4143         AC_MSG_RESULT(no)
4144         ;;
4145   esac ]
4146 )
4147
4148 #################################################
4149 # check for cifs.upcall support
4150 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
4151 CIFSUPCALL_PROGS=""
4152 INSTALL_CIFSUPCALL=""
4153 UNINSTALL_CIFSUPCALL=""
4154 AC_MSG_CHECKING(whether to build cifs.upcall)
4155 AC_ARG_WITH(cifsupcall,
4156 [AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=yes)])],
4157 [ case "$withval" in
4158   no)
4159         AC_MSG_RESULT(no)
4160         ;;
4161   *)
4162         case "$host_os" in
4163         *linux*)
4164                 if test x"$use_ads" != x"yes"; then
4165                         AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
4166                 elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4167                         AC_MSG_ERROR(keyutils package is required for cifs.upcall)
4168                 else
4169                         AC_MSG_RESULT(yes)
4170                         AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4171                         CIFSUPCALL_PROGS="bin/cifs.upcall"
4172                         INSTALL_CIFSUPCALL="installcifsupcall"
4173                         UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4174                 fi
4175                 ;;
4176         *)
4177                 AC_MSG_ERROR(not on a linux system!)
4178                 ;;
4179         esac
4180     ;;
4181   esac ],
4182 [ case "$host_os" in
4183   *linux*)
4184         if test x"$use_ads" != x"yes"; then
4185                 AC_MSG_WARN(ADS support should be enabled for building cifs.upcall)
4186         elif test x"$HAVE_KEYUTILS_H" != "x1"; then
4187                 AC_MSG_WARN(keyutils package is required for cifs.upcall)
4188         else
4189                 AC_MSG_RESULT(yes)
4190                 AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
4191                 CIFSUPCALL_PROGS="bin/cifs.upcall"
4192                 INSTALL_CIFSUPCALL="installcifsupcall"
4193                 UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
4194         fi
4195         ;;
4196   *)
4197         AC_MSG_RESULT(no)
4198         ;;
4199   esac ]
4200 )
4201
4202
4203 #################################################
4204 # Check for a PAM clear-text auth, accounts, password
4205 # and session support. Most PAM implementations keep their
4206 # headers in /usr/include/security. Darwin keeps its in
4207 # /usr/include/pam.
4208
4209 with_pam_for_crypt=no
4210 try_pam=no
4211 AC_MSG_CHECKING(whether to try PAM support)
4212 AC_ARG_WITH(pam,
4213 [AS_HELP_STRING([--with-pam], [Include PAM support (default=no)])],
4214 [ case "$withval" in
4215   yes|no)
4216     try_pam=$withval
4217     ;;
4218   esac
4219 ])
4220 AC_MSG_RESULT([$try_pam])
4221
4222 use_pam=no
4223 create_pam_modules=no
4224 if test x"${try_pam}" != x"no";then
4225         use_pam=yes
4226         create_pam_modules=yes
4227
4228         # Most systems have PAM headers in /usr/include/security, but Darwin
4229         # has them in /usr/include/pam.
4230         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4231         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4232                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4233                 if test x"${try_pam}" = x"yes";then
4234                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4235                 fi
4236                 use_pam=no
4237                 create_pam_modules=no
4238         fi
4239
4240         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4241         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4242                 if test x"${try_pam}" = x"yes";then
4243                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4244                 fi
4245                 use_pam=no
4246                 create_pam_modules=no
4247         fi
4248
4249         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4250                 #if HAVE_SECURITY_PAM_APPL_H
4251                 #include <security/pam_appl.h>
4252                 #endif
4253                 #if HAVE_PAM_PAM_APPL_H
4254                 #include <pam/pam_appl.h>
4255                 #endif
4256         ]])
4257         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4258                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4259                 if test x"${try_pam}" = x"yes";then
4260                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4261        fi
4262                 create_pam_modules=no
4263     fi
4264
4265         if test x"$use_pam" = x"yes"; then
4266     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4267                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4268                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4269     with_pam_for_crypt=yes
4270
4271                 if test x"$create_pam_modules" = x"yes"; then
4272                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4273                         # this checks are optional,
4274                         # we don't care about the results here
4275                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4276                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4277                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4278                 else
4279                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4280                 fi
4281         fi
4282         AC_MSG_CHECKING(whether to use PAM support)
4283         AC_MSG_RESULT([$use_pam])
4284
4285         AC_MSG_CHECKING(whether to have PAM MODULES support)
4286         AC_MSG_RESULT([$create_pam_modules])
4287 fi # try_pam != no
4288
4289 #################################################
4290 # check for pam_smbpass support
4291 PAM_MODULES=""
4292 INSTALL_PAM_MODULES=""
4293 UNINSTALL_PAM_MODULES=""
4294 AC_MSG_CHECKING(whether to use pam_smbpass)
4295 AC_ARG_WITH(pam_smbpass,
4296 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=no)])],
4297 [ case "$withval" in
4298   yes)
4299     AC_MSG_RESULT(yes)
4300
4301        # Conditions under which pam_smbpass should not be built.
4302
4303        if test x"$BLDSHARED" != x"true"; then
4304           AC_MSG_ERROR([No support for shared modules])
4305        elif test x"$create_pam_modules" != x"yes"; then
4306           AC_MSG_ERROR([No support for PAM MODULES])
4307        else
4308           PAM_MODULES="pam_smbpass"
4309           INSTALL_PAM_MODULES="installpammodules"
4310           UNINSTALL_PAM_MODULES="uninstallpammodules"
4311        fi
4312     ;;
4313   *)
4314     AC_MSG_RESULT(no)
4315     ;;
4316   esac ],
4317   AC_MSG_RESULT(no)
4318 )
4319
4320
4321 ###############################################
4322 # test for where we get crypt() from
4323 AC_SEARCH_LIBS(crypt, [crypt],
4324   [test "$ac_cv_search_crypt" = "none required" || AUTH_LIBS="-lcrypt $AUTH_LIBS"
4325   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
4326
4327 ##
4328 ## moved after the check for -lcrypt in order to
4329 ## ensure that the necessary libraries are included
4330 ## check checking for truncated salt.  Wrapped by the
4331 ## $with_pam_for_crypt variable as above   --jerry
4332 ##
4333 if test $with_pam_for_crypt = no; then
4334 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4335 crypt_LIBS="$LIBS"
4336 LIBS="$AUTH_LIBS $LIBS"
4337 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
4338         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4339 LIBS="$crypt_LIBS"])
4340 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4341         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4342 fi
4343 fi
4344
4345 #################################################
4346 # check for a NISPLUS_HOME support
4347 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4348 AC_ARG_WITH(nisplus-home,
4349 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4350 [ case "$withval" in
4351   yes)
4352     AC_MSG_RESULT(yes)
4353     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4354     ;;
4355   *)
4356     AC_MSG_RESULT(no)
4357     ;;
4358   esac ],
4359   AC_MSG_RESULT(no)
4360 )
4361
4362 #################################################
4363 # check for syslog logging
4364 AC_MSG_CHECKING(whether to use syslog logging)
4365 AC_ARG_WITH(syslog,
4366 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4367 [ case "$withval" in
4368   yes)
4369     AC_MSG_RESULT(yes)
4370     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4371     ;;
4372   *)
4373     AC_MSG_RESULT(no)
4374     ;;
4375   esac ],
4376   AC_MSG_RESULT(no)
4377 )
4378
4379 #################################################
4380 # check for experimental disk-quotas support
4381
4382 samba_cv_WITH_QUOTAS=auto
4383 samba_cv_TRY_QUOTAS=no
4384 samba_cv_RUN_QUOTA_TESTS=auto
4385 samba_cv_WITH_SYS_QUOTAS=auto
4386 samba_cv_TRY_SYS_QUOTAS=auto
4387 samba_cv_SYSQUOTA_FOUND=no
4388
4389 AC_MSG_CHECKING(whether to try disk-quotas support)
4390 AC_ARG_WITH(quotas,
4391 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4392 [ case "$withval" in
4393   yes)
4394     AC_MSG_RESULT(yes)
4395     samba_cv_WITH_QUOTAS=yes
4396     samba_cv_TRY_QUOTAS=yes
4397     samba_cv_RUN_QUOTA_TESTS=yes
4398     #set sys quotas to auto in this case
4399     samba_cv_TRY_SYS_QUOTAS=auto
4400     ;;
4401   auto)
4402     AC_MSG_RESULT(auto)
4403     samba_cv_WITH_QUOTAS=auto
4404     samba_cv_TRY_QUOTAS=auto
4405     samba_cv_RUN_QUOTA_TESTS=auto
4406     #set sys quotas to auto in this case
4407     samba_cv_TRY_SYS_QUOTAS=auto
4408     ;;
4409   no)
4410     AC_MSG_RESULT(no)
4411     samba_cv_WITH_QUOTAS=no
4412     samba_cv_TRY_QUOTAS=no
4413     samba_cv_RUN_QUOTA_TESTS=no
4414     ;;
4415   *)
4416     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4417     ;;
4418   esac ],
4419   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4420 )
4421
4422 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4423 AC_ARG_WITH(sys-quotas,
4424 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4425 [ case "$withval" in
4426   yes)
4427     AC_MSG_RESULT(yes)
4428     samba_cv_WITH_SYS_QUOTAS=yes
4429     samba_cv_TRY_SYS_QUOTAS=yes
4430     samba_cv_RUN_QUOTA_TESTS=yes
4431     ;;
4432   auto)
4433     AC_MSG_RESULT(auto)
4434     samba_cv_WITH_SYS_QUOTAS=auto
4435     samba_cv_TRY_SYS_QUOTAS=auto
4436     samba_cv_RUN_QUOTA_TESTS=auto
4437     ;;
4438   no)
4439     AC_MSG_RESULT(no)
4440     samba_cv_WITH_SYS_QUOTAS=no
4441     samba_cv_TRY_SYS_QUOTAS=no
4442     ;;
4443   *)
4444     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4445     ;;
4446   esac ],
4447   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4448 )
4449
4450 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4451 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4452   case "$host_os" in
4453         *linux*)
4454             AC_MSG_RESULT(yes)
4455             samba_cv_TRY_SYS_QUOTAS=yes
4456             samba_cv_RUN_QUOTA_TESTS=yes
4457             ;;
4458         *)
4459             AC_MSG_RESULT(no)
4460             samba_cv_TRY_SYS_QUOTAS=no
4461             ;;
4462   esac
4463 fi
4464
4465 #############################################
4466 # only check for quota stuff if --with-quotas
4467 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4468
4469 case "$host_os" in
4470         # on linux we didn't need to test we have builtin support
4471         *linux*)
4472             samba_cv_SYSQUOTA_FOUND=yes
4473             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4474             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4475             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4476             AC_MSG_RESULT(yes)
4477
4478             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4479             samba_cv_found_xfs_header=yes
4480             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4481             AC_MSG_RESULT(yes)
4482             ;;
4483         *solaris*)
4484             # need to set this define when using static linking (BUG 1473)
4485             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4486             ;;
4487         *)
4488             ;;
4489 esac
4490
4491 # some broken header files need this
4492 AC_CHECK_HEADER(asm/types.h,[
4493             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4494             AC_ADD_INCLUDE(<asm/types.h>)
4495             ])
4496
4497 # For quotas on Veritas VxFS filesystems
4498 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4499
4500 # For quotas on Linux XFS filesystems
4501 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4502
4503 # For sys/quota.h and linux/quota.h
4504 AC_CHECK_HEADERS(sys/quota.h)
4505
4506 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4507 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4508 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4509 AC_TRY_COMPILE([
4510 #include "confdefs.h"
4511 #ifdef HAVE_SYS_TYPES_H
4512 #include <sys/types.h>
4513 #endif
4514 #ifdef HAVE_ASM_TYPES_H
4515 #include <asm/types.h>
4516 #endif
4517 #include <sys/quota.h>
4518 ],[int i = Q_XGETQUOTA;],
4519 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4520 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4521         samba_cv_found_xfs_header=yes
4522 fi
4523 fi
4524
4525 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4526 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4527 AC_TRY_COMPILE([
4528 #include "confdefs.h"
4529 #ifdef HAVE_SYS_QUOTA_H
4530 #include <sys/quota.h>
4531 #endif
4532 ],[
4533 struct dqblk D;
4534 D.dqb_fsoftlimit = 0;],
4535 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4536 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4537         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4538 fi
4539
4540 ##################
4541 # look for a working quota system
4542
4543 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4544 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4545 AC_TRY_RUN_STRICT([
4546 #define HAVE_QUOTACTL_4A 1
4547 #define AUTOCONF_TEST 1
4548 #include "confdefs.h"
4549 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4550            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4551 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4552     samba_cv_SYSQUOTA_FOUND=yes;
4553     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4554     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4555 fi
4556 fi
4557
4558 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4559 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4560 AC_TRY_RUN_STRICT([
4561 #define HAVE_QUOTACTL_4B 1
4562 #define AUTOCONF_TEST 1
4563 #include "confdefs.h"
4564 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4565            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4566 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4567     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4568     samba_cv_SYSQUOTA_FOUND=yes;
4569     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4570     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4571 fi
4572 fi
4573
4574 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4575 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4576 AC_TRY_RUN_STRICT([
4577 #define HAVE_QUOTACTL_3 1
4578 #define AUTOCONF_TEST 1
4579 #include "confdefs.h"
4580 #include "${srcdir-.}/tests/sysquotas.c"],[$Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4581            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4582 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4583     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4584     samba_cv_SYSQUOTA_FOUND=yes;
4585     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4586     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4587 fi
4588 fi
4589
4590 #################################################
4591 # check for mntent.h and struct mntent
4592 AC_CHECK_HEADERS(mntent.h)
4593 #################################################
4594 # check for setmntent,getmntent,endmntent
4595 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4596
4597 #################################################
4598 # check for devnm.h and struct mntent
4599 AC_CHECK_HEADERS(devnm.h)
4600 #################################################
4601 # check for devnm
4602 AC_CHECK_FUNCS(devnm)
4603
4604 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4605     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4606         # if --with-sys-quotas=yes then build it
4607         # you have can use the get/set quota command smb.conf
4608         # options then
4609         samba_cv_SYSQUOTA_FOUND=auto
4610     fi
4611     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4612         # if --with-sys-quotas=yes then build it
4613         # you have can use the get/set quota command smb.conf
4614         # options then
4615         samba_cv_TRY_SYS_QUOTAS=auto
4616     fi
4617 fi
4618
4619 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4620 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4621 SAVE_CPPFLAGS="$CPPFLAGS"
4622 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4623 AC_TRY_COMPILE([
4624 #include "confdefs.h"
4625 #define NO_PROTO_H 1
4626 #define NO_CONFIG_H 1
4627 #define HAVE_SYS_QUOTAS 1
4628 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4629 #include "${srcdir-.}/lib/sysquotas.c"
4630 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4631 CPPFLAGS="$SAVE_CPPFLAGS"
4632 ])
4633 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4634 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4635     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4636         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4637         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4638         samba_cv_WE_USE_SYS_QUOTAS=yes
4639         AC_MSG_RESULT(yes)
4640     else
4641         AC_MSG_RESULT(no)
4642     fi
4643 fi
4644 fi
4645
4646 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4647 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4648 SAVE_CPPFLAGS="$CPPFLAGS"
4649 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4650 AC_TRY_COMPILE([
4651 #include "confdefs.h"
4652 #define NO_PROTO_H 1
4653 #define NO_CONFIG_H 1
4654 #define HAVE_SYS_QUOTAS 1
4655 #define HAVE_XFS_QUOTAS 1
4656 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4657 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4658 CPPFLAGS="$SAVE_CPPFLAGS"
4659 ])
4660 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4661     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4662         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4663     fi
4664 fi
4665 fi
4666
4667 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4668 SAVE_CPPFLAGS="$CPPFLAGS"
4669 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4670 AC_TRY_COMPILE([
4671 #include "confdefs.h"
4672 #define NO_PROTO_H 1
4673 #define NO_CONFIG_H 1
4674 #include "${srcdir-.}/smbd/quotas.c"
4675 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4676 CPPFLAGS="$SAVE_CPPFLAGS"
4677 ])
4678 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4679 AC_MSG_CHECKING(whether to use the old quota support)
4680     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4681       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4682         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4683         AC_MSG_RESULT(yes)
4684       else
4685         AC_MSG_RESULT(no)
4686       fi
4687     else
4688       AC_MSG_RESULT(no)
4689     fi
4690 fi
4691
4692 ####################
4693 # End of quota check samba_cv_RUN_QUOTA_TESTS
4694 fi
4695
4696 #################################################
4697 # check for experimental utmp accounting
4698
4699 AC_MSG_CHECKING(whether to support utmp accounting)
4700 WITH_UTMP=yes
4701 AC_ARG_WITH(utmp,
4702 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4703 [ case "$withval" in
4704   no)
4705                 WITH_UTMP=no
4706                 ;;
4707   *)
4708                 WITH_UTMP=yes
4709                 ;;
4710   esac ],
4711 )
4712
4713 # utmp requires utmp.h
4714 # Note similar check earlier, when checking utmp details.
4715
4716 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4717         utmp_no_reason=", no utmp.h on $host_os"
4718         WITH_UTMP=no
4719 fi
4720
4721 # Display test results
4722
4723 if test x"$WITH_UTMP" = x"yes"; then
4724         AC_MSG_RESULT(yes)
4725         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4726 else
4727         AC_MSG_RESULT(no$utmp_no_reason)
4728 fi
4729
4730 INSTALLLIBCMD_SH=:
4731 INSTALLLIBCMD_A=:
4732 UNINSTALLLIBCMD_SH=:
4733 UNINSTALLLIBCMD_A=:
4734
4735 if test $BLDSHARED = true; then
4736         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
4737         UNINSTALLLIBCMD_SH="rm -f"
4738 fi
4739 if test $enable_static = yes; then
4740         INSTALLLIBCMD_A="\$(INSTALLCMD)"
4741         UNINSTALLLIBCMD_A="rm -f"
4742 fi
4743
4744 #################################################
4745 # --disable-shared-libs
4746 # can be used to disable the internal use of shared libs altogether
4747 # (this only has an effect when building shared libs is enabled)
4748 #
4749 USESHARED=false
4750 AC_SUBST(USESHARED)
4751
4752 AC_MSG_CHECKING(whether to use shared libraries internally)
4753 AC_ARG_ENABLE([shared-libs],
4754         AS_HELP_STRING([--enable-shared-libs],
4755                 [Use shared libraries internally (default=yes)]),
4756         [enable_shared_libs=$enableval],
4757         [enable_shared_libs=yes])
4758
4759 if test x"$enable_shared_libs" != x"no" ; then
4760         USESHARED=$BLDSHARED
4761 fi
4762
4763 AC_MSG_RESULT([$USESHARED])
4764
4765 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
4766         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
4767 fi
4768
4769 #################################################
4770 # --with-static-libs=LIBS:
4771 #   link (internal) libs dynamically or statically?
4772 #
4773 # If a subsystem is built as a library then this controls whether they are
4774 # linked into Samba targets statically or dynamically:
4775 #
4776 # * If we build the shared library at all, we link dynamically by default.
4777 #
4778 # * We only link statically if we don't build shared or if the library
4779 #   appears in the --with-static-libs configure option.
4780 #
4781 # Example:
4782 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
4783 #   of linking the dynamic variant with -ltalloc.
4784 #
4785 # NOTE: This option only affects libraries that we do not only build
4786 # but that samba also links against as libraries (as opposed to linking
4787 # the plain object files. - This has to be configured in Makefile.in.
4788 # So in particular it does not harm to give invalid or unknown names here.
4789 #
4790
4791 AC_ARG_WITH([static-libs],
4792         [AS_HELP_STRING([--with-static-libs=LIBS],
4793                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
4794         [AS_IF([test $withval],
4795                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
4796                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
4797                         eval LINK_$lib=STATIC
4798                 done], [])],
4799         [])
4800
4801 #
4802 # WORKAROUND:
4803 #   until we have organized other internal subsystems (as util, registry
4804 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
4805 #   dynamically to samba programs.
4806 #
4807 LINK_LIBNETAPI=STATIC
4808
4809 LINK_LIBSMBCLIENT=STATIC
4810
4811 #
4812 #  The library versions are hardcoded here
4813 #  and filled into the LIBFOO_SOVER variable.
4814 #
4815 #  TODO: for talloc and tdb (at least), these should
4816 #  be extracted from their respective source directories
4817 #
4818 SMB_LIBRARY(talloc, 1)
4819 SMB_LIBRARY(tdb, 1)
4820 SMB_LIBRARY(netapi, 0)
4821 SMB_LIBRARY(smbclient, 0)
4822 SMB_LIBRARY(smbsharemodes, 0)
4823 SMB_LIBRARY(addns, 0, no, [undefined API])
4824
4825
4826
4827 #################################################
4828 # these tests are taken from the GNU fileutils package
4829 AC_CHECKING(how to get filesystem space usage)
4830 space=no
4831
4832 # Test for statvfs64.
4833 if test $space = no; then
4834   # SVR4
4835   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4836   [AC_TRY_RUN([
4837 #if defined(HAVE_UNISTD_H)
4838 #include <unistd.h>
4839 #endif
4840 #include <sys/types.h>
4841 #include <sys/statvfs.h>
4842   main ()
4843   {
4844     struct statvfs64 fsd;
4845     exit (statvfs64 (".", &fsd));
4846   }],
4847   fu_cv_sys_stat_statvfs64=yes,
4848   fu_cv_sys_stat_statvfs64=no,
4849   fu_cv_sys_stat_statvfs64=cross)])
4850   if test $fu_cv_sys_stat_statvfs64 = yes; then
4851     space=yes
4852     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4853   fi
4854 fi
4855
4856 # Perform only the link test since it seems there are no variants of the
4857 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4858 # because that got a false positive on SCO OSR5.  Adding the declaration
4859 # of a `struct statvfs' causes this test to fail (as it should) on such
4860 # systems.  That system is reported to work fine with STAT_STATFS4 which
4861 # is what it gets when this test fails.
4862 if test $space = no; then
4863   # SVR4
4864   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4865                  [AC_TRY_LINK([#include <sys/types.h>
4866 #include <sys/statvfs.h>],
4867                               [struct statvfs fsd; statvfs (0, &fsd);],
4868                               fu_cv_sys_stat_statvfs=yes,
4869                               fu_cv_sys_stat_statvfs=no)])
4870   if test $fu_cv_sys_stat_statvfs = yes; then
4871     space=yes
4872     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4873   fi
4874 fi
4875
4876 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4877 # This is not the case on ancient Linux systems.
4878
4879 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4880     AC_TRY_COMPILE([#include <sys/types.h>
4881 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
4882         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
4883 if test x"$samba_cv_fsid_int" = x"yes"; then
4884     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
4885 fi
4886
4887 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
4888 # systems use f_bsize.
4889 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
4890     AC_TRY_COMPILE([#include <sys/types.h>
4891 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
4892         samba_cv_frsize=yes,samba_cv_frsize=no)])
4893 if test x"$samba_cv_frsize" = x"yes"; then
4894     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
4895 fi
4896
4897 if test $space = no; then
4898   # DEC Alpha running OSF/1
4899   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
4900   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
4901   [AC_TRY_RUN([
4902 #include <sys/param.h>
4903 #include <sys/types.h>
4904 #include <sys/mount.h>
4905   main ()
4906   {
4907     struct statfs fsd;
4908     fsd.f_fsize = 0;
4909     exit (statfs (".", &fsd, sizeof (struct statfs)));
4910   }],
4911   fu_cv_sys_stat_statfs3_osf1=yes,
4912   fu_cv_sys_stat_statfs3_osf1=no,
4913   fu_cv_sys_stat_statfs3_osf1=no)])
4914   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
4915   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
4916     space=yes
4917     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
4918   fi
4919 fi
4920
4921 if test $space = no; then
4922 # AIX
4923   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
4924 member (AIX, 4.3BSD)])
4925   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
4926   [AC_TRY_RUN([
4927 #ifdef HAVE_SYS_PARAM_H
4928 #include <sys/param.h>
4929 #endif
4930 #ifdef HAVE_SYS_MOUNT_H
4931 #include <sys/mount.h>
4932 #endif
4933 #ifdef HAVE_SYS_VFS_H
4934 #include <sys/vfs.h>
4935 #endif
4936   main ()
4937   {
4938   struct statfs fsd;
4939   fsd.f_bsize = 0;
4940   exit (statfs (".", &fsd));
4941   }],
4942   fu_cv_sys_stat_statfs2_bsize=yes,
4943   fu_cv_sys_stat_statfs2_bsize=no,
4944   fu_cv_sys_stat_statfs2_bsize=no)])
4945   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
4946   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
4947     space=yes
4948     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
4949   fi
4950 fi
4951
4952 if test $space = no; then
4953 # SVR3
4954   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
4955   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
4956   [AC_TRY_RUN([#include <sys/types.h>
4957 #include <sys/statfs.h>
4958   main ()
4959   {
4960   struct statfs fsd;
4961   exit (statfs (".", &fsd, sizeof fsd, 0));
4962   }],
4963     fu_cv_sys_stat_statfs4=yes,
4964     fu_cv_sys_stat_statfs4=no,
4965     fu_cv_sys_stat_statfs4=no)])
4966   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
4967   if test $fu_cv_sys_stat_statfs4 = yes; then
4968     space=yes
4969     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
4970   fi
4971 fi
4972
4973 if test $space = no; then
4974 # 4.4BSD and NetBSD
4975   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
4976 member (4.4BSD and NetBSD)])
4977   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
4978   [AC_TRY_RUN([#include <sys/types.h>
4979 #ifdef HAVE_SYS_PARAM_H
4980 #include <sys/param.h>
4981 #endif
4982 #ifdef HAVE_SYS_MOUNT_H
4983 #include <sys/mount.h>
4984 #endif
4985   main ()
4986   {
4987   struct statfs fsd;
4988   fsd.f_fsize = 0;
4989   exit (statfs (".", &fsd));
4990   }],
4991   fu_cv_sys_stat_statfs2_fsize=yes,
4992   fu_cv_sys_stat_statfs2_fsize=no,
4993   fu_cv_sys_stat_statfs2_fsize=no)])
4994   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
4995   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
4996     space=yes
4997         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
4998   fi
4999 fi
5000
5001 if test $space = no; then
5002   # Ultrix
5003   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5004   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5005   [AC_TRY_RUN([#include <sys/types.h>
5006 #ifdef HAVE_SYS_PARAM_H
5007 #include <sys/param.h>
5008 #endif
5009 #ifdef HAVE_SYS_MOUNT_H
5010 #include <sys/mount.h>
5011 #endif
5012 #ifdef HAVE_SYS_FS_TYPES_H
5013 #include <sys/fs_types.h>
5014 #endif
5015   main ()
5016   {
5017   struct fs_data fsd;
5018   /* Ultrix's statfs returns 1 for success,
5019      0 for not mounted, -1 for failure.  */
5020   exit (statfs (".", &fsd) != 1);
5021   }],
5022   fu_cv_sys_stat_fs_data=yes,
5023   fu_cv_sys_stat_fs_data=no,
5024   fu_cv_sys_stat_fs_data=no)])
5025   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5026   if test $fu_cv_sys_stat_fs_data = yes; then
5027     space=yes
5028     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5029   fi
5030 fi
5031
5032 #
5033 # As a gating factor for large file support, in order to
5034 # use <4GB files we must have the following minimal support
5035 # available.
5036 # long long, and a 64 bit off_t or off64_t.
5037 # If we don't have all of these then disable large
5038 # file support.
5039 #
5040 AC_MSG_CHECKING([if large file support can be enabled])
5041 AC_TRY_COMPILE([
5042 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5043 #include <sys/types.h>
5044 #else
5045 __COMPILE_ERROR_
5046 #endif
5047 ],
5048 [int i],
5049 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5050 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5051         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5052 fi
5053 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5054
5055 #################################################
5056 # check for cluster extensions
5057
5058 AC_MSG_CHECKING(whether to include cluster support)
5059 AC_ARG_WITH(cluster-support,
5060 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=no)])])
5061 if test "x$with_cluster_support" = "xyes"; then
5062     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5063     AC_MSG_RESULT(yes)
5064 else
5065     AC_MSG_RESULT(no)
5066 fi
5067
5068
5069 #################################################
5070 # check for ACL support
5071
5072 AC_MSG_CHECKING(whether to support ACLs)
5073 AC_ARG_WITH(acl-support,
5074 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5075 [ case "$withval" in
5076         yes|no)
5077                 with_acl_support="$withval"
5078                 ;;
5079   esac ])
5080
5081 if test x"$with_acl_support" = x ; then
5082         with_acl_support="auto"
5083 fi
5084
5085 AC_MSG_RESULT($with_acl_support)
5086
5087 if test x"$with_acl_support" = x"no"; then
5088         AC_MSG_RESULT(Disabling ACL support)
5089         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5090 else
5091         AC_MSG_NOTICE(checking whether ACL support is available:)
5092         case "$host_os" in
5093         *sysv5*)
5094                 AC_MSG_NOTICE(Using UnixWare ACLs)
5095                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5096                 default_static_modules="$default_static_modules vfs_solarisacl"
5097                 ;;
5098         *solaris*)
5099                 AC_MSG_NOTICE(Using solaris ACLs)
5100                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5101                 ACL_LIBS="$ACL_LIBS -lsec"
5102                 default_static_modules="$default_static_modules vfs_solarisacl"
5103                 ;;
5104         *hpux*)
5105                 AC_MSG_NOTICE(Using HPUX ACLs)
5106                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5107                 default_static_modules="$default_static_modules vfs_hpuxacl"
5108                 ;;
5109         *irix*)
5110                 AC_MSG_NOTICE(Using IRIX ACLs)
5111                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5112                 default_static_modules="$default_static_modules vfs_irixacl"
5113                 ;;
5114         *aix*)
5115                 AC_MSG_NOTICE(Using AIX ACLs)
5116                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5117                 default_static_modules="$default_static_modules vfs_aixacl"
5118                 ;;
5119         *osf*)
5120                 AC_MSG_NOTICE(Using Tru64 ACLs)
5121                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5122                 ACL_LIBS="$ACL_LIBS -lpacl"
5123                 default_static_modules="$default_static_modules vfs_tru64acl"
5124                 ;;
5125         *darwin*)
5126                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5127                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5128                 ;;
5129         *)
5130                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5131                 case "$host_os" in
5132                 *linux*)
5133                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5134                         ;;
5135                 esac
5136                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5137                         acl_LIBS=$LIBS
5138                         LIBS="$LIBS $ACL_LIBS"
5139                         AC_TRY_LINK([
5140                                 #include <sys/types.h>
5141                                 #include <sys/acl.h>
5142                         ],[
5143                                 acl_t acl;
5144                                 int entry_id;
5145                                 acl_entry_t *entry_p;
5146                                 return acl_get_entry(acl, entry_id, entry_p);
5147                         ],
5148                         [samba_cv_HAVE_POSIX_ACLS=yes],
5149                         [samba_cv_HAVE_POSIX_ACLS=no])
5150                         LIBS=$acl_LIBS
5151                 ])
5152                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5153                         AC_MSG_NOTICE(Using posix ACLs)
5154                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5155                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5156                                 acl_LIBS=$LIBS
5157                                 LIBS="$LIBS $ACL_LIBS"
5158                                 AC_TRY_LINK([
5159                                         #include <sys/types.h>
5160                                         #include <sys/acl.h>
5161                                 ],[
5162                                         acl_permset_t permset_d;
5163                                         acl_perm_t perm;
5164                                         return acl_get_perm_np(permset_d, perm);
5165                                 ],
5166                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5167                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5168                                 LIBS=$acl_LIBS
5169                         ])
5170                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5171                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5172                         fi
5173                         default_static_modules="$default_static_modules vfs_posixacl"
5174                 else
5175                         AC_MSG_NOTICE(ACL support is not avaliable)
5176                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5177                 fi
5178                 ;;
5179         esac
5180 fi # with_acl_support
5181
5182
5183
5184 #################################################
5185 # check for AIO support
5186
5187 AC_MSG_CHECKING(whether to support asynchronous io)
5188 AC_ARG_WITH(aio-support,
5189 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5190 [ case "$withval" in
5191   yes)
5192
5193         AC_MSG_RESULT(yes)
5194         case "$host_os" in
5195         *)
5196                 AIO_LIBS=$LIBS
5197                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5198                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5199                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5200                 aio_LIBS=$LIBS
5201                 LIBS=$AIO_LIBS
5202                 AC_TRY_LINK([#include <sys/types.h>
5203 #include <aio.h>],
5204 [ struct aiocb a; return aio_read(&a);],
5205 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5206                 LIBS=$aio_LIBS])
5207                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5208                 aio_LIBS=$LIBS
5209                 LIBS=$AIO_LIBS
5210                 AC_TRY_LINK([#include <sys/types.h>
5211 #include <aio.h>],
5212 [ struct aiocb64 a; return aio_read64(&a);],
5213 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5214                 LIBS=$aio_LIBS])
5215                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5216                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5217                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5218                         LIBS=$AIO_LIBS
5219                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5220                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5221                         LIBS=$AIO_LIBS
5222                 fi
5223
5224                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5225                         AC_MSG_CHECKING(for aio_read)
5226                         AC_LINK_IFELSE([#include <aio.h>
5227 int main() { struct aiocb a; return aio_read(&a); }],
5228 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5229 [AC_MSG_RESULT(no)])
5230
5231                         AC_MSG_CHECKING(for aio_write)
5232                         AC_LINK_IFELSE([#include <aio.h>
5233 int main() { struct aiocb a; return aio_write(&a); }],
5234 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5235 [AC_MSG_RESULT(no)])
5236
5237                         AC_MSG_CHECKING(for aio_fsync)
5238                         AC_LINK_IFELSE([#include <aio.h>
5239 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5240 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5241 [AC_MSG_RESULT(no)])
5242
5243                         AC_MSG_CHECKING(for aio_return)
5244                         AC_LINK_IFELSE([#include <aio.h>
5245 int main() { struct aiocb a; return aio_return(&a); }],
5246 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5247 [AC_MSG_RESULT(no)])
5248
5249                         AC_MSG_CHECKING(for aio_error)
5250                         AC_LINK_IFELSE([#include <aio.h>
5251 int main() { struct aiocb a; return aio_error(&a); }],
5252 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5253 [AC_MSG_RESULT(no)])
5254
5255                         AC_MSG_CHECKING(for aio_cancel)
5256                         AC_LINK_IFELSE([#include <aio.h>
5257 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5258 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5259 [AC_MSG_RESULT(no)])
5260
5261                         AC_MSG_CHECKING(for aio_suspend)
5262                         AC_LINK_IFELSE([#include <aio.h>
5263 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5264 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5265 [AC_MSG_RESULT(no)])
5266                 fi
5267
5268                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5269                         AC_MSG_CHECKING(for aio_read64)
5270                         AC_LINK_IFELSE([#include <aio.h>
5271 int main() { struct aiocb a; return aio_read64(&a); }],
5272 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5273 [AC_MSG_RESULT(no)])
5274
5275                         AC_MSG_CHECKING(for aio_write64)
5276                         AC_LINK_IFELSE([#include <aio.h>
5277 int main() { struct aiocb a; return aio_write64(&a); }],
5278 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5279 [AC_MSG_RESULT(no)])
5280
5281                         AC_MSG_CHECKING(for aio_fsync64)
5282                         AC_LINK_IFELSE([#include <aio.h>
5283 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5284 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5285 [AC_MSG_RESULT(no)])
5286
5287                         AC_MSG_CHECKING(for aio_return64)
5288                         AC_LINK_IFELSE([#include <aio.h>
5289 int main() { struct aiocb a; return aio_return64(&a); }],
5290 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5291 [AC_MSG_RESULT(no)])
5292
5293                         AC_MSG_CHECKING(for aio_error64)
5294                         AC_LINK_IFELSE([#include <aio.h>
5295 int main() { struct aiocb a; return aio_error64(&a); }],
5296 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5297 [AC_MSG_RESULT(no)])
5298
5299                         AC_MSG_CHECKING(for aio_cancel64)
5300                         AC_LINK_IFELSE([#include <aio.h>
5301 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5302 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5303 [AC_MSG_RESULT(no)])
5304
5305                         AC_MSG_CHECKING(for aio_suspend64)
5306                         AC_LINK_IFELSE([#include <aio.h>
5307 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5308 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5309 [AC_MSG_RESULT(no)])
5310                 fi
5311             ;;
5312         esac
5313         ;;
5314   *)
5315     AC_MSG_RESULT(no)
5316     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5317     ;;
5318   esac ],
5319   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5320   AC_MSG_RESULT(no)
5321 )
5322
5323 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5324         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5325                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5326                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5327         fi
5328 fi
5329
5330 #################################################
5331 # check for sendfile support
5332
5333 with_sendfile_support=yes
5334 AC_MSG_CHECKING(whether to check to support sendfile)
5335 AC_ARG_WITH(sendfile-support,
5336 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5337 [ case "$withval" in
5338   yes)
5339
5340         AC_MSG_RESULT(yes);
5341
5342         case "$host_os" in
5343         *linux*)
5344                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5345                 AC_TRY_LINK([#include <sys/sendfile.h>],
5346 [\
5347 int tofd, fromfd;
5348 off64_t offset;
5349 size_t total;
5350 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5351 ],
5352 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5353
5354                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5355                 AC_TRY_LINK([#include <sys/sendfile.h>],
5356 [\
5357 int tofd, fromfd;
5358 off_t offset;
5359 size_t total;
5360 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5361 ],
5362 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5363
5364 # Try and cope with broken Linux sendfile....
5365                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5366                 AC_TRY_LINK([\
5367 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5368 #undef _FILE_OFFSET_BITS
5369 #endif
5370 #include <sys/sendfile.h>],
5371 [\
5372 int tofd, fromfd;
5373 off_t offset;
5374 size_t total;
5375 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5376 ],
5377 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5378
5379         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5380                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5381                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5382                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5383         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5384                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5385                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5386                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5387         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5388                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5389                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5390         else
5391                 AC_MSG_RESULT(no);
5392         fi
5393
5394         ;;
5395         *freebsd* | *dragonfly* )
5396                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5397                 AC_TRY_LINK([\
5398 #include <sys/types.h>
5399 #include <unistd.h>
5400 #include <sys/socket.h>
5401 #include <sys/uio.h>],
5402 [\
5403         int fromfd, tofd, ret, total=0;
5404         off_t offset, nwritten;
5405         struct sf_hdtr hdr;
5406         struct iovec hdtrl;
5407         hdr.headers = &hdtrl;
5408         hdr.hdr_cnt = 1;
5409         hdr.trailers = NULL;
5410         hdr.trl_cnt = 0;
5411         hdtrl.iov_base = NULL;
5412         hdtrl.iov_len = 0;
5413         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5414 ],
5415 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5416
5417         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5418                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5419                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5420                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5421         else
5422                 AC_MSG_RESULT(no);
5423         fi
5424         ;;
5425
5426         *hpux*)
5427                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5428                 AC_TRY_LINK([\
5429 #include <sys/socket.h>
5430 #include <sys/uio.h>],
5431 [\
5432         int fromfd, tofd;
5433         size_t total=0;
5434         struct iovec hdtrl[2];
5435         ssize_t nwritten;
5436         off64_t offset;
5437
5438         hdtrl[0].iov_base = 0;
5439         hdtrl[0].iov_len = 0;
5440
5441         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5442 ],
5443 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5444         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5445                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5446                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5447                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5448         else
5449                 AC_MSG_RESULT(no);
5450         fi
5451
5452                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5453                 AC_TRY_LINK([\
5454 #include <sys/socket.h>
5455 #include <sys/uio.h>],
5456 [\
5457         int fromfd, tofd;
5458         size_t total=0;
5459         struct iovec hdtrl[2];
5460         ssize_t nwritten;
5461         off_t offset;
5462
5463         hdtrl[0].iov_base = 0;
5464         hdtrl[0].iov_len = 0;
5465
5466         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5467 ],
5468 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5469         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5470                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5471                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5472                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5473         else
5474                 AC_MSG_RESULT(no);
5475         fi
5476         ;;
5477
5478         *solaris*)
5479                 AC_CHECK_LIB(sendfile,sendfilev)
5480                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5481                 AC_TRY_LINK([\
5482 #include <sys/sendfile.h>],
5483 [\
5484         int sfvcnt;
5485         size_t xferred;
5486         struct sendfilevec vec[2];
5487         ssize_t nwritten;
5488         int tofd;
5489
5490         sfvcnt = 2;
5491
5492         vec[0].sfv_fd = SFV_FD_SELF;
5493         vec[0].sfv_flag = 0;
5494         vec[0].sfv_off = 0;
5495         vec[0].sfv_len = 0;
5496
5497         vec[1].sfv_fd = 0;
5498         vec[1].sfv_flag = 0;
5499         vec[1].sfv_off = 0;
5500         vec[1].sfv_len = 0;
5501         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5502 ],
5503 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5504
5505         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5506                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5507                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5508                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5509         else
5510                 AC_MSG_RESULT(no);
5511         fi
5512
5513                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5514                 AC_TRY_LINK([\
5515 #include <sys/sendfile.h>],
5516 [\
5517         int sfvcnt;
5518         size_t xferred;
5519         struct sendfilevec vec[2];
5520         ssize_t nwritten;
5521         int tofd;
5522
5523         sfvcnt = 2;
5524
5525         vec[0].sfv_fd = SFV_FD_SELF;
5526         vec[0].sfv_flag = 0;
5527         vec[0].sfv_off = 0;
5528         vec[0].sfv_len = 0;
5529
5530         vec[1].sfv_fd = 0;
5531         vec[1].sfv_flag = 0;
5532         vec[1].sfv_off = 0;
5533         vec[1].sfv_len = 0;
5534         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5535 ],
5536 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5537
5538         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5539                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5540                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5541                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5542         else
5543                 AC_MSG_RESULT(no);
5544         fi
5545         ;;
5546         *aix*)
5547                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5548                 AC_TRY_LINK([\
5549 #include <sys/socket.h>],
5550 [\
5551         int fromfd, tofd;
5552         size_t total=0;
5553         struct sf_parms hdtrl;
5554         ssize_t nwritten;
5555         off64_t offset;
5556
5557         hdtrl.header_data = 0;
5558         hdtrl.header_length = 0;
5559         hdtrl.file_descriptor = fromfd;
5560         hdtrl.file_offset = 0;
5561         hdtrl.file_bytes = 0;
5562         hdtrl.trailer_data = 0;
5563         hdtrl.trailer_length = 0;
5564
5565         nwritten = send_file(&tofd, &hdtrl, 0);
5566 ],
5567 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5568         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5569                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5570                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5571                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5572         else
5573                 AC_MSG_RESULT(no);
5574         fi
5575         ;;
5576         *)
5577         ;;
5578         esac
5579         ;;
5580   *)
5581     AC_MSG_RESULT(no)
5582     ;;
5583   esac ],
5584   AC_MSG_RESULT(yes)
5585 )
5586
5587 ############################################
5588 # See if we have the Linux readahead syscall.
5589
5590 AC_CACHE_CHECK([for Linux readahead],
5591                 samba_cv_HAVE_LINUX_READAHEAD,[
5592     AC_TRY_LINK([
5593 #if defined(HAVE_UNISTD_H)
5594 #include <unistd.h>
5595 #endif
5596 #include <fcntl.h>],
5597     [ssize_t err = readahead(0,0,0x80000);],
5598     samba_cv_HAVE_LINUX_READAHEAD=yes,
5599     samba_cv_HAVE_LINUX_READAHEAD=no)])
5600
5601 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5602   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5603              [Whether Linux readahead is available])
5604 fi
5605
5606 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5607
5608 ############################################
5609 # See if we have the posix_fadvise syscall.
5610
5611 AC_CACHE_CHECK([for posix_fadvise],
5612                 samba_cv_HAVE_POSIX_FADVISE,[
5613     AC_TRY_LINK([
5614 #if defined(HAVE_UNISTD_H)
5615 #include <unistd.h>
5616 #endif
5617 #include <fcntl.h>],
5618     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5619     samba_cv_HAVE_POSIX_FADVISE=yes,
5620     samba_cv_HAVE_POSIX_FADVISE=no)])
5621
5622 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5623   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5624              [Whether posix_fadvise is available])
5625 fi
5626
5627 ############################################
5628 # See if we have the Linux splice syscall.
5629
5630 AC_CACHE_CHECK([for Linux splice],
5631                 samba_cv_HAVE_LINUX_SPLICE,[
5632     AC_TRY_LINK([
5633 #if defined(HAVE_UNISTD_H)
5634 #include <unistd.h>
5635 #endif
5636 #include <fcntl.h>],
5637     [long ret = splice(0,0,1,0,400,0);],
5638     samba_cv_HAVE_LINUX_SPLICE=yes,
5639     samba_cv_HAVE_LINUX_SPLICE=no)])
5640
5641 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5642   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5643              [Whether Linux splice is available])
5644 fi
5645
5646 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5647
5648
5649 #################################################
5650 # Check whether winbind is supported on this platform.  If so we need to
5651 # build and install client programs, sbin programs and shared libraries
5652
5653 AC_MSG_CHECKING(whether to build winbind)
5654
5655 # Initially, the value of $host_os decides whether winbind is supported
5656
5657 HAVE_WINBIND=yes
5658
5659 # Define the winbind shared library name and any specific linker flags
5660 # it needs to be built with.
5661
5662 WINBIND_NSS="nsswitch/libnss_winbind.$SHLIBEXT"
5663 WINBIND_WINS_NSS="nsswitch/libnss_wins.$SHLIBEXT"
5664 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5665 NSSSONAMEVERSIONSUFFIX=""
5666 WINBIND_NSS_PTHREAD=""
5667
5668 case "$host_os" in
5669         *linux*)
5670                 NSSSONAMEVERSIONSUFFIX=".2"
5671                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_linux.o"
5672                 ;;
5673         *freebsd[[5-9]]*)
5674                 # FreeBSD winbind client is implemented as a wrapper around
5675                 # the Linux version.
5676                 NSSSONAMEVERSIONSUFFIX=".1"
5677                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_freebsd.o \
5678                     nsswitch/winbind_nss_linux.o"
5679                 WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5680                 WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5681                 ;;
5682
5683         *netbsd*[[3-9]]*)
5684                 # NetBSD winbind client is implemented as a wrapper
5685                 # around the Linux version. It needs getpwent_r() to
5686                 # indicate libc's use of the correct nsdispatch API.
5687                 #
5688                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5689                         WINBIND_NSS_EXTRA_OBJS="\
5690                             nsswitch/winbind_nss_netbsd.o \
5691                             nsswitch/winbind_nss_linux.o"
5692                         WINBIND_NSS="nsswitch/nss_winbind.$SHLIBEXT"
5693                         WINBIND_WINS_NSS="nsswitch/nss_wins.$SHLIBEXT"
5694                 else
5695                         HAVE_WINBIND=no
5696                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5697                 fi
5698                 ;;
5699         *irix*)
5700                 # IRIX has differently named shared libraries
5701                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_irix.o"
5702                 WINBIND_NSS="nsswitch/libns_winbind.$SHLIBEXT"
5703                 WINBIND_WINS_NSS="nsswitch/libns_wins.$SHLIBEXT"
5704                 ;;
5705         *solaris*)
5706                 # Solaris winbind client is implemented as a wrapper around
5707                 # the Linux version.
5708                 NSSSONAMEVERSIONSUFFIX=".1"
5709                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o \
5710                     nsswitch/winbind_nss_linux.o"
5711                 WINBIND_NSS_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5712                 PAM_WINBIND_EXTRA_LIBS="${LIBREPLACE_NETWORK_LIBS}"
5713                 ;;
5714         *hpux11*)
5715                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_solaris.o"
5716                 ;;
5717         *aix*)
5718                 # AIX has even differently named shared libraries.  No
5719                 # WINS support has been implemented yet.
5720                 WINBIND_NSS_EXTRA_OBJS="nsswitch/winbind_nss_aix.o"
5721                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
5722                 WINBIND_NSS="nsswitch/WINBIND"
5723                 WINBIND_WINS_NSS=""
5724                 ;;
5725         *)
5726                 HAVE_WINBIND=no
5727                 winbind_no_reason=", unsupported on $host_os"
5728                 ;;
5729 esac
5730
5731 # Check the setting of --with-winbind
5732
5733 AC_ARG_WITH(winbind,
5734 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
5735 [
5736   case "$withval" in
5737         yes)
5738                 HAVE_WINBIND=yes
5739                 ;;
5740         no)
5741                 HAVE_WINBIND=no
5742                 winbind_reason=""
5743                 ;;
5744   esac ],
5745 )
5746
5747 # We need unix domain sockets for winbind
5748
5749 if test x"$HAVE_WINBIND" = x"yes"; then
5750         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
5751                 winbind_no_reason=", no unix domain socket support on $host_os"
5752                 HAVE_WINBIND=no
5753         fi
5754 fi
5755
5756 # Display test results
5757
5758 if test x"$HAVE_WINBIND" = x"no"; then
5759         WINBIND_NSS=""
5760         WINBIND_WINS_NSS=""
5761 fi
5762
5763 if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
5764         BUILD_LIBWBCLIENT_SHARED=no
5765 else
5766         BUILD_LIBWBCLIENT_SHARED=yes
5767 fi
5768
5769 LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
5770 LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
5771 LIBWBCLIENT_SOVER=0
5772 if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
5773         NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
5774         ## Only worry about libwbclient if we have shared library support
5775         ## and winbindd
5776         LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
5777         LIBWBCLIENT=libwbclient
5778         INSTALL_LIBWBCLIENT=installlibwbclient
5779         UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
5780         WINBIND_LIBS="-lwbclient"
5781 else
5782         LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
5783 fi
5784
5785 if test x"$HAVE_WINBIND" = x"yes"; then
5786         AC_MSG_RESULT(yes)
5787         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
5788
5789         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
5790         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
5791         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
5792                 PAM_MODULES="$PAM_MODULES pam_winbind"
5793                 INSTALL_PAM_MODULES="installpammodules"
5794                 UNINSTALL_PAM_MODULES="uninstallpammodules"
5795         fi
5796 else
5797         AC_MSG_RESULT(no$winbind_no_reason)
5798 fi
5799
5800 AC_CHECK_LIB(pthread, pthread_mutex_lock, [WINBIND_NSS_PTHREAD="-lpthread"
5801                         AC_DEFINE(HAVE_PTHREAD, 1, [whether pthread exists])])
5802
5803 AC_SUBST(WINBIND_NSS_PTHREAD)
5804 AC_SUBST(WINBIND_NSS)
5805 AC_SUBST(WINBIND_WINS_NSS)
5806 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
5807 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
5808 AC_SUBST(WINBIND_NSS_EXTRA_LIBS)
5809 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
5810 AC_SUBST(PAM_WINBIND_EXTRA_LIBS)
5811
5812 AC_SUBST(WINBIND_KRB5_LOCATOR)
5813
5814 # Solaris 10 does have new member in nss_XbyY_key
5815 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
5816                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
5817                 [#include <nss_dbdefs.h>])
5818
5819 # Solaris has some extra fields in struct passwd that need to be
5820 # initialised otherwise nscd crashes.
5821
5822 AC_CHECK_MEMBER(struct passwd.pw_comment,
5823                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
5824                 [#include <pwd.h>])
5825
5826 AC_CHECK_MEMBER(struct passwd.pw_age,
5827                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
5828                 [#include <pwd.h>])
5829
5830 # AIX 4.3.x and 5.1 do not have as many members in
5831 # struct secmethod_table as AIX 5.2
5832 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
5833        [#include <usersec.h>])
5834 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
5835        [#include <usersec.h>])
5836
5837 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
5838 AC_TRY_COMPILE([#include <sys/types.h>
5839 #include <sys/socket.h>],
5840 [struct ucred cred;
5841  socklen_t cred_len;
5842  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
5843 ],
5844 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
5845 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
5846     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
5847 fi
5848
5849
5850 #################################################
5851 # Check to see if we should use the included popt
5852
5853 AC_ARG_WITH(included-popt,
5854 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
5855 [
5856   case "$withval" in
5857         yes)
5858                 INCLUDED_POPT=yes
5859                 ;;
5860         no)
5861                 INCLUDED_POPT=no
5862                 ;;
5863   esac ],
5864 )
5865 if test x"$INCLUDED_POPT" != x"yes"; then
5866     AC_CHECK_LIB(popt, poptGetContext,
5867                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
5868 fi
5869
5870 AC_MSG_CHECKING(whether to use included popt)
5871 if test x"$INCLUDED_POPT" = x"yes"; then
5872     AC_MSG_RESULT(yes)
5873     BUILD_POPT='$(POPT_OBJ)'
5874     POPTLIBS='$(POPT_OBJ)'
5875     FLAGS1="-I\$(srcdir)/popt"
5876 else
5877     AC_MSG_RESULT(no)
5878         BUILD_POPT=""
5879     POPTLIBS="-lpopt"
5880 fi
5881 AC_SUBST(BUILD_POPT)
5882 AC_SUBST(POPTLIBS)
5883 AC_SUBST(FLAGS1)
5884
5885 #################################################
5886 # Check if user wants DNS service discovery support
5887
5888 AC_ARG_ENABLE(dnssd,
5889 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=auto)])])
5890
5891 AC_SUBST(DNSSD_LIBS)
5892 if test x"$enable_dnssd" != x"no"; then
5893     have_dnssd_support=yes
5894
5895     AC_CHECK_HEADERS(dns_sd.h)
5896     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
5897         have_dnssd_support=no
5898     fi
5899
5900     # On Darwin the DNSSD API is in libc, but on other platforms it's
5901     # probably in -ldns_sd
5902     AC_CHECK_FUNCS(DNSServiceRegister)
5903     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
5904     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
5905             x"$ac_cv_lib_ext_DNSServiceRegister" != x"yes"; then
5906         have_dnssd_support=no
5907     fi
5908
5909     if test x"$have_dnssd_support" = x"yes"; then
5910         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
5911                 [Whether to enable DNS service discovery support])
5912     else
5913         if test x"$enable_dnssd" = x"yes"; then
5914             AC_MSG_ERROR(DNS service discovery support not available)
5915         fi
5916     fi
5917
5918 fi
5919
5920 #################################################
5921 # Check to see if we should use the included iniparser
5922
5923 AC_ARG_WITH(included-iniparser,
5924 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
5925 [
5926   case "$withval" in
5927         yes)
5928                 INCLUDED_INIPARSER=yes
5929                 ;;
5930         no)
5931                 INCLUDED_INIPARSER=no
5932                 ;;
5933   esac ],
5934 )
5935 if test x"$INCLUDED_INIPARSER" != x"yes"; then
5936     AC_CHECK_LIB(iniparser, iniparser_load,
5937                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
5938 fi
5939
5940 AC_MSG_CHECKING(whether to use included iniparser)
5941 if test x"$INCLUDED_INIPARSER" = x"yes"; then
5942     AC_MSG_RESULT(yes)
5943     BUILD_INIPARSER='$(INIPARSER_OBJ)'
5944         INIPARSERLIBS=""
5945     FLAGS1="$FLAGS1 -I\$(srcdir)/iniparser/src"
5946 else
5947     AC_MSG_RESULT(no)
5948         BUILD_INIPARSER=""
5949     INIPARSERLIBS="-liniparser"
5950 fi
5951 AC_SUBST(BUILD_INIPARSER)
5952 AC_SUBST(INIPARSERLIBS)
5953 AC_SUBST(FLAGS1)
5954
5955
5956
5957 # Checks for the vfs_fileid module
5958 # Start
5959 AC_CHECK_FUNC(getmntent)
5960
5961 AC_CHECK_HEADERS(sys/statfs.h)
5962
5963 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
5964 AC_CACHE_VAL(vfsfileid_cv_statfs,[
5965              AC_TRY_RUN([
5966                 #include <sys/types.h>
5967                 #include <sys/statfs.h>
5968                 int main(void)
5969                 {
5970                         struct statfs fsd;
5971                         fsid_t fsid = fsd.f_fsid;
5972                         return statfs (".", &fsd);
5973                 }],
5974                 vfsfileid_cv_statfs=yes,
5975                 vfsfileid_cv_statfs=no,
5976                 vfsfileid_cv_statfs=cross)
5977 ])
5978 AC_MSG_RESULT($vfsfileid_cv_statfs)
5979
5980 if test x"$ac_cv_func_getmntent" = x"yes" -a \
5981         x"$vfsfileid_cv_statfs" = x"yes"; then
5982         default_shared_modules="$default_shared_modules vfs_fileid"
5983 fi
5984 # End
5985 # Checks for the vfs_fileid module
5986
5987
5988 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
5989 do
5990         eval MODULE_DEFAULT_$i=STATIC
5991 done
5992
5993 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
5994 do
5995         dnl Fall back to static if we cannot build shared libraries
5996         eval MODULE_DEFAULT_$i=STATIC
5997
5998         if test $BLDSHARED = true; then
5999                 eval MODULE_DEFAULT_$i=SHARED
6000         fi
6001 done
6002
6003 dnl Always build these modules static
6004 MODULE_rpc_spoolss=STATIC
6005 MODULE_rpc_srvsvc=STATIC
6006 MODULE_idmap_tdb=STATIC
6007 MODULE_idmap_passdb=STATIC
6008 MODULE_idmap_nss=STATIC
6009
6010 MODULE_nss_info_template=STATIC
6011
6012 AC_ARG_WITH(static-modules,
6013 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6014 [ if test $withval; then
6015         for i in `echo $withval | sed -e 's/,/ /g'`
6016         do
6017                 eval MODULE_$i=STATIC
6018         done
6019 fi ])
6020
6021 AC_ARG_WITH(shared-modules,
6022 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6023 [ if test $withval; then
6024         for i in `echo $withval | sed -e 's/,/ /g'`
6025         do
6026                         eval MODULE_$i=SHARED
6027         done
6028 fi ])
6029
6030 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6031                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6032 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6033 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6034 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6035
6036
6037 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6038 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6039 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6040 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6041 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6042 SMB_MODULE(rpc_svcctl2, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl2.$SHLIBEXT", RPC)
6043 SMB_MODULE(rpc_ntsvcs2, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs2.$SHLIBEXT", RPC)
6044 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6045 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6046 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6047 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6048 SMB_MODULE(rpc_eventlog2, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog2.$SHLIBEXT", RPC)
6049 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6050 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6051 SMB_SUBSYSTEM(RPC,smbd/server.o)
6052
6053 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6054 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6055 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6056 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6057 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6058 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6059 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6060 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6061 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6062
6063 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6064 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6065
6066 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6067 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6068 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6069 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6070 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6071
6072 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6073 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6074 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6075 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6076 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6077 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6078 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6079 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6080
6081 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6082 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6083 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6084 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6085 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6086 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6087 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6088 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6089 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6090 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6091 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6092 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6093 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6094 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6095 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6096 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6097 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6098 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6099 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6100 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6101 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6102 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6103 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6104 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6105 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6106 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6107 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6108 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6109 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6110 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6111 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6112 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6113 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6114 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6115 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6116 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6117
6118
6119 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6120
6121 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6122 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6123 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6124
6125 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6126
6127 #################################################
6128 # do extra things if we are running insure
6129
6130 if test "${ac_cv_prog_CC}" = "insure"; then
6131         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6132 fi
6133
6134 #################################################
6135 # If run from the build farm, enable NASTY hacks
6136 #################################################
6137 AC_MSG_CHECKING(whether to enable build farm hacks)
6138 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6139         AC_MSG_RESULT(yes)
6140         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6141 else
6142         AC_MSG_RESULT(no)
6143 fi
6144
6145 #################################################
6146 # check for bad librt/libpthread interactions
6147
6148 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6149     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6150     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6151     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6152
6153 SMB_IF_RTSIGNAL_BUG(
6154         [
6155             # Have RT_SIGNAL bug, need to check whether the problem will
6156             # affect anything we have configured.
6157
6158             rt_do_error=no
6159             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6160                 if test x"$rt_signal_lease_ok" = x"no" ; then
6161                     rt_do_error=yes
6162                 fi
6163             fi
6164
6165             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6166                 if test x"$rt_signal_notify_ok" = x"no" ; then
6167                     rt_do_error=yes
6168                 fi
6169             fi
6170
6171             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6172                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6173                 if test x"$rt_signal_aio_ok" = x"no" ; then
6174                     rt_do_error=yes
6175                 fi
6176             fi
6177
6178             if test x"$rt_do_error" = x"yes" ; then
6179                 SMB_IS_LIBPTHREAD_LINKED(
6180                     [
6181                         cat<<MSG
6182
6183 *** On this platforms, linking Samba against pthreads causes problems
6184 *** with the oplock and change notification mechanisms. You may be
6185 *** using pthreads as a side-effect of using the --with-aio-support
6186 *** or --with-profiling-data options. Please remove these and try again.
6187
6188 MSG
6189                     ],
6190                     [
6191                         cat<<MSG
6192
6193 *** On this platform, the oplock and change notification mechanisms do not
6194 *** appear to work. Please report this problem to samba-technical@samba.org
6195 *** and attach the config.log file from this directory.
6196
6197 MSG
6198                     ])
6199                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6200             fi
6201         ],
6202         [
6203             # no RT_SIGNAL bug, we are golden
6204             SMB_IS_LIBPTHREAD_LINKED(
6205                 [
6206                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6207                 ])
6208
6209         ],
6210         [
6211             # cross compiling, I hope you know what you are doing
6212             true
6213         ])
6214
6215 fi
6216
6217 AC_ARG_ENABLE(merged-build, 
6218 [AS_HELP_STRING([--enable-merged-build], [Build Samba 4 as well])])
6219
6220 if test x$enable_merged_build = xyes; then
6221         MERGED_BUILD=1
6222         m4_include(samba4.m4)
6223 fi
6224
6225 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6226 LIB_REMOVE_USR_LIB(LDFLAGS)
6227 LIB_REMOVE_USR_LIB(LIBS)
6228 LIB_REMOVE_USR_LIB(KRB5_LIBS)
6229
6230 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6231 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6232 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6233
6234 #################################################
6235 # Display summary of libraries detected
6236
6237 AC_MSG_RESULT([Using libraries:])
6238 AC_MSG_RESULT([    LIBS = $LIBS])
6239 if test x"$with_ads_support" != x"no"; then
6240     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6241 fi
6242 if test x"$with_ldap_support" != x"no"; then
6243     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6244 fi
6245 if test x"$with_dnsupdate_support" != x"no"; then
6246     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6247 fi
6248 if test x"$have_dnssd_support" != x"no"; then
6249     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6250 fi
6251 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6252
6253 #################################################
6254 # final configure stuff
6255
6256 AC_MSG_CHECKING([configure summary])
6257 AC_TRY_RUN([#include "${srcdir-.}/tests/summary.c"],
6258            AC_MSG_RESULT(yes),
6259            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6260            AC_MSG_WARN([cannot run when cross-compiling]))
6261
6262 dnl Merge in developer cflags from now on
6263 AC_SUBST(DEVELOPER_CFLAGS)
6264 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6265     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6266 fi
6267
6268 # Stuff the smbd-only libraries at the end of the smbd link
6269 # path (if we have them).
6270 SMBD_LIBS="$samba_dmapi_libs"
6271 AC_SUBST(SMBD_LIBS)
6272
6273 if test x$MERGED_BUILD != x1; then
6274         CFLAGS="${CFLAGS} \$(FLAGS) -D_SAMBA_BUILD_=3"
6275 fi
6276
6277 AC_OUTPUT(Makefile
6278           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6279           lib/netapi/examples/Makefile
6280           lib/netapi/tests/Makefile
6281           pkgconfig/smbclient.pc
6282           pkgconfig/wbclient.pc
6283           pkgconfig/netapi.pc
6284           pkgconfig/smbsharemodes.pc
6285           ../examples/libsmbclient/Makefile.internal
6286           )
6287
6288 #################################################
6289 # Print very concise instructions on building/use
6290 if test "x$enable_dmalloc" = xyes
6291 then
6292         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6293         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6294 fi