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