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