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