build: use only standard _FILE_OFFSET_BITS=64 macro for large files
[kai/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 -Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CCAN_CFLAGS}"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
43 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
44 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/tdb_compat"
45
46 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
47
48 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
49 if test "x${srcdir-.}" != "x."; then
50         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
51 fi
52
53 dnl Unique-to-Samba variables we'll be playing with.
54 AC_SUBST(SAMBA_CPPFLAGS)
55 AC_SUBST(SHELL)
56 AC_SUBST(LDSHFLAGS)
57 AC_SUBST(SONAMEFLAG)
58 AC_SUBST(SHLD)
59 AC_SUBST(MODULE_EXPORTS)
60 AC_SUBST(DSO_EXPORTS)
61 AC_SUBST(HOST_OS)
62 AC_SUBST(PICFLAG)
63 AC_SUBST(PIE_CFLAGS)
64 AC_SUBST(PIE_LDFLAGS)
65 AC_SUBST(RELRO_LDFLAGS)
66 AC_SUBST(SHLIBEXT)
67 AC_SUBST(INSTALLLIBCMD_SH)
68 AC_SUBST(INSTALLLIBCMD_A)
69 AC_SUBST(UNINSTALLLIBCMD_SH)
70 AC_SUBST(UNINSTALLLIBCMD_A)
71
72 AC_SUBST(INSTALL_LIBWBCLIENT)
73 AC_SUBST(UNINSTALL_LIBWBCLIENT)
74 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
75 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_SOVER)
76 AC_SUBST(LIBWBCLIENT_SHARED_TARGET_FULLVER)
77 AC_SUBST(LIBWBCLIENT_SHARED)
78 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
79 AC_SUBST(LIBWBCLIENT_STATIC)
80 AC_SUBST(LIBWBCLIENT_SOVER)
81 AC_SUBST(LIBWBCLIENT_FULLVER)
82 AC_SUBST(LIBWBCLIENT)
83 AC_SUBST(LIBWBCLIENT_LIBS)
84
85 AC_SUBST(LIBSAMBAUTIL_SHARED)
86
87 AC_SUBST(PRINT_LIBS)
88 AC_SUBST(AUTH_LIBS)
89 AC_SUBST(ACL_LIBS)
90 AC_SUBST(PASSDB_LIBS)
91 AC_SUBST(IDMAP_LIBS)
92 AC_SUBST(KRB5_LIBS)
93 AC_SUBST(UUID_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 dnl Checks for programs.
206 AC_ARG_ENABLE(smbtorture4,
207         [AS_HELP_STRING([--enable-smbtorture4], [Enable building smbtorture4 (default=auto)])])
208
209 if test x$enable_smbtorture4 != xno; then
210         smbtorture4_possible=yes
211 else
212         smbtorture4_possible=no
213 fi
214
215 AC_PROG_INSTALL
216 AC_PROG_AWK
217 # Check for GNU make
218 m4_include(../m4/check_make.m4)
219 AC_SAMBA_GNU_MAKE([true], [true])
220
221 # Check for perl
222 m4_include(../m4/check_perl.m4)
223 AC_SAMBA_PERL([true], [smbtorture4_possible=no])
224
225 # Check for python
226 m4_include(../m4/check_python.m4)
227 AC_SAMBA_PYTHON_DEVEL([true], [smbtorture4_possible=no])
228
229 AC_CHECK_TOOL(AR, ar)
230
231 dnl Check if we (actually our C compiler!) use GNU ld
232 AC_PROG_LD_GNU
233
234 dnl Certain versions of GNU ld the default is not to have the
235 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
236 dnl warnings when building modules.
237 if test "$ac_cv_prog_gnu_ld" = "yes"; then
238         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>&1 < /dev/null | grep "GNU ld"`
239         AC_MSG_CHECKING(GNU ld release date)
240         changequote(,)dnl
241         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'`
242         changequote([,])dnl
243         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
244         if test -n "$ac_cv_gnu_ld_date"; then
245         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
246                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
247         fi
248         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
249                 ac_cv_gnu_ld_version_script=yes
250         fi
251         else
252            AC_MSG_CHECKING(GNU ld release version)
253            changequote(,)dnl
254            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'`
255            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
256            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
257            changequote([,])dnl
258            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
259            AC_MSG_CHECKING(GNU ld release version major)
260            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
261            AC_MSG_CHECKING(GNU ld release version minor)
262            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
263            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
264              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
265            fi
266            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
267              ac_cv_gnu_ld_version_script=yes
268            fi
269         fi
270 fi
271
272 dnl Check if C compiler understands -c and -o at the same time
273 AC_PROG_CC_C_O
274 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
275       BROKEN_CC=
276 else
277       BROKEN_CC=#
278 fi
279 AC_SUBST(BROKEN_CC)
280
281 dnl Check if the C compiler understands -Werror (GNU)
282 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
283  AC_TRY_RUN_STRICT([
284   int main(void)
285   {
286         return 0;
287   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
288   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
289 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
290    Werror_FLAGS="-Werror"
291 else
292 dnl Check if the C compiler understands -w2
293 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
294  AC_TRY_RUN_STRICT([
295   int main(void)
296   {
297         return 0;
298   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
299   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
300 if test x"$samba_cv_HAVE_w2" = x"yes"; then
301    Werror_FLAGS="-w2"
302 else
303 dnl Check if the C compiler understands -errwarn (Sun)
304 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
305   AC_TRY_RUN_STRICT([
306    int main(void)
307    {
308         return 0;
309    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
310    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
311 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
312    Werror_FLAGS="-errwarn=%all"
313 else
314 dnl Check if the C compiler understands -qhalt (IBM)
315 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
316   AC_TRY_RUN_STRICT([
317    int main(void)
318    {
319         return 0;
320    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
321    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
322 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
323    Werror_FLAGS="-qhalt=w"
324 fi
325 fi
326 fi
327 fi
328
329 ############################################
330 # check if the compiler can handle negative enum values
331 # and don't truncate the values to INT_MAX
332 # a runtime test is needed here
333 AC_SUBST(PIDL_ARGS)
334 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
335     AC_TRY_RUN(
336 [
337         #include <stdio.h>
338         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
339         int main(void) {
340                 enum negative_values v1 = NEGATIVE_VALUE;
341                 unsigned v2 = NEGATIVE_VALUE;
342
343                 if (v1 != 0xFFFFFFFF) {
344                         printf("%u != 0xFFFFFFFF\n", v1);
345                         return 1;
346                 }
347                 if (v2 != 0xFFFFFFFF) {
348                         printf("%u != 0xFFFFFFFF\n", v2);
349                         return 1;
350                 }
351
352                 return 0;
353         }
354 ],
355         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
356 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
357         AC_MSG_WARN([using --uint-enums for pidl])
358         PIDL_ARGS="$PIDL_ARGS --uint-enums"
359 fi
360
361 dnl Figure out the flags to support named structure initializers
362
363 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
364
365 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
366 AC_MSG_CHECKING(uname -s)
367 AC_MSG_RESULT(${UNAME_S})
368
369 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
370 AC_MSG_CHECKING(uname -r)
371 AC_MSG_RESULT(${UNAME_R})
372
373 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
374 AC_MSG_CHECKING(uname -m)
375 AC_MSG_RESULT(${UNAME_M})
376
377 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
378 AC_MSG_CHECKING(uname -p)
379 AC_MSG_RESULT(${UNAME_P})
380
381 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
382 AC_MSG_CHECKING(uname -i)
383 AC_MSG_RESULT(${UNAME_I})
384
385 dnl Add #include for broken IRIX header files
386   case "$host_os" in
387         *irix6*)
388                 #TODO add to libreplace
389                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
390                         dnl Fix sensible defaults for MIPSPro compilers. The
391                         dnl error numbers are valid for the 7.3 compilers,
392                         dnl hopefully also valid for the 7.4 series.
393                         dnl
394                         dnl Bugzilla 3801. Force an error on warning 1035
395                         dnl so we don't incorrectly detect stdint.h. This
396                         dnl warning is emitted for #error directives.
397                         CFLAGS="$CFLAGS -diag_error 1035"
398                         dnl 1209: Controlling expression is constant
399                         dnl 1174: Function foo declared but never referenced
400                         dnl 3201: Parameter foo was never referenced
401                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
402                 fi
403         ;;
404 esac
405
406 DYNEXP=
407 AC_SUBST(DYNEXP)
408 LDSHFLAGS_Z_DEFS=
409 AC_SUBST(LDSHFLAGS_Z_DEFS)
410 LDSHFLAGS_Z_NODEFS=
411 AC_SUBST(LDSHFLAGS_Z_NODEFS)
412
413 dnl Add modules that have to be built by default here
414 dnl These have to be built static:
415 default_static_modules=""
416 default_static_modules="$default_static_modules pdb_smbpasswd"
417 default_static_modules="$default_static_modules pdb_tdbsam"
418 default_static_modules="$default_static_modules pdb_wbc_sam"
419 default_static_modules="$default_static_modules rpc_lsarpc"
420 default_static_modules="$default_static_modules rpc_samr"
421 default_static_modules="$default_static_modules rpc_winreg"
422 default_static_modules="$default_static_modules rpc_initshutdown"
423 default_static_modules="$default_static_modules rpc_dssetup"
424 default_static_modules="$default_static_modules rpc_wkssvc"
425 default_static_modules="$default_static_modules rpc_svcctl"
426 default_static_modules="$default_static_modules rpc_ntsvcs"
427 default_static_modules="$default_static_modules rpc_netlogon"
428 default_static_modules="$default_static_modules rpc_netdfs"
429 default_static_modules="$default_static_modules rpc_srvsvc"
430 default_static_modules="$default_static_modules rpc_spoolss"
431 default_static_modules="$default_static_modules rpc_eventlog"
432 default_static_modules="$default_static_modules auth_sam"
433 default_static_modules="$default_static_modules auth_unix"
434 default_static_modules="$default_static_modules auth_winbind"
435 default_static_modules="$default_static_modules auth_wbc"
436 default_static_modules="$default_static_modules auth_server"
437 default_static_modules="$default_static_modules auth_domain"
438 default_static_modules="$default_static_modules auth_builtin"
439 default_static_modules="$default_static_modules vfs_default"
440 default_static_modules="$default_static_modules nss_info_template"
441
442 dnl These are preferably build shared, and static if dlopen() is not available
443 default_shared_modules=""
444 default_shared_modules="$default_shared_modules vfs_recycle"
445 default_shared_modules="$default_shared_modules vfs_audit"
446 default_shared_modules="$default_shared_modules vfs_extd_audit"
447 default_shared_modules="$default_shared_modules vfs_full_audit"
448 default_shared_modules="$default_shared_modules vfs_netatalk"
449 default_shared_modules="$default_shared_modules vfs_fake_perms"
450 default_shared_modules="$default_shared_modules vfs_default_quota"
451 default_shared_modules="$default_shared_modules vfs_readonly"
452 default_shared_modules="$default_shared_modules vfs_cap"
453 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
454 default_shared_modules="$default_shared_modules vfs_shadow_copy"
455 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
456 default_shared_modules="$default_shared_modules auth_script"
457 default_shared_modules="$default_shared_modules vfs_readahead"
458 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
459 default_shared_modules="$default_shared_modules vfs_streams_xattr"
460 default_shared_modules="$default_shared_modules vfs_streams_depot"
461 default_shared_modules="$default_shared_modules vfs_acl_xattr"
462 default_shared_modules="$default_shared_modules vfs_acl_tdb"
463 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
464 default_shared_modules="$default_shared_modules vfs_preopen"
465 default_shared_modules="$default_shared_modules vfs_catia"
466 default_shared_modules="$default_shared_modules vfs_scannedonly"
467 default_shared_modules="$default_shared_modules vfs_crossrename"
468 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
469 default_shared_modules="$default_shared_modules vfs_time_audit"
470 default_shared_modules="$default_shared_modules idmap_autorid"
471
472 if test "x$developer" = xyes; then
473    default_static_modules="$default_static_modules rpc_rpcecho pdb_ads"
474    default_static_modules="$default_static_modules auth_netlogond"
475    default_shared_modules="$default_shared_modules perfcount_test"
476 fi
477
478
479 #
480 # Config CPPFLAG settings for strange OS's that must be set
481 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
482 # case statement; its first reference must be unconditional.
483 #
484 case "$host_os" in
485     *hpux*)
486 #
487 # Defines needed for HPUX support.
488 # HPUX has bigcrypt but (sometimes?) doesn't use it for
489 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
490 #
491       case `uname -r` in
492                 *9*|*10*|*11)
493                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
494                 ;;
495       esac
496       ;;
497
498 #
499 # CRAY Unicos has broken const handling
500        *unicos*)
501           AC_MSG_RESULT([disabling const])
502           CPPFLAGS="$CPPFLAGS -Dconst="
503           ;;
504         
505 #
506 # AIX4.x doesn't even admit to having large
507 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
508 #
509     *aix4*)
510           AC_MSG_RESULT([enabling large file support])
511           CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
512           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
513       ;;
514 #
515 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
516 # to the existance of large files..
517 #
518 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
519 #
520         *solaris*)
521                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
522                 LDFLAGS="$LDFLAGS -lthread"
523                 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
524                 ;;
525 #
526 # IRIX uses SYSV printing.  Make sure to set that here
527 #
528         *irix*)
529                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
530                 ;;
531         *freebsd*|*dragonfly*)
532                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
533                 ;;
534 #
535 # VOS may need to have POSIX support and System V compatibility enabled.
536 #
537     *vos*)
538     case "$CPPFLAGS" in
539           *-D_POSIX_C_SOURCE*)
540                 ;;
541           *)
542                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
543                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
544                 ;;
545     esac
546     case "$CPPFLAGS" in
547           *-D_SYSV*|*-D_SVID_SOURCE*)
548                 ;;
549           *)
550                 CPPFLAGS="$CPPFLAGS -D_SYSV"
551                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
552     esac
553     ;;
554 # GNU systems
555 #
556     *linux* | *hurd* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
557         CPPFLAGS="-D_GNU_SOURCE $CPPFLAGS"
558         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
559         ;;
560
561 #
562 # MacOS X is the *only* system that uses compose character in utf8. This
563 # is so horribly broken....
564 #
565     *darwin*)
566         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
567
568 # Add a system specific charset module.
569         default_shared_modules="$default_shared_modules"
570
571         ;;
572     *qnx*)
573         ;;
574
575 esac
576
577 SAVE_CPPFLAGS="${CPPFLAGS}"
578 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
579
580 AC_LIBREPLACE_BROKEN_CHECKS
581 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
582 AC_LIBREPLACE_NETWORK_CHECKS
583
584 CPPFLAGS="${SAVE_CPPFLAGS}"
585
586 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
587
588 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
589 AC_SUBST(LIBREPLACE_OBJS)
590
591 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS}"
592 AC_SUBST(LIBREPLACE_LIBS)
593
594
595 # add -ldl to the global LIBS
596 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
597 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
598
599
600 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
601 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
602 AC_CHECK_HEADERS(limits.h float.h libintl.h)
603 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
604 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)
605 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
606 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
607 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
608 AC_CHECK_HEADERS(sys/sysmacros.h)
609 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
610 AC_CHECK_HEADERS(langinfo.h locale.h)
611 AC_CHECK_HEADERS(xfs/libxfs.h)
612 AC_CHECK_HEADERS(netgroup.h)
613 AC_CHECK_HEADERS(linux/falloc.h)
614 AC_CHECK_HEADERS(sys/uuid.h)
615 AC_CHECK_HEADERS(CommonCrypto/CommonDigest.h)
616
617 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
618 #if HAVE_RPC_RPC_H
619 #include <rpc/rpc.h>
620 #endif
621 ]])
622 CRYPTO_MD5_OBJ=
623 if test "x$ac_cv_header_CommonCrypto_CommonDigest_h" != "xyes"
624 then
625         CRYPTO_MD5_OBJ="../lib/crypto/md5.o"
626 fi
627 AC_SUBST(CRYPTO_MD5_OBJ)
628
629 ## These fail to compile on IRIX so just check for their presence
630 AC_CHECK_HEADERS(sys/mode.h,,,)
631
632 # Look for Darwin headers
633 old_CPPFLAGS="$CPPFLAGS"
634 CPPFLAGS="-Iinclude $CPPFLAGS"
635 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
636 CPPFLAGS="$old_CPPFLAGS"
637
638 # To link lib/util/charset/charset_macosxfs.c, we need to tell the linker
639 # about CoreFoundation, at least on os X 10.6 and 10.7
640 case "$host_os" in
641     *darwin11*|*darwin10*)
642                 LDFLAGS="$LDFLAGS -framework CoreFoundation"
643         ;;
644 esac
645
646 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
647 # subdirectory of headers.
648 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
649
650 if test x"$enable_developer" = x"yes" ; then
651    if test x"$ac_cv_header_valgrind_h" = xyes -o \
652            x"$ac_cv_header_valgrind_valgrind_h" = xyes ; then
653       AC_DEFINE(VALGRIND,1,[Whether we have valgrind headers])
654    fi
655 fi
656
657 #
658 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
659 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
660 #
661 case "$host_os" in
662     *hpux*)
663                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
664                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
665                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
666                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
667                 fi
668         ;;
669 esac
670 AC_CHECK_HEADERS(shadow.h)
671 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
672 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
673
674 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
675 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
676
677 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
678
679 # For experimental utmp support (lastlog on some BSD-like systems)
680 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
681
682 AC_CHECK_SIZEOF(int,cross)
683 AC_CHECK_SIZEOF(long,cross)
684 AC_CHECK_SIZEOF(long long,cross)
685 AC_CHECK_SIZEOF(short,cross)
686
687 AC_C_CONST
688 AC_C_INLINE
689 AC_C_BIGENDIAN
690 AC_C_CHAR_UNSIGNED
691
692 AC_TYPE_SIGNAL
693 AC_TYPE_UID_T
694 AC_TYPE_MODE_T
695 AC_TYPE_OFF_T
696 AC_TYPE_SIZE_T
697 AC_TYPE_PID_T
698 AC_STRUCT_ST_RDEV
699 AC_DIRENT_D_OFF
700 AC_CHECK_TYPE(ssize_t, int)
701 AC_CHECK_TYPE(wchar_t, unsigned short)
702
703 ############################################
704 # for cups support we need libcups, and a handful of header files
705
706 AC_ARG_ENABLE(cups,
707 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
708
709 if test x$enable_cups != xno; then
710         AC_PATH_PROG(CUPS_CONFIG, cups-config)
711
712         if test "x$CUPS_CONFIG" != x; then
713
714                 ac_save_LDFLAGS=$LDFLAGS
715                 ac_save_PRINT_LIBS=$PRINT_LIBS
716                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
717
718                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
719                         x"$ac_cv_header_cups_language_h" = xyes; then
720                         # try linking with -lcups alone first. That should work unless libcups is
721                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
722                         # dendencies including thread libraries - use cups-config only if really
723                         # required. 
724                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
725                                 [PRINT_LIBS="$ac_save_PRINT_LIBS -lcups"],
726                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
727                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
728
729                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
730                         samba_cv_HAVE_CUPS=yes
731                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
732                 else
733                         AC_MSG_WARN([cups-config around but cups-devel not installed])
734                         CFLAGS=$ac_save_CFLAGS
735                         LDFLAGS=$ac_save_LDFLAGS
736                         PRINT_LIBS=$ac_save_PRINT_LIBS
737                 fi
738
739         elif test x"$enable_cups" = x"yes"; then
740                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
741         fi
742 fi
743
744 AC_ARG_ENABLE(iprint,
745 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
746
747 if test x$enable_iprint != xno; then
748         if test x"$samba_cv_HAVE_CUPS" = xyes; then
749                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
750         elif test x"$enable_iprint" = x"yes"; then
751                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
752         fi
753 fi
754
755 ############################################
756 # check if the compiler will optimize out function calls
757 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
758     AC_TRY_LINK([
759 #include <stdio.h>],
760 [
761                 if (0) {
762                    this_function_does_not_exist();
763                 } else {
764                   return 1;
765                 }
766
767 ],
768         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
769 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
770    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
771 fi
772
773 #############################################
774 # check for fd passing struct via msg_control
775 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
776     AC_TRY_COMPILE([
777 #include <sys/types.h>
778 #include <stdlib.h>
779 #include <stddef.h>
780 #include <sys/socket.h>
781 #include <sys/un.h>],
782 [
783         struct msghdr msg;
784         union {
785               struct cmsghdr cm;
786               char control[CMSG_SPACE(sizeof(int))];
787         } control_un;
788         msg.msg_control = control_un.control;
789         msg.msg_controllen = sizeof(control_un.control);
790 ],
791         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
792 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
793    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
794              [If we can use msg_control for passing file descriptors])
795 fi
796
797 #############################################
798 # check for fd passing struct via msg_acctrights
799 AC_CACHE_CHECK([for fd passing via msg_acctrights],
800                 samba_cv_msghdr_msg_acctrights, [
801     AC_TRY_COMPILE([
802 #include <sys/types.h>
803 #include <stdlib.h>
804 #include <stddef.h>
805 #include <sys/socket.h>
806 #include <sys/un.h>],
807 [
808         struct msghdr msg;
809         int fd;
810         msg.msg_acctrights = (caddr_t) &fd;
811         msg.msg_acctrightslen = sizeof(fd);
812 ],
813         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
814 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
815    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
816              [If we can use msg_acctrights for passing file descriptors])
817 fi
818
819 AC_CHECK_FUNCS(dirfd)
820 if test x"$ac_cv_func_dirfd" = x"yes"; then
821         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
822 fi
823
824 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
825     AC_TRY_COMPILE([
826 #include <sys/types.h>
827 #if STDC_HEADERS
828 #include <stdlib.h>
829 #include <stddef.h>
830 #endif
831 #include <signal.h>],[struct sigevent s;],
832         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
833 if test x"$samba_cv_struct_sigevent" = x"yes"; then
834    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
835    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
836         [#include <signal.h>])
837 fi
838
839 # and glibc has setresuid under linux but the function does
840 # nothing until kernel 2.1.44! very dumb.
841 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
842     AC_TRY_RUN([#include <errno.h>
843 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
844         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
845 if test x"$samba_cv_have_setresuid" = x"yes"; then
846     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
847 fi
848
849 # Do the same check for setresguid...
850 #
851 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
852     AC_TRY_RUN([#include <unistd.h>
853 #include <errno.h>
854 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
855         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
856 if test x"$samba_cv_have_setresgid" = x"yes"; then
857     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
858 fi
859
860 AC_FUNC_MEMCMP
861
862 ###############################################
863 # Readline included by default unless explicitly asked not to
864 test "${with_readline+set}" != "set" && with_readline=yes
865
866 # test for where we get readline() from
867 AC_MSG_CHECKING(whether to use readline)
868 AC_ARG_WITH(readline,
869 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
870 [  case "$with_readline" in
871   yes)
872     AC_MSG_RESULT(yes)
873
874     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
875     AC_CHECK_HEADERS(readline/history.h)
876
877     AC_CHECK_HEADERS(readline.h readline/readline.h,[
878       for termlib in ncurses curses termcap terminfo termlib tinfo; do
879        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
880       done
881       AC_CHECK_LIB(readline, rl_callback_handler_install,
882        [TERMLIBS="-lreadline $TERMLIBS"
883        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
884        break], [TERMLIBS=], $TERMLIBS)])
885     ;;
886   no)
887     AC_MSG_RESULT(no)
888     ;;
889   *)
890     AC_MSG_RESULT(yes)
891
892     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
893     # alternate readline path
894     _ldflags=${LDFLAGS}
895     _cppflags=${CPPFLAGS}
896
897     # Add additional search path
898     LDFLAGS="-L$with_readline/lib $LDFLAGS"
899     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
900
901     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
902     AC_CHECK_HEADERS(readline/history.h)
903
904     AC_CHECK_HEADERS(readline.h readline/readline.h,[
905       for termlib in ncurses curses termcap terminfo termlib; do
906        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
907       done
908       AC_CHECK_LIB(readline, rl_callback_handler_install,
909        [TERMLDFLAGS="-L$with_readline/lib"
910        TERMCPPFLAGS="-I$with_readline/include"
911        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
912        TERMLIBS="-lreadline $TERMLIBS"
913        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
914        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
915
916     LDFLAGS=$_ldflags
917     ;;
918   esac],
919   AC_MSG_RESULT(no)
920 )
921 AC_SUBST(TERMLIBS)
922 AC_SUBST(TERMLDFLAGS)
923
924 # The readline API changed slightly from readline3 to readline4, so
925 # code will generate warnings on one of them unless we have a few
926 # special cases.
927 AC_CHECK_LIB(readline, rl_completion_matches,
928              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
929                         [Do we have rl_completion_matches?])],
930              [],
931              [$TERMLIBS])
932
933 # not all readline libs have rl_event_hook or history_list
934 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
935 AC_CHECK_LIB(readline, history_list,
936              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
937              [],
938              [$TERMLIBS])
939
940 ###############################################
941 # test for where we get yp_get_default_domain() from
942 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
943 AC_CHECK_FUNCS(yp_get_default_domain)
944
945 # Check if we have execl, if not we need to compile smbrun.
946 AC_CHECK_FUNCS(execl)
947 if test x"$ac_cv_func_execl" = x"no"; then
948     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun"
949 fi
950
951 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
952 AC_CHECK_FUNCS(strtol)
953 AC_CHECK_FUNCS(strchr chflags)
954 AC_CHECK_FUNCS(getrlimit fsync setpgid)
955 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
956 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
957 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
958 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf)
959 AC_CHECK_FUNCS(getgrset)
960 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
961 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocate posix_fallocate64)
962 AC_CHECK_FUNCS(fallocate fallocate64)
963 AC_CHECK_FUNCS(fseeko fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
964 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
965 AC_CHECK_FUNCS(fdopendir fdopendir64)
966 AC_CHECK_FUNCS(getpwent_r)
967 AC_CHECK_FUNCS(getdents64)
968 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
969 AC_CHECK_FUNCS(syslog vsyslog timegm)
970 AC_CHECK_FUNCS(setlocale)
971 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
972 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
973 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
974 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
975 AC_CHECK_HEADERS(sys/mman.h)
976 # setbuffer, shmget, shm_open are needed for smbtorture
977 AC_CHECK_FUNCS(shmget shm_open)
978 AC_CHECK_FUNCS(gettext dgettext)
979 AC_CHECK_FUNCS(bindtextdomain textdomain bind_textdomain_codeset)
980 AC_CHECK_FUNCS(strupr)
981
982 # Find a method of generating a stack trace
983 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
984 # libexecinfo provides backtrace_symbols on FreeBSD
985 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
986 AC_CHECK_FUNCS(backtrace_symbols)
987 AC_CHECK_LIB(exc, trace_back_stack)
988
989 # check for sysctlbyname and sysctl for BSD systems
990 AC_CHECK_FUNCS(sysctlbyname)
991 AC_CHECK_FUNCS(sysctl)
992
993 #################################################
994 # Check to see if core dump directory is defined in linux
995 # with /proc/sys/kernel/core_pattern
996
997 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
998         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
999         [Whether Linux kernel uses core_pattern for core files]),
1000          [])
1001
1002 #############################
1003 # check if building with gpfs
1004 AC_CHECK_HEADERS(gpfs_gpl.h)
1005 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1006     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1007     default_shared_modules="$default_shared_modules vfs_gpfs"
1008     default_shared_modules="$default_shared_modules vfs_gpfs_hsm_notify"
1009 fi
1010
1011 #############################################
1012 # check if building on Isilon OneFS
1013 printf "%s" "checking for Isilon OneFS... "
1014 save_LIBS="$LIBS"
1015 LIBS="$LIBS -lisi_version"
1016 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1017           [get_isilon_copyright()],
1018           samba_cv_HAVE_ONEFS=yes,
1019           samba_cv_HAVE_ONEFS=no)
1020 echo $samba_cv_HAVE_ONEFS
1021 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1022     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1023     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1024     default_static_modules="$default_static_modules"
1025     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1026     # Need to also add general libs for oplocks support
1027     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1028 fi
1029 AC_SUBST(ONEFS_LIBS)
1030 LIBS="$save_LIBS"
1031
1032 # Note that all the libunwind symbols in the API are defined to internal
1033 # platform-specific version, so we must include libunwind.h before checking
1034 # any of them.
1035 AC_MSG_CHECKING([for libunwind])
1036 save_LIBS=$LIBS
1037
1038 UNWIND_ARCH="unknown"
1039 if test x"$UNAME_I" != x"unknown"; then
1040         UNWIND_ARCH="$UNAME_I"
1041 elif test x"$UNAME_M" != x"unknown"; then
1042         UNWIND_ARCH="$UNAME_M"
1043 elif test x"$UNAME_P" != x"unknown"; then
1044         UNWIND_ARCH="$UNAME_P"
1045 fi
1046
1047 case "$UNWIND_ARCH" in
1048         unknown)
1049                 # This probably won't link without
1050                 # the platform-specific libunwind.
1051                 LIBS="$LIBS -lunwind"
1052                 ;;
1053         i386|i586|i686)
1054                 # Add the platform-specific libunwind module.
1055                 LIBS="$LIBS -lunwind -lunwind-x86"
1056                 ;;
1057         *)
1058                 # Add the platform-specific libunwind module.
1059                 # based on uname -i, uname -m or uname -p
1060                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1061                 ;;
1062 esac
1063
1064 AC_TRY_LINK(
1065     [
1066 #ifdef HAVE_LIBUNWIND_H
1067 #include <libunwind.h>
1068 #endif
1069     ],
1070     [
1071         unw_context_t ctx; unw_cursor_t cur;
1072         char buf[256]; unw_word_t off;
1073         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1074         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1075     ],
1076     [
1077         AC_MSG_RESULT(yes)
1078         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1079
1080         # If we have libunwind, test whether we also have libunwind-ptrace
1081         # which would let us unwind arbitrary processes.
1082         save_LIBS=$LIBS
1083         AC_CHECK_HEADERS(libunwind-ptrace.h)
1084         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1085             [
1086                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1087                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1088                     [Whether libunwind-ptrace.a is available.])
1089             ],
1090             [ LIBUNWIND_PTRACE="" ])
1091
1092         LIBS=$save_LIBS
1093     ],
1094     [
1095         AC_MSG_RESULT(no)
1096         LIBS=$save_LIBS
1097     ])
1098
1099 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1100 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1101     AC_CHECK_HEADERS(sys/ptrace.h)
1102     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1103     AC_TRY_LINK(
1104             [
1105 #if HAVE_SYS_TYPES_H
1106 #include <sys/types.h>
1107 #endif
1108 #if HAVE_SYS_PTRACE_H
1109 #include <sys/ptrace.h>
1110 #endif
1111             ],
1112             [
1113                 pid_t me = (pid_t)-1;
1114                 ptrace(PTRACE_ATTACH, me, 0, 0);
1115                 ptrace(PTRACE_DETACH, me, 0, 0);
1116                 return 0;
1117             ],
1118             [
1119                 AC_MSG_RESULT(yes)
1120                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1121                     [Whether the Linux ptrace(2) interface is available.])
1122             ],
1123             [
1124                 AC_MSG_RESULT(no)
1125                 LIBUNWIND_PTRACE=""
1126             ])
1127 fi
1128
1129 AC_SUBST(LIBUNWIND_PTRACE)
1130
1131 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1132 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1133 AC_CHECK_FUNCS(__getcwd _getcwd)
1134 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1135 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1136 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1137 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1138 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1139 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1140 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1141 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1142 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1143 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1144 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1145 AC_CHECK_FUNCS(prctl)
1146
1147 AC_TRY_COMPILE([
1148 #ifdef HAVE_SYS_PRCTL_H
1149 #include <sys/prctl.h>
1150 #endif
1151 ],
1152 [int i; i = prtcl(0); ],
1153 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1154
1155 #
1156 #
1157 #
1158 case "$host_os" in
1159     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1160        # glibc <= 2.3.2 has a broken getgrouplist
1161        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1162 #include <unistd.h>
1163 #include <sys/utsname.h>
1164 main() {
1165        /* glibc up to 2.3 has a broken getgrouplist */
1166 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1167        int libc_major = __GLIBC__;
1168        int libc_minor = __GLIBC_MINOR__;
1169
1170        if (libc_major < 2)
1171               exit(1);
1172        if ((libc_major == 2) && (libc_minor <= 3))
1173               exit(1);
1174 #endif
1175        exit(0);
1176 }
1177 ], [samba_cv_linux_getgrouplist_ok=yes],
1178    [samba_cv_linux_getgrouplist_ok=no],
1179    [samba_cv_linux_getgrouplist_ok=cross])])
1180        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1181           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1182        fi
1183        ;;
1184     *)
1185        AC_CHECK_FUNCS(getgrouplist)
1186        ;;
1187 esac
1188
1189 #
1190 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1191 #
1192
1193 if test x$ac_cv_func_stat64 = xno ; then
1194   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1195   AC_TRY_LINK([
1196 #if defined(HAVE_UNISTD_H)
1197 #include <unistd.h>
1198 #endif
1199 #include <sys/stat.h>
1200 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1201   AC_MSG_RESULT([$ac_cv_func_stat64])
1202   if test x$ac_cv_func_stat64 = xyes ; then
1203     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1204   fi
1205 fi
1206
1207 if test x$ac_cv_func_lstat64 = xno ; then
1208   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1209   AC_TRY_LINK([
1210 #if defined(HAVE_UNISTD_H)
1211 #include <unistd.h>
1212 #endif
1213 #include <sys/stat.h>
1214 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1215   AC_MSG_RESULT([$ac_cv_func_lstat64])
1216   if test x$ac_cv_func_lstat64 = xyes ; then
1217     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1218   fi
1219 fi
1220
1221 if test x$ac_cv_func_fstat64 = xno ; then
1222   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1223   AC_TRY_LINK([
1224 #if defined(HAVE_UNISTD_H)
1225 #include <unistd.h>
1226 #endif
1227 #include <sys/stat.h>
1228 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1229   AC_MSG_RESULT([$ac_cv_func_fstat64])
1230   if test x$ac_cv_func_fstat64 = xyes ; then
1231     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1232   fi
1233 fi
1234
1235 #################################################
1236 # Check whether struct stat has timestamps with sub-second resolution.
1237 #
1238
1239 samba_cv_stat_hires=no
1240 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1241         [samba_cv_stat_hires=yes])
1242 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1243         [samba_cv_stat_hires=yes])
1244 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1245         [samba_cv_stat_hires=yes])
1246 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1247         [samba_cv_stat_hires=yes])
1248 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1249         [samba_cv_stat_hires=yes])
1250
1251 if test x"$samba_cv_stat_hires" = x"yes" ; then
1252     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1253             [whether struct stat has sub-second timestamps])
1254 fi
1255
1256 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1257 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1258 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1259
1260
1261 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1262     [
1263         AC_TRY_COMPILE(
1264             [#include <sys/stat.h>],
1265             [
1266                 int a = UF_DOS_ARCHIVE;
1267                 int h = UF_DOS_HIDDEN;
1268                 int r = UF_DOS_RO;
1269                 int s = UF_DOS_SYSTEM;
1270                 int i = UF_DOS_NOINDEX;
1271                 int f = UF_DOS_FLAGS;
1272             ],
1273             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1274     ])
1275
1276 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1277     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1278 fi
1279
1280 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1281                samba_cv_function_attribute_destructor,
1282                [
1283                  AC_COMPILE_IFELSE(
1284                         [
1285                                 __attribute__((destructor))
1286                                 static void cleanup(void) { }
1287                         ],
1288                         samba_cv_function_attribute_destructor=yes)
1289                 ])
1290
1291 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1292    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1293              [whether we can compile with __attribute__((destructor))])
1294 fi
1295
1296 #####################################
1297 # needed for SRV lookups
1298 AC_CHECK_LIB(resolv, dn_expand)
1299 AC_CHECK_LIB(resolv, _dn_expand)
1300 AC_CHECK_LIB(resolv, __dn_expand)
1301
1302 AC_TRY_COMPILE([#include <resolv.h>],
1303                [struct __res_state s; res_ninit(&s);],
1304                ac_cv_have_res_ninit=yes,ac_cv_have_res_ninit=no)
1305
1306 if test x"$ac_cv_have_res_ninit" = x"yes"; then
1307         AC_DEFINE(HAVE_RES_NINIT, 1, [Whether we have res_ninit])
1308 fi
1309
1310 #
1311 # Check for the functions putprpwnam, set_auth_parameters,
1312 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1313 # Needed for OSF1 and HPUX.
1314 #
1315
1316 AC_LIBTESTFUNC(security, putprpwnam)
1317 AC_LIBTESTFUNC(sec, putprpwnam)
1318
1319 AC_LIBTESTFUNC(security, set_auth_parameters)
1320 AC_LIBTESTFUNC(sec, set_auth_parameters)
1321
1322 # UnixWare 7.x has its getspnam in -lgen
1323 AC_LIBTESTFUNC(gen, getspnam)
1324
1325 AC_LIBTESTFUNC(security, getspnam)
1326 AC_LIBTESTFUNC(sec, getspnam)
1327
1328 AC_LIBTESTFUNC(security, bigcrypt)
1329 AC_LIBTESTFUNC(sec, bigcrypt)
1330
1331 AC_LIBTESTFUNC(security, getprpwnam)
1332 AC_LIBTESTFUNC(sec, getprpwnam)
1333
1334 AC_CHECK_FUNCS(strsignal)
1335
1336 ############################################
1337 # Check for EA implementations
1338 case "$host_os" in
1339   *osf*)
1340         AC_SEARCH_LIBS(getproplist, [proplist])
1341         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1342         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1343         AC_CHECK_FUNCS(sizeof_proplist_entry)
1344   ;;
1345   *freebsd4* | *dragonfly* )
1346         AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1347   ;;
1348   *solaris*)
1349         AC_CHECK_FUNCS(attropen)
1350   ;;
1351   *)
1352         AC_SEARCH_LIBS(getxattr, [attr])
1353         AC_CHECK_FUNCS(getxattr,[
1354                 AC_CHECK_FUNCS(lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
1355                 ])
1356         AC_CHECK_FUNCS(getea,[
1357                 AC_CHECK_FUNCS(fgetea lgetea listea flistea llistea removeea fremoveea lremoveea setea fsetea lsetea)
1358                 ])
1359         AC_CHECK_FUNCS(attr_get,[
1360                 AC_CHECK_FUNCS(attr_list attr_set attr_remove attr_getf attr_listf attr_setf attr_removef)
1361                 ])
1362         AC_CHECK_FUNCS(extattr_delete_file,[
1363                 AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_link extattr_get_fd extattr_get_file extattr_get_link extattr_list_fd extattr_list_file extattr_list_link extattr_set_fd extattr_set_file extattr_set_link)
1364                 ])
1365   ;;
1366 esac
1367
1368 ########################################################
1369 # Do xattr functions take additional options like on Darwin?
1370 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1371         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1372                 old_LIBS=$LIBS
1373                 LIBS="$LIBS $ACL_LIBS"
1374                 AC_TRY_COMPILE([
1375                         #include <sys/types.h>
1376                         #if HAVE_ATTR_XATTR_H
1377                         #include <attr/xattr.h>
1378                         #elif HAVE_SYS_XATTR_H
1379                         #include <sys/xattr.h>
1380                         #endif
1381                 ],[
1382                         getxattr(0, 0, 0, 0, 0, 0);
1383                 ],
1384                 [smb_attr_cv_xattr_add_opt=yes],
1385                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1386         ])
1387         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1388                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1389         fi
1390 fi
1391
1392 AC_DISABLE_STATIC
1393 AC_ENABLE_SHARED
1394
1395 # Set defaults
1396 PIE_CFLAGS=""
1397 PIE_LDFLAGS=""
1398 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1399
1400 if test "x$enable_pie" != xno
1401 then
1402         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1403         [
1404                 cat > conftest.c <<EOF
1405 int foo;
1406 int main () { return 0;}
1407 EOF
1408                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1409                 then
1410                         samba_cv_fpie=yes
1411                 else
1412                         samba_cv_fpie=no
1413                 fi
1414                 rm -f conftest*
1415         ])
1416         if test x"${samba_cv_fpie}" = x"yes"
1417         then
1418                 PIE_CFLAGS="-fPIE"
1419                 PIE_LDFLAGS="-pie"
1420         fi
1421 fi
1422
1423 # Set defaults
1424 RELRO_LDFLAGS=""
1425 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1426
1427 if test "x$enable_relro" != xno
1428 then
1429         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1430         [
1431                 cat > conftest.c <<EOF
1432 int foo;
1433 main () { return 0;}
1434 EOF
1435                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1436                 then
1437                         samba_cv_relro=yes
1438                 else
1439                         samba_cv_relro=no
1440                 fi
1441                 rm -f conftest*
1442         ])
1443         if test x"${samba_cv_relro}" = x"yes"
1444         then
1445                 RELRO_LDFLAGS="-Wl,-z,relro"
1446         fi
1447 fi
1448
1449 # Set defaults
1450 SYMSEXT="syms"
1451 AC_SUBST(SYMSEXT)
1452
1453 # Assume non-shared by default and override below
1454 BLDSHARED="false"
1455
1456 # these are the defaults, good for lots of systems
1457 HOST_OS="$host_os"
1458 LDSHFLAGS="-shared"
1459 MODULE_EXPORTS=""
1460 SONAMEFLAG="#"
1461 SHLD="\${CC} \${CFLAGS}"
1462 PICFLAG="${PIE_CFLAGS}"
1463 SHLIBEXT="so"
1464 DSO_EXPORTS=""
1465
1466 # this bit needs to be modified for each OS that supports share libs
1467 # You need to specify how to create a shared library and
1468   # how to compile C code to produce PIC object files
1469
1470   AC_MSG_CHECKING([ability to build shared libraries])
1471
1472   # and these are for particular systems
1473   case "$host_os" in
1474                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1475                         case "$host_os" in
1476                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1477                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1478                         esac
1479                         BLDSHARED="true"
1480                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1481                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1482                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1483                         fi
1484                         DYNEXP="-Wl,--export-dynamic"
1485                         PICFLAG="-fPIC"
1486                         SONAMEFLAG="-Wl,-soname="
1487                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1488                         ;;
1489                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1490                         BLDSHARED="true"
1491                         if test "${GCC}" = "yes"; then
1492                                 PICFLAG="-fPIC"
1493                                 SONAMEFLAG="-Wl,-soname="
1494                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1495                                         DYNEXP="-Wl,-E"
1496                                 fi
1497                                 LDSHFLAGS="-shared"
1498                         else
1499                                 PICFLAG="-KPIC"
1500                                 LDSHFLAGS="-G"
1501                         fi
1502                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1503                                 SONAMEFLAG="-Wl,-soname="
1504                         else
1505                                 SONAMEFLAG="-Wl,-h,"
1506                         fi
1507                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1508                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1509                         ;;
1510                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1511                         BLDSHARED="true"
1512                         LDSHFLAGS="-G"
1513                         SONAMEFLAG="-Wl,-h,"
1514                         PICFLAG="-KPIC"   # Is this correct for SunOS
1515                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1516                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1517                         ;;
1518                 *netbsd* | *freebsd* | *dragonfly* )
1519                         BLDSHARED="true"
1520                         LDSHFLAGS="-shared"
1521                         DYNEXP="-Wl,--export-dynamic"
1522                         SONAMEFLAG="-Wl,-soname,"
1523                         PICFLAG="-fPIC -DPIC"
1524                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1525                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1526                         ;;
1527                 *openbsd*)  BLDSHARED="true"
1528                         LDSHFLAGS="-shared"
1529                         DYNEXP="-Wl,-Bdynamic"
1530                         SONAMEFLAG="-Wl,-soname,"
1531                         PICFLAG="-fPIC"
1532                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1533                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1534                         ;;
1535                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1536                         case "$host_os" in
1537                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1538                         ;;
1539                         esac
1540                         BLDSHARED="true"
1541                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1542                         SONAMEFLAG="-Wl,-soname,"
1543                         if test "${GCC}" = "yes"; then
1544                                 PICFLAG="-fPIC"
1545                         else
1546                                 PICFLAG="-KPIC"
1547                         fi
1548                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1549                         ;;
1550                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1551                         BLDSHARED="true"
1552                         # use expfull to export underscored symbols
1553                         # add rtl to remove /lib/crt0.o warning
1554                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1555                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1556                         PICFLAG="-O2"
1557                         # as AIX code is always position independent...
1558                         # .po will just create compile warnings, use po.o:
1559                         if test "${GCC}" != "yes"; then
1560                                 ## for funky AIX compiler using strncpy()
1561                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1562                         fi
1563
1564                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1565                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1566                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1567                         ;;
1568                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1569                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1570                         #       64bit build using HP's cc with CFLAGS="+DD64"
1571                         # hppa: 64bit build unsupported by gcc
1572                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1573                         # HP-UX 11.00 ld needs PHSS_33034
1574                         BLDSHARED="true"
1575                         if test "${GCC}" = "yes"; then
1576                                 PICFLAG="-fPIC"
1577                                 LDSHFLAGS="-shared"
1578                         else
1579                                 PICFLAG="+z"
1580                                 LDSHFLAGS="-b"
1581                                 # "Uses depth-first symbol resolution"
1582                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1583                                 if test "$host_cpu" != "ia64"; then
1584                                         # "don't store literals in read-only memory" (?):
1585                                         PICFLAG="$PICFLAG +ESnolit"
1586                                 fi
1587                         fi
1588                         if test "$host_cpu" = "ia64"; then
1589                                 SHLIBEXT="so"
1590                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1591                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1592                         else
1593                                 SHLIBEXT="sl"
1594                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1595                         fi
1596                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1597                                 SONAMEFLAG="-Wl,-soname="
1598                         else
1599                                 SONAMEFLAG="-Wl,+h,"
1600                         fi
1601                         # PIE/PIC flags at link time are required on HP-UX because
1602                         # linking requires a temporary source file, which is being
1603                         # compiled with the indicated flags - which need to contain
1604                         # PIC flags when we don't support PIE flags:
1605                         if test "$PIE_LDFLAGS" = "" ; then
1606                                 PIE_LDFLAGS=\${PICFLAG}
1607                         fi
1608                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1609                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1610                         ;;
1611                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1612                         BLDSHARED="true"
1613                         LDSHFLAGS="-shared"
1614                         SONAMEFLAG="-Wl,-soname,"
1615                         if test "${GCC}" = "yes"; then
1616                                 PICFLAG="-fPIC"
1617                         fi
1618                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1619                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1620                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1621                                 saved_ldflags="$LDFLAGS"
1622                                 AC_MSG_CHECKING([if $flags works])
1623                                 LDFLAGS="$flags $saved_ldflags"
1624                                 AC_TRY_LINK([],[],
1625                                         [AC_MSG_RESULT([yes])
1626                                         LDSHFLAGS_Z_NODEFS=$flags],
1627                                         AC_MSG_RESULT([no]))
1628                                 LDFLAGS="$saved_ldflags"
1629                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1630                         done
1631                         ;;
1632                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1633                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1634                         ;;
1635                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1636                         BLDSHARED="true"
1637                         LDSHFLAGS="-shared"
1638                         SONAMEFLAG="-Wl,-soname,"
1639                         PICFLAG="-KPIC"
1640                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1641                         ;;
1642                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1643                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1644                         ;;
1645                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1646                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1647                         ;;
1648                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1649                         case "$host" in
1650                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1651                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1652                                         fi
1653                                         LDSHFLAGS="-G"
1654                                         DYNEXP="-Bexport"
1655                                 ;;
1656                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1657                         esac
1658                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1659                         ;;
1660
1661                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1662                         if [ test "$GCC" != yes ]; then
1663                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1664                         fi
1665                         LDSHFLAGS="-G"
1666                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1667                         ;;
1668                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1669                         BLDSHARED="false"
1670                         LDSHFLAGS=""
1671                         ;;
1672
1673                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1674                         BLDSHARED="true"
1675                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1676                         CFLAGS="$CFLAGS -fno-common"
1677                         SHLD="\${CC}"
1678                         SHLIBEXT="dylib"
1679                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1680                         SHLIBEXT="dylib"
1681                         # Since gcc doesn't fail on unrecognised options, the
1682                         # PIE test incorrectly succeeds. Darwin gcc does not
1683                         # actually support the PIE stuff.
1684                         PIE_LDFLAGS=
1685                         PIE_CFLAGS=
1686                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1687                         ;;
1688
1689                 *)
1690                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1691                         ;;
1692   esac
1693
1694 if test "$enable_shared" != "yes"; then
1695         BLDSHARED=false
1696 fi
1697
1698 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1699         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1700 fi
1701
1702 if test x"$BLDSHARED" = x"true" ; then
1703         LDFLAGS="$LDFLAGS -L./bin"
1704 fi
1705
1706 AC_MSG_RESULT($BLDSHARED)
1707
1708 if test x"$enable_developer" = x"yes" ; then
1709         default_as_needed=auto
1710 else
1711         default_as_needed=no
1712 fi
1713 AC_ARG_ENABLE(as-needed,
1714         AS_HELP_STRING([--enable-as-needed],
1715         [Turn on as-needed support if available (default=no)]),
1716         [enable_as_needed=$enableval],
1717         [enable_as_needed=$default_as_needed])
1718 if test "x$enable_as_needed" != xno; then
1719     saved_before_as_needed_ldflags="$LDFLAGS"
1720     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1721         saved_ldflags="$LDFLAGS"
1722         AC_MSG_CHECKING([if $flags works])
1723         LDFLAGS="$flags $saved_ldflags"
1724         AC_TRY_LINK([],[],
1725                 [AC_MSG_RESULT([yes])
1726                 LD_AS_NEEDED_FLAG=$flags
1727                 ld_as_needed_flag_found=yes],
1728                 AC_MSG_RESULT([no]))
1729         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1730         test x"$ld_as_needed_flag_found" = xyes && break
1731     done
1732 fi
1733
1734 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1735 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1736         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1737 cat > conftest_shb.c <<END
1738 void b() {}
1739 END
1740 cat > conftest_sha.c <<END
1741 extern void b();
1742 void a() {
1743         b();
1744 }
1745 END
1746 cat > conftest.c <<END
1747 extern void a();
1748 int main() {
1749         a();
1750         return 0;
1751 }
1752 END
1753
1754         rm -fr conftest
1755         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1756         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1757         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1758         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1759         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1760         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1761         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1762         then
1763                 AC_MSG_RESULT([no])
1764         else
1765                 ld_as_needed_flag_found=no
1766                 LDFLAGS="$saved_before_as_needed_ldflags"
1767                 AC_MSG_RESULT([yes])
1768         fi
1769         rm conftest* libconftest*
1770 fi
1771
1772 # check if we have to disable LD_AS_NEEDED_FLAG:
1773 # On some systems for a veriety of reasons linking with
1774 # -Wl,--as-needed -lreadline -lncurses fails
1775 # we have to retest, if these combination is detected before.
1776 # Bugzilla #7209
1777
1778 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1779         if test x$ld_as_needed_flag_found = xyes ; then
1780                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1781                 # try if check no fails
1782                 save_LIBS=$LIBS
1783                 LIBS="$LIBS $TERMLIBS"
1784                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1785                 LIBS="$save_LIBS"
1786         fi
1787 fi
1788
1789
1790
1791 # for historical reasons almost all linkers don't complain about unresolved
1792 # symbols in shared libs. Except for the internal samba modules we want to get
1793 # errors when we produce a shared lib with unresolved symbols. On some
1794 # platforms unresolved symbols might be intended, so we might have to add
1795 # platform specific exceptions here.
1796
1797 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1798         saved_ldflags="$LDFLAGS"
1799         AC_MSG_CHECKING([if $flags works])
1800         LDFLAGS="$flags $saved_ldflags"
1801         AC_TRY_LINK([],[],
1802         [AC_MSG_RESULT([yes])
1803         LDSHFLAGS_Z_DEFS=$flags
1804         ldshflags_z_defs_found=yes],
1805         AC_MSG_RESULT([no]))
1806         LDFLAGS=$saved_ldflags
1807         test x"$ldshflags_z_defs_found" = xyes && break
1808 done
1809
1810 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1811 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1812 AC_MSG_CHECKING([LDFLAGS])
1813 AC_MSG_RESULT([$LDFLAGS])
1814 AC_MSG_CHECKING([DYNEXP])
1815 AC_MSG_RESULT([$DYNEXP])
1816
1817 #######################################################
1818 # test whether building a shared library actually works
1819 if test $BLDSHARED = true; then
1820
1821 AC_MSG_CHECKING([SHLD])
1822 AC_MSG_RESULT([$SHLD])
1823 AC_MSG_CHECKING([LDSHFLAGS])
1824 AC_MSG_RESULT([$LDSHFLAGS])
1825
1826 AC_MSG_CHECKING([SHLIBEXT])
1827 AC_MSG_RESULT([$SHLIBEXT])
1828 AC_MSG_CHECKING([SONAMEFLAG])
1829 AC_MSG_RESULT([$SONAMEFLAG])
1830
1831 AC_MSG_CHECKING([PICFLAG])
1832 AC_MSG_RESULT([$PICFLAG])
1833
1834 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1835 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1836
1837 AC_CACHE_CHECK([whether building shared libraries actually works],
1838                [ac_cv_shlib_works],[
1839    # try building a trivial shared library
1840    ac_cv_shlib_works=no
1841    # The $SHLD and $LDSHFLAGS variables may contain references to other
1842    # variables so they need to be eval'ed.
1843    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1844    then
1845      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1846      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1847      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1848      then
1849        ac_cv_shlib_works=yes
1850      fi
1851    fi
1852    rm -f "shlib.$SHLIBEXT" shlib.o
1853
1854 ])
1855 if test $ac_cv_shlib_works = no; then
1856    BLDSHARED=false
1857 fi
1858 fi
1859
1860 if test x"$BLDSHARED" != x"true"; then
1861         LDSHFLAGS="shared-libraries-disabled"
1862         SONAMEFLAG="shared-libraries-disabled"
1863         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1864         SHLD="shared-libraries-disabled"
1865         PICFLAG="${PIE_CFLAGS}"
1866         SHLIBEXT="shared_libraries_disabled"
1867         smbtorture4_possible=no
1868 fi
1869
1870 AC_MSG_CHECKING([used PICFLAG])
1871 AC_MSG_RESULT([$PICFLAG])
1872
1873 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1874
1875
1876
1877 ###########################################################
1878 #
1879 # Configuration of subsystems / libraries
1880 #
1881 ###########################################################
1882
1883 INSTALLLIBCMD_SH=:
1884 INSTALLLIBCMD_A=:
1885 UNINSTALLLIBCMD_SH=:
1886 UNINSTALLLIBCMD_A=:
1887
1888 if test $BLDSHARED = true; then
1889         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
1890         UNINSTALLLIBCMD_SH="rm -f"
1891 fi
1892 if test $enable_static = yes; then
1893         INSTALLLIBCMD_A="\$(INSTALLCMD)"
1894         UNINSTALLLIBCMD_A="rm -f"
1895 fi
1896
1897 #################################################
1898 # --disable-shared-libs
1899 # can be used to disable the internal use of shared libs altogether
1900 # (this only has an effect when building shared libs is enabled)
1901 #
1902 USESHARED=false
1903 AC_SUBST(USESHARED)
1904
1905 AC_MSG_CHECKING(whether to use shared libraries internally)
1906 AC_ARG_ENABLE([shared-libs],
1907         AS_HELP_STRING([--enable-shared-libs],
1908                 [Use shared libraries internally (default=yes)]),
1909         [enable_shared_libs=$enableval],
1910         [enable_shared_libs=yes])
1911
1912 if test x"$enable_shared_libs" != x"no" ; then
1913         USESHARED=$BLDSHARED
1914 fi
1915
1916 AC_MSG_RESULT([$USESHARED])
1917
1918 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
1919         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
1920 fi
1921
1922 #################################################
1923 # --with-static-libs=LIBS:
1924 #   link (internal) libs dynamically or statically?
1925 #
1926 # If a subsystem is built as a library then this controls whether they are
1927 # linked into Samba targets statically or dynamically:
1928 #
1929 # * If we build the shared library at all, we link dynamically by default.
1930 #
1931 # * We only link statically if we don't build shared or if the library
1932 #   appears in the --with-static-libs configure option.
1933 #
1934 # Example:
1935 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
1936 #   of linking the dynamic variant with -ltalloc.
1937 #
1938 # NOTE: This option only affects libraries that we do not only build
1939 # but that samba also links against as libraries (as opposed to linking
1940 # the plain object files. - This has to be configured in Makefile.in.
1941 # So in particular it does not harm to give invalid or unknown names here.
1942 #
1943
1944 AC_ARG_WITH([static-libs],
1945         [AS_HELP_STRING([--with-static-libs=LIBS],
1946                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
1947         [AS_IF([test $withval],
1948                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
1949                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
1950                         eval LINK_$lib=STATIC
1951                 done], [])],
1952         [])
1953
1954 #
1955 # WORKAROUND:
1956 #   until we have organized other internal subsystems (as util, registry
1957 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
1958 #   dynamically to samba programs.
1959 #
1960 LINK_LIBNETAPI=STATIC
1961
1962 LINK_LIBSMBCLIENT=STATIC
1963
1964 #
1965 #  The library versions are hardcoded here
1966 #  and filled into the LIBFOO_SOVER variable.
1967 #
1968 #  TODO: for talloc and tdb (at least), these should
1969 #  be extracted from their respective source directories
1970 #
1971 AC_ARG_ENABLE(external_libtalloc,
1972         [AS_HELP_STRING([--enable-external-libtalloc],
1973                 [Enable external talloc [default=auto]])],
1974         [ enable_external_libtalloc=$enableval ],
1975         [ enable_external_libtalloc=auto ])
1976
1977 if test "x$enable_external_libtalloc" != xno
1978 then
1979         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
1980                 [ enable_external_libtalloc=yes ],
1981                 [ if test x$enable_external_libtalloc = xyes; then
1982                         AC_MSG_ERROR([Unable to find libtalloc])
1983                   else
1984                         enable_external_libtalloc=no
1985                   fi
1986                 ])
1987 fi
1988
1989 if test "x$enable_external_libtalloc" = xno
1990 then
1991         m4_include(../lib/talloc/libtalloc.m4)
1992         if test x"$USESHARED" == x"no" ; then
1993                 LINK_LIBTALLOC=STATIC
1994         fi
1995         LIBTALLOCVERSION=`grep ^VERSION ${tallocdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
1996         SMB_LIBRARY(talloc, 2, ${LIBTALLOCVERSION})
1997         LIBTALLOC_OBJ0=""
1998         for obj in ${TALLOC_OBJ}; do
1999                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
2000         done
2001         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
2002         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
2003         AC_SUBST(LIBTALLOC_OBJ0)
2004
2005         TALLOCTORT="bin/talloctort"
2006         AC_SUBST(TALLOCTORT)
2007 fi
2008
2009
2010 AC_ARG_ENABLE(external_libtdb,
2011         [AS_HELP_STRING([--enable-external-libtdb],
2012                 [Enable external tdb [default=auto]])],
2013                 [ enable_external_libtdb=$enableval ],
2014                 [ enable_external_libtdb=auto ])
2015
2016 if test "x$enable_external_libtdb" != xno
2017 then
2018         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.6,
2019                 [ enable_external_libtdb=yes ],
2020                 [
2021                 if test x$enable_external_libtdb = xyes; then
2022                         AC_MSG_ERROR([Unable to find libtdb])
2023                 else
2024                         enable_external_libtdb=no
2025                 fi
2026                 ])
2027 fi
2028
2029 AC_SUBST(LIBTDB_OBJ0)
2030 if test "x$enable_external_libtdb" = xno
2031 then
2032         m4_include(../lib/tdb/libtdb.m4)
2033         if test x"$USESHARED" == x"no" ; then
2034                 LINK_LIBTDB=STATIC
2035         fi
2036         LIBTDBVERSION=`grep ^VERSION ${tdbdir}/wscript | sed -e "s/'//g" -e 's/.* //'`
2037         SMB_LIBRARY(tdb, 1, ${LIBTDBVERSION})
2038         LIBTDB_OBJ0=""
2039         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
2040         for obj in ${TDB_OBJ}; do
2041                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
2042         done
2043         AC_SUBST(LIBTDB_OBJ0)
2044         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
2045         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
2046
2047         TDBBACKUP="bin/tdbbackup"
2048         AC_SUBST(TDBBACKUP)
2049         TDBDUMP="bin/tdbdump"
2050         AC_SUBST(TDBDUMP)
2051         TDBRESTORE="bin/tdbrestore"
2052         AC_SUBST(TDBRESTORE)
2053         TDBTOOL="bin/tdbtool"
2054         AC_SUBST(TDBTOOL)
2055         TDBTORTURE="bin/tdbtorture"
2056         AC_SUBST(TDBTORTURE)
2057 fi
2058
2059 SMB_LIBRARY(netapi, 0)
2060 SMB_LIBRARY(smbclient, 0)
2061 SMB_LIBRARY(smbsharemodes, 0)
2062 SMB_LIBRARY(addns, 0, [], no, [undefined API])
2063
2064
2065
2066 ################
2067
2068 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2069 AC_TRY_RUN([#include <stdio.h>
2070 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2071 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2072 if test x"$samba_cv_have_longlong" = x"yes"; then
2073     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2074     AC_CHECK_TYPE(intptr_t, unsigned long long)
2075 else
2076     AC_CHECK_TYPE(intptr_t, unsigned long)
2077 fi
2078
2079 #
2080 # Check if the compiler supports the LL prefix on long long integers.
2081 # AIX needs this.
2082
2083 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2084     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2085         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2086 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2087    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2088 fi
2089
2090
2091 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2092 AC_TRY_RUN([#include <time.h>
2093 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2094 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2095 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2096     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2097 fi
2098
2099 AC_CACHE_CHECK([for TIME_T_MAX],samba_cv_TIME_T_MAX,[
2100 AC_TRY_RUN([#include <time.h>
2101 main() {
2102         struct tm *tm;
2103         if (sizeof(time_t) == 8) {
2104                 time_t max_time = 0x7fffffffffffffffll;
2105                 tm = gmtime(&max_time);
2106                 /* This should fail with 32-bit tm_year. */
2107                 if (tm == NULL) {
2108                         /* Max time_t that works with 32-bit int tm_year in struct tm. */
2109                         max_time = 67768036191676799ll;
2110                         tm = gmtime(&max_time);
2111                         if (tm) {
2112                                 exit(0);
2113                         }
2114                 }
2115         }
2116         exit(1);
2117 }],
2118 samba_cv_TIME_T_MAX=yes,samba_cv_TIME_T_MAX=no,samba_cv_TIME_T_MAX=cross)])
2119 if test x"$samba_cv_TIME_T_MAX" = x"yes"; then
2120     AC_DEFINE(TIME_T_MAX,67768036191676799ll,[The maximum value of the 'time_t' type])
2121 fi
2122
2123
2124 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2125 AC_TRY_RUN([#include <stdio.h>
2126 #include <sys/stat.h>
2127 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2128 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2129 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2130     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2131 fi
2132
2133 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2134 AC_TRY_RUN([
2135 #if defined(HAVE_UNISTD_H)
2136 #include <unistd.h>
2137 #endif
2138 #include <stdio.h>
2139 #include <sys/stat.h>
2140 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2141 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2142 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2143     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2144 fi
2145
2146 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2147 AC_TRY_RUN([
2148 #if defined(HAVE_UNISTD_H)
2149 #include <unistd.h>
2150 #endif
2151 #include <stdio.h>
2152 #include <sys/stat.h>
2153 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2154 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2155 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2156     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2157 fi
2158
2159 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2160 AC_TRY_RUN([
2161 #if defined(HAVE_UNISTD_H)
2162 #include <unistd.h>
2163 #endif
2164 #include <stdio.h>
2165 #include <sys/stat.h>
2166 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2167 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2168 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2169     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2170 fi
2171
2172 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2173 AC_TRY_RUN([
2174 #if defined(HAVE_UNISTD_H)
2175 #include <unistd.h>
2176 #endif
2177 #include <stdio.h>
2178 #include <sys/stat.h>
2179 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2180 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2181 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2182     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2183 fi
2184
2185 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2186 AC_TRY_RUN([
2187 #if defined(HAVE_UNISTD_H)
2188 #include <unistd.h>
2189 #endif
2190 #include <stdio.h>
2191 #include <sys/stat.h>
2192 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2193 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2194 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2195     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2196 fi
2197
2198 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2199 AC_TRY_COMPILE([
2200 #if defined(HAVE_UNISTD_H)
2201 #include <unistd.h>
2202 #endif
2203 #include <sys/types.h>
2204 #include <dirent.h>],
2205 [DIR64 de;],
2206 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2207 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2208     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2209 fi
2210
2211 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2212 AC_TRY_COMPILE([
2213 #if defined(HAVE_UNISTD_H)
2214 #include <unistd.h>
2215 #endif
2216 #include <sys/types.h>
2217 #include <dirent.h>],
2218 [struct dirent64 de;],
2219 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2220 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2221     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2222 fi
2223
2224 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2225 AC_TRY_RUN([
2226 #if defined(HAVE_UNISTD_H)
2227 #include <unistd.h>
2228 #endif
2229 #include <sys/types.h>
2230 main() { dev_t dev; int i = major(dev); return 0; }],
2231 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2232 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2233     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2234 fi
2235
2236 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2237 AC_TRY_RUN([
2238 #if defined(HAVE_UNISTD_H)
2239 #include <unistd.h>
2240 #endif
2241 #include <sys/types.h>
2242 main() { dev_t dev; int i = minor(dev); return 0; }],
2243 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2244 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2245     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2246 fi
2247
2248 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2249 AC_TRY_RUN([
2250 #if defined(HAVE_UNISTD_H)
2251 #include <unistd.h>
2252 #endif
2253 #include <sys/types.h>
2254 main() { dev_t dev = makedev(1,2); return 0; }],
2255 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2256 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2257     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2258 fi
2259
2260 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2261 AC_TRY_RUN([#include <stdio.h>
2262 main() { char c; c=250; exit((c > 0)?0:1); }],
2263 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2264 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2265     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2266 fi
2267
2268 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2269 AC_TRY_COMPILE([#include <sys/types.h>
2270 #include <dirent.h>
2271 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2272 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2273 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2274     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2275 fi
2276
2277 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2278 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2279 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2280 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2281     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2282 fi
2283
2284 if test x"$libreplace_cv_HAVE_CLOCK_GETTIME_IN_LIBRT" = xyes ; then
2285         LIBS="$LIBS -lrt"
2286 fi
2287
2288 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2289 AC_TRY_RUN([#include <sys/types.h>
2290 #include <dirent.h>
2291 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2292 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2293 di->d_name[0] == 0) exit(0); exit(1);} ],
2294 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2295 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2296     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2297 fi
2298
2299 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2300 AC_TRY_COMPILE([#include <sys/types.h>
2301 #include <utime.h>],
2302 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2303 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2304 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2305     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2306 fi
2307
2308 ##############
2309 # Check utmp details, but only if our OS offers utmp.h
2310 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2311 dnl  utmp and utmpx come in many flavours
2312 dnl  We need to check for many of them
2313 dnl  But we don't need to do each and every one, because our code uses
2314 dnl  mostly just the utmp (not utmpx) fields.
2315
2316 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2317
2318 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2319 AC_TRY_COMPILE([#include <sys/types.h>
2320 #include <utmp.h>],
2321 [struct utmp ut;  ut.ut_name[0] = 'a';],
2322 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2323 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2324     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2325 fi
2326
2327 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2328 AC_TRY_COMPILE([#include <sys/types.h>
2329 #include <utmp.h>],
2330 [struct utmp ut;  ut.ut_user[0] = 'a';],
2331 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2332 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2333     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2334 fi
2335
2336 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2337 AC_TRY_COMPILE([#include <sys/types.h>
2338 #include <utmp.h>],
2339 [struct utmp ut;  ut.ut_id[0] = 'a';],
2340 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2341 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2342     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2343 fi
2344
2345 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2346 AC_TRY_COMPILE([#include <sys/types.h>
2347 #include <utmp.h>],
2348 [struct utmp ut;  ut.ut_host[0] = 'a';],
2349 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2350 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2351     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2352 fi
2353
2354 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2355 AC_TRY_COMPILE([#include <sys/types.h>
2356 #include <utmp.h>],
2357 [struct utmp ut;  time_t t; ut.ut_time = t;],
2358 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2359 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2360     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2361 fi
2362
2363 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2364 AC_TRY_COMPILE([#include <sys/types.h>
2365 #include <utmp.h>],
2366 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2367 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2368 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2369     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2370 fi
2371
2372 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2373 AC_TRY_COMPILE([#include <sys/types.h>
2374 #include <utmp.h>],
2375 [struct utmp ut;  ut.ut_type = 0;],
2376 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2377 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2378     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2379 fi
2380
2381 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2382 AC_TRY_COMPILE([#include <sys/types.h>
2383 #include <utmp.h>],
2384 [struct utmp ut;  ut.ut_pid = 0;],
2385 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2386 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2387     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2388 fi
2389
2390 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2391 AC_TRY_COMPILE([#include <sys/types.h>
2392 #include <utmp.h>],
2393 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2394 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2395 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2396     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2397 fi
2398
2399 dnl Look for the IPv6 varient by preference. Many systems have both.
2400 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2401 AC_TRY_COMPILE([#include <sys/types.h>
2402 #include <utmp.h>],
2403 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2404 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2405 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2406     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2407 fi
2408
2409 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2410 AC_TRY_COMPILE([#include <sys/types.h>
2411 #include <utmp.h>],
2412 [struct utmp ut;  ut.ut_addr = 0;],
2413 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2414 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2415     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2416 fi
2417
2418 if test x$ac_cv_func_pututline = xyes ; then
2419   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2420   AC_TRY_COMPILE([#include <sys/types.h>
2421 #include <utmp.h>],
2422   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2423   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2424   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2425       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2426   fi
2427 fi
2428
2429 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2430 AC_TRY_COMPILE([#include <sys/types.h>
2431 #include <utmpx.h>],
2432 [struct utmpx ux;  ux.ut_syslen = 0;],
2433 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2434 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2435     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2436 fi
2437
2438 fi
2439 # end utmp details
2440
2441 AC_CACHE_CHECK([for linux fallocate],samba_cv_HAVE_LINUX_FALLOCATE,[
2442 AC_TRY_COMPILE([
2443 #if defined(HAVE_UNISTD_H)
2444 #include <unistd.h>
2445 #endif
2446 #include <sys/types.h>
2447 #define _GNU_SOURCE
2448 #include <fcntl.h>
2449 #if defined(HAVE_LINUX_FALLOC_H)
2450 #include <linux/falloc.h>
2451 #endif],
2452 [int ret = fallocate(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2453 samba_cv_HAVE_LINUX_FALLOCATE=yes,samba_cv_HAVE_LINUX_FALLOCATE=no)])
2454 if test x"$samba_cv_HAVE_LINUX_FALLOCATE" = x"yes" && test x"$ac_cv_func_fallocate" = x"yes"; then
2455     AC_DEFINE(HAVE_LINUX_FALLOCATE,1,[Whether the Linux 'fallocate' function is available])
2456 fi
2457
2458 AC_CACHE_CHECK([for linux fallocate64],samba_cv_HAVE_LINUX_FALLOCATE64,[
2459 AC_TRY_COMPILE([
2460 #if defined(HAVE_UNISTD_H)
2461 #include <unistd.h>
2462 #endif
2463 #include <sys/types.h>
2464 #define _GNU_SOURCE
2465 #include <fcntl.h>
2466 #if defined(HAVE_LINUX_FALLOC_H)
2467 #include <linux/falloc.h>
2468 #endif],
2469 [int ret = fallocate64(0, FALLOC_FL_KEEP_SIZE, 0, 10);],
2470 samba_cv_HAVE_LINUX_FALLOCATE64=yes,samba_cv_HAVE_LINUX_FALLOCATE64=no)])
2471 if test x"$samba_cv_HAVE_LINUX_FALLOCATE64" = x"yes" && test x"$ac_cv_func_fallocate64" = x"yes"; then
2472     AC_DEFINE(HAVE_LINUX_FALLOCATE64,1,[Whether the Linux 'fallocate64' function is available])
2473 fi
2474
2475 AC_CACHE_CHECK([for getcwd takes NULL],samba_cv_GETCWD_TAKES_NULL,[
2476 AC_TRY_RUN([
2477 #if defined(HAVE_UNISTD_H)
2478 #include <unistd.h>
2479 #endif
2480 main() { char *s = getcwd(NULL,0); if (s) exit(0); exit(1); }],
2481 samba_cv_GETCWD_TAKES_NULL=yes,samba_cv_GETCWD_TAKES_NULL=no,samba_cv_GETCWD_TAKES_NULL=cross)])
2482 if test x"$samba_cv_GETCWD_TAKES_NULL" = x"yes"; then
2483     AC_DEFINE(GETCWD_TAKES_NULL,1,[Whether the getcwd function takes NULL as an argument])
2484 fi
2485
2486 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2487 AC_ARG_WITH(libiconv,
2488 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2489 [
2490   if test "$withval" = "no" ; then
2491     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2492   else
2493      if test "$withval" != "yes" ; then
2494         ICONV_PATH_SPEC=yes
2495         ICONV_LOOK_DIRS="$withval"
2496      fi
2497   fi
2498 ])
2499
2500 for i in $ICONV_LOOK_DIRS ; do
2501
2502     save_LIBS="$LIBS"
2503     save_LDFLAGS="$LDFLAGS"
2504     save_CPPFLAGS="$CPPFLAGS"
2505
2506     iconv_current_LIBS=""
2507     iconv_current_LDFLAGS=""
2508     iconv_current_CPPFLAGS=""
2509
2510     ICONV_FOUND="no"
2511     unset libext
2512
2513     #  This is here to handle -withval stuff for --with-libiconv
2514     #  Perhaps we should always add a -L
2515     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2516
2517     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2518     # installation paths. This gets a little tricky since we might have iconv
2519     # in both libiconv and in libc. In this case the jm_ICONV test will always
2520     # succeed when the header is found. To counter this, make sure the
2521     # library directory is there and check the ABI directory first (which
2522     # should be harmless on other systems, but causes tons of linker warnings on
2523     # 64bit Ubuntu systems).
2524     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2525     # installed, I've decided to fix the linker warnings.
2526     # -- Kai
2527     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2528     for l in "lib" "lib32" "lib/hpux32"; do
2529         if test -d "$i/$l" ; then
2530                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2531                 LIBS=
2532                 export LDFLAGS LIBS CPPFLAGS
2533                 # Try to find iconv(3)
2534                 jm_ICONV($i/$l)
2535                 if test x"$ICONV_FOUND" = "xyes" ; then
2536                     libext="$l"
2537                     break
2538                 fi
2539         fi
2540     done
2541
2542     if test x"$ICONV_FOUND" = "xyes" ; then
2543         iconv_current_LDFLAGS="-L$i/$libext"
2544         iconv_current_CPPFLAGS="-I$i/include"
2545
2546         if test x"$jm_cv_lib_iconv" != x; then
2547             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2548         else
2549             # We found iconv in libc.
2550             iconv_current_LIBS=""
2551         fi
2552
2553     fi
2554
2555     if test x"$ICONV_FOUND" = "xyes" ; then
2556
2557         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2558         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2559         LIBS="$save_LIBS $iconv_current_LIBS"
2560         export LDFLAGS LIBS CPPFLAGS
2561
2562         default_dos_charset=no
2563         default_unix_charset=no
2564
2565         # check for default dos charset name
2566         for j in CP850 IBM850 ; do
2567             rjs_CHARSET($j)
2568             default_dos_charset="$ICONV_CHARSET"
2569             if test x"$default_dos_charset" = x"$j"; then
2570                 break
2571             fi
2572         done
2573
2574         # check for default unix charset name
2575         for j in UTF-8 UTF8 ; do
2576             rjs_CHARSET($j)
2577             default_unix_charset="$ICONV_CHARSET"
2578             if test x"$default_unix_charset" = x"$j"; then
2579                 break
2580             fi
2581         done
2582
2583         if test "$default_dos_charset" != "no" -a \
2584                 "$default_dos_charset" != "cross" -a \
2585                 "$default_unix_charset" != "no" -a \
2586                 "$default_unix_charset" != "cross"
2587         then
2588                 samba_cv_HAVE_NATIVE_ICONV=yes
2589         else
2590             if test "$default_dos_charset" = "cross" -o \
2591                      "$default_unix_charset" = "cross"
2592             then
2593                     samba_cv_HAVE_NATIVE_ICONV=cross
2594             else
2595                     samba_cv_HAVE_NATIVE_ICONV=no
2596             fi
2597         fi
2598
2599         # At this point, we have a libiconv candidate. We know that
2600         # we have the right headers and libraries, but we don't know
2601         # whether it does the conversions we want. We can't test this
2602         # because we are cross-compiling. This is not necessarily a big
2603         # deal, since we can't guarantee that the results we get now will
2604         # match the results we get at runtime anyway.
2605         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2606             default_dos_charset="CP850"
2607             default_unix_charset="UTF-8"
2608             samba_cv_HAVE_NATIVE_ICONV=yes
2609             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2610             AC_MSG_WARN([$default_dos_charset and $default_unix_charset to UCS-16LE])
2611         fi
2612
2613         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2614
2615             CPPFLAGS=$save_CPPFLAGS
2616             LDFLAGS=$save_LDFLAGS
2617             LIBS=$save_LIBS
2618
2619             if test x"$iconv_current_LIBS" != x; then
2620                 LIBS="$LIBS $iconv_current_LIBS"
2621             fi
2622
2623             # Add the flags we need to CPPFLAGS and LDFLAGS
2624             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2625             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2626
2627             # Turn the #defines into string literals
2628             default_dos_charset="\"$default_dos_charset\""
2629             default_unix_charset="\"$default_unix_charset\""
2630
2631             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2632             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2633             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2634
2635            break
2636         fi
2637
2638     # We didn't find a working iconv, so keep going
2639     fi
2640
2641     #  We only need to clean these up here for the next pass through the loop
2642     CPPFLAGS=$save_CPPFLAGS
2643     LDFLAGS=$save_LDFLAGS
2644     LIBS=$save_LIBS
2645     export LDFLAGS LIBS CPPFLAGS
2646 done
2647 unset libext
2648
2649
2650 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2651     AC_MSG_WARN([Sufficient support for iconv function was not found.
2652     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2653    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2654    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2655 fi
2656
2657
2658 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2659 AC_TRY_RUN([
2660 #include <sys/types.h>
2661 #include <fcntl.h>
2662 #ifndef F_GETLEASE
2663 #define F_GETLEASE      1025
2664 #endif
2665 main() {
2666        int fd = open("/dev/null", O_RDONLY);
2667        return fcntl(fd, F_GETLEASE, 0) == -1;
2668 }
2669 ],
2670 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2671 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2672     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2673 fi
2674
2675 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2676 AC_TRY_RUN([
2677 #include <sys/types.h>
2678 #include <fcntl.h>
2679 #include <signal.h>
2680 #ifndef F_NOTIFY
2681 #define F_NOTIFY 1026
2682 #endif
2683 main() {
2684         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2685 }
2686 ],
2687 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2688 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2689     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2690 fi
2691
2692 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2693 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2694 AC_CHECK_FUNCS(inotify_init)
2695 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2696 ],
2697 samba_cv_HAVE_INOTIFY=yes,
2698 samba_cv_HAVE_INOTIFY=no,
2699 samba_cv_HAVE_INOTIFY=cross)
2700
2701 if test x"$ac_cv_func_inotify_init" = x"yes"; then
2702     if test  x"$ac_cv_header_sys_inotify_h" = x"yes" -o x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2703         AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel or sys has inotify support])
2704     fi
2705 fi
2706
2707 #################################################
2708 # Check if FAM notifications are available. For FAM info, see
2709 #       http://oss.sgi.com/projects/fam/
2710 #       http://savannah.nongnu.org/projects/fam/
2711 AC_ARG_ENABLE(fam,
2712 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2713
2714 if test x$enable_fam != xno; then
2715     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2716     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2717         # On IRIX, libfam requires libC, but other FAM implementations
2718         # might not need it.
2719         AC_CHECK_LIB(fam, FAMOpen2,
2720             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2721             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2722             [samba_cv_HAVE_LIBFAM=no])
2723
2724         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2725             samba_fam_xtra=-lC
2726             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2727                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2728                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2729                 [samba_cv_HAVE_LIBFAM=no])
2730             unset samba_fam_xtra
2731         fi
2732     fi
2733     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2734         default_shared_modules="$default_shared_modules vfs_notify_fam"
2735         AC_TRY_COMPILE([#include <fam.h>],
2736                     [enum FAMCodes code = FAMChanged;],
2737                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2738                         [Whether fam.h contains a typedef for enum FAMCodes]),
2739                     [])
2740     fi
2741
2742     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2743         AC_CHECK_LIB(fam, FAMNoExists,
2744             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2745     fi
2746
2747     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2748         AC_MSG_ERROR(FAM support requested but FAM library not available )
2749     fi
2750 fi
2751
2752 AC_SUBST(SMB_FAM_LIBS)
2753
2754 #################################################
2755 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2756
2757
2758 with_dmapi_support=auto
2759 AC_MSG_CHECKING(whether to use DMAPI support)
2760 AC_ARG_WITH(dmapi,
2761 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2762 [ case "$withval" in
2763   yes|no)
2764     with_dmapi_support=$withval
2765     ;;
2766   esac ]
2767 )
2768 AC_MSG_RESULT([$with_dmapi_support])
2769
2770 if test x"$with_dmapi_support" != xno ; then
2771         SMB_CHECK_DMAPI([], [
2772                 AC_MSG_NOTICE(DMAPI support not present)
2773                 if test x"$with_dmapi_support" = xyes ; then
2774                         AC_MSG_ERROR(no DMAPI support found but requested!)
2775                 fi
2776                 ]
2777         )
2778 fi
2779
2780 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2781 # Theoretically it should work with AIX JFS2 too but this needs testing
2782 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2783     default_shared_modules="$default_shared_modules vfs_tsmsm"
2784 fi
2785
2786 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2787 AC_TRY_RUN([
2788 #include <sys/types.h>
2789 #include <fcntl.h>
2790 #include <signal.h>
2791 #include <sys/file.h>
2792 #ifndef LOCK_MAND
2793 #define LOCK_MAND       32
2794 #define LOCK_READ       64
2795 #endif
2796 main() {
2797         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2798 }
2799 ],
2800 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2801 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2802     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2803 fi
2804
2805
2806 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2807 AC_TRY_COMPILE([#include <sys/types.h>
2808 #include <fcntl.h>],
2809 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2810 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2811 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2812     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2813 fi
2814
2815 #################################################
2816 # Check for POSIX capability support
2817
2818 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2819     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2820     [], [])
2821
2822 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2823
2824     ac_save_LIBS=$LIBS
2825     AC_LIBTESTFUNC(cap, cap_get_proc)
2826
2827     AC_CACHE_CHECK([for POSIX capabilities],
2828             samba_cv_HAVE_POSIX_CAPABILITIES,
2829             [
2830                 AC_TRY_RUN([
2831 #include <sys/types.h>
2832 #include <sys/capability.h>
2833 main() {
2834  cap_t cap;
2835  cap_value_t vals[1];
2836  if (!(cap = cap_get_proc()))
2837    exit(1);
2838  vals[0] = CAP_CHOWN;
2839  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2840  cap_set_proc(cap);
2841  exit(0);
2842 }],
2843                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2844                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2845                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2846             ])
2847
2848 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2849     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2850             [Whether POSIX capabilities are available])
2851 else
2852     LIBS=$ac_save_LIBS
2853 fi
2854
2855 fi
2856
2857 #
2858 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2859 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2860 #
2861
2862 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2863 AC_TRY_COMPILE([#include <sys/types.h>
2864 #if defined(HAVE_RPC_RPC_H)
2865 #include <rpc/rpc.h>
2866 #endif],
2867 [int16 testvar;],
2868 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2869 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2870     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2871 fi
2872
2873 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2874 AC_TRY_COMPILE([#include <sys/types.h>
2875 #if defined(HAVE_RPC_RPC_H)
2876 #include <rpc/rpc.h>
2877 #endif],
2878 [uint16 testvar;],
2879 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2880 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2881     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2882 fi
2883
2884 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2885 AC_TRY_COMPILE([#include <sys/types.h>
2886 #if defined(HAVE_RPC_RPC_H)
2887 #include <rpc/rpc.h>
2888 #endif],
2889 [int32 testvar;],
2890 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2891 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2892     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2893 fi
2894
2895 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2896 AC_TRY_COMPILE([#include <sys/types.h>
2897 #if defined(HAVE_RPC_RPC_H)
2898 #include <rpc/rpc.h>
2899 #endif],
2900 [uint32 testvar;],
2901 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2902 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2903     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2904 fi
2905
2906 dnl
2907 dnl Some systems (SCO) have a problem including
2908 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2909 dnl as a #define in <prot.h> and as part of an enum
2910 dnl in <rpc/rpc.h>.
2911 dnl
2912
2913 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2914 AC_TRY_COMPILE([#include <sys/types.h>
2915 #ifdef HAVE_SYS_SECURITY_H
2916 #include <sys/security.h>
2917 #include <prot.h>
2918 #endif  /* HAVE_SYS_SECURITY_H */
2919 #if defined(HAVE_RPC_RPC_H)
2920 #include <rpc/rpc.h>
2921 #endif],
2922 [int testvar;],
2923 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2924 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2925     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2926 fi
2927
2928 AC_MSG_CHECKING([for test routines])
2929 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2930            AC_MSG_RESULT(yes),
2931            AC_MSG_ERROR([cant find test code. Aborting config]),
2932            AC_MSG_WARN([cannot run when cross-compiling]))
2933
2934 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2935 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2936            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2937 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2938     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2939 fi
2940
2941 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2942 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2943            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2944 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2945     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2946 fi
2947
2948 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2949 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2950 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2951 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2952 AC_CHECK_FUNCS(getpagesize)
2953
2954 ################################################
2955 # look for a method of setting the effective uid
2956 seteuid=no;
2957
2958 if test $seteuid = no; then
2959 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2960 AC_TRY_RUN([
2961 #define AUTOCONF_TEST 1
2962 #define USE_SETREUID 1
2963 #include "confdefs.h"
2964 #include "${srcdir-.}/lib/util_sec.c"],
2965            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2966 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2967     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2968 fi
2969 fi
2970
2971 # we check for setresuid second as it conflicts with AIO on Linux. 
2972 # see http://samba.org/~tridge/junkcode/aio_uid.c
2973 if test $seteuid = no; then
2974 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2975 AC_TRY_RUN([
2976 #define AUTOCONF_TEST 1
2977 #define USE_SETRESUID 1
2978 #include "confdefs.h"
2979 #include "${srcdir-.}/lib/util_sec.c"],
2980            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2981 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2982     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2983 fi
2984 fi
2985
2986 if test $seteuid = no; then
2987 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2988 AC_TRY_RUN([
2989 #define AUTOCONF_TEST 1
2990 #define USE_SETEUID 1
2991 #include "confdefs.h"
2992 #include "${srcdir-.}/lib/util_sec.c"],
2993            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2994 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2995     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2996 fi
2997 fi
2998
2999 if test $seteuid = no; then
3000 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3001 AC_TRY_RUN([
3002 #define AUTOCONF_TEST 1
3003 #define USE_SETUIDX 1
3004 #include "confdefs.h"
3005 #include "${srcdir-.}/lib/util_sec.c"],
3006            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3007 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3008     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3009 fi
3010 fi
3011
3012 AC_CACHE_CHECK([for the Darwin initgroups system call],
3013         samba_cv_DARWIN_INITGROUPS,
3014         AC_TRY_LINK([
3015 #include <sys/syscall.h>
3016 #include <unistd.h>
3017         ],
3018         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3019         samba_cv_DARWIN_INITGROUPS=yes,
3020         samba_cv_DARWIN_INITGROUPS=no)
3021 )
3022
3023 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3024     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3025         [Whether to use the Darwin-specific initgroups system call])
3026 fi
3027
3028 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3029 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
3030            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3031 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3032     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3033 fi
3034
3035 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3036 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
3037            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3038 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3039     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3040
3041 else
3042
3043 dnl
3044 dnl Don't check for 64 bit fcntl locking if we know that the
3045 dnl glibc2.1 broken check has succeeded.
3046 dnl
3047
3048   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3049   AC_TRY_RUN([
3050 #if defined(HAVE_UNISTD_H)
3051 #include <unistd.h>
3052 #endif
3053 #include <stdio.h>
3054 #include <stdlib.h>
3055
3056 #ifdef HAVE_FCNTL_H
3057 #include <fcntl.h>
3058 #endif
3059
3060 #ifdef HAVE_SYS_FCNTL_H
3061 #include <sys/fcntl.h>
3062 #endif
3063 main() { struct flock64 fl64;
3064 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3065 exit(0);
3066 #else
3067 exit(1);
3068 #endif
3069 }],
3070        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3071
3072   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3073       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3074   fi
3075 fi
3076
3077 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
3078 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
3079 AC_TRY_COMPILE([
3080   #define _XOPEN_SOURCE 600
3081   #include <stdlib.h>
3082   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
3083     probably broken posix_fallocate
3084   #endif
3085 ], [
3086 ], 
3087 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
3088 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
3089         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE,, Whether we have a broken posix_fallocate)
3090 fi
3091
3092
3093 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3094 AC_TRY_COMPILE([#include <sys/types.h>
3095 #include <sys/stat.h>
3096 #include <unistd.h>],
3097 [struct stat st;  st.st_blocks = 0;],
3098 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3099 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3100     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3101 fi
3102
3103 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
3104
3105 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3106 AC_TRY_COMPILE([#include <sys/types.h>
3107 #include <sys/stat.h>
3108 #include <unistd.h>],
3109 [struct stat st;  st.st_blksize = 0;],
3110 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3111 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3112     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3113 fi
3114
3115 AC_CACHE_CHECK([for st_flags in struct stat],
3116         samba_cv_HAVE_STAT_ST_FLAGS,
3117         [
3118             AC_TRY_COMPILE([#include <sys/types.h>
3119 #include <sys/stat.h>
3120 #include <unistd.h>],
3121             [struct stat st;  st.st_flags = 0;],
3122             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3123             samba_cv_HAVE_STAT_ST_FLAGS=no,
3124             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3125         ])
3126
3127 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3128     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3129                 [Whether the stat struct has a st_flags member])
3130 fi
3131
3132 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3133 AC_TRY_COMPILE([
3134 #include <sys/types.h>
3135 #include <sys/acl.h>
3136 #if defined(HAVE_RPCSVC_NIS_H)
3137 #include <rpcsvc/nis.h>
3138 #endif],
3139 [int i;],
3140 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3141 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3142         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3143 fi
3144
3145 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3146 AC_TRY_RUN([
3147 #include <stdio.h>
3148 #include <limits.h>
3149 #include <signal.h>
3150
3151 void exit_on_core(int ignored) {
3152         exit(1);
3153 }
3154
3155 main() {
3156         char *newpath;
3157         signal(SIGSEGV, exit_on_core);
3158         newpath = realpath("/tmp", NULL);
3159         exit((newpath != NULL) ? 0 : 1);
3160 }
3161 ],
3162 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3163 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3164     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3165 fi
3166
3167 #################################################
3168 # check for AFS clear-text auth support
3169 samba_cv_WITH_AFS=no
3170 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3171 AC_ARG_WITH(afs,
3172 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3173 [ case "$withval" in
3174   yes|auto)
3175     AC_MSG_RESULT($withval)
3176     samba_cv_WITH_AFS=$withval
3177     ;;
3178   *)
3179     AC_MSG_RESULT(no)
3180     ;;
3181   esac ],
3182   AC_MSG_RESULT(no)
3183 )
3184
3185 ####################################################
3186 # check for Linux-specific AFS fake-kaserver support
3187 samba_cv_WITH_FAKE_KASERVER=no
3188 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3189 AC_ARG_WITH(fake-kaserver,
3190 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3191 [ case "$withval" in
3192   yes|auto)
3193     AC_MSG_RESULT($withval)
3194     samba_cv_WITH_FAKE_KASERVER=$withval
3195     ;;
3196   *)
3197     AC_MSG_RESULT(no)
3198     ;;
3199   esac ],
3200   AC_MSG_RESULT(no)
3201 )
3202
3203 #################################################
3204 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3205 if test x"$samba_cv_WITH_AFS" != x"no" ||
3206    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3207
3208     # see if this box has the OpenSSL DES libraries
3209     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3210
3211     # see if this box has the afs-headers in /usr/include/afs
3212     AC_MSG_CHECKING(for /usr/include/afs)
3213     if test -d /usr/include/afs; then
3214           AC_MSG_RESULT(yes)
3215     else
3216       AC_MSG_RESULT(no)
3217     fi
3218
3219     # check for afs.h
3220     have_afs_headers=no
3221     AC_CHECK_HEADERS(afs.h afs/afs.h)
3222     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3223         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3224            test x"$samba_cv_WITH_AFS" = x"auto"; then
3225                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3226         else
3227                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3228         fi
3229     else
3230         have_afs_headers=yes
3231     fi
3232 fi
3233
3234 FAKE_KASERVER_OBJ=""
3235 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3236     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3237     FAKE_KASERVER_OBJ="utils/net_afs.o"
3238 fi
3239 AC_SUBST(FAKE_KASERVER_OBJ)
3240
3241 #################################################
3242 # check whether to compile AFS/NT ACL mapping module
3243 samba_cv_WITH_VFS_AFSACL=no
3244 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3245 AC_ARG_WITH(vfs-afsacl,
3246 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3247 [ case "$withval" in
3248   yes|auto)
3249     AC_MSG_RESULT($withval)
3250     samba_cv_WITH_VFS_AFSACL=yes
3251     ;;
3252   *)
3253     AC_MSG_RESULT(no)
3254     ;;
3255   esac ],
3256   AC_MSG_RESULT(no)
3257 )
3258
3259 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3260    default_shared_modules="$default_shared_modules vfs_afsacl"
3261 fi
3262         
3263 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3264     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3265 fi
3266
3267 #################################################
3268 # check for the DFS clear-text auth system
3269 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3270 AC_ARG_WITH(dfs,
3271 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3272 [ case "$withval" in
3273   yes)
3274     AC_MSG_RESULT(yes)
3275     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3276     ;;
3277   *)
3278     AC_MSG_RESULT(no)
3279     ;;
3280   esac ],
3281   AC_MSG_RESULT(no)
3282 )
3283
3284 ########################################################
3285 # Compile with LDAP support?
3286
3287 with_ldap_support=auto
3288 AC_MSG_CHECKING([for LDAP support])
3289
3290 AC_ARG_WITH(ldap,
3291 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3292 [ case "$withval" in
3293     yes|no)
3294         with_ldap_support=$withval
3295         ;;
3296   esac ])
3297
3298 AC_MSG_RESULT($with_ldap_support)
3299
3300 SMBLDAP=""
3301 AC_SUBST(SMBLDAP)
3302
3303 if test x"$with_ldap_support" != x"no"; then
3304
3305   ##################################################################
3306   # first test for ldap.h and lber.h
3307   # (ldap.h is required for this test)
3308   AC_CHECK_HEADERS(ldap.h lber.h)
3309
3310   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3311         if test x"$with_ldap_support" = x"yes"; then
3312          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3313         else
3314          AC_MSG_WARN(ldap.h is needed for LDAP support)
3315         fi
3316         
3317         with_ldap_support=no
3318   fi
3319
3320   ##################################################################
3321   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3322   # unsigned int in include/includes.h
3323   case $host_os in
3324         *hpux*)
3325          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3326          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3327         with_ldap_support=yes
3328         ;;
3329         *)
3330         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3331         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3332                 if test x"$with_ldap_support" = x"yes"; then
3333                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3334                 else
3335                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3336                 fi
3337                 with_ldap_support=no
3338         fi
3339         ;;
3340   esac
3341 fi
3342
3343 if test x"$with_ldap_support" != x"no"; then
3344   ac_save_LIBS=$LIBS
3345
3346   ##################################################################
3347   # we might need the lber lib on some systems. To avoid link errors
3348   # this test must be before the libldap test
3349   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3350
3351   ########################################################
3352   # If ber_sockbuf_add_io() is available we can add
3353   # SASL wrapping hooks
3354   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3355
3356   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3357                  AC_TRY_COMPILE([#include <ldap.h>],
3358                                 [int val = LDAP_OPT_SOCKBUF;],
3359                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3360                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3361
3362   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3363           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3364         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3365   fi
3366
3367   #######################################################
3368   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3369   # ldap logging and print it out in the samba logs
3370   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3371                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3372                  [AC_TRY_COMPILE([#include <lber.h>],
3373                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3374                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3375                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3376
3377   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3378         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3379                   [Support for LDAP/LBER logging interception])
3380   fi
3381
3382   ########################################################
3383   # now see if we can find the ldap libs in standard paths
3384   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3385
3386   ########################################################
3387   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3388   # Check found in pam_ldap 145.
3389   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3390
3391   LIBS="$LIBS $LDAP_LIBS"
3392   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3393     AC_TRY_COMPILE([
3394         #include <lber.h>
3395         #include <ldap.h>],
3396         [ldap_set_rebind_proc(0, 0, 0);],
3397         [smb_ldap_cv_ldap_set_rebind_proc=3],
3398         [smb_ldap_cv_ldap_set_rebind_proc=2]
3399     )
3400   ])
3401
3402   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3403
3404   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3405
3406   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3407     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3408     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3409     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3410     default_shared_modules="$default_shared_modules";
3411     SMBLDAP="lib/smbldap.o"
3412     with_ldap_support=yes
3413     AC_MSG_CHECKING(whether LDAP support is used)
3414     AC_MSG_RESULT(yes)
3415   else
3416     if test x"$with_ldap_support" = x"yes"; then
3417         AC_MSG_ERROR(libldap is needed for LDAP support)
3418     else
3419         AC_MSG_WARN(libldap is needed for LDAP support)
3420     fi
3421
3422     LDAP_LIBS=""
3423     with_ldap_support=no
3424   fi
3425   LIBS=$ac_save_LIBS
3426 fi
3427
3428
3429 #################################################
3430 # active directory support
3431
3432 with_ads_support=auto
3433 AC_MSG_CHECKING([for Active Directory and krb5 support])
3434
3435 AC_ARG_WITH(ads,
3436 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3437 [ case "$withval" in
3438     yes|no)
3439         with_ads_support="$withval"
3440         ;;
3441   esac ])
3442
3443 AC_MSG_RESULT($with_ads_support)
3444
3445 FOUND_KRB5=no
3446 KRB5_LIBS=""
3447
3448 if test x"$with_ldap_support" != x"yes"; then
3449
3450     if test x"$with_ads_support" = x"yes"; then
3451         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3452     elif test x"$with_ads_support" = x"auto"; then
3453         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3454         with_ads_support=no
3455     fi
3456
3457 else
3458
3459     # Check to see whether there is enough LDAP functionality to be able
3460     # to build AD support.
3461
3462 # HPUX and Solaris only has ldap_init; ok, we take care of this in smbldap.c
3463 case "$host_os" in
3464         *hpux* | *solaris*)
3465     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3466
3467     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3468         if test x"$with_ads_support" = x"yes"; then
3469             AC_MSG_ERROR(Active Directory support on HPUX or Solaris requires ldap_init)
3470         elif test x"$with_ads_support" = x"auto"; then
3471             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX or Solaris))
3472             with_ads_support=no
3473         fi
3474     fi
3475     ;;
3476         *)
3477     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3478
3479     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3480         if test x"$with_ads_support" = x"yes"; then
3481             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3482         elif test x"$with_ads_support" = x"auto"; then
3483             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3484             with_ads_support=no
3485         fi
3486     fi
3487     ;;
3488 esac
3489
3490
3491     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3492
3493     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3494         if test x"$with_ads_support" = x"yes"; then
3495             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3496         elif test x"$with_ads_support" = x"auto"; then
3497             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3498             with_ads_support=no
3499         fi
3500     fi
3501
3502 fi
3503
3504 if test x"$with_ads_support" != x"no"; then
3505
3506   # Do no harm to the values of CFLAGS and LIBS while testing for
3507   # Kerberos support.
3508
3509   if test x$FOUND_KRB5 = x"no"; then
3510     #################################################
3511     # check for location of Kerberos 5 install
3512     AC_MSG_CHECKING(for kerberos 5 install path)
3513     AC_ARG_WITH(krb5,
3514     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3515     [ case "$withval" in
3516       no)
3517         AC_MSG_RESULT(no krb5-path given)
3518         ;;
3519       yes)
3520         AC_MSG_RESULT(/usr)
3521         ;;
3522       *)
3523         AC_MSG_RESULT($withval)
3524         KRB5_CFLAGS="-I$withval/include"
3525         KRB5_CPPFLAGS="-I$withval/include"
3526         KRB5_LDFLAGS="-L$withval/lib"
3527         FOUND_KRB5=yes
3528         if test -x "$withval/bin/krb5-config"; then
3529                 KRB5CONFIG=$withval/bin/krb5-config
3530         fi
3531         ;;
3532       esac ],
3533       AC_MSG_RESULT(no krb5-path given)
3534     )
3535   fi
3536
3537   #################################################
3538   # check for krb5-config from recent MIT and Heimdal kerberos 5
3539   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3540   AC_MSG_CHECKING(for working krb5-config)
3541   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3542     ac_save_CFLAGS=$CFLAGS
3543     CFLAGS="";export CFLAGS
3544     ac_save_LDFLAGS=$LDFLAGS
3545     LDFLAGS="";export LDFLAGS
3546     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3547     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3548     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3549     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3550     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3551     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3552     FOUND_KRB5=yes
3553     AC_MSG_RESULT(yes)
3554   else
3555     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3556   fi
3557
3558   if test x$FOUND_KRB5 = x"no"; then
3559     #################################################
3560     # see if this box has the SuSE location for the heimdal krb implementation
3561     AC_MSG_CHECKING(for /usr/include/heimdal)
3562     if test -d /usr/include/heimdal; then
3563       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3564           KRB5_CFLAGS="-I/usr/include/heimdal"
3565           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3566           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3567           FOUND_KRB5=yes
3568           AC_MSG_RESULT(yes)
3569       else
3570           KRB5_CFLAGS="-I/usr/include/heimdal"
3571           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3572           FOUND_KRB5=yes
3573           AC_MSG_RESULT(yes)
3574       fi
3575     else
3576       AC_MSG_RESULT(no)
3577     fi
3578   fi
3579
3580   if test x$FOUND_KRB5 = x"no"; then
3581     #################################################
3582     # see if this box has the RedHat location for kerberos
3583     AC_MSG_CHECKING(for /usr/kerberos)
3584     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3585       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3586       KRB5_CFLAGS="-I/usr/kerberos/include"
3587       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3588       FOUND_KRB5=yes
3589       AC_MSG_RESULT(yes)
3590     else
3591       AC_MSG_RESULT(no)
3592     fi
3593   fi
3594
3595   if test x$FOUND_KRB5 = x"no"; then
3596     #################################################
3597     # see if this box has the OpenBSD location for heimdal krb5
3598     AC_MSG_CHECKING(for /usr/include/kerberosV)
3599     if test -d /usr/include/kerberosV; then
3600       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3601       KRB5_LIBS="-lcrypto"
3602       FOUND_KRB5=yes
3603       AC_MSG_RESULT(yes)
3604     else
3605       AC_MSG_RESULT(no)
3606     fi
3607   fi
3608
3609   if test x$FOUND_KRB5 = x"no"; then
3610     #################################################
3611     # see if this box has Solaris MIT kerberos implementation
3612     AC_MSG_CHECKING(for Solaris MIT kerberos)
3613     if test -x "$KRB5CONFIG" && $KRB5CONFIG --version | grep -s Solaris | grep -s MIT > /dev/null ; then
3614        FOUND_KRB5=yes
3615        KRB5_LIBS="-lgss -lkrb5"
3616        KRB5_CFLAGS="`$KRB5CONFIG --cflags`"
3617        KRB5_CPPFLAGS="`$KRB5CONFIG --cflags`"
3618        AC_MSG_RESULT(yes)
3619     else
3620       AC_MSG_RESULT(no)
3621     fi
3622   fi
3623
3624   ac_save_CFLAGS=$CFLAGS
3625   ac_save_CPPFLAGS=$CPPFLAGS
3626   ac_save_LDFLAGS=$LDFLAGS
3627
3628   # remove needless evil rpath stuff as early as possible:
3629   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3630   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3631   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3632   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3633   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3634
3635   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3636
3637   # now check for krb5.h. Some systems have the libraries without the headers!
3638   # note that this check is done here to allow for different kerberos
3639   # include paths
3640   AC_CHECK_HEADERS(krb5.h)
3641
3642   if test x"$ac_cv_header_krb5_h" = x"no"; then
3643
3644     # Give a warning if AD support was not explicitly requested,
3645     # i.e with_ads_support = auto, otherwise die with an error.
3646
3647     if test x"$with_ads_support" = x"yes"; then
3648       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3649     else
3650       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3651     fi
3652
3653     # Turn off AD support and restore CFLAGS and LIBS variables
3654
3655     with_ads_support="no"
3656
3657     CFLAGS=$ac_save_CFLAGS
3658     CPPFLAGS=$ac_save_CPPFLAGS
3659     LDFLAGS=$ac_save_LDFLAGS
3660   fi
3661
3662   # check for new heimdal KRB5_DEPRECATED handling
3663
3664   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3665                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3666     AC_TRY_COMPILE(
3667       [#define KRB5_DEPRECATED 1
3668       #include <krb5.h>],
3669       [],
3670       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3671       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3672
3673   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3674     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3675                [Whether to use deprecated krb5 interfaces])
3676   fi
3677 fi
3678
3679 # Now we have determined whether we really want ADS support
3680 use_ads=no
3681 if test x"$with_ads_support" != x"no"; then
3682   use_ads=yes
3683   have_gssapi=no
3684   ac_save_LIBS=$LIBS
3685
3686   # now check for gssapi headers.  This is also done here to allow for
3687   # different kerberos include paths
3688   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h com_err.h)
3689
3690   ##################################################################
3691   # we might need the k5crypto and com_err libraries on some systems
3692   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3693   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3694
3695   # Heimdal checks.
3696   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3697   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3698   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3699
3700   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3701   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3702
3703   ########################################################
3704   # now see if we can find the krb5 libs in standard paths
3705   # or as specified above
3706   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3707   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3708
3709   ########################################################
3710   # now see if we can find the gssapi libs in standard paths
3711   if test x"$have_gssapi" != x"yes"; then
3712      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3713      AC_CHECK_LIB_EXT(gss, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3714   fi
3715   ################################################################
3716   # test for AD / GSSAPI support being enabled
3717   if test x"$have_gssapi" != xyes ; then
3718         AC_MSG_WARN([Samba cannot be supported without GSSAPI])
3719         use_ads=no
3720   fi
3721
3722   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3723   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3724   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3725   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3726   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3727   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3728   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3729   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3730   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3731   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3732   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3733   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3734   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3735   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3736   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3737   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3738   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3739   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3740   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3741   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3742   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3743   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3744   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3745   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3746   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3747   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3748   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3749   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3750   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3751   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3752   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3753   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3754   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3755   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3756   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3757   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3758   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3759   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3760   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3761   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3762   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3763   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3764   AC_CHECK_FUNC_EXT(gss_krb5_import_cred, $KRB5_LIBS)
3765   AC_CHECK_FUNC_EXT(gss_get_name_attribute, $KRB5_LIBS)
3766   AC_CHECK_FUNC_EXT(gsskrb5_extract_authz_data_from_sec_context, $KRB5_LIBS)
3767   AC_CHECK_FUNC_EXT(gss_mech_krb5, $KRB5_LIBS)
3768   AC_CHECK_FUNC_EXT(gss_oid_equal, $KRB5_LIBS)
3769   AC_CHECK_FUNC_EXT(gss_inquire_sec_context_by_oid, $KRB5_LIBS)
3770   AC_CHECK_FUNC_EXT(gss_wrap_iov, $KRB5_LIBS)
3771
3772   # This is for FreeBSD (and possibly others). gss_mech_krb5 is a
3773   # #define to GSS_KRB5_MECHANISM, which is defined in -lgssapi_krb5
3774   AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS, GSS_KRB5_MECHANISM,
3775                    [KRB5_LIBS="$KRB5_LIBS -lgssapi_krb5"])
3776
3777   # MIT krb5 1.8 does not expose this call (yet)
3778   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3779
3780   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3781   # but does have the symbol
3782   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3783
3784   LIBS="$KRB5_LIBS $LIBS"
3785
3786   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3787           smb_krb5_cv_creds_opt_free_context,
3788           [
3789                 AC_TRY_COMPILE([
3790                     #include <krb5.h>],
3791                     [
3792                         krb5_context ctx;
3793                         krb5_get_init_creds_opt *opt = NULL;
3794                         krb5_get_init_creds_opt_free(ctx, opt);
3795                     ],
3796                     [smb_krb5_cv_creds_opt_free_context=yes],
3797                     [smb_krb5_cv_creds_opt_free_context=no]
3798                 )
3799           ])
3800
3801   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3802         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3803             [Whether krb5_get_init_creds_opt_free takes a context argument])
3804   fi
3805
3806   AC_CACHE_CHECK([for checksum in krb5_checksum],
3807                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3808     AC_TRY_COMPILE([#include <krb5.h>],
3809       [krb5_checksum cksum; cksum.checksum.length = 0;],
3810       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3811       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3812
3813   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3814     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3815                [Whether the krb5_checksum struct has a checksum property])
3816   fi
3817
3818   AC_CACHE_CHECK([for etype in EncryptedData],
3819                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3820     AC_TRY_COMPILE([#include <krb5.h>],
3821       [EncryptedData edata; edata.etype = 0;],
3822       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3823       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3824
3825   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3826     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3827                [Whether the EncryptedData struct has a etype property])
3828   fi
3829
3830   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3831                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3832     AC_TRY_COMPILE([#include <krb5.h>],
3833       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3834       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3835       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3836
3837   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3838     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3839                [Whether the krb5_ap_req struct has a ticket pointer])
3840   fi
3841
3842   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3843                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3844     AC_TRY_COMPILE([#include <krb5.h>],
3845       [krb5_error err; err.e_data = NULL;],
3846       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3847       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3848
3849   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3850     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3851                [Whether the krb5_error struct has a e_data pointer])
3852   fi
3853
3854   AC_CACHE_CHECK([for krb5_crypto type],
3855                 samba_cv_HAVE_KRB5_CRYPTO,[
3856     AC_TRY_COMPILE([#include <krb5.h>],
3857       [krb5_crypto crypto;],
3858       samba_cv_HAVE_KRB5_CRYPTO=yes,
3859       samba_cv_HAVE_KRB5_CRYPTO=no)])
3860
3861   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3862     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3863                [Whether the type krb5_crypto exists])
3864   fi
3865
3866   AC_CACHE_CHECK([for krb5_encrypt_block type],
3867                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3868     AC_TRY_COMPILE([#include <krb5.h>],
3869       [krb5_encrypt_block block;],
3870       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3871       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3872
3873   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3874     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3875                [Whether the type krb5_encrypt_block exists])
3876   fi
3877
3878   AC_CACHE_CHECK([for addrtype in krb5_address],
3879                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3880     AC_TRY_COMPILE([#include <krb5.h>],
3881       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3882       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3883       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3884
3885   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3886     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3887                [Whether the krb5_address struct has a addrtype property])
3888   fi
3889
3890   AC_CACHE_CHECK([for addr_type in krb5_address],
3891                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3892     AC_TRY_COMPILE([#include <krb5.h>],
3893       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3894       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3895       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3896
3897   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3898     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3899               [Whether the krb5_address struct has a addr_type property])
3900   fi
3901
3902   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3903                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3904     AC_TRY_COMPILE([#include <krb5.h>],
3905       [krb5_keyblock key; key.keyvalue.data = NULL;],
3906       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3907       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3908
3909   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3910     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3911               [Whether the krb5_keyblock struct has a keyvalue property])
3912   fi
3913
3914   found_arcfour_hmac=no
3915   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3916                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3917     AC_TRY_COMPILE([#include <krb5.h>],
3918       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3919       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3920       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3921   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3922                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3923     AC_TRY_COMPILE([#include <krb5.h>],
3924       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3925       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3926       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3927 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3928 # w.r.t. arcfour and windows, so we must not enable it here
3929   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3930           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3931     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3932               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type definition is available])
3933     found_arcfour_hmac=yes
3934   fi
3935   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC],
3936                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC,[
3937     AC_TRY_COMPILE([#include <krb5.h>],
3938       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC;],
3939       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=yes,
3940       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC=no)])
3941   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC" = x"yes"; then
3942     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC,1,
3943               [Whether the ENCTYPE_ARCFOUR_HMAC key type definition is available])
3944     found_arcfour_hmac=yes
3945   fi
3946
3947   AC_CACHE_CHECK([for ENCTYPE_AES128_CTS_HMAC_SHA1_96],
3948                  samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,[
3949     AC_TRY_COMPILE([#include <krb5.h>],
3950       [krb5_enctype enctype; enctype = ENCTYPE_AES128_CTS_HMAC_SHA1_96;],
3951       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=yes,
3952       samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96=no)])
3953   if test x"$samba_cv_HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96" = x"yes"; then
3954     AC_DEFINE(HAVE_ENCTYPE_AES128_CTS_HMAC_SHA1_96,1,
3955               [Whether the ENCTYPE_AES128_CTS_HMAC_SHA1_96 key type definition is available])
3956   fi
3957   AC_CACHE_CHECK([for ENCTYPE_AES256_CTS_HMAC_SHA1_96],
3958                  samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,[
3959     AC_TRY_COMPILE([#include <krb5.h>],
3960       [krb5_enctype enctype; enctype = ENCTYPE_AES256_CTS_HMAC_SHA1_96;],
3961       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=yes,
3962       samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96=no)])
3963   if test x"$samba_cv_HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96" = x"yes"; then
3964     AC_DEFINE(HAVE_ENCTYPE_AES256_CTS_HMAC_SHA1_96,1,
3965               [Whether the ENCTYPE_AES256_CTS_HMAC_SHA1_96 key type definition is available])
3966   fi
3967
3968   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3969                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3970     AC_TRY_COMPILE([#include <krb5.h>],
3971       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3972       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3973       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3974
3975   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3976     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3977               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3978   fi
3979
3980   AC_CACHE_CHECK([for KV5M_KEYTAB],
3981                  samba_cv_HAVE_KV5M_KEYTAB,[
3982     AC_TRY_COMPILE([#include <krb5.h>],
3983       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3984       samba_cv_HAVE_KV5M_KEYTAB=yes,
3985       samba_cv_HAVE_KV5M_KEYTAB=no)])
3986
3987   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3988       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3989              [Whether the KV5M_KEYTAB option is available])
3990   fi
3991
3992   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3993                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3994     AC_TRY_COMPILE([#include <krb5.h>],
3995       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3996       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3997       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3998
3999   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
4000     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
4001               [Whether KRB5_KU_OTHER_CKSUM is available])
4002   fi
4003
4004   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
4005                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
4006     AC_TRY_COMPILE([#include <krb5.h>],
4007       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
4008       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
4009       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
4010
4011   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
4012     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
4013               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
4014   fi
4015
4016   AC_CACHE_CHECK([for the krb5_princ_component macro],
4017                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
4018     AC_TRY_LINK([#include <krb5.h>],
4019       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
4020       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
4021       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
4022
4023   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
4024     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
4025                [Whether krb5_princ_component is available])
4026   fi
4027
4028   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4029                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4030     AC_TRY_COMPILE([#include <krb5.h>],
4031       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4032       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4033       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4034
4035   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4036     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4037               [Whether krb5_keytab_entry has key member])
4038   fi
4039
4040   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4041                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4042     AC_TRY_COMPILE([#include <krb5.h>],
4043       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4044       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4045       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4046
4047   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4048     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4049               [Whether krb5_keytab_entry has keyblock member])
4050   fi
4051
4052   AC_CACHE_CHECK([for magic in krb5_address],
4053                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4054     AC_TRY_COMPILE([#include <krb5.h>],
4055       [krb5_address addr; addr.magic = 0;],
4056       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4057       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4058
4059   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4060     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4061               [Whether the krb5_address struct has a magic property])
4062   fi
4063
4064   AC_CACHE_CHECK([for WRFILE: keytab support],
4065                 samba_cv_HAVE_WRFILE_KEYTAB,[
4066     AC_TRY_RUN([
4067 #include<krb5.h>
4068   main()
4069   {
4070     krb5_context context;
4071     krb5_keytab keytab;
4072
4073     krb5_init_context(&context);
4074     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4075   }],
4076   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4077   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4078
4079   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4080       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4081                [Whether the WRFILE:-keytab is supported])
4082   fi
4083
4084   AC_CACHE_CHECK([for krb5_realm type],
4085                 samba_cv_HAVE_KRB5_REALM_TYPE,[
4086     AC_TRY_COMPILE([#include <krb5.h>],
4087       [krb5_realm realm;],
4088       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
4089       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
4090
4091   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
4092     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
4093                [Whether the type krb5_realm exists])
4094   fi
4095
4096   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4097                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4098     AC_TRY_COMPILE([#include <krb5.h>],
4099     [
4100     krb5_context context;
4101     krb5_principal principal;
4102     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4103     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4104     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4105
4106   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4107     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4108               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4109   fi
4110
4111   AC_CACHE_CHECK([for krb5_addresses type],
4112                 samba_cv_HAVE_KRB5_ADDRESSES,[
4113     AC_TRY_COMPILE([#include <krb5.h>],
4114       [krb5_addresses addr;],
4115       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4116       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4117
4118   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4119     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4120                [Whether the type krb5_addresses type exists])
4121   fi
4122
4123   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4124     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4125         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4126         AC_TRY_RUN_STRICT([
4127                 #include <stdlib.h>
4128                 #include <krb5.h>
4129                 int main(void) {
4130                         krb5_context context = NULL;
4131                         char *str = NULL;
4132                         krb5_enctype_to_string(context, 1, &str);
4133                         if (str) free (str); 
4134                         return 0;
4135                 }
4136                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4137                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4138                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4139
4140     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4141       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4142                 [whether krb5_enctype_to_string takes krb5_context argument])
4143     fi
4144
4145     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4146         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4147         AC_TRY_RUN_STRICT([
4148                 #include <krb5.h>
4149                 int main(void) {
4150                         char buf[256];
4151                         krb5_enctype_to_string(1, buf, 256);
4152                         return 0;
4153                 }
4154                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4155                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4156                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4157
4158     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4159       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4160                 [whether krb5_enctype_to_string takes size_t argument])
4161     fi
4162   fi
4163
4164   AC_CACHE_CHECK([for krb5_principal_get_realm],
4165                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4166     AC_TRY_LINK([#include <krb5.h>],
4167       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4168       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4169       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4170
4171   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4172     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4173                [Whether the function krb5_principal_get_realm is defined])
4174   fi
4175
4176   AC_CACHE_CHECK([for krb5_princ_realm],
4177                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4178     AC_TRY_LINK([#include <krb5.h>],