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