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