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