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