765bac7d955af580803509ca4a787fdd644df859
[kamenim/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 m4_include(pkg.m4)
24
25 AC_LIBREPLACE_CC_CHECKS
26
27 m4_include(../lib/tevent/libtevent.m4)
28
29 LIBTEVENT_OBJ0=""
30 for obj in ${TEVENT_OBJ}; do
31         LIBTEVENT_OBJ0="${LIBTEVENT_OBJ0} ${teventdir}/${obj}"
32 done
33 AC_SUBST(LIBTEVENT_OBJ0)
34 LIBS="${LIBS} ${TEVENT_LIBS}"
35
36 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
37 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
38 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
42
43 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
44
45 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
46 if test "x${srcdir-.}" != "x."; then
47         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
48 fi
49
50 dnl Unique-to-Samba variables we'll be playing with.
51 AC_SUBST(SAMBA_CPPFLAGS)
52 AC_SUBST(SHELL)
53 AC_SUBST(LDSHFLAGS)
54 AC_SUBST(SONAMEFLAG)
55 AC_SUBST(SHLD)
56 AC_SUBST(MODULE_EXPORTS)
57 AC_SUBST(DSO_EXPORTS)
58 AC_SUBST(HOST_OS)
59 AC_SUBST(PICFLAG)
60 AC_SUBST(PIE_CFLAGS)
61 AC_SUBST(PIE_LDFLAGS)
62 AC_SUBST(RELRO_LDFLAGS)
63 AC_SUBST(SHLIBEXT)
64 AC_SUBST(INSTALLLIBCMD_SH)
65 AC_SUBST(INSTALLLIBCMD_A)
66 AC_SUBST(UNINSTALLLIBCMD_SH)
67 AC_SUBST(UNINSTALLLIBCMD_A)
68
69 AC_SUBST(INSTALL_LIBWBCLIENT)
70 AC_SUBST(UNINSTALL_LIBWBCLIENT)
71 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
72 AC_SUBST(LIBWBCLIENT_SHARED)
73 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
74 AC_SUBST(LIBWBCLIENT_STATIC)
75 AC_SUBST(LIBWBCLIENT_SOVER)
76 AC_SUBST(LIBWBCLIENT)
77 AC_SUBST(LIBWBCLIENT_LIBS)
78
79 AC_SUBST(LIBSAMBAUTIL_SHARED)
80
81 AC_SUBST(PRINT_LIBS)
82 AC_SUBST(AUTH_LIBS)
83 AC_SUBST(ACL_LIBS)
84 AC_SUBST(PASSDB_LIBS)
85 AC_SUBST(IDMAP_LIBS)
86 AC_SUBST(KRB5_LIBS)
87 AC_SUBST(UUID_LIBS)
88 AC_SUBST(LDAP_LIBS)
89 AC_SUBST(GPEXT_LIBS)
90 AC_SUBST(PAM_MODULES)
91 AC_SUBST(INSTALL_PAM_MODULES)
92 AC_SUBST(UNINSTALL_PAM_MODULES)
93 AC_SUBST(NSS_MODULES)
94 AC_SUBST(EXTRA_BIN_PROGS)
95 AC_SUBST(CIFSMOUNT_PROGS)
96 AC_SUBST(INSTALL_CIFSMOUNT)
97 AC_SUBST(UNINSTALL_CIFSMOUNT)
98 AC_SUBST(CIFSUMOUNT_PROGS)
99 AC_SUBST(INSTALL_CIFSUMOUNT)
100 AC_SUBST(UNINSTALL_CIFSUMOUNT)
101 AC_SUBST(CIFSUPCALL_PROGS)
102 AC_SUBST(INSTALL_CIFSUPCALL)
103 AC_SUBST(UNINSTALL_CIFSUPCALL)
104 AC_SUBST(EXTRA_SBIN_PROGS)
105 AC_SUBST(EXTRA_ALL_TARGETS)
106 AC_SUBST(CONFIG_LIBS)
107 AC_SUBST(NSCD_LIBS)
108
109 # compile with optimization and without debugging by default, but
110 # allow people to set their own preference.
111 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
112 # if it has no value.  This prevent *very* large debug binaries from occurring
113 # by default.
114 if test "x$debug" = "xyes" ; then
115         CFLAGS="${CFLAGS} -g"
116 fi
117 if test "x$CFLAGS" = x; then
118   CFLAGS="-O"
119 fi
120
121 m4_include(../lib/socket_wrapper/config.m4)
122 m4_include(../lib/nss_wrapper/config.m4)
123 m4_include(../lib/util/time.m4)
124
125 m4_include(m4/swat.m4)
126
127 # Probe the gcc version for extra CFLAGS. We always stash these in
128 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
129 # Makefile edit, avoiding the need to re-run configure.
130 if test x"$ac_cv_prog_gcc" = x"yes" ; then
131         DEVELOPER_CFLAGS="-g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -DDEBUG_PASSWORD -DDEVELOPER"
132         # Add -Wdeclaration-after-statement if compiler supports it
133         AC_CACHE_CHECK(
134           [that the C compiler understands -Wdeclaration-after-statement],
135           samba_cv_HAVE_Wdeclaration_after_statement, [
136           AC_TRY_RUN_STRICT([
137             int main(void)
138             {
139                 return 0;
140             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
141             samba_cv_HAVE_Wdeclaration_after_statement=yes,
142             samba_cv_HAVE_Wdeclaration_after_statement=no,
143             samba_cv_HAVE_Wdeclaration_after_statement=cross)
144        ])
145
146         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
147             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
148         fi
149
150         #-Werror-implicit-function-declaration
151         AC_CACHE_CHECK(
152           [that the C compiler understands -Werror-implicit-function-declaration],
153           samba_cv_HAVE_Werror_implicit_function_declaration, [
154           AC_TRY_RUN_STRICT([
155             int main(void)
156             {
157                 return 0;
158             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
159             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
160             samba_cv_HAVE_Werror_implicit_function_declaration=no,
161             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
162        ])
163        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
164             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
165        fi
166
167         # krb5developer is like developer, except we don't get
168         # -Wstrict-prototypes.
169        if test x"$krb5_developer" != x"$yes" ; then
170             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
171        fi
172
173        if test x"$picky_developer" = x"yes"; then
174             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
175        fi
176 fi
177
178 #################################################
179 # check for a shared memory profiling support
180 AC_MSG_CHECKING(whether to use profiling)
181 AC_ARG_WITH(profiling-data,
182 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
183 [ case "$withval" in
184   yes)
185     AC_MSG_RESULT(yes)
186     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
187     samba_cv_WITH_PROFILE=yes
188     ;;
189   *)
190     AC_MSG_RESULT(no)
191     samba_cv_WITH_PROFILE=no
192     ;;
193   esac ],
194   AC_MSG_RESULT(no)
195 )
196
197 dnl Checks for programs.
198 merged_build_possible=yes
199
200 AC_PROG_INSTALL
201 AC_PROG_AWK
202 # Check for GNU make
203 m4_include(../m4/check_make.m4)
204 AC_SAMBA_GNU_MAKE([true], [true])
205
206 # Check for perl
207 m4_include(../m4/check_perl.m4)
208 AC_SAMBA_PERL([true], [merged_build_possible=no])
209
210 AC_CHECK_TOOL(AR, ar)
211
212 dnl Check if we (actually our C compiler!) use GNU ld
213 AC_PROG_LD_GNU
214
215 dnl Certain versions of GNU ld the default is not to have the
216 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
217 dnl warnings when building modules.
218 if test "$ac_cv_prog_gnu_ld" = "yes"; then
219         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>/dev/null | head -1`
220         AC_MSG_CHECKING(GNU ld release date)
221         changequote(,)dnl
222         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'`
223         changequote([,])dnl
224         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
225         if test -n "$ac_cv_gnu_ld_date"; then
226         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
227                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
228         fi
229         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
230                 ac_cv_gnu_ld_version_script=yes
231         fi
232         else
233            AC_MSG_CHECKING(GNU ld release version)
234            changequote(,)dnl
235            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | awk '{print $NF}' | sed -n 's,\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
236            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
237            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
238            changequote([,])dnl
239            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
240            AC_MSG_CHECKING(GNU ld release version major)
241            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
242            AC_MSG_CHECKING(GNU ld release version minor)
243            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
244            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
245              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
246            fi
247            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
248              ac_cv_gnu_ld_version_script=yes
249            fi
250         fi
251 fi
252
253 dnl look for executable suffix
254 AC_EXEEXT
255
256 dnl Check if C compiler understands -c and -o at the same time
257 AC_PROG_CC_C_O
258 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
259       BROKEN_CC=
260 else
261       BROKEN_CC=#
262 fi
263 AC_SUBST(BROKEN_CC)
264
265 dnl Check if the C compiler understands -Werror
266 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
267  AC_TRY_RUN_STRICT([
268   int main(void)
269   {
270         return 0;
271   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
272   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
273 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
274    Werror_FLAGS="-Werror"
275 else
276 dnl Check if the C compiler understands -w2
277 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
278  AC_TRY_RUN_STRICT([
279   int main(void)
280   {
281         return 0;
282   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
283   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
284 if test x"$samba_cv_HAVE_w2" = x"yes"; then
285    Werror_FLAGS="-w2"
286 else
287 dnl Check if the C compiler understands -errwarn
288 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
289   AC_TRY_RUN_STRICT([
290    int main(void)
291    {
292         return 0;
293    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
294    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
295 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
296    Werror_FLAGS="-errwarn=%all"
297 fi
298 fi
299 fi
300
301 ############################################
302 # check if the compiler can handle negative enum values
303 # and don't truncate the values to INT_MAX
304 # a runtime test is needed here
305 AC_SUBST(PIDL_ARGS)
306 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
307     AC_TRY_RUN(
308 [
309         #include <stdio.h>
310         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
311         int main(void) {
312                 enum negative_values v1 = NEGATIVE_VALUE;
313                 unsigned v2 = NEGATIVE_VALUE;
314
315                 if (v1 != 0xFFFFFFFF) {
316                         printf("%u != 0xFFFFFFFF\n", v1);
317                         return 1;
318                 }
319                 if (v2 != 0xFFFFFFFF) {
320                         printf("%u != 0xFFFFFFFF\n", v2);
321                         return 1;
322                 }
323
324                 return 0;
325         }
326 ],
327         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv__CC_NEGATIVE_ENUM_VALUES=no)])
328 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
329         AC_MSG_WARN([using --uint-enums for pidl])
330         PIDL_ARGS="$PIDL_ARGS --uint-enums"
331 fi
332
333 dnl Figure out the flags to support named structure initializers
334
335 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
336
337 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
338 AC_MSG_CHECKING(uname -s)
339 AC_MSG_RESULT(${UNAME_S})
340
341 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
342 AC_MSG_CHECKING(uname -r)
343 AC_MSG_RESULT(${UNAME_R})
344
345 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
346 AC_MSG_CHECKING(uname -m)
347 AC_MSG_RESULT(${UNAME_M})
348
349 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
350 AC_MSG_CHECKING(uname -p)
351 AC_MSG_RESULT(${UNAME_P})
352
353 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
354 AC_MSG_CHECKING(uname -i)
355 AC_MSG_RESULT(${UNAME_I})
356
357 dnl Add #include for broken IRIX header files
358   case "$host_os" in
359         *irix6*)
360                 #TODO add to libreplace
361                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
362                         dnl Fix sensible defaults for MIPSPro compilers. The
363                         dnl error numbers are valid for the 7.3 compilers,
364                         dnl hopefully also valid for the 7.4 series.
365                         dnl
366                         dnl Bugzilla 3801. Force an error on warning 1035
367                         dnl so we don't incorrectly detect stdint.h. This
368                         dnl warning is emitted for #error directives.
369                         CFLAGS="$CFLAGS -diag_error 1035"
370                         dnl 1209: Controlling expression is constant
371                         dnl 1174: Function foo declared but never referenced
372                         dnl 3201: Parameter foo was never referenced
373                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
374                 fi
375         ;;
376 esac
377
378 DYNEXP=
379 AC_SUBST(DYNEXP)
380 LDSHFLAGS_Z_DEFS=
381 AC_SUBST(LDSHFLAGS_Z_DEFS)
382 LDSHFLAGS_Z_NODEFS=
383 AC_SUBST(LDSHFLAGS_Z_NODEFS)
384
385 dnl Add modules that have to be built by default here
386 dnl These have to be built static:
387 default_static_modules=""
388 default_static_modules="$default_static_modules pdb_smbpasswd"
389 default_static_modules="$default_static_modules pdb_tdbsam"
390 default_static_modules="$default_static_modules pdb_wbc_sam"
391 default_static_modules="$default_static_modules rpc_lsarpc"
392 default_static_modules="$default_static_modules rpc_samr"
393 default_static_modules="$default_static_modules rpc_winreg"
394 default_static_modules="$default_static_modules rpc_initshutdown"
395 default_static_modules="$default_static_modules rpc_dssetup"
396 default_static_modules="$default_static_modules rpc_wkssvc"
397 default_static_modules="$default_static_modules rpc_svcctl"
398 default_static_modules="$default_static_modules rpc_ntsvcs"
399 default_static_modules="$default_static_modules rpc_netlogon"
400 default_static_modules="$default_static_modules rpc_netdfs"
401 default_static_modules="$default_static_modules rpc_srvsvc"
402 default_static_modules="$default_static_modules rpc_spoolss"
403 default_static_modules="$default_static_modules rpc_eventlog"
404 default_static_modules="$default_static_modules auth_sam"
405 default_static_modules="$default_static_modules auth_unix"
406 default_static_modules="$default_static_modules auth_winbind"
407 default_static_modules="$default_static_modules auth_wbc"
408 default_static_modules="$default_static_modules auth_server"
409 default_static_modules="$default_static_modules auth_domain"
410 default_static_modules="$default_static_modules auth_builtin"
411 default_static_modules="$default_static_modules auth_netlogond"
412 default_static_modules="$default_static_modules vfs_default"
413 default_static_modules="$default_static_modules nss_info_template"
414
415 dnl These are preferably build shared, and static if dlopen() is not available
416 default_shared_modules=""
417 default_shared_modules="$default_shared_modules vfs_recycle"
418 default_shared_modules="$default_shared_modules vfs_audit"
419 default_shared_modules="$default_shared_modules vfs_extd_audit"
420 default_shared_modules="$default_shared_modules vfs_full_audit"
421 default_shared_modules="$default_shared_modules vfs_netatalk"
422 default_shared_modules="$default_shared_modules vfs_fake_perms"
423 default_shared_modules="$default_shared_modules vfs_default_quota"
424 default_shared_modules="$default_shared_modules vfs_readonly"
425 default_shared_modules="$default_shared_modules vfs_cap"
426 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
427 default_shared_modules="$default_shared_modules vfs_shadow_copy"
428 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
429 default_shared_modules="$default_shared_modules charset_CP850"
430 default_shared_modules="$default_shared_modules charset_CP437"
431 default_shared_modules="$default_shared_modules auth_script"
432 default_shared_modules="$default_shared_modules vfs_readahead"
433 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
434 default_shared_modules="$default_shared_modules vfs_streams_xattr"
435 default_shared_modules="$default_shared_modules vfs_streams_depot"
436 default_shared_modules="$default_shared_modules vfs_acl_xattr"
437 default_shared_modules="$default_shared_modules vfs_acl_tdb"
438 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
439 default_shared_modules="$default_shared_modules vfs_preopen"
440 default_shared_modules="$default_shared_modules vfs_catia"
441 default_shared_modules="$default_shared_modules vfs_scannedonly"
442 default_shared_modules="$default_shared_modules vfs_crossrename"
443
444 if test "x$developer" = xyes; then
445    default_static_modules="$default_static_modules rpc_rpcecho pdb_ads"
446    default_shared_modules="$default_shared_modules charset_weird perfcount_test"
447 fi
448
449 #
450 # Config CPPFLAG settings for strange OS's that must be set
451 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
452 # case statement; its first reference must be unconditional.
453 #
454 case "$host_os" in
455     *hpux*)
456 #
457 # Defines needed for HPUX support.
458 # HPUX has bigcrypt but (sometimes?) doesn't use it for
459 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
460 #
461       case `uname -r` in
462                 *9*|*10*|*11)
463                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
464                 ;;
465       esac
466       ;;
467
468 #
469 # CRAY Unicos has broken const handling
470        *unicos*)
471           AC_MSG_RESULT([disabling const])
472           CPPFLAGS="$CPPFLAGS -Dconst="
473           ;;
474         
475 #
476 # AIX4.x doesn't even admit to having large
477 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
478 #
479     *aix4*)
480           AC_MSG_RESULT([enabling large file support])
481       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
482           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
483       ;;
484 #
485 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
486 # to the existance of large files..
487 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
488 # recommendations on large file support, however it makes the
489 # compile work using gcc 2.7 and 2.8, whereas using the Sun
490 # recommendation makes the compile fail on gcc2.7. JRA.
491 #
492 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
493 #
494         *solaris*)
495                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
496                 case `uname -r` in
497                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
498                                 AC_MSG_RESULT([no large file support])
499                                 ;;
500                         5.*)
501                         AC_MSG_RESULT([enabling large file support])
502                         if test "$ac_cv_prog_gcc" = yes; then
503                                 ${CC-cc} -v >conftest.c 2>&1
504                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
505                                 rm -fr conftest.c
506                                 case "$ac_cv_gcc_compiler_version_number" in
507                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
508                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
509                                                 LDFLAGS="$LDFLAGS -lthread"
510                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
511                                                 ;;
512                                         *)
513                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
514                                                 LDFLAGS="$LDFLAGS -lthread"
515                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
516                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
517                                                 ;;
518                                 esac
519                         else
520                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
521                                 LDFLAGS="$LDFLAGS -lthread"
522                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
523                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
524                         fi
525                         ;;
526                 esac
527                 ;;
528 #
529 # IRIX uses SYSV printing.  Make sure to set that here
530 #
531         *irix*)
532                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
533                 ;;
534         *freebsd*|*dragonfly*)
535                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
536                 ;;
537 #
538 # VOS may need to have POSIX support and System V compatibility enabled.
539 #
540     *vos*)
541     case "$CPPFLAGS" in
542           *-D_POSIX_C_SOURCE*)
543                 ;;
544           *)
545                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
546                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
547                 ;;
548     esac
549     case "$CPPFLAGS" in
550           *-D_SYSV*|*-D_SVID_SOURCE*)
551                 ;;
552           *)
553                 CPPFLAGS="$CPPFLAGS -D_SYSV"
554                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
555     esac
556     ;;
557 #
558 # Tests needed for SINIX large file support.
559 #
560     *sysv4*)
561       if test $host = mips-sni-sysv4 ; then
562         AC_MSG_CHECKING([for LFS support])
563         old_CPPFLAGS="$CPPFLAGS"
564         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
565         AC_TRY_RUN([
566 #include <unistd.h>
567 main () {
568 #if _LFS64_LARGEFILE == 1
569 exit(0);
570 #else
571 exit(1);
572 #endif
573 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
574         CPPFLAGS="$old_CPPFLAGS"
575         if test x$SINIX_LFS_SUPPORT = xyes ; then
576           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
577                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
578           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
579           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
580           LIBS="`getconf LFS64_LIBS` $LIBS"
581         fi
582       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
583       fi
584     ;;
585
586 # Systems with LFS support.
587 #
588     gnu* | k*bsd*-gnu | kopensolaris*-gnu)
589         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
590         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
591         AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
592         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
593         ;;
594
595 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
596 #
597     *linux*)
598         AC_MSG_CHECKING([for LFS support])
599         old_CPPFLAGS="$CPPFLAGS"
600         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
601        AC_TRY_RUN([
602 #include <unistd.h>
603 #include <sys/utsname.h>
604 #include <string.h>
605 #include <stdlib.h>
606 main() {
607 #if _LFS64_LARGEFILE == 1
608        struct utsname uts;
609        char *release;
610        int major, minor;
611
612        /* Ensure this is glibc 2.2 or higher */
613 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
614        int libc_major = __GLIBC__;
615        int libc_minor = __GLIBC_MINOR__;
616
617        if (libc_major < 2)
618               exit(1);
619        if (libc_minor < 2)
620               exit(1);
621 #endif
622
623        /* Ensure this is kernel 2.4 or higher */
624
625        uname(&uts);
626        release = strdup(uts.release);
627        major = atoi(strsep(&release, "."));
628        minor = atoi(strsep(&release, "."));
629
630        if (major > 2 || (major == 2 && minor > 3))
631                exit(0);
632        exit(1);
633 #else
634        exit(1);
635 #endif
636 }
637 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
638         CPPFLAGS="$old_CPPFLAGS"
639         if test x$LINUX_LFS_SUPPORT = xyes ; then
640                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
641                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
642                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
643                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
644         fi
645         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
646         ;;
647
648 #
649 # MacOS X is the *only* system that uses compose character in utf8. This
650 # is so horribly broken....
651 #
652     *darwin*)
653         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
654
655 # Add a system specific charset module.
656         default_shared_modules="$default_shared_modules charset_macosxfs"
657
658         ;;
659     *hurd*)
660         AC_MSG_CHECKING([for LFS support])
661         old_CPPFLAGS="$CPPFLAGS"
662         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
663         AC_TRY_RUN([
664 #include <unistd.h>
665 main () {
666 #if _LFS64_LARGEFILE == 1
667 exit(0);
668 #else
669 exit(1);
670 #endif
671 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
672         CPPFLAGS="$old_CPPFLAGS"
673         if test x$GLIBC_LFS_SUPPORT = xyes ; then
674           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
675                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
676           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
677         fi
678       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
679     ;;
680     *qnx*)
681         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
682         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
683         ;;
684
685 esac
686
687 SAVE_CPPFLAGS="${CPPFLAGS}"
688 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
689
690 AC_LIBREPLACE_BROKEN_CHECKS
691 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
692 AC_LIBREPLACE_NETWORK_CHECKS
693
694 CPPFLAGS="${SAVE_CPPFLAGS}"
695
696 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
697
698 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
699 AC_SUBST(LIBREPLACE_OBJS)
700
701 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS}"
702 AC_SUBST(LIBREPLACE_LIBS)
703
704
705 # add -ldl to the global LIBS
706 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
707 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
708
709
710 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
711 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
712 AC_CHECK_HEADERS(limits.h float.h libintl.h)
713 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
714 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/prctl.h sys/sysctl.h)
715 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
716 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
717 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
718 AC_CHECK_HEADERS(sys/sysmacros.h)
719 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
720 AC_CHECK_HEADERS(langinfo.h locale.h)
721 AC_CHECK_HEADERS(xfs/libxfs.h)
722 AC_CHECK_HEADERS(netgroup.h)
723
724 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
725 #if HAVE_RPC_RPC_H
726 #include <rpc/rpc.h>
727 #endif
728 ]])
729
730 ## These fail to compile on IRIX so just check for their presence
731 AC_CHECK_HEADERS(sys/mode.h,,,)
732
733 # Look for Darwin headers
734 old_CPPFLAGS="$CPPFLAGS"
735 CPPFLAGS="-Iinclude $CPPFLAGS"
736 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
737 CPPFLAGS="$old_CPPFLAGS"
738
739 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
740 # subdirectory of headers.
741 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
742
743 #
744 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
745 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
746 #
747 case "$host_os" in
748     *hpux*)
749                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
750                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
751                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
752                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
753                 fi
754         ;;
755 esac
756 AC_CHECK_HEADERS(shadow.h)
757 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
758 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
759
760 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
761 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
762
763 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
764
765 # For experimental utmp support (lastlog on some BSD-like systems)
766 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
767
768 AC_CHECK_SIZEOF(int,cross)
769 AC_CHECK_SIZEOF(long,cross)
770 AC_CHECK_SIZEOF(long long,cross)
771 AC_CHECK_SIZEOF(short,cross)
772
773 AC_C_CONST
774 AC_C_INLINE
775 AC_C_BIGENDIAN
776 AC_C_CHAR_UNSIGNED
777
778 AC_TYPE_SIGNAL
779 AC_TYPE_UID_T
780 AC_TYPE_MODE_T
781 AC_TYPE_OFF_T
782 AC_TYPE_SIZE_T
783 AC_TYPE_PID_T
784 AC_STRUCT_ST_RDEV
785 AC_DIRENT_D_OFF
786 AC_CHECK_TYPE(ssize_t, int)
787 AC_CHECK_TYPE(wchar_t, unsigned short)
788
789 ############################################
790 # for cups support we need libcups, and a handful of header files
791
792 AC_ARG_ENABLE(cups,
793 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
794
795 if test x$enable_cups != xno; then
796         AC_PATH_PROG(CUPS_CONFIG, cups-config)
797
798         if test "x$CUPS_CONFIG" != x; then
799
800                 ac_save_CFLAGS=$CFLAGS
801                 ac_save_LDFLAGS=$LDFLAGS
802                 ac_save_PRINT_LIBS=$PRINT_LIBS
803                 CFLAGS="$CFLAGS `$CUPS_CONFIG --cflags`"
804                 LDFLAGS="$LDFLAGS `$CUPS_CONFIG --ldflags`"
805                 PRINT_LIBS="$PRINT_LIBS -lcups"
806                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
807                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
808                         x"$ac_cv_header_cups_language_h" = xyes; then
809                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
810                         samba_cv_HAVE_CUPS=yes
811                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
812                 else
813                         AC_MSG_WARN([cups-config around but cups-devel not installed])
814                         CFLAGS=$ac_save_CFLAGS
815                         LDFLAGS=$ac_save_LDFLAGS
816                         PRINT_LIBS=$ac_save_PRINT_LIBS
817                 fi
818
819         elif test x"$enable_cups" = x"yes"; then
820                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
821         fi
822 fi
823
824 AC_ARG_ENABLE(iprint,
825 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
826
827 if test x$enable_iprint != xno; then
828         if test x"$samba_cv_HAVE_CUPS" = xyes; then
829                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
830         elif test x"$enable_iprint" = x"yes"; then
831                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
832         fi
833 fi
834
835 ############################################
836 # check if the compiler will optimize out function calls
837 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
838     AC_TRY_LINK([
839 #include <stdio.h>],
840 [
841                 if (0) {
842                    this_function_does_not_exist();
843                 } else {
844                   return 1;
845                 }
846
847 ],
848         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
849 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
850    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
851 fi
852
853 #############################################
854 # check for fd passing struct via msg_control
855 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
856     AC_TRY_COMPILE([
857 #include <sys/types.h>
858 #include <stdlib.h>
859 #include <stddef.h>
860 #include <sys/socket.h>
861 #include <sys/un.h>],
862 [
863         struct msghdr msg;
864         union {
865               struct cmsghdr cm;
866               char control[CMSG_SPACE(sizeof(int))];
867         } control_un;
868         msg.msg_control = control_un.control;
869         msg.msg_controllen = sizeof(control_un.control);
870 ],
871         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
872 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
873    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
874              [If we can use msg_control for passing file descriptors])
875 fi
876
877 #############################################
878 # check for fd passing struct via msg_acctrights
879 AC_CACHE_CHECK([for fd passing via msg_acctrights],
880                 samba_cv_msghdr_msg_acctrights, [
881     AC_TRY_COMPILE([
882 #include <sys/types.h>
883 #include <stdlib.h>
884 #include <stddef.h>
885 #include <sys/socket.h>
886 #include <sys/un.h>],
887 [
888         struct msghdr msg;
889         int fd;
890         msg.msg_acctrights = (caddr_t) &fd;
891         msg.msg_acctrightslen = sizeof(fd);
892 ],
893         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
894 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
895    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
896              [If we can use msg_acctrights for passing file descriptors])
897 fi
898
899 AC_CHECK_FUNCS(dirfd)
900 if test x"$ac_cv_func_dirfd" = x"yes"; then
901         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
902 fi
903
904 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
905     AC_TRY_COMPILE([
906 #include <sys/types.h>
907 #if STDC_HEADERS
908 #include <stdlib.h>
909 #include <stddef.h>
910 #endif
911 #include <signal.h>],[struct sigevent s;],
912         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
913 if test x"$samba_cv_struct_sigevent" = x"yes"; then
914    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
915    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
916         [#include <signal.h>])
917 fi
918
919 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
920     AC_TRY_COMPILE([
921 #include <sys/types.h>
922 #if STDC_HEADERS
923 #include <stdlib.h>
924 #include <stddef.h>
925 #endif
926 #if TIME_WITH_SYS_TIME
927 # include <sys/time.h>
928 # include <time.h>
929 #else
930 # if HAVE_SYS_TIME_H
931 #  include <sys/time.h>
932 # else
933 #  include <time.h>
934 # endif
935 #endif
936 ],[struct timespec ts;],
937         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
938 if test x"$samba_cv_struct_timespec" = x"yes"; then
939    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
940 fi
941
942 # and glibc has setresuid under linux but the function does
943 # nothing until kernel 2.1.44! very dumb.
944 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
945     AC_TRY_RUN([#include <errno.h>
946 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
947         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
948 if test x"$samba_cv_have_setresuid" = x"yes"; then
949     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
950 fi
951
952 # Do the same check for setresguid...
953 #
954 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
955     AC_TRY_RUN([#include <unistd.h>
956 #include <errno.h>
957 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
958         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
959 if test x"$samba_cv_have_setresgid" = x"yes"; then
960     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
961 fi
962
963 AC_FUNC_MEMCMP
964
965 ###############################################
966 # Readline included by default unless explicitly asked not to
967 test "${with_readline+set}" != "set" && with_readline=yes
968
969 # test for where we get readline() from
970 AC_MSG_CHECKING(whether to use readline)
971 AC_ARG_WITH(readline,
972 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
973 [  case "$with_readline" in
974   yes)
975     AC_MSG_RESULT(yes)
976
977     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
978     AC_CHECK_HEADERS(readline/history.h)
979
980     AC_CHECK_HEADERS(readline.h readline/readline.h,[
981       for termlib in ncurses curses termcap terminfo termlib tinfo; do
982        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
983       done
984       AC_CHECK_LIB(readline, rl_callback_handler_install,
985        [TERMLIBS="-lreadline $TERMLIBS"
986        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
987        break], [TERMLIBS=], $TERMLIBS)])
988     ;;
989   no)
990     AC_MSG_RESULT(no)
991     ;;
992   *)
993     AC_MSG_RESULT(yes)
994
995     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
996     # alternate readline path
997     _ldflags=${LDFLAGS}
998     _cppflags=${CPPFLAGS}
999
1000     # Add additional search path
1001     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1002     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1003
1004     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1005     AC_CHECK_HEADERS(readline/history.h)
1006
1007     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1008       for termlib in ncurses curses termcap terminfo termlib; do
1009        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1010       done
1011       AC_CHECK_LIB(readline, rl_callback_handler_install,
1012        [TERMLDFLAGS="-L$with_readline/lib"
1013        TERMCPPFLAGS="-I$with_readline/include"
1014        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1015        TERMLIBS="-lreadline $TERMLIBS"
1016        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1017        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1018
1019     LDFLAGS=$_ldflags
1020     ;;
1021   esac],
1022   AC_MSG_RESULT(no)
1023 )
1024 AC_SUBST(TERMLIBS)
1025 AC_SUBST(TERMLDFLAGS)
1026
1027 # The readline API changed slightly from readline3 to readline4, so
1028 # code will generate warnings on one of them unless we have a few
1029 # special cases.
1030 AC_CHECK_LIB(readline, rl_completion_matches,
1031              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1032                         [Do we have rl_completion_matches?])],
1033              [],
1034              [$TERMLIBS])
1035
1036 # not all readline libs have rl_event_hook or history_list
1037 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1038 AC_CHECK_LIB(readline, history_list,
1039              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1040              [],
1041              [$TERMLIBS])
1042
1043 ###############################################
1044 # test for where we get yp_get_default_domain() from
1045 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1046 AC_CHECK_FUNCS(yp_get_default_domain)
1047
1048 # Check if we have execl, if not we need to compile smbrun.
1049 AC_CHECK_FUNCS(execl)
1050 if test x"$ac_cv_func_execl" = x"no"; then
1051     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1052 fi
1053
1054 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
1055 AC_CHECK_FUNCS(strtol)
1056 AC_CHECK_FUNCS(strchr chflags)
1057 AC_CHECK_FUNCS(getrlimit fsync setpgid)
1058 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
1059 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
1060 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1061 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf)
1062 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
1063 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocate posix_fallocate64)
1064 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
1065 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1066 AC_CHECK_FUNCS(getpwent_r)
1067 AC_CHECK_FUNCS(getdents64)
1068 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
1069 AC_CHECK_FUNCS(syslog vsyslog timegm)
1070 AC_CHECK_FUNCS(setlocale nl_langinfo)
1071 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
1072 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
1073 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1074 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1075 AC_CHECK_HEADERS(sys/mman.h)
1076 # setbuffer, shmget, shm_open are needed for smbtorture
1077 AC_CHECK_FUNCS(shmget shm_open)
1078 AC_CHECK_FUNCS(gettext dgettext)
1079 AC_CHECK_FUNCS(bindtextdomain textdomain)
1080 AC_CHECK_FUNCS(strupr)
1081
1082 # Find a method of generating a stack trace
1083 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1084 # libexecinfo provides backtrace_symbols on FreeBSD
1085 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1086 AC_CHECK_FUNCS(backtrace_symbols)
1087 AC_CHECK_LIB(exc, trace_back_stack)
1088
1089 # check for sysctlbyname for BSD systems
1090 AC_CHECK_FUNCS(sysctlbyname)
1091
1092 #############################
1093 # check if building with gpfs
1094 AC_CHECK_HEADERS(gpfs_gpl.h)
1095 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1096     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1097     default_shared_modules="$default_shared_modules vfs_gpfs"
1098 fi
1099
1100 #############################################
1101 # check if building on Isilon OneFS
1102 printf "%s" "checking for Isilon OneFS... "
1103 save_LIBS="$LIBS"
1104 LIBS="$LIBS -lisi_version"
1105 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1106           [get_isilon_copyright()],
1107           samba_cv_HAVE_ONEFS=yes,
1108           samba_cv_HAVE_ONEFS=no)
1109 echo $samba_cv_HAVE_ONEFS
1110 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1111     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1112     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1113     default_static_modules="$default_static_modules"
1114     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1115     # Need to also add general libs for oplocks support
1116     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1117 fi
1118 AC_SUBST(ONEFS_LIBS)
1119 LIBS="$save_LIBS"
1120
1121 # Note that all the libunwind symbols in the API are defined to internal
1122 # platform-specific version, so we must include libunwind.h before checking
1123 # any of them.
1124 AC_MSG_CHECKING([for libunwind])
1125 save_LIBS=$LIBS
1126
1127 UNWIND_ARCH="unknown"
1128 if test x"$UNAME_I" != x"unknown"; then
1129         UNWIND_ARCH="$UNAME_I"
1130 elif test x"$UNAME_M" != x"unknown"; then
1131         UNWIND_ARCH="$UNAME_M"
1132 elif test x"$UNAME_P" != x"unknown"; then
1133         UNWIND_ARCH="$UNAME_P"
1134 fi
1135
1136 case "$UNWIND_ARCH" in
1137         unknown)
1138                 # This probably won't link without
1139                 # the platform-specific libunwind.
1140                 LIBS="$LIBS -lunwind"
1141                 ;;
1142         i386|i586|i686)
1143                 # Add the platform-specific libunwind module.
1144                 LIBS="$LIBS -lunwind -lunwind-x86"
1145                 ;;
1146         *)
1147                 # Add the platform-specific libunwind module.
1148                 # based on uname -i, uname -m or uname -p
1149                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1150                 ;;
1151 esac
1152
1153 AC_TRY_LINK(
1154     [
1155 #ifdef HAVE_LIBUNWIND_H
1156 #include <libunwind.h>
1157 #endif
1158     ],
1159     [
1160         unw_context_t ctx; unw_cursor_t cur;
1161         char buf[256]; unw_word_t off;
1162         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1163         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1164     ],
1165     [
1166         AC_MSG_RESULT(yes)
1167         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1168
1169         # If we have libunwind, test whether we also have libunwind-ptrace
1170         # which would let us unwind arbitrary processes.
1171         save_LIBS=$LIBS
1172         AC_CHECK_HEADERS(libunwind-ptrace.h)
1173         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1174             [
1175                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1176                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1177                     [Whether libunwind-ptrace.a is available.])
1178             ],
1179             [ LIBUNWIND_PTRACE="" ])
1180
1181         LIBS=$save_LIBS
1182     ],
1183     [
1184         AC_MSG_RESULT(no)
1185         LIBS=$save_LIBS
1186     ])
1187
1188 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1189 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1190     AC_CHECK_HEADERS(sys/ptrace.h)
1191     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1192     AC_TRY_LINK(
1193             [
1194 #if HAVE_SYS_TYPES_H
1195 #include <sys/types.h>
1196 #endif
1197 #if HAVE_SYS_PTRACE_H
1198 #include <sys/ptrace.h>
1199 #endif
1200             ],
1201             [
1202                 pid_t me = (pid_t)-1;
1203                 ptrace(PTRACE_ATTACH, me, 0, 0);
1204                 ptrace(PTRACE_DETACH, me, 0, 0);
1205                 return 0;
1206             ],
1207             [
1208                 AC_MSG_RESULT(yes)
1209                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1210                     [Whether the Linux ptrace(2) interface is available.])
1211             ],
1212             [
1213                 AC_MSG_RESULT(no)
1214                 LIBUNWIND_PTRACE=""
1215             ])
1216 fi
1217
1218 AC_SUBST(LIBUNWIND_PTRACE)
1219
1220 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1221 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1222 AC_CHECK_FUNCS(__getcwd _getcwd)
1223 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1224 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1225 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1226 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1227 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1228 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1229 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1230 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1231 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1232 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1233 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1234 AC_CHECK_FUNCS(prctl)
1235
1236 AC_TRY_COMPILE([
1237 #ifdef HAVE_SYS_PRCTL_H
1238 #include <sys/prctl.h>
1239 #endif
1240 ],
1241 [int i; i = prtcl(0); ],
1242 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1243
1244 #
1245 #
1246 #
1247 case "$host_os" in
1248     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1249        # glibc <= 2.3.2 has a broken getgrouplist
1250        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1251 #include <unistd.h>
1252 #include <sys/utsname.h>
1253 main() {
1254        /* glibc up to 2.3 has a broken getgrouplist */
1255 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1256        int libc_major = __GLIBC__;
1257        int libc_minor = __GLIBC_MINOR__;
1258
1259        if (libc_major < 2)
1260               exit(1);
1261        if ((libc_major == 2) && (libc_minor <= 3))
1262               exit(1);
1263 #endif
1264        exit(0);
1265 }
1266 ], [samba_cv_linux_getgrouplist_ok=yes],
1267    [samba_cv_linux_getgrouplist_ok=no],
1268    [samba_cv_linux_getgrouplist_ok=cross])])
1269        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1270           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1271        fi
1272        ;;
1273     *)
1274        AC_CHECK_FUNCS(getgrouplist)
1275        ;;
1276 esac
1277
1278 #
1279 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1280 #
1281
1282 if test x$ac_cv_func_stat64 = xno ; then
1283   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1284   AC_TRY_LINK([
1285 #if defined(HAVE_UNISTD_H)
1286 #include <unistd.h>
1287 #endif
1288 #include <sys/stat.h>
1289 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1290   AC_MSG_RESULT([$ac_cv_func_stat64])
1291   if test x$ac_cv_func_stat64 = xyes ; then
1292     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1293   fi
1294 fi
1295
1296 if test x$ac_cv_func_lstat64 = xno ; then
1297   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1298   AC_TRY_LINK([
1299 #if defined(HAVE_UNISTD_H)
1300 #include <unistd.h>
1301 #endif
1302 #include <sys/stat.h>
1303 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1304   AC_MSG_RESULT([$ac_cv_func_lstat64])
1305   if test x$ac_cv_func_lstat64 = xyes ; then
1306     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1307   fi
1308 fi
1309
1310 if test x$ac_cv_func_fstat64 = xno ; then
1311   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1312   AC_TRY_LINK([
1313 #if defined(HAVE_UNISTD_H)
1314 #include <unistd.h>
1315 #endif
1316 #include <sys/stat.h>
1317 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1318   AC_MSG_RESULT([$ac_cv_func_fstat64])
1319   if test x$ac_cv_func_fstat64 = xyes ; then
1320     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1321   fi
1322 fi
1323
1324 #################################################
1325 # Check whether struct stat has timestamps with sub-second resolution.
1326 #
1327
1328 samba_cv_stat_hires=no
1329 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1330         [samba_cv_stat_hires=yes])
1331 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1332         [samba_cv_stat_hires=yes])
1333 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1334         [samba_cv_stat_hires=yes])
1335 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1336         [samba_cv_stat_hires=yes])
1337 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1338         [samba_cv_stat_hires=yes])
1339
1340 if test x"$samba_cv_stat_hires" = x"yes" ; then
1341     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1342             [whether struct stat has sub-second timestamps])
1343 fi
1344
1345 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1346 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1347 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1348
1349
1350 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1351     [
1352         AC_TRY_COMPILE(
1353             [#include <sys/stat.h>],
1354             [
1355                 int a = UF_DOS_ARCHIVE;
1356                 int h = UF_DOS_HIDDEN;
1357                 int r = UF_DOS_RO;
1358                 int s = UF_DOS_SYSTEM;
1359                 int i = UF_DOS_NOINDEX;
1360                 int f = UF_DOS_FLAGS;
1361             ],
1362             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1363     ])
1364
1365 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1366     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1367 fi
1368
1369 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1370                samba_cv_function_attribute_destructor,
1371                [
1372                  AC_COMPILE_IFELSE(
1373                         [
1374                                 __attribute__((destructor))
1375                                 static void cleanup(void) { }
1376                         ],
1377                         samba_cv_function_attribute_destructor=yes)
1378                 ])
1379
1380 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1381    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1382              [whether we can compile with __attribute__((destructor))])
1383 fi
1384
1385 #####################################
1386 # needed for SRV lookups
1387 AC_CHECK_LIB(resolv, dn_expand)
1388 AC_CHECK_LIB(resolv, _dn_expand)
1389 AC_CHECK_LIB(resolv, __dn_expand)
1390
1391 #
1392 # Check for the functions putprpwnam, set_auth_parameters,
1393 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1394 # Needed for OSF1 and HPUX.
1395 #
1396
1397 AC_LIBTESTFUNC(security, putprpwnam)
1398 AC_LIBTESTFUNC(sec, putprpwnam)
1399
1400 AC_LIBTESTFUNC(security, set_auth_parameters)
1401 AC_LIBTESTFUNC(sec, set_auth_parameters)
1402
1403 # UnixWare 7.x has its getspnam in -lgen
1404 AC_LIBTESTFUNC(gen, getspnam)
1405
1406 AC_LIBTESTFUNC(security, getspnam)
1407 AC_LIBTESTFUNC(sec, getspnam)
1408
1409 AC_LIBTESTFUNC(security, bigcrypt)
1410 AC_LIBTESTFUNC(sec, bigcrypt)
1411
1412 AC_LIBTESTFUNC(security, getprpwnam)
1413 AC_LIBTESTFUNC(sec, getprpwnam)
1414
1415 AC_CHECK_FUNCS(strsignal)
1416
1417 ############################################
1418 # Check for EA implementations
1419 case "$host_os" in
1420   *osf*)
1421         AC_SEARCH_LIBS(getproplist, [proplist])
1422         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1423         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1424         AC_CHECK_FUNCS(sizeof_proplist_entry)
1425   ;;
1426   *freebsd4* | *dragonfly* )
1427         AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1428   ;;
1429   *solaris*)
1430         AC_CHECK_FUNCS(attropen)
1431   ;;
1432   *)
1433         AC_SEARCH_LIBS(getxattr, [attr])
1434         AC_CHECK_FUNCS(getxattr,[
1435                 AC_CHECK_FUNCS(lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
1436                 ])
1437         AC_CHECK_FUNCS(getea,[
1438                 AC_CHECK_FUNCS(fgetea lgetea listea flistea llistea removeea fremoveea lremoveea setea fsetea lsetea)
1439                 ])
1440         AC_CHECK_FUNCS(attr_get,[
1441                 AC_CHECK_FUNCS(attr_list attr_set attr_remove attr_getf attr_listf attr_setf attr_removef)
1442                 ])
1443         AC_CHECK_FUNCS(extattr_delete_file,[
1444                 AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_link extattr_get_fd extattr_get_file extattr_get_link extattr_list_fd extattr_list_file extattr_list_link extattr_set_fd extattr_set_file extattr_set_link)
1445                 ])
1446   ;;
1447 esac
1448
1449 ########################################################
1450 # Do xattr functions take additional options like on Darwin?
1451 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1452         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1453                 old_LIBS=$LIBS
1454                 LIBS="$LIBS $ACL_LIBS"
1455                 AC_TRY_COMPILE([
1456                         #include <sys/types.h>
1457                         #if HAVE_ATTR_XATTR_H
1458                         #include <attr/xattr.h>
1459                         #elif HAVE_SYS_XATTR_H
1460                         #include <sys/xattr.h>
1461                         #endif
1462                 ],[
1463                         getxattr(0, 0, 0, 0, 0, 0);
1464                 ],
1465                 [smb_attr_cv_xattr_add_opt=yes],
1466                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1467         ])
1468         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1469                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1470         fi
1471 fi
1472
1473 AC_DISABLE_STATIC
1474 AC_ENABLE_SHARED
1475
1476 # Set defaults
1477 PIE_CFLAGS=""
1478 PIE_LDFLAGS=""
1479 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1480
1481 if test "x$enable_pie" != xno
1482 then
1483         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1484         [
1485                 cat > conftest.c <<EOF
1486 int foo;
1487 main () { return 0;}
1488 EOF
1489                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1490                 then
1491                         samba_cv_fpie=yes
1492                 else
1493                         samba_cv_fpie=no
1494                 fi
1495                 rm -f conftest*
1496         ])
1497         if test x"${samba_cv_fpie}" = x"yes"
1498         then
1499                 PIE_CFLAGS="-fPIE"
1500                 PIE_LDFLAGS="-pie"
1501         fi
1502 fi
1503
1504 # Set defaults
1505 RELRO_LDFLAGS=""
1506 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1507
1508 if test "x$enable_relro" != xno
1509 then
1510         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1511         [
1512                 cat > conftest.c <<EOF
1513 int foo;
1514 main () { return 0;}
1515 EOF
1516                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1517                 then
1518                         samba_cv_relro=yes
1519                 else
1520                         samba_cv_relro=no
1521                 fi
1522                 rm -f conftest*
1523         ])
1524         if test x"${samba_cv_relro}" = x"yes"
1525         then
1526                 RELRO_LDFLAGS="-Wl,-z,relro"
1527         fi
1528 fi
1529
1530 # Set defaults
1531 SYMSEXT="syms"
1532 AC_SUBST(SYMSEXT)
1533
1534 # Assume non-shared by default and override below
1535 BLDSHARED="false"
1536
1537 # these are the defaults, good for lots of systems
1538 HOST_OS="$host_os"
1539 LDSHFLAGS="-shared"
1540 MODULE_EXPORTS=""
1541 SONAMEFLAG="#"
1542 SHLD="\${CC} \${CFLAGS}"
1543 PICFLAG="${PIE_CFLAGS}"
1544 SHLIBEXT="so"
1545 DSO_EXPORTS=""
1546
1547 # this bit needs to be modified for each OS that supports share libs
1548 # You need to specify how to create a shared library and
1549   # how to compile C code to produce PIC object files
1550
1551   AC_MSG_CHECKING([ability to build shared libraries])
1552
1553   # and these are for particular systems
1554   case "$host_os" in
1555                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1556                         case "$host_os" in
1557                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1558                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1559                         esac
1560                         BLDSHARED="true"
1561                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1562                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1563                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1564                         fi
1565                         DYNEXP="-Wl,--export-dynamic"
1566                         PICFLAG="-fPIC"
1567                         SONAMEFLAG="-Wl,-soname="
1568                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1569                         ;;
1570                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1571                         BLDSHARED="true"
1572                         if test "${GCC}" = "yes"; then
1573                                 PICFLAG="-fPIC"
1574                                 SONAMEFLAG="-Wl,-soname="
1575                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1576                                         DYNEXP="-Wl,-E"
1577                                 fi
1578                                 # TODO: need to add $CFLAGS here for explicit 64-bit builds?
1579                                 LDSHFLAGS="-shared"
1580                         else
1581                                 PICFLAG="-KPIC"
1582                                 ## ${CFLAGS} added for building 64-bit shared
1583                                 ## libs using Sun's Compiler
1584                                 LDSHFLAGS="-G \${CFLAGS}"
1585                         fi
1586                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1587                                 SONAMEFLAG="-Wl,-soname="
1588                         else
1589                                 SONAMEFLAG="-Wl,-h,"
1590                         fi
1591                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1592                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1593                         ;;
1594                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1595                         BLDSHARED="true"
1596                         LDSHFLAGS="-G"
1597                         SONAMEFLAG="-Wl,-h,"
1598                         PICFLAG="-KPIC"   # Is this correct for SunOS
1599                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1600                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1601                         ;;
1602                 *netbsd* | *freebsd* | *dragonfly* )
1603                         BLDSHARED="true"
1604                         LDSHFLAGS="-shared"
1605                         DYNEXP="-Wl,--export-dynamic"
1606                         SONAMEFLAG="-Wl,-soname,"
1607                         PICFLAG="-fPIC -DPIC"
1608                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1609                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1610                         ;;
1611                 *openbsd*)  BLDSHARED="true"
1612                         LDSHFLAGS="-shared"
1613                         DYNEXP="-Wl,-Bdynamic"
1614                         SONAMEFLAG="-Wl,-soname,"
1615                         PICFLAG="-fPIC"
1616                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1617                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1618                         ;;
1619                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1620                         case "$host_os" in
1621                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1622                         ;;
1623                         esac
1624                         BLDSHARED="true"
1625                         LDSHFLAGS="-set_version sgi1.0 -shared"
1626                         SONAMEFLAG="-soname "
1627                         SHLD="\${LD}"
1628                         if test "${GCC}" = "yes"; then
1629                                 PICFLAG="-fPIC"
1630                         else
1631                                 PICFLAG="-KPIC"
1632                         fi
1633                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1634                         ;;
1635                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1636                         BLDSHARED="true"
1637                         # use expfull to export underscored symbols
1638                         # add rtl to remove /lib/crt0.o warning
1639                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1640                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1641                         PICFLAG="-O2"
1642                         # as AIX code is always position independent...
1643                         # .po will just create compile warnings, use po.o:
1644                         if test "${GCC}" != "yes"; then
1645                                 ## for funky AIX compiler using strncpy()
1646                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
1647                         fi
1648
1649                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1650                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1651                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1652                         ;;
1653                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1654                         # Use special PIC flags for the native HP-UX compiler.
1655                                 BLDSHARED="true"
1656                                 SHLD="cc"
1657                                 LDSHFLAGS="-b -Wl,-B,symbolic,-b,-z"
1658                                 SONAMEFLAG="-Wl,+h "
1659                                 PICFLAG="+z"
1660                         if test "${GCC}" = "yes"; then
1661                                 PICFLAG="-fPIC"
1662                         else
1663                                 PICFLAG="+z +ESnolit"
1664                         fi
1665                         if test "$host_cpu" = "ia64"; then
1666                                 SHLIBEXT="so"
1667                               PICFLAG="+z"
1668                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32"
1669                         else
1670                                 SHLIBEXT="sl"
1671                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1672                         fi
1673                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1674                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1675                         ;;
1676                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1677                         BLDSHARED="true"
1678                         LDSHFLAGS="-shared"
1679                         SONAMEFLAG="-Wl,-soname,"
1680                         PICFLAG="-fPIC"
1681                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1682                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1683                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1684                                 saved_ldflags="$LDFLAGS"
1685                                 AC_MSG_CHECKING([if $flags works])
1686                                 LDFLAGS="$flags $saved_ldflags"
1687                                 AC_TRY_LINK([],[],
1688                                         [AC_MSG_RESULT([yes])
1689                                         LDSHFLAGS_Z_NODEFS=$flags],
1690                                         AC_MSG_RESULT([no]))
1691                                 LDFLAGS="$saved_ldflags"
1692                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1693                         done
1694                         ;;
1695                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1696                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1697                         ;;
1698                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1699                         BLDSHARED="true"
1700                         LDSHFLAGS="-shared"
1701                         SONAMEFLAG="-Wl,-soname,"
1702                         PICFLAG="-KPIC"
1703                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1704                         ;;
1705                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1706                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1707                         ;;
1708                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1709                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1710                         ;;
1711                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1712                         case "$host" in
1713                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1714                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1715                                         fi
1716                                         LDSHFLAGS="-G"
1717                                         DYNEXP="-Bexport"
1718                                 ;;
1719                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1720                         esac
1721                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1722                         ;;
1723
1724                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1725                         if [ test "$GCC" != yes ]; then
1726                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1727                         fi
1728                         LDSHFLAGS="-G"
1729                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1730                         ;;
1731                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1732                         BLDSHARED="false"
1733                         LDSHFLAGS=""
1734                         ;;
1735
1736                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1737                         BLDSHARED="true"
1738                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1739                         CFLAGS="$CFLAGS -fno-common"
1740                         SHLD="\${CC}"
1741                         SHLIBEXT="dylib"
1742                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1743                         SHLIBEXT="dylib"
1744                         # Since gcc doesn't fail on unrecognised options, the
1745                         # PIE test incorrectly succeeds. Darwin gcc does not
1746                         # actually support the PIE stuff.
1747                         PIE_LDFLAGS=
1748                         PIE_CFLAGS=
1749                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1750                         ;;
1751
1752                 *)
1753                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1754                         ;;
1755   esac
1756
1757 if test "$enable_shared" != "yes"; then
1758         BLDSHARED=false
1759 fi
1760
1761 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1762         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1763 fi
1764
1765 if test x"$BLDSHARED" = x"true" ; then
1766         LDFLAGS="$LDFLAGS -L./bin"
1767 fi
1768
1769 AC_MSG_RESULT($BLDSHARED)
1770
1771 for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1772         saved_ldflags="$LDFLAGS"
1773         AC_MSG_CHECKING([if $flags works])
1774         LDFLAGS="$flags $saved_ldflags"
1775         AC_TRY_LINK([],[],
1776                 [AC_MSG_RESULT([yes])
1777                 LD_AS_NEEDED_FLAG=$flags
1778                 ld_as_needed_flag_found=yes],
1779                 AC_MSG_RESULT([no]))
1780         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1781         test x"$ld_as_needed_flag_found" = xyes && break
1782 done
1783
1784 # for historical reasons almost all linkers don't complain about unresolved
1785 # symbols in shared libs. Except for the internal samba modules we want to get
1786 # errors when we produce a shared lib with unresolved symbols. On some
1787 # platforms unresolved symbols might be intended, so we might have to add
1788 # platform specific exceptions here.
1789
1790 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1791         saved_ldflags="$LDFLAGS"
1792         AC_MSG_CHECKING([if $flags works])
1793         LDFLAGS="$flags $saved_ldflags"
1794         AC_TRY_LINK([],[],
1795         [AC_MSG_RESULT([yes])
1796         LDSHFLAGS_Z_DEFS=$flags
1797         ldshflags_z_defs_found=yes],
1798         AC_MSG_RESULT([no]))
1799         LDFLAGS=$saved_ldflags
1800         test x"$ldshflags_z_defs_found" = xyes && break
1801 done
1802
1803 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1804 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1805 AC_MSG_CHECKING([LDFLAGS])
1806 AC_MSG_RESULT([$LDFLAGS])
1807 AC_MSG_CHECKING([DYNEXP])
1808 AC_MSG_RESULT([$DYNEXP])
1809
1810 #######################################################
1811 # test whether building a shared library actually works
1812 if test $BLDSHARED = true; then
1813
1814 AC_MSG_CHECKING([SHLD])
1815 AC_MSG_RESULT([$SHLD])
1816 AC_MSG_CHECKING([LDSHFLAGS])
1817 AC_MSG_RESULT([$LDSHFLAGS])
1818
1819 AC_MSG_CHECKING([SHLIBEXT])
1820 AC_MSG_RESULT([$SHLIBEXT])
1821 AC_MSG_CHECKING([SONAMEFLAG])
1822 AC_MSG_RESULT([$SONAMEFLAG])
1823
1824 AC_MSG_CHECKING([PICFLAG])
1825 AC_MSG_RESULT([$PICFLAG])
1826
1827 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1828 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1829
1830 AC_CACHE_CHECK([whether building shared libraries actually works],
1831                [ac_cv_shlib_works],[
1832    # try building a trivial shared library
1833    ac_cv_shlib_works=no
1834    # The $SHLD and $LDSHFLAGS variables may contain references to other
1835    # variables so they need to be eval'ed.
1836    $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o \
1837         shlib.o ${srcdir-.}/../tests/shlib.c && \
1838    `eval echo $SHLD` `eval echo $LDSHFLAGS` -o "shlib.$SHLIBEXT" \
1839         shlib.o && ac_cv_shlib_works=yes
1840    rm -f "shlib.$SHLIBEXT" shlib.o
1841
1842 ])
1843 if test $ac_cv_shlib_works = no; then
1844    BLDSHARED=false
1845 fi
1846 fi
1847
1848 if test x"$BLDSHARED" != x"true"; then
1849         LDSHFLAGS="shared-libraries-disabled"
1850         SONAMEFLAG="shared-libraries-disabled"
1851         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1852         SHLD="shared-libraries-disabled"
1853         PICFLAG="${PIE_CFLAGS}"
1854         SHLIBEXT="shared_libraries_disabled"
1855         merged_build_possible=no
1856 fi
1857
1858 AC_MSG_CHECKING([used PICFLAG])
1859 AC_MSG_RESULT([$PICFLAG])
1860
1861 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1862
1863 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
1864
1865
1866 ###########################################################
1867 #
1868 # Configuration of subsystems / libraries
1869 #
1870 ###########################################################
1871
1872 INSTALLLIBCMD_SH=:
1873 INSTALLLIBCMD_A=:
1874 UNINSTALLLIBCMD_SH=:
1875 UNINSTALLLIBCMD_A=:
1876
1877 if test $BLDSHARED = true; then
1878         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
1879         UNINSTALLLIBCMD_SH="rm -f"
1880 fi
1881 if test $enable_static = yes; then
1882         INSTALLLIBCMD_A="\$(INSTALLCMD)"
1883         UNINSTALLLIBCMD_A="rm -f"
1884 fi
1885
1886 #################################################
1887 # --disable-shared-libs
1888 # can be used to disable the internal use of shared libs altogether
1889 # (this only has an effect when building shared libs is enabled)
1890 #
1891 USESHARED=false
1892 AC_SUBST(USESHARED)
1893
1894 AC_MSG_CHECKING(whether to use shared libraries internally)
1895 AC_ARG_ENABLE([shared-libs],
1896         AS_HELP_STRING([--enable-shared-libs],
1897                 [Use shared libraries internally (default=yes)]),
1898         [enable_shared_libs=$enableval],
1899         [enable_shared_libs=yes])
1900
1901 if test x"$enable_shared_libs" != x"no" ; then
1902         USESHARED=$BLDSHARED
1903 fi
1904
1905 AC_MSG_RESULT([$USESHARED])
1906
1907 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
1908         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
1909 fi
1910
1911 #################################################
1912 # --with-static-libs=LIBS:
1913 #   link (internal) libs dynamically or statically?
1914 #
1915 # If a subsystem is built as a library then this controls whether they are
1916 # linked into Samba targets statically or dynamically:
1917 #
1918 # * If we build the shared library at all, we link dynamically by default.
1919 #
1920 # * We only link statically if we don't build shared or if the library
1921 #   appears in the --with-static-libs configure option.
1922 #
1923 # Example:
1924 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
1925 #   of linking the dynamic variant with -ltalloc.
1926 #
1927 # NOTE: This option only affects libraries that we do not only build
1928 # but that samba also links against as libraries (as opposed to linking
1929 # the plain object files. - This has to be configured in Makefile.in.
1930 # So in particular it does not harm to give invalid or unknown names here.
1931 #
1932
1933 AC_ARG_WITH([static-libs],
1934         [AS_HELP_STRING([--with-static-libs=LIBS],
1935                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
1936         [AS_IF([test $withval],
1937                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
1938                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
1939                         eval LINK_$lib=STATIC
1940                 done], [])],
1941         [])
1942
1943 #
1944 # WORKAROUND:
1945 #   until we have organized other internal subsystems (as util, registry
1946 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
1947 #   dynamically to samba programs.
1948 #
1949 LINK_LIBNETAPI=STATIC
1950
1951 LINK_LIBSMBCLIENT=STATIC
1952
1953 #
1954 #  The library versions are hardcoded here
1955 #  and filled into the LIBFOO_SOVER variable.
1956 #
1957 #  TODO: for talloc and tdb (at least), these should
1958 #  be extracted from their respective source directories
1959 #
1960 AC_ARG_ENABLE(external_libtalloc, [AS_HELP_STRING([--enable-external-libtalloc], [Enable external talloc [default=auto]])],
1961 [ enable_external_libtalloc=$enableval ], [ enable_external_libtalloc=auto ])
1962
1963 if test "x$enable_external_libtalloc" != xno
1964 then
1965         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
1966                 [ enable_external_libtalloc=yes ],
1967                 [ if test x$enable_external_libtalloc = xyes; then
1968                         AC_MSG_ERROR([Unable to find libtalloc])
1969                   else
1970                         enable_external_libtalloc=no
1971                   fi
1972                 ])
1973 fi
1974
1975 if test "x$enable_external_libtalloc" = xno
1976 then
1977         m4_include(../lib/talloc/libtalloc.m4)
1978         LINK_LIBTALLOC=STATIC
1979         SMB_LIBRARY(talloc, 2)
1980         LIBTALLOC_OBJ0=""
1981         for obj in ${TALLOC_OBJ}; do
1982                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
1983         done
1984         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
1985         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
1986         AC_SUBST(LIBTALLOC_OBJ0)
1987
1988         TALLOCTORT="bin/talloctort\$(EXEEXT)"
1989         AC_SUBST(TALLOCTORT)
1990 fi
1991
1992
1993 AC_ARG_ENABLE(external_libtdb,
1994         [AS_HELP_STRING([--enable-external-libtdb],
1995                 [Enable external tdb [default=auto]])],
1996                 [ enable_external_libtalloc=$enableval ],
1997                 [ enable_external_libtalloc=auto ])
1998
1999 if test "x$enable_external_libtdb" != xno
2000 then
2001         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.2,
2002                 [ enable_external_libtdb=yes ],
2003                 [
2004                 if test x$enable_external_libtdb = xyes; then
2005                         AC_MSG_ERROR([Unable to find libtdb])
2006                 else
2007                         enable_external_libtdb=no
2008                 fi
2009                 ])
2010 fi
2011
2012 AC_SUBST(LIBTDB_OBJ0)
2013 if test "x$enable_external_libtdb" = xno
2014 then
2015         m4_include(../lib/tdb/libtdb.m4)
2016         LINK_LIBTDB=STATIC
2017         SMB_LIBRARY(tdb, 1)
2018         LIBTDB_OBJ0=""
2019         for obj in ${TDB_OBJ}; do
2020                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
2021         done
2022         AC_SUBST(LIBTDB_OBJ0)
2023         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
2024         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
2025
2026         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
2027         AC_SUBST(TDBBACKUP)
2028         TDBDUMP="bin/tdbdump\$(EXEEXT)"
2029         AC_SUBST(TDBDUMP)
2030         TDBTOOL="bin/tdbtool\$(EXEEXT)"
2031         AC_SUBST(TDBTOOL)
2032         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
2033         AC_SUBST(TDBTORTURE)
2034         ac_cv_have_tdb_err_nesting=yes
2035 else
2036         AC_TRY_COMPILE([#include "tdb.h"],
2037                        [enum TDB_ERROR err = TDB_ERR_NESTING],
2038                        ac_cv_have_tdb_err_nesting=yes,
2039                        ac_cv_have_tdb_err_nesting=no)
2040 fi
2041
2042 if test x"$ac_cv_have_tdb_err_nesting" = xyes; then
2043    AC_DEFINE(HAVE_TDB_ERR_NESTING, 1, [Whether we have TDB_ERR_NESTING])
2044 fi
2045
2046 SMB_LIBRARY(netapi, 0)
2047 SMB_LIBRARY(smbclient, 0)
2048 SMB_LIBRARY(smbsharemodes, 0)
2049 SMB_LIBRARY(addns, 0, no, [undefined API])
2050
2051
2052
2053 ################
2054
2055 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2056 AC_TRY_RUN([#include <stdio.h>
2057 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2058 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2059 if test x"$samba_cv_have_longlong" = x"yes"; then
2060     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2061     AC_CHECK_TYPE(intptr_t, unsigned long long)
2062 else
2063     AC_CHECK_TYPE(intptr_t, unsigned long)
2064 fi
2065
2066 #
2067 # Check if the compiler supports the LL prefix on long long integers.
2068 # AIX needs this.
2069
2070 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2071     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2072         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2073 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2074    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2075 fi
2076
2077
2078 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2079 AC_TRY_RUN([#include <time.h>
2080 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2081 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2082 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2083     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2084 fi
2085
2086 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2087 AC_TRY_RUN([#include <stdio.h>
2088 #include <sys/stat.h>
2089 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2090 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2091 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2092     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2093 fi
2094
2095 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2096 AC_TRY_RUN([
2097 #if defined(HAVE_UNISTD_H)
2098 #include <unistd.h>
2099 #endif
2100 #include <stdio.h>
2101 #include <sys/stat.h>
2102 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2103 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2104 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2105     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2106 fi
2107
2108 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2109 AC_TRY_RUN([
2110 #if defined(HAVE_UNISTD_H)
2111 #include <unistd.h>
2112 #endif
2113 #include <stdio.h>
2114 #include <sys/stat.h>
2115 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2116 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2117 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2118     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2119 fi
2120
2121 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2122 AC_TRY_RUN([
2123 #if defined(HAVE_UNISTD_H)
2124 #include <unistd.h>
2125 #endif
2126 #include <stdio.h>
2127 #include <sys/stat.h>
2128 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2129 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2130 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2131     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2132 fi
2133
2134 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2135 AC_TRY_RUN([
2136 #if defined(HAVE_UNISTD_H)
2137 #include <unistd.h>
2138 #endif
2139 #include <stdio.h>
2140 #include <sys/stat.h>
2141 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2142 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2143 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2144     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2145 fi
2146
2147 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2148 AC_TRY_RUN([
2149 #if defined(HAVE_UNISTD_H)
2150 #include <unistd.h>
2151 #endif
2152 #include <stdio.h>
2153 #include <sys/stat.h>
2154 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2155 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2156 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2157     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2158 fi
2159
2160 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2161 AC_TRY_COMPILE([
2162 #if defined(HAVE_UNISTD_H)
2163 #include <unistd.h>
2164 #endif
2165 #include <sys/types.h>
2166 #include <dirent.h>],
2167 [DIR64 de;],
2168 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2169 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2170     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2171 fi
2172
2173 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2174 AC_TRY_COMPILE([
2175 #if defined(HAVE_UNISTD_H)
2176 #include <unistd.h>
2177 #endif
2178 #include <sys/types.h>
2179 #include <dirent.h>],
2180 [struct dirent64 de;],
2181 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2182 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2183     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2184 fi
2185
2186 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2187 AC_TRY_RUN([
2188 #if defined(HAVE_UNISTD_H)
2189 #include <unistd.h>
2190 #endif
2191 #include <sys/types.h>
2192 main() { dev_t dev; int i = major(dev); return 0; }],
2193 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2194 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2195     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2196 fi
2197
2198 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2199 AC_TRY_RUN([
2200 #if defined(HAVE_UNISTD_H)
2201 #include <unistd.h>
2202 #endif
2203 #include <sys/types.h>
2204 main() { dev_t dev; int i = minor(dev); return 0; }],
2205 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2206 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2207     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2208 fi
2209
2210 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2211 AC_TRY_RUN([
2212 #if defined(HAVE_UNISTD_H)
2213 #include <unistd.h>
2214 #endif
2215 #include <sys/types.h>
2216 main() { dev_t dev = makedev(1,2); return 0; }],
2217 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2218 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2219     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2220 fi
2221
2222 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2223 AC_TRY_RUN([#include <stdio.h>
2224 main() { char c; c=250; exit((c > 0)?0:1); }],
2225 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2226 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2227     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2228 fi
2229
2230 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2231 AC_TRY_COMPILE([#include <sys/types.h>
2232 #include <dirent.h>
2233 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2234 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2235 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2236     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2237 fi
2238
2239 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2240 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2241 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2242 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2243     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2244 fi
2245
2246
2247 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2248
2249     # On some systems (eg. Linux) librt can pull in libpthread. We
2250     # don't want this to happen because libpthreads changes signal delivery
2251     # semantics in ways we are not prepared for. This breaks Linux oplocks
2252     # which rely on signals.
2253
2254     AC_LIBTESTFUNC(rt, clock_gettime,
2255             [
2256                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2257                                 [Whether clock_gettime is available])
2258                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2259                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2260                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2261                         ])
2262
2263 fi
2264
2265 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2266 AC_TRY_RUN([#include <sys/types.h>
2267 #include <dirent.h>
2268 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2269 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2270 di->d_name[0] == 0) exit(0); exit(1);} ],
2271 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2272 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2273     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2274 fi
2275
2276 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2277 AC_TRY_COMPILE([#include <sys/types.h>
2278 #include <utime.h>],
2279 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2280 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2281 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2282     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2283 fi
2284
2285 ##############
2286 # Check utmp details, but only if our OS offers utmp.h
2287 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2288 dnl  utmp and utmpx come in many flavours
2289 dnl  We need to check for many of them
2290 dnl  But we don't need to do each and every one, because our code uses
2291 dnl  mostly just the utmp (not utmpx) fields.
2292
2293 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2294
2295 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2296 AC_TRY_COMPILE([#include <sys/types.h>
2297 #include <utmp.h>],
2298 [struct utmp ut;  ut.ut_name[0] = 'a';],
2299 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2300 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2301     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2302 fi
2303
2304 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2305 AC_TRY_COMPILE([#include <sys/types.h>
2306 #include <utmp.h>],
2307 [struct utmp ut;  ut.ut_user[0] = 'a';],
2308 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2309 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2310     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2311 fi
2312
2313 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2314 AC_TRY_COMPILE([#include <sys/types.h>
2315 #include <utmp.h>],
2316 [struct utmp ut;  ut.ut_id[0] = 'a';],
2317 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2318 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2319     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2320 fi
2321
2322 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2323 AC_TRY_COMPILE([#include <sys/types.h>
2324 #include <utmp.h>],
2325 [struct utmp ut;  ut.ut_host[0] = 'a';],
2326 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2327 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2328     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2329 fi
2330
2331 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2332 AC_TRY_COMPILE([#include <sys/types.h>
2333 #include <utmp.h>],
2334 [struct utmp ut;  time_t t; ut.ut_time = t;],
2335 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2336 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2337     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2338 fi
2339
2340 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2341 AC_TRY_COMPILE([#include <sys/types.h>
2342 #include <utmp.h>],
2343 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2344 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2345 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2346     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2347 fi
2348
2349 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2350 AC_TRY_COMPILE([#include <sys/types.h>
2351 #include <utmp.h>],
2352 [struct utmp ut;  ut.ut_type = 0;],
2353 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2354 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2355     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2356 fi
2357
2358 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2359 AC_TRY_COMPILE([#include <sys/types.h>
2360 #include <utmp.h>],
2361 [struct utmp ut;  ut.ut_pid = 0;],
2362 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2363 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2364     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2365 fi
2366
2367 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2368 AC_TRY_COMPILE([#include <sys/types.h>
2369 #include <utmp.h>],
2370 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2371 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2372 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2373     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2374 fi
2375
2376 dnl Look for the IPv6 varient by preference. Many systems have both.
2377 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2378 AC_TRY_COMPILE([#include <sys/types.h>
2379 #include <utmp.h>],
2380 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2381 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2382 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2383     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2384 fi
2385
2386 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2387 AC_TRY_COMPILE([#include <sys/types.h>
2388 #include <utmp.h>],
2389 [struct utmp ut;  ut.ut_addr = 0;],
2390 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2391 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2392     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2393 fi
2394
2395 if test x$ac_cv_func_pututline = xyes ; then
2396   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2397   AC_TRY_COMPILE([#include <sys/types.h>
2398 #include <utmp.h>],
2399   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2400   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2401   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2402       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2403   fi
2404 fi
2405
2406 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2407 AC_TRY_COMPILE([#include <sys/types.h>
2408 #include <utmpx.h>],
2409 [struct utmpx ux;  ux.ut_syslen = 0;],
2410 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2411 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2412     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2413 fi
2414
2415 fi
2416 # end utmp details
2417
2418
2419 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2420 AC_ARG_WITH(libiconv,
2421 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2422 [
2423   if test "$withval" = "no" ; then
2424     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2425   else
2426      if test "$withval" != "yes" ; then
2427         ICONV_PATH_SPEC=yes
2428         ICONV_LOOK_DIRS="$withval"
2429      fi
2430   fi
2431 ])
2432
2433 for i in $ICONV_LOOK_DIRS ; do
2434
2435     save_LIBS="$LIBS"
2436     save_LDFLAGS="$LDFLAGS"
2437     save_CPPFLAGS="$CPPFLAGS"
2438
2439     iconv_current_LIBS=""
2440     iconv_current_LDFLAGS=""
2441     iconv_current_CPPFLAGS=""
2442
2443     ICONV_FOUND="no"
2444     unset libext
2445
2446     #  This is here to handle -withval stuff for --with-libiconv
2447     #  Perhaps we should always add a -L
2448     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2449
2450     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2451     # installation paths. This gets a little tricky since we might have iconv
2452     # in both libiconv and in libc. In this case the jm_ICONV test will always
2453     # succeed when the header is found. To counter this, make sure the
2454     # library directory is there and check the ABI directory first (which
2455     # should be harmless on other systems, but causes tons of linker warnings on
2456     # 64bit Ubuntu systems).
2457     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2458     # installed, I've decided to fix the linker warnings.
2459     # -- Kai
2460     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2461     for l in "lib" "lib32" "lib/hpux32"; do
2462         if test -d "$i/$l" ; then
2463                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2464                 LIBS=
2465                 export LDFLAGS LIBS CPPFLAGS
2466                 # Try to find iconv(3)
2467                 jm_ICONV($i/$l)
2468                 if test x"$ICONV_FOUND" = "xyes" ; then
2469                     libext="$l"
2470                     break
2471                 fi
2472         fi
2473     done
2474
2475     if test x"$ICONV_FOUND" = "xyes" ; then
2476         iconv_current_LDFLAGS="-L$i/$libext"
2477         iconv_current_CPPFLAGS="-I$i/include"
2478
2479         if test x"$jm_cv_lib_iconv" != x; then
2480             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2481         else
2482             # We found iconv in libc.
2483             iconv_current_LIBS=""
2484         fi
2485
2486     fi
2487
2488     if test x"$ICONV_FOUND" = "xyes" ; then
2489
2490         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2491         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2492         LIBS="$save_LIBS $iconv_current_LIBS"
2493         export LDFLAGS LIBS CPPFLAGS
2494
2495         default_dos_charset=no
2496         default_display_charset=no
2497         default_unix_charset=no
2498
2499         # check for default dos charset name
2500         for j in CP850 IBM850 ; do
2501             rjs_CHARSET($j)
2502             default_dos_charset="$ICONV_CHARSET"
2503             if test x"$default_dos_charset" = x"$j"; then
2504                 break
2505             fi
2506         done
2507
2508         # check for default display charset name
2509         for j in ASCII 646 ; do
2510             rjs_CHARSET($j)
2511             default_display_charset="$ICONV_CHARSET"
2512             if test x"$default_display_charset" = x"$j"; then
2513                 break
2514             fi
2515         done
2516
2517         # check for default unix charset name
2518         for j in UTF-8 UTF8 ; do
2519             rjs_CHARSET($j)
2520             default_unix_charset="$ICONV_CHARSET"
2521             if test x"$default_unix_charset" = x"$j"; then
2522                 break
2523             fi
2524         done
2525
2526         if test "$default_dos_charset" != "no" -a \
2527                 "$default_dos_charset" != "cross" -a \
2528                 "$default_display_charset" != "no" -a \
2529                 "$default_display_charset" != "cross" -a \
2530                 "$default_unix_charset" != "no" -a \
2531                 "$default_unix_charset" != "cross"
2532         then
2533                 samba_cv_HAVE_NATIVE_ICONV=yes
2534         else
2535             if test "$default_dos_charset" = "cross" -o \
2536                      "$default_display_charset" = "cross" -o \
2537                      "$default_unix_charset" = "cross"
2538             then
2539                     samba_cv_HAVE_NATIVE_ICONV=cross
2540             else
2541                     samba_cv_HAVE_NATIVE_ICONV=no
2542             fi
2543         fi
2544
2545         # At this point, we have a libiconv candidate. We know that
2546         # we have the right headers and libraries, but we don't know
2547         # whether it does the conversions we want. We can't test this
2548         # because we are cross-compiling. This is not necessarily a big
2549         # deal, since we can't guarantee that the results we get now will
2550         # match the results we get at runtime anyway.
2551         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2552             default_dos_charset="CP850"
2553             default_display_charset="ASCII"
2554             default_unix_charset="UTF-8"
2555             samba_cv_HAVE_NATIVE_ICONV=yes
2556             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2557             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2558         fi
2559
2560         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2561
2562             CPPFLAGS=$save_CPPFLAGS
2563             LDFLAGS=$save_LDFLAGS
2564             LIBS=$save_LIBS
2565
2566             if test x"$iconv_current_LIBS" != x; then
2567                 LIBS="$LIBS $iconv_current_LIBS"
2568             fi
2569
2570             # Add the flags we need to CPPFLAGS and LDFLAGS
2571             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2572             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2573
2574             # Turn the #defines into string literals
2575             default_dos_charset="\"$default_dos_charset\""
2576             default_display_charset="\"$default_display_charset\""
2577             default_unix_charset="\"$default_unix_charset\""
2578
2579             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2580             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2581             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2582             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2583
2584            break
2585         fi
2586
2587     # We didn't find a working iconv, so keep going
2588     fi
2589
2590     #  We only need to clean these up here for the next pass through the loop
2591     CPPFLAGS=$save_CPPFLAGS
2592     LDFLAGS=$save_LDFLAGS
2593     LIBS=$save_LIBS
2594     export LDFLAGS LIBS CPPFLAGS
2595 done
2596 unset libext
2597
2598
2599 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2600     AC_MSG_WARN([Sufficient support for iconv function was not found.
2601     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2602    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2603    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2604    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2605 fi
2606
2607
2608 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2609 AC_TRY_RUN([
2610 #include <sys/types.h>
2611 #include <fcntl.h>
2612 #ifndef F_GETLEASE
2613 #define F_GETLEASE      1025
2614 #endif
2615 main() {
2616        int fd = open("/dev/null", O_RDONLY);
2617        return fcntl(fd, F_GETLEASE, 0) == -1;
2618 }
2619 ],
2620 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2621 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2622     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2623 fi
2624
2625 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2626 AC_TRY_RUN([
2627 #include <sys/types.h>
2628 #include <fcntl.h>
2629 #include <signal.h>
2630 #ifndef F_NOTIFY
2631 #define F_NOTIFY 1026
2632 #endif
2633 main() {
2634         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2635 }
2636 ],
2637 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2638 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2639     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2640 fi
2641
2642 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2643 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2644 AC_CHECK_FUNCS(inotify_init)
2645 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2646 ],
2647 samba_cv_HAVE_INOTIFY=yes,
2648 samba_cv_HAVE_INOTIFY=no,
2649 samba_cv_HAVE_INOTIFY=cross)
2650
2651 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2652     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2653 fi
2654
2655 #################################################
2656 # Check if FAM notifications are available. For FAM info, see
2657 #       http://oss.sgi.com/projects/fam/
2658 #       http://savannah.nongnu.org/projects/fam/
2659 AC_ARG_ENABLE(fam,
2660 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2661
2662 if test x$enable_fam != xno; then
2663     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2664     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2665         # On IRIX, libfam requires libC, but other FAM implementations
2666         # might not need it.
2667         AC_CHECK_LIB(fam, FAMOpen2,
2668             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2669             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2670             [samba_cv_HAVE_LIBFAM=no])
2671
2672         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2673             samba_fam_xtra=-lC
2674             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2675                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2676                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2677                 [samba_cv_HAVE_LIBFAM=no])
2678             unset samba_fam_xtra
2679         fi
2680     fi
2681     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2682         default_shared_modules="$default_shared_modules vfs_notify_fam"
2683         AC_TRY_COMPILE([#include <fam.h>],
2684                     [enum FAMCodes code = FAMChanged;],
2685                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2686                         [Whether fam.h contains a typedef for enum FAMCodes]),
2687                     [])
2688     fi
2689
2690     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2691         AC_CHECK_LIB(fam, FAMNoExists,
2692             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2693     fi
2694
2695     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2696         AC_MSG_ERROR(FAM support requested but FAM library not available )
2697     fi
2698 fi
2699
2700 AC_SUBST(SMB_FAM_LIBS)
2701
2702 #################################################
2703 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2704
2705
2706 with_dmapi_support=auto
2707 AC_MSG_CHECKING(whether to use DMAPI support)
2708 AC_ARG_WITH(dmapi,
2709 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2710 [ case "$withval" in
2711   yes|no)
2712     with_dmapi_support=$withval
2713     ;;
2714   esac ]
2715 )
2716 AC_MSG_RESULT([$with_dmapi_support])
2717
2718 if test x"$with_dmapi_support" != xno ; then
2719         SMB_CHECK_DMAPI([], [
2720                 AC_MSG_NOTICE(DMAPI support not present)
2721                 if test x"$with_dmapi_support" = xyes ; then
2722                         AC_MSG_ERROR(no DMAPI support found but requested!)
2723                 fi
2724                 ]
2725         )
2726 fi
2727
2728 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2729 # Theoretically it should work with AIX JFS2 too but this needs testing
2730 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2731     default_shared_modules="$default_shared_modules vfs_tsmsm"
2732 fi
2733
2734 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2735 AC_TRY_RUN([
2736 #include <sys/types.h>
2737 #include <fcntl.h>
2738 #include <signal.h>
2739 #include <sys/file.h>
2740 #ifndef LOCK_MAND
2741 #define LOCK_MAND       32
2742 #define LOCK_READ       64
2743 #endif
2744 main() {
2745         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2746 }
2747 ],
2748 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2749 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2750     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2751 fi
2752
2753
2754 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2755 AC_TRY_COMPILE([#include <sys/types.h>
2756 #include <fcntl.h>],
2757 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2758 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2759 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2760     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2761 fi
2762
2763 #################################################
2764 # Check for POSIX capability support
2765
2766 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2767     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2768     [], [])
2769
2770 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2771
2772     ac_save_LIBS=$LIBS
2773     AC_LIBTESTFUNC(cap, cap_get_proc)
2774
2775     AC_CACHE_CHECK([for POSIX capabilities],
2776             samba_cv_HAVE_POSIX_CAPABILITIES,
2777             [
2778                 AC_TRY_RUN([
2779 #include <sys/types.h>
2780 #include <sys/capability.h>
2781 main() {
2782  cap_t cap;
2783  cap_value_t vals[1];
2784  if (!(cap = cap_get_proc()))
2785    exit(1);
2786  vals[0] = CAP_CHOWN;
2787  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2788  cap_set_proc(cap);
2789  exit(0);
2790 }],
2791                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2792                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2793                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2794             ])
2795
2796 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2797     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2798             [Whether POSIX capabilities are available])
2799 else
2800     LIBS=$ac_save_LIBS
2801 fi
2802
2803 fi
2804
2805 #
2806 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2807 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2808 #
2809
2810 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2811 AC_TRY_COMPILE([#include <sys/types.h>
2812 #if defined(HAVE_RPC_RPC_H)
2813 #include <rpc/rpc.h>
2814 #endif],
2815 [int16 testvar;],
2816 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2817 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2818     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2819 fi
2820
2821 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2822 AC_TRY_COMPILE([#include <sys/types.h>
2823 #if defined(HAVE_RPC_RPC_H)
2824 #include <rpc/rpc.h>
2825 #endif],
2826 [uint16 testvar;],
2827 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2828 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2829     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2830 fi
2831
2832 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2833 AC_TRY_COMPILE([#include <sys/types.h>
2834 #if defined(HAVE_RPC_RPC_H)
2835 #include <rpc/rpc.h>
2836 #endif],
2837 [int32 testvar;],
2838 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2839 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2840     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2841 fi
2842
2843 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2844 AC_TRY_COMPILE([#include <sys/types.h>
2845 #if defined(HAVE_RPC_RPC_H)
2846 #include <rpc/rpc.h>
2847 #endif],
2848 [uint32 testvar;],
2849 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2850 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2851     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2852 fi
2853
2854 dnl
2855 dnl Some systems (SCO) have a problem including
2856 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2857 dnl as a #define in <prot.h> and as part of an enum
2858 dnl in <rpc/rpc.h>.
2859 dnl
2860
2861 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2862 AC_TRY_COMPILE([#include <sys/types.h>
2863 #ifdef HAVE_SYS_SECURITY_H
2864 #include <sys/security.h>
2865 #include <prot.h>
2866 #endif  /* HAVE_SYS_SECURITY_H */
2867 #if defined(HAVE_RPC_RPC_H)
2868 #include <rpc/rpc.h>
2869 #endif],
2870 [int testvar;],
2871 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2872 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2873     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
2874 fi
2875
2876 AC_MSG_CHECKING([for test routines])
2877 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
2878            AC_MSG_RESULT(yes),
2879            AC_MSG_ERROR([cant find test code. Aborting config]),
2880            AC_MSG_WARN([cannot run when cross-compiling]))
2881
2882 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
2883 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
2884            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
2885 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
2886     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
2887 fi
2888
2889 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
2890 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
2891            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
2892 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
2893     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
2894 fi
2895
2896 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
2897 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
2898 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
2899 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
2900 AC_CHECK_FUNCS(getpagesize)
2901
2902 ################################################
2903 # look for a method of setting the effective uid
2904 seteuid=no;
2905
2906 if test $seteuid = no; then
2907 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
2908 AC_TRY_RUN([
2909 #define AUTOCONF_TEST 1
2910 #define USE_SETREUID 1
2911 #include "confdefs.h"
2912 #include "${srcdir-.}/lib/util_sec.c"],
2913            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
2914 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
2915     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
2916 fi
2917 fi
2918
2919 # we check for setresuid second as it conflicts with AIO on Linux. 
2920 # see http://samba.org/~tridge/junkcode/aio_uid.c
2921 if test $seteuid = no; then
2922 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
2923 AC_TRY_RUN([
2924 #define AUTOCONF_TEST 1
2925 #define USE_SETRESUID 1
2926 #include "confdefs.h"
2927 #include "${srcdir-.}/lib/util_sec.c"],
2928            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
2929 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
2930     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
2931 fi
2932 fi
2933
2934 if test $seteuid = no; then
2935 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
2936 AC_TRY_RUN([
2937 #define AUTOCONF_TEST 1
2938 #define USE_SETEUID 1
2939 #include "confdefs.h"
2940 #include "${srcdir-.}/lib/util_sec.c"],
2941            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
2942 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
2943     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
2944 fi
2945 fi
2946
2947 if test $seteuid = no; then
2948 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
2949 AC_TRY_RUN([
2950 #define AUTOCONF_TEST 1
2951 #define USE_SETUIDX 1
2952 #include "confdefs.h"
2953 #include "${srcdir-.}/lib/util_sec.c"],
2954            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
2955 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
2956     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
2957 fi
2958 fi
2959
2960 AC_CACHE_CHECK([for the Darwin initgroups system call],
2961         samba_cv_DARWIN_INITGROUPS,
2962         AC_TRY_LINK([
2963 #include <sys/syscall.h>
2964 #include <unistd.h>
2965         ],
2966         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
2967         samba_cv_DARWIN_INITGROUPS=yes,
2968         samba_cv_DARWIN_INITGROUPS=no)
2969 )
2970
2971 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
2972     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
2973         [Whether to use the Darwin-specific initgroups system call])
2974 fi
2975
2976 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
2977 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
2978            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
2979 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
2980     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
2981 fi
2982
2983 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
2984 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
2985            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
2986 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
2987     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
2988
2989 else
2990
2991 dnl
2992 dnl Don't check for 64 bit fcntl locking if we know that the
2993 dnl glibc2.1 broken check has succeeded.
2994 dnl
2995
2996   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
2997   AC_TRY_RUN([
2998 #if defined(HAVE_UNISTD_H)
2999 #include <unistd.h>
3000 #endif
3001 #include <stdio.h>
3002 #include <stdlib.h>
3003
3004 #ifdef HAVE_FCNTL_H
3005 #include <fcntl.h>
3006 #endif
3007
3008 #ifdef HAVE_SYS_FCNTL_H
3009 #include <sys/fcntl.h>
3010 #endif
3011 main() { struct flock64 fl64;
3012 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3013 exit(0);
3014 #else
3015 exit(1);
3016 #endif
3017 }],
3018        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3019
3020   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3021       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3022   fi
3023 fi
3024
3025 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
3026 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
3027 AC_TRY_COMPILE([
3028   #define _XOPEN_SOURCE 600
3029   #include <stdlib.h>
3030   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
3031     probably broken posix_fallocate
3032   #endif
3033 ], [
3034 ], 
3035 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
3036 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
3037         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE,, Whether we have a broken posix_fallocate)
3038 fi
3039
3040
3041 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3042 AC_TRY_COMPILE([#include <sys/types.h>
3043 #include <sys/stat.h>
3044 #include <unistd.h>],
3045 [struct stat st;  st.st_blocks = 0;],
3046 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3047 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3048     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3049 fi
3050
3051 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
3052
3053 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3054 AC_TRY_COMPILE([#include <sys/types.h>
3055 #include <sys/stat.h>
3056 #include <unistd.h>],
3057 [struct stat st;  st.st_blksize = 0;],
3058 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3059 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3060     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3061 fi
3062
3063 AC_CACHE_CHECK([for st_flags in struct stat],
3064         samba_cv_HAVE_STAT_ST_FLAGS,
3065         [
3066             AC_TRY_COMPILE([#include <sys/types.h>
3067 #include <sys/stat.h>
3068 #include <unistd.h>],
3069             [struct stat st;  st.st_flags = 0;],
3070             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3071             samba_cv_HAVE_STAT_ST_FLAGS=no,
3072             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3073         ])
3074
3075 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3076     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3077                 [Whether the stat struct has a st_flags member])
3078 fi
3079
3080 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3081 AC_TRY_COMPILE([
3082 #include <sys/types.h>
3083 #include <sys/acl.h>
3084 #if defined(HAVE_RPCSVC_NIS_H)
3085 #include <rpcsvc/nis.h>
3086 #endif],
3087 [int i;],
3088 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3089 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3090         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3091 fi
3092
3093 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3094 AC_TRY_RUN([
3095 #include <stdio.h>
3096 #include <limits.h>
3097 #include <signal.h>
3098
3099 void exit_on_core(int ignored) {
3100         exit(1);
3101 }
3102
3103 main() {
3104         char *newpath;
3105         signal(SIGSEGV, exit_on_core);
3106         newpath = realpath("/tmp", NULL);
3107         exit((newpath != NULL) ? 0 : 1);
3108 }
3109 ],
3110 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3111 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3112     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3113 fi
3114
3115 #################################################
3116 # check for AFS clear-text auth support
3117 samba_cv_WITH_AFS=no
3118 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3119 AC_ARG_WITH(afs,
3120 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3121 [ case "$withval" in
3122   yes|auto)
3123     AC_MSG_RESULT($withval)
3124     samba_cv_WITH_AFS=$withval
3125     ;;
3126   *)
3127     AC_MSG_RESULT(no)
3128     ;;
3129   esac ],
3130   AC_MSG_RESULT(no)
3131 )
3132
3133 ####################################################
3134 # check for Linux-specific AFS fake-kaserver support
3135 samba_cv_WITH_FAKE_KASERVER=no
3136 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3137 AC_ARG_WITH(fake-kaserver,
3138 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3139 [ case "$withval" in
3140   yes|auto)
3141     AC_MSG_RESULT($withval)
3142     samba_cv_WITH_FAKE_KASERVER=$withval
3143     ;;
3144   *)
3145     AC_MSG_RESULT(no)
3146     ;;
3147   esac ],
3148   AC_MSG_RESULT(no)
3149 )
3150
3151 #################################################
3152 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3153 if test x"$samba_cv_WITH_AFS" != x"no" ||
3154    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3155
3156     # see if this box has the OpenSSL DES libraries
3157     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3158
3159     # see if this box has the afs-headers in /usr/include/afs
3160     AC_MSG_CHECKING(for /usr/include/afs)
3161     if test -d /usr/include/afs; then
3162           AC_MSG_RESULT(yes)
3163     else
3164       AC_MSG_RESULT(no)
3165     fi
3166
3167     # check for afs.h
3168     have_afs_headers=no
3169     AC_CHECK_HEADERS(afs.h afs/afs.h)
3170     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3171         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3172            test x"$samba_cv_WITH_AFS" = x"auto"; then
3173                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3174         else
3175                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3176         fi
3177     else
3178         have_afs_headers=yes
3179     fi
3180 fi
3181
3182 FAKE_KASERVER_OBJ=""
3183 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3184     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3185     FAKE_KASERVER_OBJ="utils/net_afs.o"
3186 fi
3187 AC_SUBST(FAKE_KASERVER_OBJ)
3188
3189 #################################################
3190 # check whether to compile AFS/NT ACL mapping module
3191 samba_cv_WITH_VFS_AFSACL=no
3192 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3193 AC_ARG_WITH(vfs-afsacl,
3194 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3195 [ case "$withval" in
3196   yes|auto)
3197     AC_MSG_RESULT($withval)
3198     samba_cv_WITH_VFS_AFSACL=yes
3199     ;;
3200   *)
3201     AC_MSG_RESULT(no)
3202     ;;
3203   esac ],
3204   AC_MSG_RESULT(no)
3205 )
3206
3207 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3208    default_shared_modules="$default_shared_modules vfs_afsacl"
3209 fi
3210         
3211 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3212     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3213 fi
3214
3215 #################################################
3216 # check for the DFS clear-text auth system
3217 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3218 AC_ARG_WITH(dfs,
3219 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3220 [ case "$withval" in
3221   yes)
3222     AC_MSG_RESULT(yes)
3223     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3224     ;;
3225   *)
3226     AC_MSG_RESULT(no)
3227     ;;
3228   esac ],
3229   AC_MSG_RESULT(no)
3230 )
3231
3232 ########################################################
3233 # Compile with LDAP support?
3234
3235 with_ldap_support=auto
3236 AC_MSG_CHECKING([for LDAP support])
3237
3238 AC_ARG_WITH(ldap,
3239 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3240 [ case "$withval" in
3241     yes|no)
3242         with_ldap_support=$withval
3243         ;;
3244   esac ])
3245
3246 AC_MSG_RESULT($with_ldap_support)
3247
3248 SMBLDAP=""
3249 AC_SUBST(SMBLDAP)
3250 SMBLDAPUTIL=""
3251 AC_SUBST(SMBLDAPUTIL)
3252
3253 if test x"$with_ldap_support" != x"no"; then
3254
3255   ##################################################################
3256   # first test for ldap.h and lber.h
3257   # (ldap.h is required for this test)
3258   AC_CHECK_HEADERS(ldap.h lber.h)
3259
3260   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3261         if test x"$with_ldap_support" = x"yes"; then
3262          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3263         else
3264          AC_MSG_WARN(ldap.h is needed for LDAP support)
3265         fi
3266         
3267         with_ldap_support=no
3268   fi
3269
3270   ##################################################################
3271   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3272   # unsigned int in include/includes.h
3273   case $host_os in
3274         *hpux*)
3275          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3276          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3277         with_ldap_support=yes
3278         ;;
3279         *)
3280         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3281         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3282                 if test x"$with_ldap_support" = x"yes"; then
3283                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3284                 else
3285                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3286                 fi
3287                 with_ldap_support=no
3288         fi
3289         ;;
3290   esac
3291 fi
3292
3293 if test x"$with_ldap_support" != x"no"; then
3294   ac_save_LIBS=$LIBS
3295
3296   ##################################################################
3297   # we might need the lber lib on some systems. To avoid link errors
3298   # this test must be before the libldap test
3299   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3300
3301   ########################################################
3302   # If ber_sockbuf_add_io() is available we can add
3303   # SASL wrapping hooks
3304   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3305
3306   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3307                  AC_TRY_COMPILE([#include <ldap.h>],
3308                                 [int val = LDAP_OPT_SOCKBUF;],
3309                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3310                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3311
3312   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3313           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3314         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3315   fi
3316
3317   #######################################################
3318   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3319   # ldap logging and print it out in the samba logs
3320   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3321                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3322                  [AC_TRY_COMPILE([#include <lber.h>],
3323                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3324                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3325                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3326
3327   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3328         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3329                   [Support for LDAP/LBER logging interception])
3330   fi
3331
3332   ########################################################
3333   # now see if we can find the ldap libs in standard paths
3334   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3335
3336   ########################################################
3337   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3338   # Check found in pam_ldap 145.
3339   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3340
3341   LIBS="$LIBS $LDAP_LIBS"
3342   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3343     AC_TRY_COMPILE([
3344         #include <lber.h>
3345         #include <ldap.h>],
3346         [ldap_set_rebind_proc(0, 0, 0);],
3347         [smb_ldap_cv_ldap_set_rebind_proc=3],
3348         [smb_ldap_cv_ldap_set_rebind_proc=2]
3349     )
3350   ])
3351
3352   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3353
3354   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3355
3356   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3357     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3358     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3359     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3360     default_shared_modules="$default_shared_modules";
3361     SMBLDAP="lib/smbldap.o"
3362     SMBLDAPUTIL="lib/smbldap_util.o"
3363     with_ldap_support=yes
3364     AC_MSG_CHECKING(whether LDAP support is used)
3365     AC_MSG_RESULT(yes)
3366   else
3367     if test x"$with_ldap_support" = x"yes"; then
3368         AC_MSG_ERROR(libldap is needed for LDAP support)
3369     else
3370         AC_MSG_WARN(libldap is needed for LDAP support)
3371     fi
3372
3373     LDAP_LIBS=""
3374     with_ldap_support=no
3375   fi
3376   LIBS=$ac_save_LIBS
3377 fi
3378
3379
3380 #################################################
3381 # active directory support
3382
3383 with_ads_support=auto
3384 AC_MSG_CHECKING([for Active Directory and krb5 support])
3385
3386 AC_ARG_WITH(ads,
3387 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3388 [ case "$withval" in
3389     yes|no)
3390         with_ads_support="$withval"
3391         ;;
3392   esac ])
3393
3394 AC_MSG_RESULT($with_ads_support)
3395
3396 FOUND_KRB5=no
3397 KRB5_LIBS=""
3398
3399 if test x"$with_ldap_support" != x"yes"; then
3400
3401     if test x"$with_ads_support" = x"yes"; then
3402         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3403     elif test x"$with_ads_support" = x"auto"; then
3404         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3405         with_ads_support=no
3406     fi
3407
3408 else
3409
3410     # Check to see whether there is enough LDAP functionality to be able
3411     # to build AD support.
3412
3413 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3414 case "$host_os" in
3415         *hpux*)
3416     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3417
3418     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3419         if test x"$with_ads_support" = x"yes"; then
3420             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3421         elif test x"$with_ads_support" = x"auto"; then
3422             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3423             with_ads_support=no
3424         fi
3425     fi
3426     ;;
3427         *)
3428     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3429
3430     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3431         if test x"$with_ads_support" = x"yes"; then
3432             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3433         elif test x"$with_ads_support" = x"auto"; then
3434             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3435             with_ads_support=no
3436         fi
3437     fi
3438     ;;
3439 esac
3440
3441
3442     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3443
3444     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3445         if test x"$with_ads_support" = x"yes"; then
3446             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3447         elif test x"$with_ads_support" = x"auto"; then
3448             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3449             with_ads_support=no
3450         fi
3451     fi
3452
3453 fi
3454
3455 if test x"$with_ads_support" != x"no"; then
3456
3457   # Do no harm to the values of CFLAGS and LIBS while testing for
3458   # Kerberos support.
3459
3460   if test x$FOUND_KRB5 = x"no"; then
3461     #################################################
3462     # check for location of Kerberos 5 install
3463     AC_MSG_CHECKING(for kerberos 5 install path)
3464     AC_ARG_WITH(krb5,
3465     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3466     [ case "$withval" in
3467       no)
3468         AC_MSG_RESULT(no krb5-path given)
3469         ;;
3470       yes)
3471         AC_MSG_RESULT(/usr)
3472         FOUND_KRB5=yes
3473         ;;
3474       *)
3475         AC_MSG_RESULT($withval)
3476         KRB5_CFLAGS="-I$withval/include"
3477         KRB5_CPPFLAGS="-I$withval/include"
3478         KRB5_LDFLAGS="-L$withval/lib"
3479         FOUND_KRB5=yes
3480         if test -x "$withval/bin/krb5-config"; then
3481                 KRB5CONFIG=$withval/bin/krb5-config
3482         fi
3483         ;;
3484       esac ],
3485       AC_MSG_RESULT(no krb5-path given)
3486     )
3487   fi
3488
3489   #################################################
3490   # check for krb5-config from recent MIT and Heimdal kerberos 5
3491   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3492   AC_MSG_CHECKING(for working krb5-config)
3493   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3494     ac_save_CFLAGS=$CFLAGS
3495     CFLAGS="";export CFLAGS
3496     ac_save_LDFLAGS=$LDFLAGS
3497     LDFLAGS="";export LDFLAGS
3498     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3499     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3500     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3501     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3502     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3503     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3504     FOUND_KRB5=yes
3505     AC_MSG_RESULT(yes)
3506   else
3507     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3508   fi
3509
3510   if test x$FOUND_KRB5 = x"no"; then
3511     #################################################
3512     # see if this box has the SuSE location for the heimdal krb implementation
3513     AC_MSG_CHECKING(for /usr/include/heimdal)
3514     if test -d /usr/include/heimdal; then
3515       if test -f /usr/lib/heimdal/lib/libkrb5.a; then
3516           KRB5_CFLAGS="-I/usr/include/heimdal"
3517           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3518           KRB5_LDFLAGS="-L/usr/lib/heimdal/lib"
3519           FOUND_KRB5=yes
3520           AC_MSG_RESULT(yes)
3521       else
3522           KRB5_CFLAGS="-I/usr/include/heimdal"
3523           KRB5_CPPFLAGS="-I/usr/include/heimdal"
3524           FOUND_KRB5=yes
3525           AC_MSG_RESULT(yes)
3526       fi
3527     else
3528       AC_MSG_RESULT(no)
3529     fi
3530   fi
3531
3532   if test x$FOUND_KRB5 = x"no"; then
3533     #################################################
3534     # see if this box has the RedHat location for kerberos
3535     AC_MSG_CHECKING(for /usr/kerberos)
3536     if test -d /usr/kerberos -a -f /usr/kerberos/lib/libkrb5.a; then
3537       KRB5_LDFLAGS="-L/usr/kerberos/lib"
3538       KRB5_CFLAGS="-I/usr/kerberos/include"
3539       KRB5_CPPFLAGS="-I/usr/kerberos/include"
3540       FOUND_KRB5=yes
3541       AC_MSG_RESULT(yes)
3542     else
3543       AC_MSG_RESULT(no)
3544     fi
3545   fi
3546
3547   if test x$FOUND_KRB5 = x"no"; then
3548     #################################################
3549     # see if this box has the OpenBSD location for heimdal krb5
3550     AC_MSG_CHECKING(for /usr/include/kerberosV)
3551     if test -d /usr/include/kerberosV; then
3552       KRB5_CPPFLAGS="-I/usr/include/kerberosV"
3553       KRB5_LIBS="-lcrypto"
3554       FOUND_KRB5=yes
3555       AC_MSG_RESULT(yes)
3556     else
3557       AC_MSG_RESULT(no)
3558     fi
3559   fi
3560
3561   ac_save_CFLAGS=$CFLAGS
3562   ac_save_CPPFLAGS=$CPPFLAGS
3563   ac_save_LDFLAGS=$LDFLAGS
3564
3565   # remove needless evil rpath stuff as early as possible:
3566   LIB_REMOVE_USR_LIB(KRB5_LIBS)
3567   LIB_REMOVE_USR_LIB(KRB5_LDFLAGS)
3568   CFLAGS="$KRB5_CFLAGS $CFLAGS"
3569   CPPFLAGS="$KRB5_CPPFLAGS $CPPFLAGS"
3570   LDFLAGS="$KRB5_LDFLAGS $LDFLAGS"
3571
3572   KRB5_LIBS="$KRB5_LDFLAGS $KRB5_LIBS"
3573
3574   # now check for krb5.h. Some systems have the libraries without the headers!
3575   # note that this check is done here to allow for different kerberos
3576   # include paths
3577   AC_CHECK_HEADERS(krb5.h)
3578
3579   if test x"$ac_cv_header_krb5_h" = x"no"; then
3580
3581     # Give a warning if AD support was not explicitly requested,
3582     # i.e with_ads_support = auto, otherwise die with an error.
3583
3584     if test x"$with_ads_support" = x"yes"; then
3585       AC_MSG_ERROR([Active Directory cannot be supported without krb5.h])
3586     else
3587       AC_MSG_WARN([Active Directory cannot be supported without krb5.h])
3588     fi
3589
3590     # Turn off AD support and restore CFLAGS and LIBS variables
3591
3592     with_ads_support="no"
3593
3594     CFLAGS=$ac_save_CFLAGS
3595     CPPFLAGS=$ac_save_CPPFLAGS
3596     LDFLAGS=$ac_save_LDFLAGS
3597   fi
3598   AC_CHECK_HEADERS([krb5/locate_plugin.h], [], [],
3599 [[#ifdef HAVE_KRB5_H
3600  #include <krb5.h>
3601  #endif
3602 ]])
3603
3604   if test x"$ac_cv_header_krb5_locate_plugin_h" = x"yes"; then
3605         WINBIND_KRB5_LOCATOR="bin/winbind_krb5_locator.$SHLIBEXT"
3606         if test x"$BLDSHARED" = x"true" ; then
3607                 EXTRA_ALL_TARGETS="$EXTRA_ALL_TARGETS $WINBIND_KRB5_LOCATOR"
3608         fi
3609   fi
3610
3611   # check for new heimdal KRB5_DEPRECATED handling
3612
3613   AC_CACHE_CHECK([for KRB5_DEPRECATED define taking an identifier],
3614                 samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER,[
3615     AC_TRY_COMPILE(
3616       [#define KRB5_DEPRECATED 1
3617       #include <krb5.h>],
3618       [],
3619       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=yes,
3620       samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER=no)])
3621
3622   if test x"$samba_cv_HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER" = x"yes"; then
3623     AC_DEFINE(HAVE_KRB5_DEPRECATED_WITH_IDENTIFIER, 1,
3624                [Whether to use deprecated krb5 interfaces])
3625   fi
3626 fi
3627
3628 # Now we have determined whether we really want ADS support
3629 use_ads=no
3630 if test x"$with_ads_support" != x"no"; then
3631   use_ads=yes
3632   have_gssapi=no
3633   ac_save_LIBS=$LIBS
3634
3635   # now check for gssapi headers.  This is also done here to allow for
3636   # different kerberos include paths
3637   AC_CHECK_HEADERS(gssapi.h gssapi/gssapi_generic.h gssapi/gssapi.h com_err.h)
3638
3639   ##################################################################
3640   # we might need the k5crypto and com_err libraries on some systems
3641   AC_CHECK_LIB_EXT(com_err, KRB5_LIBS, _et_list)
3642   AC_CHECK_LIB_EXT(k5crypto, KRB5_LIBS, krb5_encrypt_data)
3643
3644   # Heimdal checks.
3645   AC_CHECK_LIB_EXT(crypto, KRB5_LIBS, des_set_key)
3646   AC_CHECK_LIB_EXT(asn1, KRB5_LIBS, copy_Authenticator)
3647   AC_CHECK_LIB_EXT(roken, KRB5_LIBS, roken_getaddrinfo_hostspec)
3648
3649   # Heimdal checks. On static Heimdal gssapi must be linked before krb5.
3650   AC_CHECK_LIB_EXT(gssapi, KRB5_LIBS, gss_display_status,[],[],have_gssapi=yes)
3651
3652   ########################################################
3653   # now see if we can find the krb5 libs in standard paths
3654   # or as specified above
3655   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_mk_req_extended)
3656   AC_CHECK_LIB_EXT(krb5, KRB5_LIBS, krb5_kt_compare)
3657
3658   ########################################################
3659   # now see if we can find the gssapi libs in standard paths
3660   if test x"$have_gssapi" != x"yes"; then
3661      AC_CHECK_LIB_EXT(gssapi_krb5, KRB5_LIBS,gss_display_status,[],[],have_gssapi=yes)
3662   fi
3663
3664   AC_CHECK_FUNC_EXT(krb5_set_real_time, $KRB5_LIBS)
3665   AC_CHECK_FUNC_EXT(krb5_set_default_in_tkt_etypes, $KRB5_LIBS)
3666   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_enctypes, $KRB5_LIBS)
3667   AC_CHECK_FUNC_EXT(krb5_set_default_tgs_ktypes, $KRB5_LIBS)
3668   AC_CHECK_FUNC_EXT(krb5_principal2salt, $KRB5_LIBS)
3669   AC_CHECK_FUNC_EXT(krb5_use_enctype, $KRB5_LIBS)
3670   AC_CHECK_FUNC_EXT(krb5_string_to_key, $KRB5_LIBS)
3671   AC_CHECK_FUNC_EXT(krb5_get_pw_salt, $KRB5_LIBS)
3672   AC_CHECK_FUNC_EXT(krb5_string_to_key_salt, $KRB5_LIBS)
3673   AC_CHECK_FUNC_EXT(krb5_auth_con_setkey, $KRB5_LIBS)
3674   AC_CHECK_FUNC_EXT(krb5_auth_con_setuseruserkey, $KRB5_LIBS)
3675   AC_CHECK_FUNC_EXT(krb5_locate_kdc, $KRB5_LIBS)
3676   AC_CHECK_FUNC_EXT(krb5_get_permitted_enctypes, $KRB5_LIBS)
3677   AC_CHECK_FUNC_EXT(krb5_get_default_in_tkt_etypes, $KRB5_LIBS)
3678   AC_CHECK_FUNC_EXT(krb5_free_data_contents, $KRB5_LIBS)
3679   AC_CHECK_FUNC_EXT(krb5_principal_get_comp_string, $KRB5_LIBS)
3680   AC_CHECK_FUNC_EXT(krb5_free_unparsed_name, $KRB5_LIBS)
3681   AC_CHECK_FUNC_EXT(krb5_free_keytab_entry_contents, $KRB5_LIBS)
3682   AC_CHECK_FUNC_EXT(krb5_kt_free_entry, $KRB5_LIBS)
3683   AC_CHECK_FUNC_EXT(krb5_krbhst_init, $KRB5_LIBS)
3684   AC_CHECK_FUNC_EXT(krb5_krbhst_get_addrinfo, $KRB5_LIBS)
3685   AC_CHECK_FUNC_EXT(krb5_c_enctype_compare, $KRB5_LIBS)
3686   AC_CHECK_FUNC_EXT(krb5_enctypes_compatible_keys, $KRB5_LIBS)
3687   AC_CHECK_FUNC_EXT(krb5_crypto_init, $KRB5_LIBS)
3688   AC_CHECK_FUNC_EXT(krb5_crypto_destroy, $KRB5_LIBS)
3689   AC_CHECK_FUNC_EXT(krb5_decode_ap_req, $KRB5_LIBS)
3690   AC_CHECK_FUNC_EXT(free_AP_REQ, $KRB5_LIBS)
3691   AC_CHECK_FUNC_EXT(krb5_verify_checksum, $KRB5_LIBS)
3692   AC_CHECK_FUNC_EXT(krb5_c_verify_checksum, $KRB5_LIBS)
3693   AC_CHECK_FUNC_EXT(krb5_principal_compare_any_realm, $KRB5_LIBS)
3694   AC_CHECK_FUNC_EXT(krb5_parse_name_norealm, $KRB5_LIBS)
3695   AC_CHECK_FUNC_EXT(krb5_princ_size, $KRB5_LIBS)
3696   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_set_pac_request, $KRB5_LIBS)
3697   AC_CHECK_FUNC_EXT(krb5_get_renewed_creds, $KRB5_LIBS)
3698   AC_CHECK_FUNC_EXT(krb5_get_kdc_cred, $KRB5_LIBS)
3699   AC_CHECK_FUNC_EXT(krb5_free_error_contents, $KRB5_LIBS)
3700   AC_CHECK_FUNC_EXT(initialize_krb5_error_table, $KRB5_LIBS)
3701   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_alloc, $KRB5_LIBS)
3702   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_free, $KRB5_LIBS)
3703   AC_CHECK_FUNC_EXT(krb5_get_init_creds_opt_get_error, $KRB5_LIBS)
3704   AC_CHECK_FUNC_EXT(krb5_enctype_to_string, $KRB5_LIBS)
3705   AC_CHECK_FUNC_EXT(krb5_fwd_tgt_creds, $KRB5_LIBS)
3706   AC_CHECK_FUNC_EXT(krb5_auth_con_set_req_cksumtype, $KRB5_LIBS)
3707   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_alloc, $KRB5_LIBS)
3708   AC_CHECK_FUNC_EXT(krb5_get_creds_opt_set_impersonate, $KRB5_LIBS)
3709   AC_CHECK_FUNC_EXT(krb5_get_creds, $KRB5_LIBS)
3710   AC_CHECK_FUNC_EXT(krb5_get_credentials_for_user, $KRB5_LIBS)
3711   AC_CHECK_FUNC_EXT(krb5_get_host_realm, $KRB5_LIBS)
3712   AC_CHECK_FUNC_EXT(krb5_free_host_realm, $KRB5_LIBS)
3713
3714   # MIT krb5 1.8 does not expose this call (yet)
3715   AC_CHECK_DECLS(krb5_get_credentials_for_user, [], [], [#include <krb5.h>])
3716
3717   # MIT krb5 1.7beta3 (in Ubuntu Karmic) does not have this declaration
3718   # but does have the symbol
3719   AC_CHECK_DECLS(krb5_auth_con_set_req_cksumtype, [], [], [#include <krb5.h>])
3720
3721   LIBS="$KRB5_LIBS $LIBS"
3722
3723   AC_CACHE_CHECK(whether krb5_ticket contains kvno and enctype,
3724         smb_krb5_cv_ticket_has_keyinfo,
3725         [
3726             AC_TRY_COMPILE(
3727             [
3728                 #include <krb5.h>
3729             ],
3730             [
3731                 krb5_ticket ticket;
3732                 krb5_kvno kvno;
3733                 krb5_enctype enctype;
3734
3735                 enctype = ticket.enc_part.enctype;
3736                 kvno = ticket.enc_part.kvno;
3737             ],
3738             [ smb_krb5_cv_ticket_has_keyinfo=yes ],
3739             [ smb_krb5_cv_ticket_has_keyinfo=no ])
3740         ])
3741
3742   if test x"$smb_krb5_cv_ticket_has_keyinfo" = x"yes" ; then
3743         AC_DEFINE(KRB5_TICKET_HAS_KEYINFO, 1,
3744             [Whether the krb5_ticket structure contains the kvno and enctype])
3745   fi
3746
3747   AC_CACHE_CHECK(whether krb5_get_init_creds_opt_free takes a context argument,
3748           smb_krb5_cv_creds_opt_free_context,
3749           [
3750                 AC_TRY_COMPILE([
3751                     #include <krb5.h>],
3752                     [
3753                         krb5_context ctx;
3754                         krb5_get_init_creds_opt *opt = NULL;
3755                         krb5_get_init_creds_opt_free(ctx, opt);
3756                     ],
3757                     [smb_krb5_cv_creds_opt_free_context=yes],
3758                     [smb_krb5_cv_creds_opt_free_context=no]
3759                 )
3760           ])
3761
3762   if test x"$smb_krb5_cv_creds_opt_free_context" = x"yes" ; then
3763         AC_DEFINE(KRB5_CREDS_OPT_FREE_REQUIRES_CONTEXT, 1,
3764             [Whether krb5_get_init_creds_opt_free takes a context argument])
3765   fi
3766
3767   AC_CACHE_CHECK(whether krb5_verify_checksum takes 7 arguments, smb_krb5_cv_verify_checksum, [
3768     AC_TRY_COMPILE([
3769         #include <krb5.h>],
3770         [krb5_verify_checksum(0, 0, 0, 0, 0, 0, 0);],
3771         [smb_krb5_cv_verify_checksum=7],
3772         [smb_krb5_cv_verify_checksum=6],
3773     )
3774   ])
3775   AC_DEFINE_UNQUOTED(KRB5_VERIFY_CHECKSUM_ARGS, $smb_krb5_cv_verify_checksum, [Number of arguments to krb5_verify_checksum])
3776
3777   AC_CACHE_CHECK([for checksum in krb5_checksum],
3778                 samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM,[
3779     AC_TRY_COMPILE([#include <krb5.h>],
3780       [krb5_checksum cksum; cksum.checksum.length = 0;],
3781       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=yes,
3782       samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM=no)])
3783
3784   if test x"$samba_cv_HAVE_CHECKSUM_IN_KRB5_CHECKSUM" = x"yes"; then
3785     AC_DEFINE(HAVE_CHECKSUM_IN_KRB5_CHECKSUM,1,
3786                [Whether the krb5_checksum struct has a checksum property])
3787   fi
3788
3789   AC_CACHE_CHECK([for etype in EncryptedData],
3790                 samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA,[
3791     AC_TRY_COMPILE([#include <krb5.h>],
3792       [EncryptedData edata; edata.etype = 0;],
3793       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=yes,
3794       samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA=no)])
3795
3796   if test x"$samba_cv_HAVE_ETYPE_IN_ENCRYPTEDDATA" = x"yes"; then
3797     AC_DEFINE(HAVE_ETYPE_IN_ENCRYPTEDDATA,1,
3798                [Whether the EncryptedData struct has a etype property])
3799   fi
3800
3801   AC_CACHE_CHECK([for ticket pointer in krb5_ap_req],
3802                 samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,[
3803     AC_TRY_COMPILE([#include <krb5.h>],
3804       [krb5_ap_req *ap_req; ap_req->ticket = NULL;],
3805       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=yes,
3806       samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ=no)])
3807
3808   if test x"$samba_cv_HAVE_TICKET_POINTER_IN_KRB5_AP_REQ" = x"yes"; then
3809     AC_DEFINE(HAVE_TICKET_POINTER_IN_KRB5_AP_REQ,1,
3810                [Whether the krb5_ap_req struct has a ticket pointer])
3811   fi
3812
3813   AC_CACHE_CHECK([for e_data pointer in krb5_error],
3814                 samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR,[
3815     AC_TRY_COMPILE([#include <krb5.h>],
3816       [krb5_error err; err.e_data = NULL;],
3817       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=yes,
3818       samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR=no)])
3819
3820   if test x"$samba_cv_HAVE_E_DATA_POINTER_IN_KRB5_ERROR" = x"yes"; then
3821     AC_DEFINE(HAVE_E_DATA_POINTER_IN_KRB5_ERROR,1,
3822                [Whether the krb5_error struct has a e_data pointer])
3823   fi
3824
3825   AC_CACHE_CHECK([for krb5_crypto type],
3826                 samba_cv_HAVE_KRB5_CRYPTO,[
3827     AC_TRY_COMPILE([#include <krb5.h>],
3828       [krb5_crypto crypto;],
3829       samba_cv_HAVE_KRB5_CRYPTO=yes,
3830       samba_cv_HAVE_KRB5_CRYPTO=no)])
3831
3832   if test x"$samba_cv_HAVE_KRB5_CRYPTO" = x"yes"; then
3833     AC_DEFINE(HAVE_KRB5_CRYPTO,1,
3834                [Whether the type krb5_crypto exists])
3835   fi
3836
3837   AC_CACHE_CHECK([for krb5_encrypt_block type],
3838                 samba_cv_HAVE_KRB5_ENCRYPT_BLOCK,[
3839     AC_TRY_COMPILE([#include <krb5.h>],
3840       [krb5_encrypt_block block;],
3841       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=yes,
3842       samba_cv_HAVE_KRB5_ENCRYPT_BLOCK=no)])
3843
3844   if test x"$samba_cv_HAVE_KRB5_ENCRYPT_BLOCK" = x"yes"; then
3845     AC_DEFINE(HAVE_KRB5_ENCRYPT_BLOCK,1,
3846                [Whether the type krb5_encrypt_block exists])
3847   fi
3848
3849   AC_CACHE_CHECK([for addrtype in krb5_address],
3850                 samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS,[
3851     AC_TRY_COMPILE([#include <krb5.h>],
3852       [krb5_address kaddr; kaddr.addrtype = ADDRTYPE_INET;],
3853       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=yes,
3854       samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS=no)])
3855
3856   if test x"$samba_cv_HAVE_ADDRTYPE_IN_KRB5_ADDRESS" = x"yes"; then
3857     AC_DEFINE(HAVE_ADDRTYPE_IN_KRB5_ADDRESS,1,
3858                [Whether the krb5_address struct has a addrtype property])
3859   fi
3860
3861   AC_CACHE_CHECK([for addr_type in krb5_address],
3862                  samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,[
3863     AC_TRY_COMPILE([#include <krb5.h>],
3864       [krb5_address kaddr; kaddr.addr_type = KRB5_ADDRESS_INET;],
3865       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=yes,
3866       samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS=no)])
3867
3868   if test x"$samba_cv_HAVE_ADDR_TYPE_IN_KRB5_ADDRESS" = x"yes"; then
3869     AC_DEFINE(HAVE_ADDR_TYPE_IN_KRB5_ADDRESS,1,
3870               [Whether the krb5_address struct has a addr_type property])
3871   fi
3872
3873   AC_CACHE_CHECK([for enc_part2 in krb5_ticket],
3874                  samba_cv_HAVE_KRB5_TKT_ENC_PART2,
3875                  [AC_TRY_COMPILE([#include <krb5.h>],
3876     [krb5_ticket tkt; tkt.enc_part2->authorization_data[0]->contents = NULL;],
3877     samba_cv_HAVE_KRB5_TKT_ENC_PART2=yes,samba_cv_HAVE_KRB5_TKT_ENC_PART2=no)])
3878
3879   if test x"$samba_cv_HAVE_KRB5_TKT_ENC_PART2" = x"yes"; then
3880     AC_DEFINE(HAVE_KRB5_TKT_ENC_PART2,1,
3881               [Whether the krb5_ticket struct has a enc_part2 property])
3882   fi
3883
3884   AC_CACHE_CHECK([for keyblock in krb5_creds],
3885                  samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS,[
3886     AC_TRY_COMPILE([#include <krb5.h>],
3887       [krb5_creds creds; krb5_keyblock kb; creds.keyblock = kb;],
3888       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=yes,
3889       samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS=no)])
3890
3891   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_IN_CREDS" = x"yes"; then
3892     AC_DEFINE(HAVE_KRB5_KEYBLOCK_IN_CREDS,1,
3893               [Whether the krb5_creds struct has a keyblock property])
3894   fi
3895
3896   AC_CACHE_CHECK([for session in krb5_creds],
3897                  samba_cv_HAVE_KRB5_SESSION_IN_CREDS,[
3898     AC_TRY_COMPILE([#include <krb5.h>],
3899       [krb5_creds creds; krb5_keyblock kb; creds.session = kb;],
3900       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=yes,
3901       samba_cv_HAVE_KRB5_SESSION_IN_CREDS=no)])
3902
3903   if test x"$samba_cv_HAVE_KRB5_SESSION_IN_CREDS" = x"yes"; then
3904     AC_DEFINE(HAVE_KRB5_SESSION_IN_CREDS,1,
3905               [Whether the krb5_creds struct has a session property])
3906   fi
3907
3908   AC_CACHE_CHECK([for keyvalue in krb5_keyblock],
3909                  samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE,[
3910     AC_TRY_COMPILE([#include <krb5.h>],
3911       [krb5_keyblock key; key.keyvalue.data = NULL;],
3912       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=yes,
3913       samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE=no)])
3914
3915   if test x"$samba_cv_HAVE_KRB5_KEYBLOCK_KEYVALUE" = x"yes"; then
3916     AC_DEFINE(HAVE_KRB5_KEYBLOCK_KEYVALUE,1,
3917               [Whether the krb5_keyblock struct has a keyvalue property])
3918   fi
3919
3920   AC_CACHE_CHECK([for ENCTYPE_ARCFOUR_HMAC_MD5],
3921                  samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,[
3922     AC_TRY_COMPILE([#include <krb5.h>],
3923       [krb5_enctype enctype; enctype = ENCTYPE_ARCFOUR_HMAC_MD5;],
3924       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=yes,
3925       samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5=no)])
3926   AC_CACHE_CHECK([for KEYTYPE_ARCFOUR_56],
3927                  samba_cv_HAVE_KEYTYPE_ARCFOUR_56,[
3928     AC_TRY_COMPILE([#include <krb5.h>],
3929       [krb5_keytype keytype; keytype = KEYTYPE_ARCFOUR_56;],
3930       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=yes,
3931       samba_cv_HAVE_KEYTYPE_ARCFOUR_56=no)])
3932 # Heimdals with KEYTYPE_ARCFOUR but not KEYTYPE_ARCFOUR_56 are broken
3933 # w.r.t. arcfour and windows, so we must not enable it here
3934   if test x"$samba_cv_HAVE_ENCTYPE_ARCFOUR_HMAC_MD5" = x"yes" -a\
3935           x"$samba_cv_HAVE_KEYTYPE_ARCFOUR_56" = x"yes"; then
3936     AC_DEFINE(HAVE_ENCTYPE_ARCFOUR_HMAC_MD5,1,
3937               [Whether the ENCTYPE_ARCFOUR_HMAC_MD5 key type is available])
3938   fi
3939
3940   AC_CACHE_CHECK([for AP_OPTS_USE_SUBKEY],
3941                  samba_cv_HAVE_AP_OPTS_USE_SUBKEY,[
3942     AC_TRY_COMPILE([#include <krb5.h>],
3943       [krb5_flags ap_options; ap_options = AP_OPTS_USE_SUBKEY;],
3944       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=yes,
3945       samba_cv_HAVE_AP_OPTS_USE_SUBKEY=no)])
3946
3947   if test x"$samba_cv_HAVE_AP_OPTS_USE_SUBKEY" = x"yes"; then
3948     AC_DEFINE(HAVE_AP_OPTS_USE_SUBKEY,1,
3949               [Whether the AP_OPTS_USE_SUBKEY ap option is available])
3950   fi
3951
3952   AC_CACHE_CHECK([for KV5M_KEYTAB],
3953                  samba_cv_HAVE_KV5M_KEYTAB,[
3954     AC_TRY_COMPILE([#include <krb5.h>],
3955       [krb5_keytab_entry entry; entry.magic = KV5M_KEYTAB;],
3956       samba_cv_HAVE_KV5M_KEYTAB=yes,
3957       samba_cv_HAVE_KV5M_KEYTAB=no)])
3958
3959   if test x"$samba_cv_HAVE_KV5M_KEYTAB" = x"yes"; then
3960       AC_DEFINE(HAVE_KV5M_KEYTAB,1,
3961              [Whether the KV5M_KEYTAB option is available])
3962   fi
3963
3964   AC_CACHE_CHECK([for KRB5_KU_OTHER_CKSUM],
3965                  samba_cv_HAVE_KRB5_KU_OTHER_CKSUM,[
3966     AC_TRY_COMPILE([#include <krb5.h>],
3967       [krb5_keyusage usage = KRB5_KU_OTHER_CKSUM;],
3968       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=yes,
3969       samba_cv_HAVE_KRB5_KU_OTHER_CKSUM=no)])
3970
3971   if test x"$samba_cv_HAVE_KRB5_KU_OTHER_CKSUM" = x"yes"; then
3972     AC_DEFINE(HAVE_KRB5_KU_OTHER_CKSUM,1,
3973               [Whether KRB5_KU_OTHER_CKSUM is available])
3974   fi
3975
3976   AC_CACHE_CHECK([for KRB5_KEYUSAGE_APP_DATA_CKSUM],
3977                  samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,[
3978     AC_TRY_COMPILE([#include <krb5.h>],
3979       [krb5_keyusage usage = KRB5_KEYUSAGE_APP_DATA_CKSUM;],
3980       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=yes,
3981       samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM=no)])
3982
3983   if test x"$samba_cv_HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM" = x"yes"; then
3984     AC_DEFINE(HAVE_KRB5_KEYUSAGE_APP_DATA_CKSUM,1,
3985               [Whether KRB5_KEYUSAGE_APP_DATA_CKSUM is available])
3986   fi
3987
3988   AC_CACHE_CHECK([for the krb5_princ_component macro],
3989                 samba_cv_HAVE_KRB5_PRINC_COMPONENT,[
3990     AC_TRY_LINK([#include <krb5.h>],
3991       [const krb5_data *pkdata; krb5_context context; krb5_principal principal; pkdata = krb5_princ_component(context, principal, 0);],
3992       samba_cv_HAVE_KRB5_PRINC_COMPONENT=yes,
3993       samba_cv_HAVE_KRB5_PRINC_COMPONENT=no)])
3994
3995   if test x"$samba_cv_HAVE_KRB5_PRINC_COMPONENT" = x"yes"; then
3996     AC_DEFINE(HAVE_KRB5_PRINC_COMPONENT,1,
3997                [Whether krb5_princ_component is available])
3998   fi
3999
4000   AC_CACHE_CHECK([for key in krb5_keytab_entry],
4001                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY,[
4002     AC_TRY_COMPILE([#include <krb5.h>],
4003       [krb5_keytab_entry entry; krb5_keyblock e; entry.key = e;],
4004       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=yes,
4005       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY=no)])
4006
4007   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEY" = x"yes"; then
4008     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEY,1,
4009               [Whether krb5_keytab_entry has key member])
4010   fi
4011
4012   AC_CACHE_CHECK([for keyblock in krb5_keytab_entry],
4013                  samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,[
4014     AC_TRY_COMPILE([#include <krb5.h>],
4015       [krb5_keytab_entry entry; entry.keyblock.keytype = 0;],
4016       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=yes,
4017       samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK=no)])
4018
4019   if test x"$samba_cv_HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK" = x"yes"; then
4020     AC_DEFINE(HAVE_KRB5_KEYTAB_ENTRY_KEYBLOCK,1,
4021               [Whether krb5_keytab_entry has keyblock member])
4022   fi
4023
4024   AC_CACHE_CHECK([for magic in krb5_address],
4025                  samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS,[
4026     AC_TRY_COMPILE([#include <krb5.h>],
4027       [krb5_address addr; addr.magic = 0;],
4028       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=yes,
4029       samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS=no)])
4030
4031   if test x"$samba_cv_HAVE_MAGIC_IN_KRB5_ADDRESS" = x"yes"; then
4032     AC_DEFINE(HAVE_MAGIC_IN_KRB5_ADDRESS,1,
4033               [Whether the krb5_address struct has a magic property])
4034   fi
4035
4036   AC_CACHE_CHECK([for WRFILE: keytab support],
4037                 samba_cv_HAVE_WRFILE_KEYTAB,[
4038     AC_TRY_RUN([
4039 #include<krb5.h>
4040   main()
4041   {
4042     krb5_context context;
4043     krb5_keytab keytab;
4044
4045     krb5_init_context(&context);
4046     return krb5_kt_resolve(context, "WRFILE:api", &keytab);
4047   }],
4048   samba_cv_HAVE_WRFILE_KEYTAB=yes,
4049   samba_cv_HAVE_WRFILE_KEYTAB=no)])
4050
4051   if test x"$samba_cv_HAVE_WRFILE_KEYTAB" = x"yes"; then
4052       AC_DEFINE(HAVE_WRFILE_KEYTAB,1,
4053                [Whether the WRFILE:-keytab is supported])
4054   fi
4055
4056   AC_CACHE_CHECK([for krb5_realm type],
4057                 samba_cv_HAVE_KRB5_REALM_TYPE,[
4058     AC_TRY_COMPILE([#include <krb5.h>],
4059       [krb5_realm realm;],
4060       samba_cv_HAVE_KRB5_REALM_TYPE=yes,
4061       samba_cv_HAVE_KRB5_REALM_TYPE=no)])
4062
4063   if test x"$samba_cv_HAVE_KRB5_REALM_TYPE" = x"yes"; then
4064     AC_DEFINE(HAVE_KRB5_REALM_TYPE,1,
4065                [Whether the type krb5_realm exists])
4066   fi
4067
4068   AC_CACHE_CHECK([for krb5_princ_realm returns krb5_realm or krb5_data],
4069                samba_cv_KRB5_PRINC_REALM_RETURNS_REALM,[
4070     AC_TRY_COMPILE([#include <krb5.h>],
4071     [
4072     krb5_context context;
4073     krb5_principal principal;
4074     krb5_realm realm; realm = *krb5_princ_realm(context, principal);],
4075     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=yes,
4076     samba_cv_KRB5_PRINC_REALM_RETURNS_REALM=no)])
4077
4078   if test x"$samba_cv_KRB5_PRINC_REALM_RETURNS_REALM" = x"yes"; then
4079     AC_DEFINE(KRB5_PRINC_REALM_RETURNS_REALM,1,
4080               [Whether krb5_princ_realm returns krb5_realm or krb5_data])
4081   fi
4082
4083   AC_CACHE_CHECK([for krb5_addresses type],
4084                 samba_cv_HAVE_KRB5_ADDRESSES,[
4085     AC_TRY_COMPILE([#include <krb5.h>],
4086       [krb5_addresses addr;],
4087       samba_cv_HAVE_KRB5_ADDRESSES=yes,
4088       samba_cv_HAVE_KRB5_ADDRESSES=no)])
4089
4090   if test x"$samba_cv_HAVE_KRB5_ADDRESSES" = x"yes"; then
4091     AC_DEFINE(HAVE_KRB5_ADDRESSES,1,
4092                [Whether the type krb5_addresses type exists])
4093   fi
4094
4095   AC_CACHE_CHECK([whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal],
4096                 samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE, [
4097     AC_TRY_COMPILE([#include <krb5.h>],
4098     [
4099     krb5_mk_error(0,0,0);],
4100     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=yes,
4101     samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE=no)])
4102
4103   if test x"$samba_cv_HAVE_SHORT_KRB5_MK_ERROR_INTERFACE" = x"yes"; then
4104     AC_DEFINE(HAVE_SHORT_KRB5_MK_ERROR_INTERFACE,1,
4105               [whether krb5_mk_error takes 3 arguments MIT or 9 Heimdal])
4106   fi
4107
4108   if test x"$ac_cv_func_ext_krb5_enctype_to_string" = x"yes"; then
4109     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_context context, krb5_enctype enctype, char **str)],
4110         smb_krb5_cv_enctype_to_string_takes_krb5_context_arg,[
4111         AC_TRY_RUN_STRICT([
4112                 #include <stdlib.h>
4113                 #include <krb5.h>
4114                 int main(void) {
4115                         krb5_context context = NULL;
4116                         char *str = NULL;
4117                         krb5_enctype_to_string(context, 1, &str);
4118                         if (str) free (str); 
4119                         return 0;
4120                 }
4121                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4122                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=yes,
4123                 smb_krb5_cv_enctype_to_string_takes_krb5_context_arg=no)])
4124
4125     if test x"$smb_krb5_cv_enctype_to_string_takes_krb5_context_arg" = x"yes"; then
4126       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_KRB5_CONTEXT_ARG,1,
4127                 [whether krb5_enctype_to_string takes krb5_context argument])
4128     fi
4129
4130     AC_CACHE_CHECK([for krb5_error_code krb5_enctype_to_string(krb5_enctype enctype, char *str, size_t len)],
4131         smb_krb5_cv_enctype_to_string_takes_size_t_arg,[
4132         AC_TRY_RUN_STRICT([
4133                 #include <krb5.h>
4134                 int main(void) {
4135                         char buf[256];
4136                         krb5_enctype_to_string(1, buf, 256);
4137                         return 0;
4138                 }
4139                 ],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4140                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=yes,
4141                 smb_krb5_cv_enctype_to_string_takes_size_t_arg=no)])
4142
4143     if test x"$smb_krb5_cv_enctype_to_string_takes_size_t_arg" = x"yes"; then
4144       AC_DEFINE(HAVE_KRB5_ENCTYPE_TO_STRING_WITH_SIZE_T_ARG,1,
4145                 [whether krb5_enctype_to_string takes size_t argument])
4146     fi
4147   fi
4148
4149   AC_CACHE_CHECK([for krb5_principal_get_realm],
4150                 samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM,[
4151     AC_TRY_LINK([#include <krb5.h>],
4152       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_principal_get_realm(ctx, princ);],
4153       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=yes,
4154       samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM=no)])
4155
4156   if test x"$samba_cv_HAVE_KRB5_PRINCIPAL_GET_REALM" = x"yes"; then
4157     AC_DEFINE(HAVE_KRB5_PRINCIPAL_GET_REALM,1,
4158                [Whether the function krb5_principal_get_realm is defined])
4159   fi
4160
4161   AC_CACHE_CHECK([for krb5_princ_realm],
4162                 samba_cv_HAVE_KRB5_PRINC_REALM,[
4163     AC_TRY_LINK([#include <krb5.h>],
4164       [krb5_context ctx = NULL; krb5_principal princ = NULL; const char *str = krb5_princ_realm(ctx, princ)->data;],
4165       samba_cv_HAVE_KRB5_PRINC_REALM=yes,
4166       samba_cv_HAVE_KRB5_PRINC_REALM=no)])
4167
4168   if test x"$samba_cv_HAVE_KRB5_PRINC_REALM" = x"yes"; then
4169     AC_DEFINE(HAVE_KRB5_PRINC_REALM,1,
4170                [Whether the macro krb5_princ_realm is defined])
4171   fi
4172
4173   #
4174   #
4175   # Now the decisions whether we can support krb5
4176   #
4177   # NOTE: all tests should be done before this block!
4178   #
4179   #
4180   if test x"$ac_cv_lib_ext_krb5_krb5_mk_req_extended" != x"yes"; then
4181     AC_MSG_WARN(krb5_mk_req_extended not found in -lkrb5)
4182     use_ads=no
4183   fi
4184
4185   if test x"$ac_cv_func_ext_krb5_principal2salt" != x"yes" -a \
4186           x"$ac_cv_func_ext_krb5_get_pw_salt" != x"yes"
4187   then
4188     AC_MSG_WARN(no CREATE_KEY_FUNCTIONS detected)
4189     use_ads=no
4190   fi
4191
4192   if test x"$ac_cv_func_ext_krb5_get_permitted_enctypes" != x"yes" -a \
4193           x"$ac_cv_func_ext_krb5_get_default_in_tkt_etypes" != x"yes"
4194   then
4195     AC_MSG_WARN(no GET_ENCTYPES_FUNCTIONS detected)
4196     use_ads=no
4197   fi
4198
4199   if test x"$ac_cv_func_ext_krb5_kt_free_entry" != x"yes" -a \
4200           x"$ac_cv_func_ext_krb5_free_keytab_entry_contents" != x"yes"
4201   then
4202     AC_MSG_WARN(no KT_FREE_FUNCTION detected)
4203     use_ads=no
4204   fi
4205
4206   if test x"$ac_cv_func_ext_krb5_c_verify_checksum" != x"yes" -a \
4207           x"$ac_cv_func_ext_krb5_verify_checksum" != x"yes"
4208   then
4209     AC_MSG_WARN(no KRB5_VERIFY_CHECKSUM_FUNCTION detected)
4210     use_ads=no
4211   fi
4212
4213   if test x"$smb_krb5_cv_ticket_has_keyinfo" != x"yes" ; then
4214
4215       # We only need the following functions if we can't get the enctype
4216       # and kvno out of the ticket directly (ie. on Heimdal).
4217
4218       if test x"$ac_cv_func_ext_free_AP_REQ" != x"yes"
4219       then
4220         AC_MSG_WARN(no KRB5_AP_REQ_FREE_FUNCTION detected)
4221         use_ads=no
4222       fi
4223
4224       if test x"$ac_cv_func_ext_krb5_decode_ap_req" != x"yes"
4225       then
4226         AC_MSG_WARN(no KRB5_AP_REQ_DECODING_FUNCTION detected)
4227         use_ads=no
4228       fi
4229
4230   fi
4231
4232   if test x"$use_ads" = x"yes"; then
4233     AC_DEFINE(WITH_ADS,1,[Whether to include Active Directory support])
4234     AC_DEFINE(HAVE_KRB5,1,[Whether to have KRB5 support])
4235     if test x"$have_gssapi" = x"yes"; then
4236       AC_DEFINE(HAVE_GSSAPI,1,[Whether GSSAPI is available])
4237     fi
4238   else
4239     if test x"$with_ads_support" = x"yes"; then
4240         AC_MSG_ERROR(krb5 libs don't have all features required for Active Directory support)
4241     else
4242         AC_MSG_WARN(krb5 libs don't have all features required for Active Directory support)
4243     fi
4244     AC_REMOVE_DEFINE(HAVE_KRB5_H)
4245     AC_REMOVE_DEFINE(HAVE_GSSAPI_H)
4246     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4247     AC_REMOVE_DEFINE(HAVE_GSSAPI_GSSAPI_H)
4248     KRB5_LIBS=""
4249     with_ads_support=no
4250   fi
4251   AC_MSG_CHECKING(whether Active Directory and krb5 support is used)
4252   AC_MSG_RESULT([$use_ads])
4253
4254 LIBS="$ac_save_LIBS"
4255 fi
4256
4257 if test x"$use_ads" != xyes; then
4258         merged_build_possible=no
4259 fi
4260
4261 AC_CHECK_LIB_EXT(nscd, NSCD_LIBS, nscd_flush_cache)
4262 PASSDB_LIBS="$PASSDB_LIBS $NSCD_LIBS"
4263
4264
4265 ########################################################
4266 # Compile with DNS Updates support?
4267
4268 with_dnsupdate_support=auto
4269 AC_MSG_CHECKING([whether to enable DNS Updates support])
4270
4271 AC_ARG_WITH(dnsupdate,
4272 [AS_HELP_STRING([--with-dnsupdate], [Enable DNS Updates support (default=auto)])],
4273 [ case "$withval" in
4274     yes|no)
4275         with_dnsupdate_support=$withval
4276         ;;
4277   esac ])
4278
4279 AC_MSG_RESULT($with_dnsupdate_support)
4280
4281 if test x"$with_dnsupdate_support" != x"no"; then
4282
4283   ################################################################
4284   # first test for AD / GSSAPI support being enabled
4285         if test x"$have_gssapi" != xyes ; then
4286                 if test x"$with_dnsupdate_support" = x"yes" ; then
4287                         AC_MSG_ERROR(DNS Updates support only possible with AD and GSSAPI support)
4288                 else
4289                         AC_MSG_NOTICE(DNS Updates support only possible with AD and GSSAPI support)
4290                         with_dnsupdate_support=no
4291                 fi
4292         fi
4293   ##################################################################
4294   # then test for uuid.h (necessary to generate unique DNS keynames
4295   # (uuid.h is required for this test)
4296         AC_CHECK_HEADERS(uuid/uuid.h)
4297
4298         
4299         if test x"$ac_cv_header_uuid_uuid_h" != x"yes"; then
4300                 if test x"$with_dnsupdate_support" = x"yes"; then
4301                         AC_MSG_ERROR(uuid.h is needed to enable DNS Updates support)
4302                 else
4303                         AC_MSG_NOTICE(uuid.h is needed to enable DNS Updates support)
4304                 fi
4305                 with_dnsupdate_support=no
4306         fi
4307 fi
4308
4309 if test x"$with_dnsupdate_support" != x"no"; then
4310
4311   ########################################################
4312   # Now see if we can find the uuid libs in standard paths
4313   # On some systems, the uuid API is in libc, so we have to
4314   # be careful not to insert a spurious -luuid.
4315
4316   UUID_LIBS=""
4317   AC_LIBTESTFUNC(uuid, uuid_generate,
4318           [
4319             case " $LIBS " in
4320                 *\ -luuid\ *)
4321                 UUID_LIBS="-luuid"
4322                 SMB_REMOVE_LIB(uuid)
4323                 ;;
4324             esac
4325
4326             with_dnsupdate_support=yes
4327             AC_DEFINE(WITH_DNS_UPDATES,1,[Whether to enable DNS Update support])
4328         ],
4329         [
4330             if test x"$with_dnsupdate_support" = x"yes"; then
4331                 AC_MSG_ERROR(libuuid is needed to enable DNS Updates support)
4332             else
4333                 AC_MSG_WARN(libuuid is needed to enable DNS Updates support)
4334             fi
4335             with_dnsupdate_support=no
4336         ])
4337 fi
4338   # finally print out the result:
4339 AC_MSG_CHECKING(whether DNS Updates support is used)
4340 AC_MSG_RESULT([$with_dnsupdate_support])
4341
4342
4343 #################################################
4344 # check for automount support
4345 AC_MSG_CHECKING(whether to use automount)
4346 AC_ARG_WITH(automount,
4347 [AS_HELP_STRING([--with-automount], [Include automount support (default=no)])],
4348 [ case "$withval" in
4349   yes)
4350     AC_MSG_RESULT(yes)
4351     AC_DEFINE(WITH_AUTOMOUNT,1,[Whether to include automount support])
4352     ;;
4353   *)
4354     AC_MSG_RESULT(no)
4355     ;;
4356   esac ],
4357   AC_MSG_RESULT(no)
4358 )
4359
4360 #################################################
4361 # Check for a PAM clear-text auth, accounts, password
4362 # and session support. Most PAM implementations keep their
4363 # headers in /usr/include/security. Darwin keeps its in
4364 # /usr/include/pam.
4365
4366 with_pam_for_crypt=no
4367 try_pam=auto
4368 AC_MSG_CHECKING(whether to try PAM support)
4369 AC_ARG_WITH(pam,
4370 [AS_HELP_STRING([--with-pam], [Include PAM support (default=auto)])],
4371 [ case "$withval" in
4372   yes|no|auto)
4373     try_pam=$withval
4374     ;;
4375   esac
4376 ])
4377 AC_MSG_RESULT([$try_pam])
4378
4379 use_pam=no
4380 create_pam_modules=no
4381 if test x"${try_pam}" != x"no";then
4382         use_pam=yes
4383         create_pam_modules=yes
4384
4385         # Most systems have PAM headers in /usr/include/security, but Darwin
4386         # has them in /usr/include/pam.
4387         AC_CHECK_HEADERS(security/pam_appl.h pam/pam_appl.h)
4388         if test x"$ac_cv_header_security_pam_appl_h" != x"yes" -a \
4389                 x"$ac_cv_header_pam_pam_appl_h" != x"yes"; then
4390                 if test x"${try_pam}" = x"yes";then
4391                         AC_MSG_ERROR([--with-pam=yes but pam_appl.h not found])
4392                 fi
4393                 use_pam=no
4394                 create_pam_modules=no
4395         fi
4396
4397         AC_CHECK_LIB_EXT(pam, PAM_LIBS, pam_get_data)
4398         if test x"$ac_cv_lib_ext_pam_pam_get_data" != x"yes"; then
4399                 if test x"${try_pam}" = x"yes";then
4400                         AC_MSG_ERROR([--with-pam=yes but libpam not found])
4401                 fi
4402                 use_pam=no
4403                 create_pam_modules=no
4404         fi
4405
4406         AC_CHECK_HEADERS(security/pam_modules.h pam/pam_modules.h,,,[[
4407                 #if HAVE_SECURITY_PAM_APPL_H
4408                 #include <security/pam_appl.h>
4409                 #endif
4410                 #if HAVE_PAM_PAM_APPL_H
4411                 #include <pam/pam_appl.h>
4412                 #endif
4413         ]])
4414         if test x"$ac_cv_header_security_pam_modules_h" = x"no" -a \
4415                 x"$ac_cv_header_pam_pam_modules_h" = x"no" ; then
4416                 if test x"${try_pam}" = x"yes";then
4417                         AC_MSG_ERROR([--with-pam=yes but pam_modules.h not found])
4418        fi
4419                 create_pam_modules=no
4420     fi
4421
4422         if test x"$use_pam" = x"yes"; then
4423     AC_DEFINE(WITH_PAM,1,[Whether to include PAM support])
4424                 AC_DEFINE(HAVE_LIBPAM,1,[Whether libpam is available])
4425                 AUTH_LIBS="$AUTH_LIBS $PAM_LIBS"
4426     with_pam_for_crypt=yes
4427
4428                 if test x"$create_pam_modules" = x"yes"; then
4429                         AC_DEFINE(WITH_PAM_MODULES,1,[Whether to include PAM MODULES support])
4430                         # this checks are optional,
4431                         # we don't care about the results here
4432                         AC_CHECK_HEADERS(security/pam_ext.h security/_pam_macros.h)
4433                         AC_CHECK_HEADERS(pam/pam_ext.h pam/_pam_macros.h)
4434                         AC_CHECK_FUNC_EXT(pam_vsyslog,$PAM_LIBS)
4435                 else
4436                         AC_MSG_WARN([PAM support detected but PAM MODULES support is missing])          
4437                 fi
4438         fi
4439         AC_MSG_CHECKING(whether to use PAM support)
4440         AC_MSG_RESULT([$use_pam])
4441
4442         AC_MSG_CHECKING(whether to have PAM MODULES support)
4443         AC_MSG_RESULT([$create_pam_modules])
4444 fi # try_pam != no
4445
4446 #################################################
4447 # check for PAM_RADIO_TYPE
4448 AC_TRY_COMPILE([
4449 #if (!defined(LINUX))
4450
4451 #define PAM_EXTERN extern
4452 #if defined(HAVE_SECURITY_PAM_APPL_H)
4453 #include <security/pam_appl.h>
4454 #elif defined(HAVE_PAM_PAM_APPL_H)
4455 #include <pam/pam_appl.h>
4456 #endif
4457
4458 #endif
4459
4460 #if defined(HAVE_SECURITY_PAM_MODULES_H)
4461 #include <security/pam_modules.h>
4462 #elif defined(HAVE_PAM_PAM_MODULES_H)
4463 #include <pam/pam_modules.h>
4464 #endif
4465
4466 #if defined(HAVE_SECURITY__PAM_MACROS_H)
4467 #include <security/_pam_macros.h>
4468 #elif defined(HAVE_PAM__PAM_MACROS_H)
4469 #include <pam/_pam_macros.h>
4470 #endif
4471
4472 #ifdef HAVE_SECURITY_PAM_EXT_H
4473 #include <security/pam_ext.h>
4474 #endif
4475 ],
4476 [int i; i = PAM_RADIO_TYPE; ],
4477 AC_DEFINE(HAVE_PAM_RADIO_TYPE, 1, [Define to 1 if PAM_RADIO_TYPE is available]),[])
4478
4479 #################################################
4480 # check for pam_smbpass support
4481 PAM_MODULES=""
4482 INSTALL_PAM_MODULES=""
4483 UNINSTALL_PAM_MODULES=""
4484
4485 try_pam_smbpass=auto
4486 AC_MSG_CHECKING(whether to use pam_smbpass)
4487 AC_ARG_WITH(pam_smbpass,
4488 [AS_HELP_STRING([--with-pam_smbpass], [Build PAM module for authenticating against passdb backends (default=auto)])],
4489 [ case "$withval" in
4490   yes|no|auto)
4491     try_pam_smbpass=$withval
4492   ;;
4493   *)
4494     AC_MSG_ERROR([valid options are yes,no,auto])
4495   ;;
4496   esac
4497 ])
4498
4499 if test x"${try_pam_smbpass}" = xno ; then
4500         use_pam_smbpass=no
4501 else
4502         use_pam_smbpass=yes
4503         # Conditions under which pam_smbpass can't be built.
4504         if test x"$BLDSHARED" != xtrue ; then
4505                 if test x"${try_pam_smbpass}" = xyes ; then
4506                         AC_MSG_ERROR([No support for shared modules])
4507                 fi
4508                 use_pam_smbpass=no
4509         elif test x"$create_pam_modules" != xyes ; then
4510                 if test x"${try_pam_smbpass}" = xyes ; then
4511                         AC_MSG_ERROR([No support for PAM MODULES])
4512                 fi
4513                 use_pam_smbpass=no
4514         fi
4515
4516         if test x"${use_pam_smbpass}" = xyes ; then 
4517                 PAM_MODULES="pam_smbpass"
4518                 INSTALL_PAM_MODULES="installpammodules"
4519                 UNINSTALL_PAM_MODULES="uninstallpammodules"
4520         fi
4521 fi
4522 AC_MSG_RESULT([$use_pam_smbpass])
4523
4524
4525 ##
4526 ## moved after the check for -lcrypt in order to
4527 ## ensure that the necessary libraries are included
4528 ## check checking for truncated salt.  Wrapped by the
4529 ## $with_pam_for_crypt variable as above   --jerry
4530 ##
4531 if test $with_pam_for_crypt = no; then
4532 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
4533 crypt_LIBS="$LIBS"
4534 LIBS="$AUTH_LIBS $LIBS"
4535 AC_TRY_RUN([#include "${srcdir-.}/../tests/crypttest.c"],
4536         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
4537 LIBS="$crypt_LIBS"])
4538 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
4539         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
4540 fi
4541 fi
4542
4543 #################################################
4544 # check for a NISPLUS_HOME support
4545 AC_MSG_CHECKING(whether to use NISPLUS_HOME)
4546 AC_ARG_WITH(nisplus-home,
4547 [AS_HELP_STRING([--with-nisplus-home], [Include NISPLUS_HOME support (default=no)])],
4548 [ case "$withval" in
4549   yes)
4550     AC_MSG_RESULT(yes)
4551     AC_DEFINE(WITH_NISPLUS_HOME,1,[Whether to include nisplus_home support])
4552     ;;
4553   *)
4554     AC_MSG_RESULT(no)
4555     ;;
4556   esac ],
4557   AC_MSG_RESULT(no)
4558 )
4559
4560 #################################################
4561 # check for syslog logging
4562 AC_MSG_CHECKING(whether to use syslog logging)
4563 AC_ARG_WITH(syslog,
4564 [AS_HELP_STRING([--with-syslog], [Include experimental SYSLOG support (default=no)])],
4565 [ case "$withval" in
4566   yes)
4567     AC_MSG_RESULT(yes)
4568     AC_DEFINE(WITH_SYSLOG,1,[Whether to include experimental syslog support])
4569     ;;
4570   *)
4571     AC_MSG_RESULT(no)
4572     ;;
4573   esac ],
4574   AC_MSG_RESULT(no)
4575 )
4576
4577 #################################################
4578 # check for custom syslog facility
4579 AC_MSG_CHECKING(whether to use a custom syslog facility)
4580 AC_ARG_WITH(syslog-facility,
4581 [AS_HELP_STRING([--with-syslog-facility], [Use a custom syslog facility (default=none)])],
4582 [
4583   if test "$withval" = "no" ; then
4584     AC_MSG_ERROR([argument to --with-syslog-facility must be a string])
4585   else
4586      if test "$withval" != "yes" ; then
4587         syslog_facility="$withval"
4588         AC_DEFINE_UNQUOTED(SYSLOG_FACILITY,$syslog_facility, [syslog facility to log to])
4589      fi
4590   fi
4591 ])
4592
4593 #################################################
4594 # check for experimental disk-quotas support
4595
4596 samba_cv_WITH_QUOTAS=auto
4597 samba_cv_TRY_QUOTAS=no
4598 samba_cv_RUN_QUOTA_TESTS=auto
4599 samba_cv_WITH_SYS_QUOTAS=auto
4600 samba_cv_TRY_SYS_QUOTAS=auto
4601 samba_cv_SYSQUOTA_FOUND=no
4602
4603 AC_MSG_CHECKING(whether to try disk-quotas support)
4604 AC_ARG_WITH(quotas,
4605 [AS_HELP_STRING([--with-quotas], [Include disk-quota support (default=no)])],
4606 [ case "$withval" in
4607   yes)
4608     AC_MSG_RESULT(yes)
4609     samba_cv_WITH_QUOTAS=yes
4610     samba_cv_TRY_QUOTAS=yes
4611     samba_cv_RUN_QUOTA_TESTS=yes
4612     #set sys quotas to auto in this case
4613     samba_cv_TRY_SYS_QUOTAS=auto
4614     ;;
4615   auto)
4616     AC_MSG_RESULT(auto)
4617     samba_cv_WITH_QUOTAS=auto
4618     samba_cv_TRY_QUOTAS=auto
4619     samba_cv_RUN_QUOTA_TESTS=auto
4620     #set sys quotas to auto in this case
4621     samba_cv_TRY_SYS_QUOTAS=auto
4622     ;;
4623   no)
4624     AC_MSG_RESULT(no)
4625     samba_cv_WITH_QUOTAS=no
4626     samba_cv_TRY_QUOTAS=no
4627     samba_cv_RUN_QUOTA_TESTS=no
4628     ;;
4629   *)
4630     AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4631     ;;
4632   esac ],
4633   AC_MSG_RESULT(${samba_cv_TRY_QUOTAS})
4634 )
4635
4636 AC_MSG_CHECKING(whether to try the new lib/sysquotas.c interface)
4637 AC_ARG_WITH(sys-quotas,
4638 [AS_HELP_STRING([--with-sys-quotas], [Include lib/sysquotas.c support (default=auto)])],
4639 [ case "$withval" in
4640   yes)
4641     AC_MSG_RESULT(yes)
4642     samba_cv_WITH_SYS_QUOTAS=yes
4643     samba_cv_TRY_SYS_QUOTAS=yes
4644     samba_cv_RUN_QUOTA_TESTS=yes
4645     ;;
4646   auto)
4647     AC_MSG_RESULT(auto)
4648     samba_cv_WITH_SYS_QUOTAS=auto
4649     samba_cv_TRY_SYS_QUOTAS=auto
4650     samba_cv_RUN_QUOTA_TESTS=auto
4651     ;;
4652   no)
4653     AC_MSG_RESULT(no)
4654     samba_cv_WITH_SYS_QUOTAS=no
4655     samba_cv_TRY_SYS_QUOTAS=no
4656     ;;
4657   *)
4658     AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4659     ;;
4660   esac ],
4661   AC_MSG_RESULT(${samba_cv_TRY_SYS_QUOTAS})
4662 )
4663
4664 if test x"$samba_cv_TRY_SYS_QUOTAS" = x"auto"; then
4665 AC_MSG_CHECKING(whether to try the lib/sysquotas.c interface on ${host_os})
4666   case "$host_os" in
4667         *linux*)
4668             AC_MSG_RESULT(yes)
4669             samba_cv_TRY_SYS_QUOTAS=yes
4670             samba_cv_RUN_QUOTA_TESTS=yes
4671             ;;
4672         *)
4673             AC_MSG_RESULT(no)
4674             samba_cv_TRY_SYS_QUOTAS=no
4675             ;;
4676   esac
4677 fi
4678
4679 #############################################
4680 # only check for quota stuff if --with-quotas
4681 if test x"$samba_cv_RUN_QUOTA_TESTS" != x"no"; then
4682
4683 case "$host_os" in
4684         # on linux we didn't need to test we have builtin support
4685         *linux*)
4686             samba_cv_SYSQUOTA_FOUND=yes
4687             AC_DEFINE(HAVE_QUOTACTL_LINUX,1,[Whether Linux quota support is available])
4688             samba_cv_sysquotas_file="lib/sysquotas_linux.c"
4689             AC_MSG_CHECKING(whether to use the lib/sysquotas_linux.c builtin support)
4690             AC_MSG_RESULT(yes)
4691
4692             AC_DEFINE(HAVE_LINUX_XFS_QUOTAS,1,[Whether Linux xfs quota support is available])
4693             samba_cv_found_xfs_header=yes
4694             AC_MSG_CHECKING(whether to use the lib/sysquotas_xfs.c builtin support)
4695             AC_MSG_RESULT(yes)
4696             ;;
4697         *solaris*)
4698             # need to set this define when using static linking (BUG 1473)
4699             CPPFLAGS="$CPPFLAGS -DSUNOS5"
4700             ;;
4701         *)
4702             ;;
4703 esac
4704
4705 # some broken header files need this
4706 AC_CHECK_HEADER(asm/types.h,[
4707             AC_DEFINE(HAVE_ASM_TYPES_H,1,[check for <asm/types.h>])
4708             AC_ADD_INCLUDE(<asm/types.h>)
4709             ])
4710
4711 # For quotas on Veritas VxFS filesystems
4712 AC_CHECK_HEADERS(sys/fs/vx_quota.h)
4713
4714 # For quotas on Linux XFS filesystems
4715 AC_CHECK_HEADERS(linux/dqblk_xfs.h)
4716
4717 # For sys/quota.h and linux/quota.h
4718 AC_CHECK_HEADERS(sys/quota.h)
4719
4720 if test x"$samba_cv_found_xfs_header" != x"yes"; then
4721 # if we have xfs quota support <sys/quota.h> (IRIX) we should use it
4722 AC_CACHE_CHECK([for XFS QUOTA in <sys/quota.h>],samba_cv_HAVE_SYS_QUOTA_XFS, [
4723 AC_TRY_COMPILE([
4724 #include "confdefs.h"
4725 #ifdef HAVE_SYS_TYPES_H
4726 #include <sys/types.h>
4727 #endif
4728 #ifdef HAVE_ASM_TYPES_H
4729 #include <asm/types.h>
4730 #endif
4731 #include <sys/quota.h>
4732 ],[int i = Q_XGETQUOTA;],
4733 samba_cv_HAVE_SYS_QUOTA_XFS=yes,samba_cv_HAVE_SYS_QUOTA_XFS=no)])
4734 if test "$samba_cv_HAVE_SYS_QUOTA_XFS"x = "yes"x; then
4735         samba_cv_found_xfs_header=yes
4736 fi
4737 fi
4738
4739 # if we have struct dqblk .dqb_fsoftlimit instead of .dqb_isoftlimit on IRIX
4740 AC_CACHE_CHECK([if struct dqblk has .dqb_fsoftlimit],samba_cv_HAVE_DQB_FSOFTLIMIT, [
4741 AC_TRY_COMPILE([
4742 #include "confdefs.h"
4743 #ifdef HAVE_SYS_QUOTA_H
4744 #include <sys/quota.h>
4745 #endif
4746 ],[
4747 struct dqblk D;
4748 D.dqb_fsoftlimit = 0;],
4749 samba_cv_HAVE_DQB_FSOFTLIMIT=yes,samba_cv_HAVE_DQB_FSOFTLIMIT=no)])
4750 if test "$samba_cv_HAVE_DQB_FSOFTLIMIT"x = "yes"x; then
4751         AC_DEFINE(HAVE_DQB_FSOFTLIMIT,1,[struct dqblk .dqb_fsoftlimit])
4752 fi
4753
4754 ##################
4755 # look for a working quota system
4756
4757 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4758 AC_CACHE_CHECK([for long quotactl(int cmd, char *special, qid_t id, caddr_t addr)],samba_cv_HAVE_QUOTACTL_4A,[
4759 AC_TRY_RUN_STRICT([
4760 #define HAVE_QUOTACTL_4A 1
4761 #define AUTOCONF_TEST 1
4762 #include "confdefs.h"
4763 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4764            samba_cv_HAVE_QUOTACTL_4A=yes,samba_cv_HAVE_QUOTACTL_4A=no,samba_cv_HAVE_QUOTACTL_4A=cross)])
4765 if test x"$samba_cv_HAVE_QUOTACTL_4A" = x"yes"; then
4766     samba_cv_SYSQUOTA_FOUND=yes;
4767     AC_DEFINE(HAVE_QUOTACTL_4A,1,[Whether long quotactl(int cmd, char *special, qid_t id, caddr_t addr) is available])
4768     samba_cv_sysquotas_file="lib/sysquotas_4A.c"
4769 fi
4770 fi
4771
4772 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4773 AC_CACHE_CHECK([for int quotactl(const char *path, int cmd, int id, char *addr)],samba_cv_HAVE_QUOTACTL_4B,[
4774 AC_TRY_RUN_STRICT([
4775 #define HAVE_QUOTACTL_4B 1
4776 #define AUTOCONF_TEST 1
4777 #include "confdefs.h"
4778 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4779            samba_cv_HAVE_QUOTACTL_4B=yes,samba_cv_HAVE_QUOTACTL_4B=no,samba_cv_HAVE_QUOTACTL_4B=cross)])
4780 if test x"$samba_cv_HAVE_QUOTACTL_4B" = x"yes"; then
4781     echo "int quotactl(const char *path, int cmd, int id, char *addr) is not reworked for the new sys_quota api"
4782     samba_cv_SYSQUOTA_FOUND=yes;
4783     AC_DEFINE(HAVE_QUOTACTL_4B,1,[Whether int quotactl(const char *path, int cmd, int id, char *addr) is available])
4784     samba_cv_sysquotas_file="lib/sysquotas_4B.c"
4785 fi
4786 fi
4787
4788 if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4789 AC_CACHE_CHECK([for CRAY int quotactl (char *spec, int request, char *arg)],samba_cv_HAVE_QUOTACTL_3,[
4790 AC_TRY_RUN_STRICT([
4791 #define HAVE_QUOTACTL_3 1
4792 #define AUTOCONF_TEST 1
4793 #include "confdefs.h"
4794 #include "${srcdir-.}/../tests/sysquotas.c"],[$CFLAGS $Werror_FLAGS],[$CPPFLAGS],[$LDFLAGS],
4795            samba_cv_HAVE_QUOTACTL_3=yes,samba_cv_HAVE_QUOTACTL_3=no,samba_cv_HAVE_QUOTACTL_3=cross)])
4796 if test x"$samba_cv_HAVE_QUOTACTL_3" = x"yes"; then
4797     echo "CRAY int quotactl (char *spec, int request, char *arg) is NOT reworked for the sys_quota api"
4798     samba_cv_SYSQUOTA_FOUND=yes;
4799     AC_DEFINE(HAVE_QUOTACTL_3,1,[Whether CRAY int quotactl (char *spec, int request, char *arg); is available])
4800     samba_cv_sysquotas_file="lib/sysquotas_3.c"
4801 fi
4802 fi
4803
4804 #################################################
4805 # check for mntent.h and struct mntent
4806 AC_CHECK_HEADERS(mntent.h)
4807 #################################################
4808 # check for setmntent,getmntent,endmntent
4809 AC_CHECK_FUNCS(setmntent getmntent endmntent)
4810
4811 #################################################
4812 # check for devnm.h and struct mntent
4813 AC_CHECK_HEADERS(devnm.h)
4814 #################################################
4815 # check for devnm
4816 AC_CHECK_FUNCS(devnm)
4817
4818 if test x"$samba_cv_WITH_SYS_QUOTAS" = x"yes"; then
4819     if test x"$samba_cv_SYSQUOTA_FOUND" != x"yes"; then
4820         # if --with-sys-quotas=yes then build it
4821         # you have can use the get/set quota command smb.conf
4822         # options then
4823         samba_cv_SYSQUOTA_FOUND=auto
4824     fi
4825     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"yes"; then
4826         # if --with-sys-quotas=yes then build it
4827         # you have can use the get/set quota command smb.conf
4828         # options then
4829         samba_cv_TRY_SYS_QUOTAS=auto
4830     fi
4831 fi
4832
4833 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no"; then
4834 AC_CACHE_CHECK([whether the sys_quota interface works],samba_cv_SYSQUOTA_WORKS,[
4835 SAVE_CPPFLAGS="$CPPFLAGS"
4836 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4837 AC_TRY_COMPILE([
4838 #include "confdefs.h"
4839 #define NO_PROTO_H 1
4840 #define NO_CONFIG_H 1
4841 #define HAVE_SYS_QUOTAS 1
4842 #include "${srcdir-.}/${samba_cv_sysquotas_file}"
4843 #include "${srcdir-.}/lib/sysquotas.c"
4844 ],[],samba_cv_SYSQUOTA_WORKS=yes,samba_cv_SYSQUOTA_WORKS=no)
4845 CPPFLAGS="$SAVE_CPPFLAGS"
4846 ])
4847 if test x"$samba_cv_SYSQUOTA_WORKS" = x"yes"; then
4848 AC_MSG_CHECKING(whether to use the new lib/sysquotas.c interface)
4849     if test x"$samba_cv_TRY_SYS_QUOTAS" != x"no"; then
4850         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4851         AC_DEFINE(HAVE_SYS_QUOTAS,1,[Whether the new lib/sysquotas.c interface can be used])
4852         samba_cv_WE_USE_SYS_QUOTAS=yes
4853         AC_MSG_RESULT(yes)
4854     else
4855         AC_MSG_RESULT(no)
4856     fi
4857 fi
4858 fi
4859
4860 if test x"$samba_cv_SYSQUOTA_FOUND" != x"no" -a x"$samba_cv_found_xfs_header" = x"yes"; then
4861 AC_CACHE_CHECK([whether the sys_quota interface works with XFS],samba_cv_SYSQUOTA_WORKS_XFS,[
4862 SAVE_CPPFLAGS="$CPPFLAGS"
4863 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4864 AC_TRY_COMPILE([
4865 #include "confdefs.h"
4866 #define NO_PROTO_H 1
4867 #define NO_CONFIG_H 1
4868 #define HAVE_SYS_QUOTAS 1
4869 #define HAVE_XFS_QUOTAS 1
4870 #include "${srcdir-.}/lib/sysquotas_xfs.c"
4871 ],[],samba_cv_SYSQUOTA_WORKS_XFS=yes,samba_cv_SYSQUOTA_WORKS_XFS=no)
4872 CPPFLAGS="$SAVE_CPPFLAGS"
4873 ])
4874 if test x"$samba_cv_SYSQUOTA_WORKS_XFS" = x"yes"; then
4875     if test x"$samba_cv_WE_USE_SYS_QUOTAS" = x"yes"; then
4876         AC_DEFINE(HAVE_XFS_QUOTAS,1,[Whether xfs quota support is available])
4877     fi
4878 fi
4879 fi
4880
4881 AC_CACHE_CHECK([whether the old quota support works],samba_cv_QUOTA_WORKS,[
4882 SAVE_CPPFLAGS="$CPPFLAGS"
4883 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS}"
4884 AC_TRY_COMPILE([
4885 #include "confdefs.h"
4886 #define NO_PROTO_H 1
4887 #define NO_CONFIG_H 1
4888 #include "${srcdir-.}/smbd/quotas.c"
4889 ],[],samba_cv_QUOTA_WORKS=yes,samba_cv_QUOTA_WORKS=no)
4890 CPPFLAGS="$SAVE_CPPFLAGS"
4891 ])
4892 if test x"$samba_cv_QUOTA_WORKS" = x"yes"; then
4893 AC_MSG_CHECKING(whether to use the old quota support)
4894     if test x"$samba_cv_WE_USE_SYS_QUOTAS" != x"yes"; then
4895       if test x"$samba_cv_TRY_QUOTAS" != x"no"; then
4896         AC_DEFINE(WITH_QUOTAS,1,[Whether to use disk quota support])
4897         AC_MSG_RESULT(yes)
4898       else
4899         AC_MSG_RESULT(no)
4900       fi
4901     else
4902       AC_MSG_RESULT(no)
4903     fi
4904 fi
4905
4906 ####################
4907 # End of quota check samba_cv_RUN_QUOTA_TESTS
4908 fi
4909
4910 #################################################
4911 # check for experimental utmp accounting
4912
4913 AC_MSG_CHECKING(whether to support utmp accounting)
4914 WITH_UTMP=yes
4915 AC_ARG_WITH(utmp,
4916 [AS_HELP_STRING([--with-utmp], [Include utmp accounting (default, if supported by OS)])],
4917 [ case "$withval" in
4918   no)
4919                 WITH_UTMP=no
4920                 ;;
4921   *)
4922                 WITH_UTMP=yes
4923                 ;;
4924   esac ],
4925 )
4926
4927 # utmp requires utmp.h
4928 # Note similar check earlier, when checking utmp details.
4929
4930 if test x"$WITH_UTMP" = x"yes" -a x"$ac_cv_header_utmp_h" = x"no"; then
4931         utmp_no_reason=", no utmp.h on $host_os"
4932         WITH_UTMP=no
4933 fi
4934
4935 # Display test results
4936
4937 if test x"$WITH_UTMP" = x"yes"; then
4938         AC_MSG_RESULT(yes)
4939         AC_DEFINE(WITH_UTMP,1,[Whether to include experimental utmp accounting])
4940 else
4941         AC_MSG_RESULT(no$utmp_no_reason)
4942 fi
4943
4944
4945 #################################################
4946 # these tests are taken from the GNU fileutils package
4947 AC_CHECKING(how to get filesystem space usage)
4948 space=no
4949
4950 # Test for statvfs64.
4951 if test $space = no; then
4952   # SVR4
4953   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
4954   [AC_TRY_RUN([
4955 #if defined(HAVE_UNISTD_H)
4956 #include <unistd.h>
4957 #endif
4958 #include <sys/types.h>
4959 #include <sys/statvfs.h>
4960   main ()
4961   {
4962     struct statvfs64 fsd;
4963     exit (statvfs64 (".", &fsd));
4964   }],
4965   fu_cv_sys_stat_statvfs64=yes,
4966   fu_cv_sys_stat_statvfs64=no,
4967   fu_cv_sys_stat_statvfs64=cross)])
4968   if test $fu_cv_sys_stat_statvfs64 = yes; then
4969     space=yes
4970     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
4971   fi
4972 fi
4973
4974 # Perform only the link test since it seems there are no variants of the
4975 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
4976 # because that got a false positive on SCO OSR5.  Adding the declaration
4977 # of a `struct statvfs' causes this test to fail (as it should) on such
4978 # systems.  That system is reported to work fine with STAT_STATFS4 which
4979 # is what it gets when this test fails.
4980 if test $space = no; then
4981   # SVR4
4982   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
4983                  [AC_TRY_LINK([#include <sys/types.h>
4984 #include <sys/statvfs.h>],
4985                               [struct statvfs fsd; statvfs (0, &fsd);],
4986                               fu_cv_sys_stat_statvfs=yes,
4987                               fu_cv_sys_stat_statvfs=no)])
4988   if test $fu_cv_sys_stat_statvfs = yes; then
4989     space=yes
4990     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
4991   fi
4992 fi
4993
4994 # smbd/statvfs.c assumes that statvfs.f_fsid is an integer.
4995 # This is not the case on ancient Linux systems.
4996
4997 AC_CACHE_CHECK([that statvfs.f_fsid is an integer],samba_cv_fsid_int, [
4998     AC_TRY_COMPILE([#include <sys/types.h>
4999 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_fsid = 0],
5000         samba_cv_fsid_int=yes,samba_cv_fsid_int=no)])
5001 if test x"$samba_cv_fsid_int" = x"yes"; then
5002     AC_DEFINE(HAVE_FSID_INT, 1, [Whether statvfs.f_fsid is an integer])
5003 fi
5004
5005 # fsusage.c assumes that statvfs has an f_frsize entry. Some weird
5006 # systems use f_bsize.
5007 AC_CACHE_CHECK([that statvfs.f_frsize works],samba_cv_frsize, [
5008     AC_TRY_COMPILE([#include <sys/types.h>
5009 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_frsize = 0],
5010         samba_cv_frsize=yes,samba_cv_frsize=no)])
5011 if test x"$samba_cv_frsize" = x"yes"; then
5012     AC_DEFINE(HAVE_FRSIZE, 1, [Whether statvfs.f_frsize exists])
5013 fi
5014
5015 # Some systems use f_flag in struct statvfs while others use f_flags
5016 AC_CACHE_CHECK([that statvfs.statvfs_f_flag works],samba_cv_statvfs_f_flag, [
5017     AC_TRY_COMPILE([#include <sys/types.h>
5018 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flag = 0],
5019         samba_cv_statvfs_f_flag=yes,samba_cv_statvfs_f_flag=no)])
5020 if test x"$samba_cv_statvfs_f_flag" = x"yes"; then
5021     AC_DEFINE(HAVE_STATVFS_F_FLAG, 1, [Whether statvfs.f_flag exists])
5022 fi
5023
5024 AC_CACHE_CHECK([that statvfs.statvfs_f_flags works],samba_cv_statvfs_f_flags, [
5025     AC_TRY_COMPILE([#include <sys/types.h>
5026 #include <sys/statvfs.h>],[struct statvfs buf; buf.f_flags = 0],
5027         samba_cv_statvfs_f_flags=yes,samba_cv_statvfs_f_flags=no)])
5028 if test x"$samba_cv_statvfs_f_flags" = x"yes"; then
5029     AC_DEFINE(HAVE_STATVFS_F_FLAGS, 1, [Whether statvfs.f_flags exists])
5030 fi
5031
5032 if test $space = no; then
5033   # DEC Alpha running OSF/1
5034   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
5035   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
5036   [AC_TRY_RUN([
5037 #include <sys/param.h>
5038 #include <sys/types.h>
5039 #include <sys/mount.h>
5040   main ()
5041   {
5042     struct statfs fsd;
5043     fsd.f_fsize = 0;
5044     exit (statfs (".", &fsd, sizeof (struct statfs)));
5045   }],
5046   fu_cv_sys_stat_statfs3_osf1=yes,
5047   fu_cv_sys_stat_statfs3_osf1=no,
5048   fu_cv_sys_stat_statfs3_osf1=no)])
5049   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
5050   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
5051     space=yes
5052     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
5053   fi
5054 fi
5055
5056 if test $space = no; then
5057 # AIX
5058   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
5059 member (AIX, 4.3BSD)])
5060   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
5061   [AC_TRY_RUN([
5062 #ifdef HAVE_SYS_PARAM_H
5063 #include <sys/param.h>
5064 #endif
5065 #ifdef HAVE_SYS_MOUNT_H
5066 #include <sys/mount.h>
5067 #endif
5068 #ifdef HAVE_SYS_VFS_H
5069 #include <sys/vfs.h>
5070 #endif
5071   main ()
5072   {
5073   struct statfs fsd;
5074   fsd.f_bsize = 0;
5075   exit (statfs (".", &fsd));
5076   }],
5077   fu_cv_sys_stat_statfs2_bsize=yes,
5078   fu_cv_sys_stat_statfs2_bsize=no,
5079   fu_cv_sys_stat_statfs2_bsize=no)])
5080   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
5081   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
5082     space=yes
5083     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
5084   fi
5085 fi
5086
5087 if test $space = no; then
5088 # SVR3
5089   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
5090   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
5091   [AC_TRY_RUN([#include <sys/types.h>
5092 #include <sys/statfs.h>
5093   main ()
5094   {
5095   struct statfs fsd;
5096   exit (statfs (".", &fsd, sizeof fsd, 0));
5097   }],
5098     fu_cv_sys_stat_statfs4=yes,
5099     fu_cv_sys_stat_statfs4=no,
5100     fu_cv_sys_stat_statfs4=no)])
5101   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
5102   if test $fu_cv_sys_stat_statfs4 = yes; then
5103     space=yes
5104     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
5105   fi
5106 fi
5107
5108 if test $space = no; then
5109 # 4.4BSD and NetBSD
5110   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
5111 member (4.4BSD and NetBSD)])
5112   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
5113   [AC_TRY_RUN([#include <sys/types.h>
5114 #ifdef HAVE_SYS_PARAM_H
5115 #include <sys/param.h>
5116 #endif
5117 #ifdef HAVE_SYS_MOUNT_H
5118 #include <sys/mount.h>
5119 #endif
5120   main ()
5121   {
5122   struct statfs fsd;
5123   fsd.f_fsize = 0;
5124   exit (statfs (".", &fsd));
5125   }],
5126   fu_cv_sys_stat_statfs2_fsize=yes,
5127   fu_cv_sys_stat_statfs2_fsize=no,
5128   fu_cv_sys_stat_statfs2_fsize=no)])
5129   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
5130   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
5131     space=yes
5132         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
5133   fi
5134 fi
5135
5136 if test $space = no; then
5137   # Ultrix
5138   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
5139   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
5140   [AC_TRY_RUN([#include <sys/types.h>
5141 #ifdef HAVE_SYS_PARAM_H
5142 #include <sys/param.h>
5143 #endif
5144 #ifdef HAVE_SYS_MOUNT_H
5145 #include <sys/mount.h>
5146 #endif
5147 #ifdef HAVE_SYS_FS_TYPES_H
5148 #include <sys/fs_types.h>
5149 #endif
5150   main ()
5151   {
5152   struct fs_data fsd;
5153   /* Ultrix's statfs returns 1 for success,
5154      0 for not mounted, -1 for failure.  */
5155   exit (statfs (".", &fsd) != 1);
5156   }],
5157   fu_cv_sys_stat_fs_data=yes,
5158   fu_cv_sys_stat_fs_data=no,
5159   fu_cv_sys_stat_fs_data=no)])
5160   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
5161   if test $fu_cv_sys_stat_fs_data = yes; then
5162     space=yes
5163     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
5164   fi
5165 fi
5166
5167 #
5168 # As a gating factor for large file support, in order to
5169 # use <4GB files we must have the following minimal support
5170 # available.
5171 # long long, and a 64 bit off_t or off64_t.
5172 # If we don't have all of these then disable large
5173 # file support.
5174 #
5175 AC_MSG_CHECKING([if large file support can be enabled])
5176 AC_TRY_COMPILE([
5177 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
5178 #include <sys/types.h>
5179 #else
5180 __COMPILE_ERROR_
5181 #endif
5182 ],
5183 [int i],
5184 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
5185 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
5186         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
5187 fi
5188 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])
5189
5190 #################################################
5191 # check for cluster extensions
5192
5193 CTDB_CFLAGS=""
5194 AC_SUBST(CTDB_CFLAGS)
5195 AC_ARG_WITH(ctdb,
5196 [AS_HELP_STRING([--with-ctdb=DIR], [Where to find ctdb sources])],
5197 [ case "$withval" in
5198   yes|no)
5199     AC_MSG_WARN([--with-ctdb called without argument])
5200     ;;
5201   *)
5202     CTDB_CPPFLAGS="-I$withval/include"
5203     ;;
5204   esac])
5205
5206 SAVED_CPPFLAGS="$CPPFLAGS"
5207 CPPFLAGS="$CPPFLAGS ${SAMBA_CONFIGURE_CPPFLAGS} $CTDB_CPPFLAGS"
5208 ctdb_broken="missing or broken headers"
5209
5210 AC_CHECK_HEADERS(ctdb.h ctdb_private.h,,,[
5211 #include "confdefs.h"
5212 #define NO_CONFIG_H
5213 #include "replace.h"
5214 #include "system/wait.h"
5215 #include "system/network.h"
5216 #define private #error __USED_RESERVED_WORD_private__
5217 #include <talloc.h>
5218 #include <tdb.h>
5219 #include <ctdb.h>
5220 ])
5221
5222 AC_HAVE_DECL(CTDB_CONTROL_TRANS3_COMMIT,[
5223 #include "confdefs.h"
5224 #define NO_CONFIG_H
5225 #include "replace.h"
5226 #include "system/wait.h"
5227 #include "system/network.h"
5228 #include <talloc.h>
5229 #include <tdb.h>
5230 #include <ctdb.h>
5231 #include <ctdb_private.h>
5232 ])
5233 if test x"$ac_cv_have_CTDB_CONTROL_TRANS3_COMMIT_decl" = x"yes"; then
5234         ctdb_broken=no
5235 else
5236         ctdb_broken="ctdb transaction support missing or too old"
5237 fi
5238
5239 # in ctdb 1.0.57 ctdb_control_tcp was temparary renamed to ctdb_tcp_client
5240 AC_CHECK_TYPE(struct ctdb_tcp_client,[
5241         AC_DEFINE([ctdb_control_tcp],[ctdb_tcp_client],[ctdb ipv4 support])
5242 ],,[
5243 #include "confdefs.h"
5244 #define NO_CONFIG_H
5245 #include "replace.h"
5246 #include "system/wait.h"
5247 #include "system/network.h"
5248 #include <talloc.h>
5249 #include <tdb.h>
5250 #include <ctdb.h>
5251 #include <ctdb_private.h>
5252 ])
5253
5254 AC_CHECK_TYPE(struct ctdb_control_tcp,[
5255         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP],[1],[ctdb ipv4 support])
5256 ],[
5257         ctdb_broken="missing struct ctdb_control_tcp"
5258 ],[
5259 #include "confdefs.h"
5260 #define NO_CONFIG_H
5261 #include "replace.h"
5262 #include "system/wait.h"
5263 #include "system/network.h"
5264 #include <talloc.h>
5265 #include <tdb.h>
5266 #include <ctdb.h>
5267 #include <ctdb_private.h>
5268 ])
5269
5270 AC_CHECK_TYPE(struct ctdb_control_tcp_addr,[
5271         AC_DEFINE([HAVE_STRUCT_CTDB_CONTROL_TCP_ADDR],[1],[ctdb ipv6 support])
5272 ],,[
5273 #include "confdefs.h"
5274 #define NO_CONFIG_H
5275 #include "replace.h"
5276 #include "system/wait.h"
5277 #include "system/network.h"
5278 #include <talloc.h>
5279 #include <tdb.h>
5280 #include <ctdb.h>
5281 #include <ctdb_private.h>
5282 ])
5283 CPPFLAGS="$SAVED_CPPFLAGS"
5284
5285 AC_MSG_CHECKING(cluster support)
5286 AC_ARG_WITH(cluster-support,
5287 [AS_HELP_STRING([--with-cluster-support], [Enable cluster extensions (default=auto)])])
5288
5289 if test x"$with_cluster_support" = x ; then
5290         with_cluster_support="auto"
5291 fi
5292
5293 if test x"$ac_cv_header_ctdb_private_h" != x"yes"; then
5294         if test "x$with_cluster_support" = "xyes"; then
5295                 AC_MSG_ERROR("ctdb_private.h is required for cluster support")
5296         fi
5297         with_cluster_support=no
5298 fi
5299
5300 if test x"$ctdb_broken" != x"no"; then
5301         if test "x$with_cluster_support" = "xyes"; then
5302                 AC_MSG_ERROR(["cluster support: $ctdb_broken"])
5303         fi
5304         with_cluster_support=no
5305 fi
5306
5307 if test "x$with_cluster_support" != "xno"; then
5308     AC_DEFINE(CLUSTER_SUPPORT,1,[Whether to enable cluster extensions])
5309     SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${CTDB_CPPFLAGS}"
5310     AC_MSG_RESULT(yes)
5311 else
5312     AC_MSG_RESULT(no)
5313 fi
5314
5315 #################################################
5316 # check for ACL support
5317
5318 AC_MSG_CHECKING(whether to support ACLs)
5319 AC_ARG_WITH(acl-support,
5320 [AS_HELP_STRING([--with-acl-support], [Include ACL support (default=auto)])],
5321 [ case "$withval" in
5322         yes|no)
5323                 with_acl_support="$withval"
5324                 ;;
5325   esac ])
5326
5327 if test x"$with_acl_support" = x ; then
5328         with_acl_support="auto"
5329 fi
5330
5331 AC_MSG_RESULT($with_acl_support)
5332
5333 if test x"$with_acl_support" = x"no"; then
5334         AC_MSG_RESULT(Disabling ACL support)
5335         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support should be built in])
5336 else
5337         AC_MSG_NOTICE(checking whether ACL support is available:)
5338         case "$host_os" in
5339         *sysv5*)
5340                 AC_MSG_NOTICE(Using UnixWare ACLs)
5341                 AC_DEFINE(HAVE_UNIXWARE_ACLS,1,[Whether UnixWare ACLs are available])
5342                 default_static_modules="$default_static_modules vfs_solarisacl"
5343                 ;;
5344         *solaris*)
5345                 AC_MSG_NOTICE(Using solaris ACLs)
5346                 AC_DEFINE(HAVE_SOLARIS_ACLS,1,[Whether solaris ACLs are available])
5347                 ACL_LIBS="$ACL_LIBS -lsec"
5348                 default_static_modules="$default_static_modules vfs_solarisacl"
5349                 ;;
5350         *hpux*)
5351                 AC_MSG_NOTICE(Using HPUX ACLs)
5352                 AC_DEFINE(HAVE_HPUX_ACLS,1,[Whether HPUX ACLs are available])
5353                 default_static_modules="$default_static_modules vfs_hpuxacl"
5354                 ;;
5355         *irix*)
5356                 AC_MSG_NOTICE(Using IRIX ACLs)
5357                 AC_DEFINE(HAVE_IRIX_ACLS,1,[Whether IRIX ACLs are available])
5358                 default_static_modules="$default_static_modules vfs_irixacl"
5359                 ;;
5360         *aix*)
5361                 AC_MSG_NOTICE(Using AIX ACLs)
5362                 AC_DEFINE(HAVE_AIX_ACLS,1,[Whether AIX ACLs are available])
5363                 default_static_modules="$default_static_modules vfs_aixacl"
5364                 ;;
5365         *osf*)
5366                 AC_MSG_NOTICE(Using Tru64 ACLs)
5367                 AC_DEFINE(HAVE_TRU64_ACLS,1,[Whether Tru64 ACLs are available])
5368                 ACL_LIBS="$ACL_LIBS -lpacl"
5369                 default_static_modules="$default_static_modules vfs_tru64acl"
5370                 ;;
5371         *darwin*)
5372                 AC_MSG_NOTICE(ACLs on Darwin currently not supported)
5373                 AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5374                 ;;
5375         *)
5376                 AC_CHECK_LIB(acl,acl_get_file,[ACL_LIBS="$ACL_LIBS -lacl"])
5377                 case "$host_os" in
5378                 *linux*)
5379                         AC_CHECK_LIB(attr,getxattr,[ACL_LIBS="$ACL_LIBS -lattr"])
5380                         ;;
5381                 esac
5382                 AC_CACHE_CHECK([for POSIX ACL support],samba_cv_HAVE_POSIX_ACLS,[
5383                         acl_LIBS=$LIBS
5384                         LIBS="$LIBS $ACL_LIBS"
5385                         AC_TRY_LINK([
5386                                 #include <sys/types.h>
5387                                 #include <sys/acl.h>
5388                         ],[
5389                                 acl_t acl;
5390                                 int entry_id;
5391                                 acl_entry_t *entry_p;
5392                                 return acl_get_entry(acl, entry_id, entry_p);
5393                         ],
5394                         [samba_cv_HAVE_POSIX_ACLS=yes],
5395                         [samba_cv_HAVE_POSIX_ACLS=no])
5396                         LIBS=$acl_LIBS
5397                 ])
5398                 if test x"$samba_cv_HAVE_POSIX_ACLS" = x"yes"; then
5399                         AC_MSG_NOTICE(Using posix ACLs)
5400                         AC_DEFINE(HAVE_POSIX_ACLS,1,[Whether POSIX ACLs are available])
5401                         AC_CACHE_CHECK([for acl_get_perm_np],samba_cv_HAVE_ACL_GET_PERM_NP,[
5402                                 acl_LIBS=$LIBS
5403                                 LIBS="$LIBS $ACL_LIBS"
5404                                 AC_TRY_LINK([
5405                                         #include <sys/types.h>
5406                                         #include <sys/acl.h>
5407                                 ],[
5408                                         acl_permset_t permset_d;
5409                                         acl_perm_t perm;
5410                                         return acl_get_perm_np(permset_d, perm);
5411                                 ],
5412                                 [samba_cv_HAVE_ACL_GET_PERM_NP=yes],
5413                                 [samba_cv_HAVE_ACL_GET_PERM_NP=no])
5414                                 LIBS=$acl_LIBS
5415                         ])
5416                         if test x"$samba_cv_HAVE_ACL_GET_PERM_NP" = x"yes"; then
5417                                 AC_DEFINE(HAVE_ACL_GET_PERM_NP,1,[Whether acl_get_perm_np() is available])
5418                         fi
5419                         default_static_modules="$default_static_modules vfs_posixacl"
5420                 else
5421                         AC_MSG_NOTICE(ACL support is not avaliable)
5422                         AC_DEFINE(HAVE_NO_ACLS,1,[Whether no ACLs support is available])
5423                 fi
5424                 ;;
5425         esac
5426 fi # with_acl_support
5427
5428
5429
5430 #################################################
5431 # check for AIO support
5432
5433 AC_MSG_CHECKING(whether to support asynchronous io)
5434 AC_ARG_WITH(aio-support,
5435 [AS_HELP_STRING([--with-aio-support], [Include asynchronous io support (default=no)])],
5436 [ case "$withval" in
5437   yes)
5438
5439         AC_MSG_RESULT(yes)
5440         case "$host_os" in
5441         *)
5442                 AIO_LIBS=$LIBS
5443                 AC_CHECK_LIB(rt,aio_read,[AIO_LIBS="$LIBS -lrt"])
5444                 AC_CHECK_LIB(aio,aio_read,[AIO_LIBS="$LIBS -laio"])
5445                 AC_CACHE_CHECK([for asynchronous io support],samba_cv_HAVE_AIO,[
5446                 aio_LIBS=$LIBS
5447                 LIBS=$AIO_LIBS
5448                 AC_TRY_LINK([#include <sys/types.h>
5449 #include <aio.h>],
5450 [ struct aiocb a; return aio_read(&a);],
5451 samba_cv_HAVE_AIO=yes,samba_cv_HAVE_AIO=no)
5452                 LIBS=$aio_LIBS])
5453                 AC_CACHE_CHECK([for 64-bit asynchronous io support],samba_cv_HAVE_AIO64,[
5454                 aio_LIBS=$LIBS
5455                 LIBS=$AIO_LIBS
5456                 AC_TRY_LINK([#include <sys/types.h>
5457 #include <aio.h>],
5458 [ struct aiocb64 a; return aio_read64(&a);],
5459 samba_cv_HAVE_AIO64=yes,samba_cv_HAVE_AIO64=no)
5460                 LIBS=$aio_LIBS])
5461                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5462                         AC_DEFINE(HAVE_AIOCB64,1,[Whether 64 bit aio is available])
5463                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5464                         LIBS=$AIO_LIBS
5465                 elif test x"$samba_cv_HAVE_AIO" = x"yes"; then
5466                         AC_DEFINE(WITH_AIO, 1, [Using asynchronous io])
5467                         LIBS=$AIO_LIBS
5468                 fi
5469
5470                 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5471                         AC_MSG_CHECKING(for aio_read)
5472                         AC_LINK_IFELSE([#include <aio.h>
5473 int main() { struct aiocb a; return aio_read(&a); }],
5474 [AC_DEFINE(HAVE_AIO_READ, 1, [Have aio_read]) AC_MSG_RESULT(yes)],
5475 [AC_MSG_RESULT(no)])
5476
5477                         AC_MSG_CHECKING(for aio_write)
5478                         AC_LINK_IFELSE([#include <aio.h>
5479 int main() { struct aiocb a; return aio_write(&a); }],
5480 [AC_DEFINE(HAVE_AIO_WRITE, 1, [Have aio_write]) AC_MSG_RESULT(yes)],
5481 [AC_MSG_RESULT(no)])
5482
5483                         AC_MSG_CHECKING(for aio_fsync)
5484                         AC_LINK_IFELSE([#include <aio.h>
5485 int main() { struct aiocb a; return aio_fsync(1, &a); }],
5486 [AC_DEFINE(HAVE_AIO_FSYNC, 1, [Have aio_fsync]) AC_MSG_RESULT(yes)],
5487 [AC_MSG_RESULT(no)])
5488
5489                         AC_MSG_CHECKING(for aio_return)
5490                         AC_LINK_IFELSE([#include <aio.h>
5491 int main() { struct aiocb a; return aio_return(&a); }],
5492 [AC_DEFINE(HAVE_AIO_RETURN, 1, [Have aio_return]) AC_MSG_RESULT(yes)],
5493 [AC_MSG_RESULT(no)])
5494
5495                         AC_MSG_CHECKING(for aio_error)
5496                         AC_LINK_IFELSE([#include <aio.h>
5497 int main() { struct aiocb a; return aio_error(&a); }],
5498 [AC_DEFINE(HAVE_AIO_ERROR, 1, [Have aio_error]) AC_MSG_RESULT(yes)],
5499 [AC_MSG_RESULT(no)])
5500
5501                         AC_MSG_CHECKING(for aio_cancel)
5502                         AC_LINK_IFELSE([#include <aio.h>
5503 int main() { struct aiocb a; return aio_cancel(1, &a); }],
5504 [AC_DEFINE(HAVE_AIO_CANCEL, 1, [Have aio_cancel]) AC_MSG_RESULT(yes)],
5505 [AC_MSG_RESULT(no)])
5506
5507                         AC_MSG_CHECKING(for aio_suspend)
5508                         AC_LINK_IFELSE([#include <aio.h>
5509 int main() { struct aiocb a; return aio_suspend(&a, 1, NULL); }],
5510 [AC_DEFINE(HAVE_AIO_SUSPEND, 1, [Have aio_suspend]) AC_MSG_RESULT(yes)],
5511 [AC_MSG_RESULT(no)])
5512                 fi
5513
5514                 if test x"$samba_cv_HAVE_AIO64" = x"yes"; then
5515                         AC_MSG_CHECKING(for aio_read64)
5516                         AC_LINK_IFELSE([#include <aio.h>
5517 int main() { struct aiocb a; return aio_read64(&a); }],
5518 [AC_DEFINE(HAVE_AIO_READ64, 1, [Have aio_read64]) AC_MSG_RESULT(yes)],
5519 [AC_MSG_RESULT(no)])
5520
5521                         AC_MSG_CHECKING(for aio_write64)
5522                         AC_LINK_IFELSE([#include <aio.h>
5523 int main() { struct aiocb a; return aio_write64(&a); }],
5524 [AC_DEFINE(HAVE_AIO_WRITE64, 1, [Have aio_write64]) AC_MSG_RESULT(yes)],
5525 [AC_MSG_RESULT(no)])
5526
5527                         AC_MSG_CHECKING(for aio_fsync64)
5528                         AC_LINK_IFELSE([#include <aio.h>
5529 int main() { struct aiocb a; return aio_fsync64(1, &a); }],
5530 [AC_DEFINE(HAVE_AIO_FSYNC64, 1, [Have aio_fsync64]) AC_MSG_RESULT(yes)],
5531 [AC_MSG_RESULT(no)])
5532
5533                         AC_MSG_CHECKING(for aio_return64)
5534                         AC_LINK_IFELSE([#include <aio.h>
5535 int main() { struct aiocb a; return aio_return64(&a); }],
5536 [AC_DEFINE(HAVE_AIO_RETURN64, 1, [Have aio_return64]) AC_MSG_RESULT(yes)],
5537 [AC_MSG_RESULT(no)])
5538
5539                         AC_MSG_CHECKING(for aio_error64)
5540                         AC_LINK_IFELSE([#include <aio.h>
5541 int main() { struct aiocb a; return aio_error64(&a); }],
5542 [AC_DEFINE(HAVE_AIO_ERROR64, 1, [Have aio_error64]) AC_MSG_RESULT(yes)],
5543 [AC_MSG_RESULT(no)])
5544
5545                         AC_MSG_CHECKING(for aio_cancel64)
5546                         AC_LINK_IFELSE([#include <aio.h>
5547 int main() { struct aiocb a; return aio_cancel64(1, &a); }],
5548 [AC_DEFINE(HAVE_AIO_CANCEL64, 1, [Have aio_cancel64]) AC_MSG_RESULT(yes)],
5549 [AC_MSG_RESULT(no)])
5550
5551                         AC_MSG_CHECKING(for aio_suspend64)
5552                         AC_LINK_IFELSE([#include <aio.h>
5553 int main() { struct aiocb a; return aio_suspend64(&a, 1, NULL); }],
5554 [AC_DEFINE(HAVE_AIO_SUSPEND64, 1, [Have aio_suspend64]) AC_MSG_RESULT(yes)],
5555 [AC_MSG_RESULT(no)])
5556                 fi
5557             ;;
5558         esac
5559         ;;
5560   *)
5561     AC_MSG_RESULT(no)
5562     AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support is available])
5563     ;;
5564   esac ],
5565   AC_DEFINE(HAVE_NO_AIO,1,[Whether no asynchronous io support should be built in])
5566   AC_MSG_RESULT(no)
5567 )
5568
5569 if test x"$samba_cv_HAVE_AIO" = x"yes"; then
5570         if test x"$samba_cv_msghdr_msg_control" = x"yes" -o \
5571                 x"$samba_cv_msghdr_msg_acctright" = x"yes"; then
5572                 default_shared_modules="$default_shared_modules vfs_aio_fork"
5573         fi
5574 fi
5575
5576 #################################################
5577 # check for sendfile support
5578
5579 with_sendfile_support=yes
5580 AC_MSG_CHECKING(whether to check to support sendfile)
5581 AC_ARG_WITH(sendfile-support,
5582 [AS_HELP_STRING([--with-sendfile-support], [Check for sendfile support (default=yes)])],
5583 [ case "$withval" in
5584   yes)
5585
5586         AC_MSG_RESULT(yes);
5587
5588         case "$host_os" in
5589         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5590                 AC_CACHE_CHECK([for linux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5591                 AC_TRY_LINK([#include <sys/sendfile.h>],
5592 [\
5593 int tofd, fromfd;
5594 off64_t offset;
5595 size_t total;
5596 ssize_t nwritten = sendfile64(tofd, fromfd, &offset, total);
5597 ],
5598 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5599
5600                 AC_CACHE_CHECK([for linux sendfile support],samba_cv_HAVE_SENDFILE,[
5601                 AC_TRY_LINK([#include <sys/sendfile.h>],
5602 [\
5603 int tofd, fromfd;
5604 off_t offset;
5605 size_t total;
5606 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5607 ],
5608 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5609
5610 # Try and cope with broken Linux sendfile....
5611                 AC_CACHE_CHECK([for broken linux sendfile support],samba_cv_HAVE_BROKEN_LINUX_SENDFILE,[
5612                 AC_TRY_LINK([\
5613 #if defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64)
5614 #undef _FILE_OFFSET_BITS
5615 #endif
5616 #include <sys/sendfile.h>],
5617 [\
5618 int tofd, fromfd;
5619 off_t offset;
5620 size_t total;
5621 ssize_t nwritten = sendfile(tofd, fromfd, &offset, total);
5622 ],
5623 samba_cv_HAVE_BROKEN_LINUX_SENDFILE=yes,samba_cv_HAVE_BROKEN_LINUX_SENDFILE=no)])
5624
5625         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5626                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether 64-bit sendfile() is available])
5627                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5628                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5629         elif test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5630                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5631                 AC_DEFINE(LINUX_SENDFILE_API,1,[Whether linux sendfile() API is available])
5632                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() should be used])
5633         elif test x"$samba_cv_HAVE_BROKEN_LINUX_SENDFILE" = x"yes"; then
5634                 AC_DEFINE(LINUX_BROKEN_SENDFILE_API,1,[Whether (linux) sendfile() is broken])
5635                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile should be used])
5636         else
5637                 AC_MSG_RESULT(no);
5638         fi
5639
5640         ;;
5641         *freebsd* | *dragonfly* )
5642                 AC_CACHE_CHECK([for freebsd sendfile support],samba_cv_HAVE_SENDFILE,[
5643                 AC_TRY_LINK([\
5644 #include <sys/types.h>
5645 #include <unistd.h>
5646 #include <sys/socket.h>
5647 #include <sys/uio.h>],
5648 [\
5649         int fromfd, tofd, ret, total=0;
5650         off_t offset, nwritten;
5651         struct sf_hdtr hdr;
5652         struct iovec hdtrl;
5653         hdr.headers = &hdtrl;
5654         hdr.hdr_cnt = 1;
5655         hdr.trailers = NULL;
5656         hdr.trl_cnt = 0;
5657         hdtrl.iov_base = NULL;
5658         hdtrl.iov_len = 0;
5659         ret = sendfile(fromfd, tofd, offset, total, &hdr, &nwritten, 0);
5660 ],
5661 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5662
5663         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5664                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() support is available])
5665                 AC_DEFINE(FREEBSD_SENDFILE_API,1,[Whether the FreeBSD sendfile() API is available])
5666                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5667         else
5668                 AC_MSG_RESULT(no);
5669         fi
5670         ;;
5671
5672         *hpux*)
5673                 AC_CACHE_CHECK([for hpux sendfile64 support],samba_cv_HAVE_SENDFILE64,[
5674                 AC_TRY_LINK([\
5675 #include <sys/socket.h>
5676 #include <sys/uio.h>],
5677 [\
5678         int fromfd, tofd;
5679         size_t total=0;
5680         struct iovec hdtrl[2];
5681         ssize_t nwritten;
5682         off64_t offset;
5683
5684         hdtrl[0].iov_base = 0;
5685         hdtrl[0].iov_len = 0;
5686
5687         nwritten = sendfile64(tofd, fromfd, offset, total, &hdtrl[0], 0);
5688 ],
5689 samba_cv_HAVE_SENDFILE64=yes,samba_cv_HAVE_SENDFILE64=no)])
5690         if test x"$samba_cv_HAVE_SENDFILE64" = x"yes"; then
5691                 AC_DEFINE(HAVE_SENDFILE64,1,[Whether sendfile64() is available])
5692                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5693                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5694         else
5695                 AC_MSG_RESULT(no);
5696         fi
5697
5698                 AC_CACHE_CHECK([for hpux sendfile support],samba_cv_HAVE_SENDFILE,[
5699                 AC_TRY_LINK([\
5700 #include <sys/socket.h>
5701 #include <sys/uio.h>],
5702 [\
5703         int fromfd, tofd;
5704         size_t total=0;
5705         struct iovec hdtrl[2];
5706         ssize_t nwritten;
5707         off_t offset;
5708
5709         hdtrl[0].iov_base = 0;
5710         hdtrl[0].iov_len = 0;
5711
5712         nwritten = sendfile(tofd, fromfd, offset, total, &hdtrl[0], 0);
5713 ],
5714 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5715         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5716                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5717                 AC_DEFINE(HPUX_SENDFILE_API,1,[Whether the hpux sendfile() API is available])
5718                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5719         else
5720                 AC_MSG_RESULT(no);
5721         fi
5722         ;;
5723
5724         *solaris*)
5725                 AC_CHECK_LIB(sendfile,sendfilev)
5726                 AC_CACHE_CHECK([for solaris sendfilev64 support],samba_cv_HAVE_SENDFILEV64,[
5727                 AC_TRY_LINK([\
5728 #include <sys/sendfile.h>],
5729 [\
5730         int sfvcnt;
5731         size_t xferred;
5732         struct sendfilevec vec[2];
5733         ssize_t nwritten;
5734         int tofd;
5735
5736         sfvcnt = 2;
5737
5738         vec[0].sfv_fd = SFV_FD_SELF;
5739         vec[0].sfv_flag = 0;
5740         vec[0].sfv_off = 0;
5741         vec[0].sfv_len = 0;
5742
5743         vec[1].sfv_fd = 0;
5744         vec[1].sfv_flag = 0;
5745         vec[1].sfv_off = 0;
5746         vec[1].sfv_len = 0;
5747         nwritten = sendfilev64(tofd, vec, sfvcnt, &xferred);
5748 ],
5749 samba_cv_HAVE_SENDFILEV64=yes,samba_cv_HAVE_SENDFILEV64=no)])
5750
5751         if test x"$samba_cv_HAVE_SENDFILEV64" = x"yes"; then
5752                 AC_DEFINE(HAVE_SENDFILEV64,1,[Whether sendfilev64() is available])
5753                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the soloris sendfile() API is available])
5754                 AC_DEFINE(WITH_SENDFILE,1,[Whether sendfile() support should be included])
5755         else
5756                 AC_MSG_RESULT(no);
5757         fi
5758
5759                 AC_CACHE_CHECK([for solaris sendfilev support],samba_cv_HAVE_SENDFILEV,[
5760                 AC_TRY_LINK([\
5761 #include <sys/sendfile.h>],
5762 [\
5763         int sfvcnt;
5764         size_t xferred;
5765         struct sendfilevec vec[2];
5766         ssize_t nwritten;
5767         int tofd;
5768
5769         sfvcnt = 2;
5770
5771         vec[0].sfv_fd = SFV_FD_SELF;
5772         vec[0].sfv_flag = 0;
5773         vec[0].sfv_off = 0;
5774         vec[0].sfv_len = 0;
5775
5776         vec[1].sfv_fd = 0;
5777         vec[1].sfv_flag = 0;
5778         vec[1].sfv_off = 0;
5779         vec[1].sfv_len = 0;
5780         nwritten = sendfilev(tofd, vec, sfvcnt, &xferred);
5781 ],
5782 samba_cv_HAVE_SENDFILEV=yes,samba_cv_HAVE_SENDFILEV=no)])
5783
5784         if test x"$samba_cv_HAVE_SENDFILEV" = x"yes"; then
5785                 AC_DEFINE(HAVE_SENDFILEV,1,[Whether sendfilev() is available])
5786                 AC_DEFINE(SOLARIS_SENDFILE_API,1,[Whether the solaris sendfile() API is available])
5787                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5788         else
5789                 AC_MSG_RESULT(no);
5790         fi
5791         ;;
5792         *aix*)
5793                 AC_CACHE_CHECK([for AIX send_file support],samba_cv_HAVE_SENDFILE,[
5794                 AC_TRY_LINK([\
5795 #include <sys/socket.h>],
5796 [\
5797         int fromfd, tofd;
5798         size_t total=0;
5799         struct sf_parms hdtrl;
5800         ssize_t nwritten;
5801         off64_t offset;
5802
5803         hdtrl.header_data = 0;
5804         hdtrl.header_length = 0;
5805         hdtrl.file_descriptor = fromfd;
5806         hdtrl.file_offset = 0;
5807         hdtrl.file_bytes = 0;
5808         hdtrl.trailer_data = 0;
5809         hdtrl.trailer_length = 0;
5810
5811         nwritten = send_file(&tofd, &hdtrl, 0);
5812 ],
5813 samba_cv_HAVE_SENDFILE=yes,samba_cv_HAVE_SENDFILE=no)])
5814         if test x"$samba_cv_HAVE_SENDFILE" = x"yes"; then
5815                 AC_DEFINE(HAVE_SENDFILE,1,[Whether sendfile() is available])
5816                 AC_DEFINE(AIX_SENDFILE_API,1,[Whether the AIX send_file() API is available])
5817                 AC_DEFINE(WITH_SENDFILE,1,[Whether to include sendfile() support])
5818         else
5819                 AC_MSG_RESULT(no);
5820         fi
5821         ;;
5822         *)
5823         ;;
5824         esac
5825         ;;
5826   *)
5827     AC_MSG_RESULT(no)
5828     ;;
5829   esac ],
5830   AC_MSG_RESULT(yes)
5831 )
5832
5833 ############################################
5834 # See if we have the Linux readahead syscall.
5835
5836 AC_CACHE_CHECK([for Linux readahead],
5837                 samba_cv_HAVE_LINUX_READAHEAD,[
5838     AC_TRY_LINK([
5839 #if defined(HAVE_UNISTD_H)
5840 #include <unistd.h>
5841 #endif
5842 #include <fcntl.h>],
5843     [ssize_t err = readahead(0,0,0x80000);],
5844     samba_cv_HAVE_LINUX_READAHEAD=yes,
5845     samba_cv_HAVE_LINUX_READAHEAD=no)])
5846
5847 if test x"$samba_cv_HAVE_LINUX_READAHEAD" = x"yes"; then
5848   AC_DEFINE(HAVE_LINUX_READAHEAD,1,
5849              [Whether Linux readahead is available])
5850 fi
5851
5852 AC_HAVE_DECL(readahead, [#include <fcntl.h>])
5853
5854 ############################################
5855 # See if we have the posix_fadvise syscall.
5856
5857 AC_CACHE_CHECK([for posix_fadvise],
5858                 samba_cv_HAVE_POSIX_FADVISE,[
5859     AC_TRY_LINK([
5860 #if defined(HAVE_UNISTD_H)
5861 #include <unistd.h>
5862 #endif
5863 #include <fcntl.h>],
5864     [ssize_t err = posix_fadvise(0,0,0x80000,POSIX_FADV_WILLNEED);],
5865     samba_cv_HAVE_POSIX_FADVISE=yes,
5866     samba_cv_HAVE_POSIX_FADVISE=no)])
5867
5868 if test x"$samba_cv_HAVE_POSIX_FADVISE" = x"yes"; then
5869   AC_DEFINE(HAVE_POSIX_FADVISE,1,
5870              [Whether posix_fadvise is available])
5871 fi
5872
5873 ############################################
5874 # See if we have the Linux splice syscall.
5875
5876 case "$host_os" in
5877 *linux*)
5878 AC_CACHE_CHECK([for Linux splice],
5879                 samba_cv_HAVE_LINUX_SPLICE,[
5880     AC_TRY_LINK([
5881 #if defined(HAVE_UNISTD_H)
5882 #include <unistd.h>
5883 #endif
5884 #include <fcntl.h>],
5885     [long ret = splice(0,0,1,0,400,0);],
5886     samba_cv_HAVE_LINUX_SPLICE=yes,
5887     samba_cv_HAVE_LINUX_SPLICE=no)])
5888 ;;
5889 *)
5890 samba_cv_HAVE_LINUX_SPLICE=no
5891 ;;
5892 esac
5893
5894 if test x"$samba_cv_HAVE_LINUX_SPLICE" = x"yes"; then
5895   AC_DEFINE(HAVE_LINUX_SPLICE,1,
5896              [Whether Linux splice is available])
5897 fi
5898
5899 AC_HAVE_DECL(splice, [#include <fcntl.h>])
5900
5901 ############################################
5902 # See if we have the a broken readlink syscall.
5903
5904 AC_CACHE_CHECK([for a broken readlink syscall],samba_cv_HAVE_BROKEN_READLINK,[
5905 AC_TRY_RUN([#include "${srcdir-.}/../tests/readlink.c"],
5906         samba_cv_HAVE_BROKEN_READLINK=no,samba_cv_HAVE_BROKEN_READLINK=yes,samba_cv_HAVE_BROKEN_READLINK=cross)
5907 ])
5908 if test x"$samba_cv_HAVE_BROKEN_READLINK" = x"yes"; then
5909         AC_DEFINE(HAVE_BROKEN_READLINK,1,[Whether the readlink syscall is broken])
5910 fi
5911
5912 #################################################
5913 # Check whether winbind is supported on this platform.  If so we need to
5914 # build and install client programs, sbin programs and shared libraries
5915
5916 AC_MSG_CHECKING(whether to build winbind)
5917
5918 # Initially, the value of $host_os decides whether winbind is supported
5919
5920 HAVE_WINBIND=yes
5921 HAVE_WBCLIENT=no
5922
5923 # Define external wbclient library to link against.  This disables winbind.
5924 # We define this here so --with-winbind can override it.
5925 AC_ARG_WITH(wbclient,
5926 [AS_HELP_STRING([--with-wbclient], [Use external wbclient (optional)])],
5927 [
5928   case "$withval" in
5929         no)
5930                 HAVE_WBCLIENT=no
5931                 ;;
5932         yes)
5933                 HAVE_WBCLIENT=yes
5934                 HAVE_WINBIND=no
5935                 ;;
5936         *)
5937                 HAVE_WBCLIENT=yes
5938                 HAVE_WINBIND=no
5939                 WBCLIENT_INCLUDES="-I$withval/include"
5940                 WBCLIENT_LDFLAGS="-L$withval/lib"
5941                 ;;
5942   esac ],
5943 )
5944
5945 AC_SUBST(WBCLIENT_INCLUDES)
5946 AC_SUBST(WBCLIENT_LDFLAGS)
5947 AC_SUBST(WBCLIENT_LIBS)
5948
5949
5950 # Define the winbind shared library name and any specific linker flags
5951 # it needs to be built with.
5952
5953 WINBIND_NSS="../nsswitch/libnss_winbind.$SHLIBEXT"
5954 WINBIND_WINS_NSS="../nsswitch/libnss_wins.$SHLIBEXT"
5955 WINBIND_NSS_LDSHFLAGS=$LDSHFLAGS
5956 NSSSONAMEVERSIONSUFFIX=""
5957
5958 case "$host_os" in
5959         *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
5960                 NSSSONAMEVERSIONSUFFIX=".2"
5961                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_linux.o"
5962                 ;;
5963         *freebsd[[5-9]]*)
5964                 # FreeBSD winbind client is implemented as a wrapper around
5965                 # the Linux version.
5966                 NSSSONAMEVERSIONSUFFIX=".1"
5967                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_freebsd.o \
5968                     ../nsswitch/winbind_nss_linux.o"
5969                 WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5970                 WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5971                 ;;
5972
5973         *netbsd*[[3-9]]*)
5974                 # NetBSD winbind client is implemented as a wrapper
5975                 # around the Linux version. It needs getpwent_r() to
5976                 # indicate libc's use of the correct nsdispatch API.
5977                 #
5978                 if test x"$ac_cv_func_getpwent_r" = x"yes"; then
5979                         WINBIND_NSS_EXTRA_OBJS="\
5980                             ../nsswitch/winbind_nss_netbsd.o \
5981                             ../nsswitch/winbind_nss_linux.o"
5982                         WINBIND_NSS="../nsswitch/nss_winbind.$SHLIBEXT"
5983                         WINBIND_WINS_NSS="../nsswitch/nss_wins.$SHLIBEXT"
5984                 else
5985                         HAVE_WINBIND=no
5986                         winbind_no_reason=", getpwent_r is missing on $host_os so winbind is unsupported"
5987                 fi
5988                 ;;
5989         *irix*)
5990                 # IRIX has differently named shared libraries
5991                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_irix.o"
5992                 WINBIND_NSS="../nsswitch/libns_winbind.$SHLIBEXT"
5993                 WINBIND_WINS_NSS="../nsswitch/libns_wins.$SHLIBEXT"
5994                 ;;
5995         *solaris*)
5996                 # Solaris winbind client is implemented as a wrapper around
5997                 # the Linux version.
5998                 NSSSONAMEVERSIONSUFFIX=".1"
5999                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o \
6000                     ../nsswitch/winbind_nss_linux.o"
6001                 ;;
6002         *hpux11*)
6003                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_solaris.o"
6004                 ;;
6005         *aix*)
6006                 # AIX has even differently named shared libraries.  No
6007                 # WINS support has been implemented yet.
6008                 WINBIND_NSS_EXTRA_OBJS="../nsswitch/winbind_nss_aix.o"
6009                 WINBIND_NSS_LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-ewb_aix_init"
6010                 WINBIND_NSS="../nsswitch/WINBIND"
6011                 WINBIND_WINS_NSS=""
6012                 ;;
6013         *)
6014                 HAVE_WINBIND=no
6015                 winbind_no_reason=", unsupported on $host_os"
6016                 ;;
6017 esac
6018
6019 # Check the setting of --with-winbind
6020
6021 AC_ARG_WITH(winbind,
6022 [AS_HELP_STRING([--with-winbind], [Build winbind (default, if supported by OS)])],
6023 [
6024   case "$withval" in
6025         yes)
6026                 HAVE_WINBIND=yes
6027                 HAVE_WBCLIENT=no
6028                 ;;
6029         no)
6030                 HAVE_WINBIND=no
6031                 winbind_reason=""
6032                 ;;
6033   esac ],
6034 )
6035
6036 # We need unix domain sockets for winbind
6037
6038 if test x"$HAVE_WINBIND" = x"yes"; then
6039         if test x"$libreplace_cv_HAVE_UNIXSOCKET" = x"no"; then
6040                 winbind_no_reason=", no unix domain socket support on $host_os"
6041                 HAVE_WINBIND=no
6042         fi
6043 fi
6044
6045 # Display test results
6046
6047 if test x"$HAVE_WINBIND" = x"no"; then
6048         WINBIND_NSS=""
6049         WINBIND_WINS_NSS=""
6050 fi
6051 if test x"$HAVE_WBCLIENT" = x"yes"; then
6052         AC_CHECK_LIB(wbclient, wbcInterfaceDetails,
6053                      [LIBWBCLIENT_LIBS="-lwbclient"], AC_MSG_ERROR([Could not find wbclient]), [$WBCLIENT_LDFLAGS])
6054         LIBWBCLIENT_LIBS="$LIBWBCLIENT_LIBS $WBCLIENT_LDFLAGS"
6055         AC_MSG_RESULT(yes)
6056         AC_DEFINE(WITH_WINBIND,1,[Whether to link to wbclient])
6057         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6058 else
6059         if test x"$enable_developer" = x"yes" -a x"$LINK_LIBWBCLIENT" = x"STATIC" ; then
6060                 BUILD_LIBWBCLIENT_SHARED=no
6061         else
6062                 BUILD_LIBWBCLIENT_SHARED=yes
6063         fi
6064
6065         LIBWBCLIENT_SHARED_TARGET=bin/libwbclient.$SHLIBEXT
6066         LIBWBCLIENT_STATIC_TARGET=bin/libwbclient.a
6067         LIBWBCLIENT_SOVER=0
6068         if test $BLDSHARED = true -a x"$HAVE_WINBIND" = x"yes" -a x"$BUILD_LIBWBCLIENT_SHARED" = x"yes"; then
6069                 NSS_MODULES="${WINBIND_NSS} ${WINBIND_WINS_NSS}"
6070                 ## Only worry about libwbclient if we have shared
6071                 # library support
6072                 LIBWBCLIENT_SHARED=$LIBWBCLIENT_SHARED_TARGET
6073                 LIBWBCLIENT=libwbclient
6074                 INSTALL_LIBWBCLIENT=installlibwbclient
6075                 UNINSTALL_LIBWBCLIENT=uninstalllibwbclient
6076                 LIBWBCLIENT_LIBS="-lwbclient"
6077         else
6078                 LIBWBCLIENT_STATIC=$LIBWBCLIENT_STATIC_TARGET
6079                 LIBWBCLIENT_LIBS=$LIBWBCLIENT_STATIC_TARGET
6080         fi
6081 fi
6082
6083 if test x"$HAVE_WINBIND" = x"yes"; then
6084         AC_MSG_RESULT(yes)
6085         AC_DEFINE(WITH_WINBIND,1,[Whether to build winbind])
6086
6087         EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/wbinfo\$(EXEEXT)"
6088         EXTRA_SBIN_PROGS="$EXTRA_SBIN_PROGS bin/winbindd\$(EXEEXT)"
6089         if test $BLDSHARED = true -a x"$create_pam_modules" = x"yes"; then
6090                 PAM_MODULES="$PAM_MODULES pam_winbind"
6091                 INSTALL_PAM_MODULES="installpammodules"
6092                 UNINSTALL_PAM_MODULES="uninstallpammodules"
6093         fi
6094 else
6095         AC_MSG_RESULT(no$winbind_no_reason)
6096 fi
6097
6098 AC_SUBST(WINBIND_NSS)
6099 AC_SUBST(WINBIND_WINS_NSS)
6100 AC_SUBST(WINBIND_NSS_LDSHFLAGS)
6101 AC_SUBST(WINBIND_NSS_EXTRA_OBJS)
6102 AC_SUBST(NSSSONAMEVERSIONSUFFIX)
6103
6104 AC_SUBST(WINBIND_KRB5_LOCATOR)
6105
6106 # Solaris 10 does have new member in nss_XbyY_key
6107 AC_CHECK_MEMBER(union nss_XbyY_key.ipnode.af_family,
6108                 AC_DEFINE(HAVE_NSS_XBYY_KEY_IPNODE, 1, [Defined if union nss_XbyY_key has ipnode field]),,
6109                 [#include <nss_dbdefs.h>])
6110
6111 # Solaris has some extra fields in struct passwd that need to be
6112 # initialised otherwise nscd crashes.
6113
6114 AC_CHECK_MEMBER(struct passwd.pw_comment,
6115                 AC_DEFINE(HAVE_PASSWD_PW_COMMENT, 1, [Defined if struct passwd has pw_comment field]),,
6116                 [#include <pwd.h>])
6117
6118 AC_CHECK_MEMBER(struct passwd.pw_age,
6119                 AC_DEFINE(HAVE_PASSWD_PW_AGE, 1, [Defined if struct passwd has pw_age field]),,
6120                 [#include <pwd.h>])
6121
6122 # AIX 4.3.x and 5.1 do not have as many members in
6123 # struct secmethod_table as AIX 5.2
6124 AC_CHECK_MEMBERS([struct secmethod_table.method_attrlist], , ,
6125        [#include <usersec.h>])
6126 AC_CHECK_MEMBERS([struct secmethod_table.method_version], , ,
6127        [#include <usersec.h>])
6128
6129 AC_CACHE_CHECK([for SO_PEERCRED],samba_cv_HAVE_PEERCRED,[
6130 AC_TRY_COMPILE([#include <sys/types.h>
6131 #include <sys/socket.h>],
6132 [struct ucred cred;
6133  socklen_t cred_len;
6134  int ret = getsockopt(0, SOL_SOCKET, SO_PEERCRED, &cred, &cred_len);
6135 ],
6136 samba_cv_HAVE_PEERCRED=yes,samba_cv_HAVE_PEERCRED=no,samba_cv_HAVE_PEERCRED=cross)])
6137 if test x"$samba_cv_HAVE_PEERCRED" = x"yes"; then
6138     AC_DEFINE(HAVE_PEERCRED,1,[Whether we can use SO_PEERCRED to get socket credentials])
6139 fi
6140
6141
6142 #################################################
6143 # Check to see if we should use the included popt
6144
6145 AC_ARG_WITH(included-popt,
6146 [AS_HELP_STRING([--with-included-popt], [use bundled popt library, not from system])],
6147 [
6148   case "$withval" in
6149         yes)
6150                 INCLUDED_POPT=yes
6151                 ;;
6152         no)
6153                 INCLUDED_POPT=no
6154                 ;;
6155   esac ],
6156 )
6157 if test x"$INCLUDED_POPT" != x"yes"; then
6158     AC_CHECK_LIB(popt, poptGetContext,
6159                  INCLUDED_POPT=no, INCLUDED_POPT=yes)
6160 fi
6161
6162 AC_MSG_CHECKING(whether to use included popt)
6163 if test x"$INCLUDED_POPT" = x"yes"; then
6164     AC_MSG_RESULT(yes)
6165     BUILD_POPT='$(POPT_OBJ)'
6166     POPTLIBS='$(POPT_OBJ)'
6167     FLAGS1="-I\$(srcdir)/../lib/popt"
6168 else
6169     AC_MSG_RESULT(no)
6170         BUILD_POPT=""
6171     POPTLIBS="-lpopt"
6172 fi
6173 AC_SUBST(BUILD_POPT)
6174 AC_SUBST(POPTLIBS)
6175 AC_SUBST(FLAGS1)
6176
6177 #################################################
6178 # Check if user wants DNS service discovery support
6179
6180 AC_ARG_ENABLE(dnssd,
6181 [AS_HELP_STRING([--enable-dnssd], [Enable DNS service discovery support (default=no)])])
6182
6183 AC_SUBST(DNSSD_LIBS)
6184 if test x"$enable_dnssd" = x"yes"; then
6185     have_dnssd_support=yes
6186
6187     AC_CHECK_HEADERS(dns_sd.h)
6188     if test x"$ac_cv_header_dns_sd_h" != x"yes"; then
6189         have_dnssd_support=no
6190     fi
6191
6192     # On Darwin the DNSSD API is in libc, but on other platforms it's
6193     # probably in -ldns_sd
6194     AC_CHECK_FUNCS(DNSServiceRegister)
6195     AC_CHECK_LIB_EXT(dns_sd, DNSSD_LIBS, DNSServiceRegister)
6196     if test x"$ac_cv_func_DNSServiceRegister" != x"yes" -a \
6197             x"$ac_cv_lib_ext_dns_sd_DNSServiceRegister" != x"yes"; then
6198         have_dnssd_support=no
6199     fi
6200
6201     if test x"$have_dnssd_support" = x"yes"; then
6202         AC_DEFINE(WITH_DNSSD_SUPPORT, 1,
6203                 [Whether to enable DNS service discovery support])
6204     else
6205         if test x"$enable_dnssd" = x"yes"; then
6206             AC_MSG_ERROR(DNS service discovery support not available)
6207         fi
6208     fi
6209
6210 fi
6211
6212 #################################################
6213 # Check if user wants avahi support
6214
6215 AC_ARG_ENABLE(avahi,
6216 [AS_HELP_STRING([--enable-avahi], [Enable Avahi support (default=auto)])])
6217
6218 if test x"$enable_avahi" != x"no"; then
6219     have_avahi_support=yes
6220
6221     AC_CHECK_HEADERS(avahi-common/watch.h)
6222     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6223         have_avahi_support=no
6224     fi
6225
6226     AC_CHECK_HEADERS(avahi-client/client.h)
6227     if test x"$ac_cv_header_avahi_common_watch_h" != x"yes"; then
6228         have_avahi_support=no
6229     fi
6230
6231     save_LIBS="$LIBS"
6232     AC_CHECK_LIB(avahi-client, avahi_client_new,[have_avahi_client_new=yes])
6233     AC_CHECK_LIB(avahi-common, avahi_strerror,[have_avahi_strerror=yes])
6234     LIBS="$save_LIBS"
6235
6236     if test x"$have_avahi_client_new" != x"yes" -o \
6237        x"$have_avahi_strerror" != x"yes" ; then
6238         have_avahi_support=no
6239     fi
6240
6241     if test x"$have_avahi_support" = x"yes"; then
6242         AC_SUBST(AVAHI_LIBS, "-lavahi-client -lavahi-common")
6243         AC_DEFINE(WITH_AVAHI_SUPPORT, 1,
6244                 [Whether to enable avahi support])
6245         AC_SUBST(AVAHI_OBJ, "lib/avahi.o smbd/avahi_register.o")
6246     else
6247         if test x"$enable_avahi" = x"yes"; then
6248             AC_MSG_ERROR(avahi support not available)
6249         fi
6250     fi
6251 fi
6252
6253
6254 #################################################
6255 # Set pthread stuff
6256
6257 PTHREAD_CFLAGS=error
6258 PTHREAD_LDFLAGS=error
6259
6260 # If it's error, then the user didn't 
6261 # define it.
6262 if test "x$PTHREAD_LDFLAGS" = xerror; then
6263   AC_CHECK_LIB(pthread, pthread_attr_init, [
6264              PTHREAD_CFLAGS="-D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
6265              PTHREAD_LDFLAGS="-lpthread" ])
6266 fi
6267
6268 if test "x$PTHREAD_LDFLAGS" = xerror; then
6269   AC_CHECK_LIB(pthreads, pthread_attr_init, [
6270              PTHREAD_CFLAGS="-D_THREAD_SAFE"
6271              PTHREAD_LDFLAGS="-lpthreads" ])
6272 fi
6273
6274 if test "x$PTHREAD_LDFLAGS" = xerror; then
6275    AC_CHECK_LIB(c_r, pthread_attr_init, [
6276                 PTHREAD_CFLAGS="-D_THREAD_SAFE -pthread"
6277                 PTHREAD_LDFLAGS="-pthread" ])
6278 fi
6279
6280 if test "x$PTHREAD_LDFLAGS" = xerror; then
6281    AC_CHECK_FUNC(pthread_attr_init, [
6282                  PTHREAD_CFLAGS="-D_REENTRANT"
6283                  PTHREAD_LDFLAGS="-lpthread" ])
6284 fi
6285
6286 # especially for HP-UX, where the AC_CHECK_FUNC macro fails to test for
6287 # pthread_attr_init. On pthread_mutex_lock it works there...
6288 if test "x$PTHREAD_LDFLAGS" = xerror; then
6289    AC_CHECK_LIB(pthread, pthread_mutex_lock, [
6290                 PTHREAD_CFLAGS="-D_REENTRANT"
6291                 PTHREAD_LDFLAGS="-lpthread" ])
6292 fi
6293
6294 AC_SUBST(PTHREAD_CFLAGS)
6295 AC_SUBST(PTHREAD_LDFLAGS)
6296
6297 samba_cv_HAVE_PTHREAD=no
6298 if test x"$PTHREAD_CFLAGS" != xerror -a x"$PTHREAD_LDFLAGS" != xerror; then
6299         samba_cv_HAVE_PTHREAD=yes
6300         # now check for pthread.h with pthread-correct CFLAGS and LDFLAGS:
6301         ac_save_CFLAGS=$CFLAGS
6302         CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6303         ac_save_LDFLAGS=$LDFLAGS
6304         LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
6305         AC_CHECK_HEADERS(pthread.h)
6306         CFLAGS=$ac_save_CFLAGS
6307         LDFLAGS=$ac_save_LDFLAGS
6308         AC_DEFINE(HAVE_PTHREAD, 1, [Do we have pthreads around?])
6309 fi
6310
6311 #################################################
6312 # Check if user wants pthreadpool support
6313
6314 AC_ARG_ENABLE(pthreadpool,
6315 [AS_HELP_STRING([--enable-pthreadpool], [Enable pthreads pool helper support (default=no)])])
6316
6317 if test x"$enable_pthreadpool" = xyes -a x"$samba_cv_HAVE_PTHREAD" != x"yes"; then
6318         AC_MSG_ERROR([pthreadpool support cannot be enabled when pthread support was not found])
6319 fi
6320
6321 if test x"$enable_pthreadpool" = x"yes" -a x"$samba_cv_HAVE_PTHREAD" = x"yes"; then
6322     LIBS="$LIBS $PTHREAD_LDFLAGS"
6323     CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
6324     AC_DEFINE(WITH_PTHREADPOOL, 1, [Whether to include pthreadpool helpers])
6325     AC_SUBST(PTHREADPOOL_OBJ, "lib/pthreadpool.o")
6326 fi
6327
6328 #################################################
6329 # Check to see if we should use the included iniparser
6330
6331 AC_ARG_WITH(included-iniparser,
6332 [AS_HELP_STRING([--with-included-iniparser], [use bundled iniparser library, not from system])],
6333 [
6334   case "$withval" in
6335         yes)
6336                 INCLUDED_INIPARSER=yes
6337                 ;;
6338         no)
6339                 INCLUDED_INIPARSER=no
6340                 ;;
6341   esac ],
6342 )
6343 if test x"$INCLUDED_INIPARSER" != x"yes"; then
6344     AC_CHECK_LIB(iniparser, iniparser_load,
6345                  INCLUDED_INIPARSER=no, INCLUDED_INIPARSER=yes)
6346 fi
6347
6348 AC_MSG_CHECKING(whether to use included iniparser)
6349 if test x"$INCLUDED_INIPARSER" = x"yes"; then
6350     AC_MSG_RESULT(yes)
6351     BUILD_INIPARSER='$(INIPARSER_OBJ)'
6352         INIPARSERLIBS=""
6353     FLAGS1="$FLAGS1 -I\$(srcdir)/../lib/iniparser/src"
6354 else
6355     AC_MSG_RESULT(no)
6356         BUILD_INIPARSER=""
6357     INIPARSERLIBS="-liniparser"
6358 fi
6359 AC_SUBST(BUILD_INIPARSER)
6360 AC_SUBST(INIPARSERLIBS)
6361 AC_SUBST(FLAGS1)
6362
6363
6364
6365 # Checks for the vfs_fileid module
6366 # Start
6367 AC_CHECK_FUNC(getmntent)
6368
6369 AC_CHECK_HEADERS(sys/statfs.h)
6370
6371 AC_MSG_CHECKING([vfs_fileid: checking for statfs() and struct statfs.f_fsid)])
6372 AC_CACHE_VAL(vfsfileid_cv_statfs,[
6373              AC_TRY_RUN([
6374                 #include <sys/types.h>
6375                 #include <sys/statfs.h>
6376                 int main(void)
6377                 {
6378                         struct statfs fsd;
6379                         fsid_t fsid = fsd.f_fsid;
6380                         return statfs (".", &fsd);
6381                 }],
6382                 vfsfileid_cv_statfs=yes,
6383                 vfsfileid_cv_statfs=no,
6384                 vfsfileid_cv_statfs=cross)
6385 ])
6386 AC_MSG_RESULT($vfsfileid_cv_statfs)
6387
6388 if test x"$ac_cv_func_getmntent" = x"yes" -a \
6389         x"$vfsfileid_cv_statfs" = x"yes"; then
6390         default_shared_modules="$default_shared_modules vfs_fileid"
6391 fi
6392 # End
6393 # Checks for the vfs_fileid module
6394
6395
6396 for i in `echo $default_static_modules | sed -e 's/,/ /g'`
6397 do
6398         eval MODULE_DEFAULT_$i=STATIC
6399 done
6400
6401 for i in `echo $default_shared_modules | sed -e 's/,/ /g'`
6402 do
6403         dnl Fall back to static if we cannot build shared libraries
6404         eval MODULE_DEFAULT_$i=STATIC
6405
6406         if test $BLDSHARED = true; then
6407                 eval MODULE_DEFAULT_$i=SHARED
6408         fi
6409 done
6410
6411 dnl Always build these modules static
6412 MODULE_rpc_spoolss=STATIC
6413 MODULE_rpc_srvsvc=STATIC
6414 MODULE_idmap_tdb=STATIC
6415 MODULE_idmap_passdb=STATIC
6416 MODULE_idmap_nss=STATIC
6417
6418 MODULE_nss_info_template=STATIC
6419
6420 AC_ARG_WITH(static-modules,
6421 [AS_HELP_STRING([--with-static-modules=MODULES], [Comma-separated list of names of modules to statically link in])],
6422 [ if test $withval; then
6423         for i in `echo $withval | sed -e 's/,/ /g'`
6424         do
6425                 eval MODULE_$i=STATIC
6426         done
6427 fi ])
6428
6429 AC_ARG_WITH(shared-modules,
6430 [AS_HELP_STRING([--with-shared-modules=MODULES], [Comma-separated list of names of modules to build shared])],
6431 [ if test $withval; then
6432         for i in `echo $withval | sed -e 's/,/ /g'`
6433         do
6434                         eval MODULE_$i=SHARED
6435         done
6436 fi ])
6437
6438 if test x"$MODULE_DEFAULT_vfs_notify_fam" = xSTATIC -o \
6439                 x"$MODULE_vfs_notify_fam" = xSTATIC ; then
6440         SMBD_FAM_LIBS="$SMB_FAM_LIBS"
6441         AC_SUBST(SMBD_FAM_LIBS)
6442 fi
6443
6444 SMB_MODULE(pdb_ldap, passdb/pdb_ldap.o passdb/pdb_nds.o, "bin/ldapsam.$SHLIBEXT", PDB,
6445                    [ PASSDB_LIBS="$PASSDB_LIBS $LDAP_LIBS" ] )
6446 SMB_MODULE(pdb_ads, passdb/pdb_ads.o \$(TLDAP_OBJ), "bin/ads.$SHLIBEXT", PDB)
6447 SMB_MODULE(pdb_smbpasswd, passdb/pdb_smbpasswd.o, "bin/smbpasswd.$SHLIBEXT", PDB)
6448 SMB_MODULE(pdb_tdbsam, passdb/pdb_tdb.o, "bin/tdbsam.$SHLIBEXT", PDB)
6449 SMB_MODULE(pdb_wbc_sam, passdb/pdb_wbc_sam.o, "bin/wbc_sam.$SHLIBEXT", PDB)
6450 SMB_SUBSYSTEM(PDB,passdb/pdb_interface.o)
6451
6452
6453 SMB_MODULE(rpc_lsarpc, \$(RPC_LSA_OBJ), "bin/librpc_lsarpc.$SHLIBEXT", RPC)
6454 SMB_MODULE(rpc_winreg, \$(RPC_REG_OBJ), "bin/librpc_winreg.$SHLIBEXT", RPC)
6455 SMB_MODULE(rpc_initshutdown, \$(RPC_INITSHUTDOWN_OBJ), "bin/librpc_initshutdown.$SHLIBEXT", RPC)
6456 SMB_MODULE(rpc_dssetup, \$(RPC_DSSETUP_OBJ), "bin/librpc_dssetup.$SHLIBEXT", RPC)
6457 SMB_MODULE(rpc_wkssvc, \$(RPC_WKS_OBJ), "bin/librpc_wkssvc.$SHLIBEXT", RPC)
6458 SMB_MODULE(rpc_svcctl, \$(RPC_SVCCTL_OBJ), "bin/librpc_svcctl.$SHLIBEXT", RPC)
6459 SMB_MODULE(rpc_ntsvcs, \$(RPC_NTSVCS_OBJ), "bin/librpc_ntsvcs.$SHLIBEXT", RPC)
6460 SMB_MODULE(rpc_netlogon, \$(RPC_NETLOG_OBJ), "bin/librpc_NETLOGON.$SHLIBEXT", RPC)
6461 SMB_MODULE(rpc_netdfs, \$(RPC_DFS_OBJ), "bin/librpc_netdfs.$SHLIBEXT", RPC)
6462 SMB_MODULE(rpc_srvsvc, \$(RPC_SVC_OBJ), "bin/librpc_svcsvc.$SHLIBEXT", RPC)
6463 SMB_MODULE(rpc_spoolss, \$(RPC_SPOOLSS_OBJ), "bin/librpc_spoolss.$SHLIBEXT", RPC)
6464 SMB_MODULE(rpc_eventlog, \$(RPC_EVENTLOG_OBJ), "bin/librpc_eventlog.$SHLIBEXT", RPC)
6465 SMB_MODULE(rpc_samr, \$(RPC_SAMR_OBJ), "bin/librpc_samr.$SHLIBEXT", RPC)
6466 SMB_MODULE(rpc_rpcecho, \$(RPC_ECHO_OBJ), "bin/librpc_rpcecho.$SHLIBEXT", RPC)
6467 SMB_SUBSYSTEM(RPC,smbd/process.o)
6468
6469 SMB_MODULE(idmap_ldap, winbindd/idmap_ldap.o, "bin/ldap.$SHLIBEXT", IDMAP)
6470 SMB_MODULE(idmap_tdb, winbindd/idmap_tdb.o, "bin/tdb.$SHLIBEXT", IDMAP)
6471 SMB_MODULE(idmap_tdb2, winbindd/idmap_tdb2.o, "bin/tdb2.$SHLIBEXT", IDMAP)
6472 SMB_MODULE(idmap_passdb, winbindd/idmap_passdb.o, "bin/passdb.$SHLIBEXT", IDMAP)
6473 SMB_MODULE(idmap_nss, winbindd/idmap_nss.o, "bin/nss.$SHLIBEXT", IDMAP)
6474 SMB_MODULE(idmap_rid, winbindd/idmap_rid.o, "bin/rid.$SHLIBEXT", IDMAP)
6475 SMB_MODULE(idmap_ad, winbindd/idmap_ad.o, "bin/ad.$SHLIBEXT", IDMAP)
6476 SMB_MODULE(idmap_hash, \$(IDMAP_HASH_OBJ), "bin/hash.$SHLIBEXT", IDMAP)
6477 SMB_MODULE(idmap_adex, \$(IDMAP_ADEX_OBJ), "bin/adex.$SHLIBEXT", IDMAP)
6478 SMB_SUBSYSTEM(IDMAP, winbindd/idmap.o)
6479
6480 SMB_MODULE(nss_info_template, winbindd/nss_info_template.o, "bin/template.$SHLIBEXT", NSS_INFO)
6481 SMB_SUBSYSTEM(NSS_INFO, winbindd/nss_info.o)
6482
6483 SMB_MODULE(charset_weird, modules/weird.o, "bin/weird.$SHLIBEXT", CHARSET)
6484 SMB_MODULE(charset_CP850, modules/CP850.o, "bin/CP850.$SHLIBEXT", CHARSET)
6485 SMB_MODULE(charset_CP437, modules/CP437.o, "bin/CP437.$SHLIBEXT", CHARSET)
6486 SMB_MODULE(charset_macosxfs, modules/charset_macosxfs.o,"bin/macosxfs.$SHLIBEXT", CHARSET)
6487 SMB_SUBSYSTEM(CHARSET,lib/iconv.o)
6488
6489 SMB_MODULE(auth_sam, \$(AUTH_SAM_OBJ), "bin/sam.$SHLIBEXT", AUTH)
6490 SMB_MODULE(auth_unix, \$(AUTH_UNIX_OBJ), "bin/unix.$SHLIBEXT", AUTH)
6491 SMB_MODULE(auth_winbind, \$(AUTH_WINBIND_OBJ), "bin/winbind.$SHLIBEXT", AUTH)
6492 SMB_MODULE(auth_wbc, \$(AUTH_WBC_OBJ), "bin/wbc.$SHLIBEXT", AUTH)
6493 SMB_MODULE(auth_server, \$(AUTH_SERVER_OBJ), "bin/smbserver.$SHLIBEXT", AUTH)
6494 SMB_MODULE(auth_domain, \$(AUTH_DOMAIN_OBJ), "bin/domain.$SHLIBEXT", AUTH)
6495 SMB_MODULE(auth_builtin, \$(AUTH_BUILTIN_OBJ), "bin/builtin.$SHLIBEXT", AUTH)
6496 SMB_MODULE(auth_script, \$(AUTH_SCRIPT_OBJ), "bin/script.$SHLIBEXT", AUTH)
6497 SMB_MODULE(auth_netlogond, \$(AUTH_NETLOGOND_OBJ), "bin/netlogond.$SHLIBEXT", AUTH)
6498 SMB_SUBSYSTEM(AUTH,auth/auth.o)
6499
6500 SMB_MODULE(vfs_default, \$(VFS_DEFAULT_OBJ), "bin/default.$SHLIBEXT", VFS)
6501 SMB_MODULE(vfs_recycle, \$(VFS_RECYCLE_OBJ), "bin/recycle.$SHLIBEXT", VFS)
6502 SMB_MODULE(vfs_audit, \$(VFS_AUDIT_OBJ), "bin/audit.$SHLIBEXT", VFS)
6503 SMB_MODULE(vfs_extd_audit, \$(VFS_EXTD_AUDIT_OBJ), "bin/extd_audit.$SHLIBEXT", VFS)
6504 SMB_MODULE(vfs_full_audit, \$(VFS_FULL_AUDIT_OBJ), "bin/full_audit.$SHLIBEXT", VFS)
6505 SMB_MODULE(vfs_netatalk, \$(VFS_NETATALK_OBJ), "bin/netatalk.$SHLIBEXT", VFS)
6506 SMB_MODULE(vfs_fake_perms, \$(VFS_FAKE_PERMS_OBJ), "bin/fake_perms.$SHLIBEXT", VFS)
6507 SMB_MODULE(vfs_default_quota, \$(VFS_DEFAULT_QUOTA_OBJ), "bin/default_quota.$SHLIBEXT", VFS)
6508 SMB_MODULE(vfs_readonly, \$(VFS_READONLY_OBJ), "bin/readonly.$SHLIBEXT", VFS)
6509 SMB_MODULE(vfs_cap, \$(VFS_CAP_OBJ), "bin/cap.$SHLIBEXT", VFS)
6510 SMB_MODULE(vfs_expand_msdfs, \$(VFS_EXPAND_MSDFS_OBJ), "bin/expand_msdfs.$SHLIBEXT", VFS)
6511 SMB_MODULE(vfs_shadow_copy, \$(VFS_SHADOW_COPY_OBJ), "bin/shadow_copy.$SHLIBEXT", VFS)
6512 SMB_MODULE(vfs_shadow_copy2, \$(VFS_SHADOW_COPY2_OBJ), "bin/shadow_copy2.$SHLIBEXT", VFS)
6513 SMB_MODULE(vfs_afsacl, \$(VFS_AFSACL_OBJ), "bin/afsacl.$SHLIBEXT", VFS)
6514 SMB_MODULE(vfs_xattr_tdb, \$(VFS_XATTR_TDB_OBJ), "bin/xattr_tdb.$SHLIBEXT", VFS)
6515 SMB_MODULE(vfs_posixacl, \$(VFS_POSIXACL_OBJ), "bin/posixacl.$SHLIBEXT", VFS)
6516 SMB_MODULE(vfs_aixacl, \$(VFS_AIXACL_OBJ), "bin/aixacl.$SHLIBEXT", VFS)
6517 SMB_MODULE(vfs_aixacl2, \$(VFS_AIXACL2_OBJ), "bin/aixacl2.$SHLIBEXT", VFS)
6518 SMB_MODULE(vfs_solarisacl, \$(VFS_SOLARISACL_OBJ), "bin/solarisacl.$SHLIBEXT", VFS)
6519 SMB_MODULE(vfs_irixacl, \$(VFS_IRIXACL_OBJ), "bin/irixacl.$SHLIBEXT", VFS)
6520 SMB_MODULE(vfs_hpuxacl, \$(VFS_HPUXACL_OBJ), "bin/hpuxacl.$SHLIBEXT", VFS)
6521 SMB_MODULE(vfs_tru64acl, \$(VFS_TRU64ACL_OBJ), "bin/tru64acl.$SHLIBEXT", VFS)
6522 SMB_MODULE(vfs_catia, \$(VFS_CATIA_OBJ), "bin/catia.$SHLIBEXT", VFS)
6523 SMB_MODULE(vfs_streams_xattr, \$(VFS_STREAMS_XATTR_OBJ), "bin/streams_xattr.$SHLIBEXT", VFS)
6524 SMB_MODULE(vfs_streams_depot, \$(VFS_STREAMS_DEPOT_OBJ), "bin/streams_depot.$SHLIBEXT", VFS)
6525 SMB_MODULE(vfs_cacheprime, \$(VFS_CACHEPRIME_OBJ), "bin/cacheprime.$SHLIBEXT", VFS)
6526 SMB_MODULE(vfs_prealloc, \$(VFS_PREALLOC_OBJ), "bin/prealloc.$SHLIBEXT", VFS)
6527 SMB_MODULE(vfs_commit, \$(VFS_COMMIT_OBJ), "bin/commit.$SHLIBEXT", VFS)
6528 SMB_MODULE(vfs_gpfs, \$(VFS_GPFS_OBJ), "bin/gpfs.$SHLIBEXT", VFS)
6529 SMB_MODULE(vfs_readahead, \$(VFS_READAHEAD_OBJ), "bin/readahead.$SHLIBEXT", VFS)
6530 SMB_MODULE(vfs_tsmsm, \$(VFS_TSMSM_OBJ), "bin/tsmsm.$SHLIBEXT", VFS)
6531 SMB_MODULE(vfs_fileid, \$(VFS_FILEID_OBJ), "bin/fileid.$SHLIBEXT", VFS)
6532 SMB_MODULE(vfs_aio_fork, \$(VFS_AIO_FORK_OBJ), "bin/aio_fork.$SHLIBEXT", VFS)
6533 SMB_MODULE(vfs_preopen, \$(VFS_PREOPEN_OBJ), "bin/preopen.$SHLIBEXT", VFS)
6534 SMB_MODULE(vfs_syncops, \$(VFS_SYNCOPS_OBJ), "bin/syncops.$SHLIBEXT", VFS)
6535 SMB_MODULE(vfs_zfsacl, \$(VFS_ZFSACL_OBJ), "bin/zfsacl.$SHLIBEXT", VFS)
6536 SMB_MODULE(vfs_notify_fam, \$(VFS_NOTIFY_FAM_OBJ), "bin/notify_fam.$SHLIBEXT", VFS)
6537 SMB_MODULE(vfs_acl_xattr, \$(VFS_ACL_XATTR_OBJ), "bin/acl_xattr.$SHLIBEXT", VFS)
6538 SMB_MODULE(vfs_acl_tdb, \$(VFS_ACL_TDB_OBJ), "bin/acl_tdb.$SHLIBEXT", VFS)
6539 SMB_MODULE(vfs_smb_traffic_analyzer, \$(VFS_SMB_TRAFFIC_ANALYZER_OBJ), "bin/smb_traffic_analyzer.$SHLIBEXT", VFS)
6540 SMB_MODULE(vfs_onefs, \$(VFS_ONEFS), "bin/onefs.$SHLIBEXT", VFS)
6541 SMB_MODULE(vfs_onefs_shadow_copy, \$(VFS_ONEFS_SHADOW_COPY), "bin/onefs_shadow_copy.$SHLIBEXT", VFS)
6542 SMB_MODULE(vfs_dirsort, \$(VFS_DIRSORT_OBJ), "bin/dirsort.$SHLIBEXT", VFS)
6543 SMB_MODULE(vfs_scannedonly, \$(VFS_SCANNEDONLY_OBJ), "bin/scannedonly.$SHLIBEXT", VFS)
6544 SMB_MODULE(vfs_crossrename, \$(VFS_CROSSRENAME_OBJ), "bin/crossrename.$SHLIBEXT", VFS)
6545
6546 SMB_SUBSYSTEM(VFS,smbd/vfs.o)
6547
6548 SMB_MODULE(perfcount_onefs, \$(PERFCOUNT_ONEFS), "bin/pc_onefs.$SHLIBEXT", PERFCOUNT)
6549 SMB_MODULE(perfcount_test, \$(PERFCOUNT_TEST), "bin/pc_test.$SHLIBEXT", PERFCOUNT)
6550 SMB_SUBSYSTEM(PERFCOUNT,smbd/perfcount.o)
6551
6552 SMB_MODULE(gpext_registry, libgpo/gpext/registry.o, "bin/registry.$SHLIBEXT", GPEXT)
6553 SMB_MODULE(gpext_scripts, libgpo/gpext/scripts.o, "bin/scripts.$SHLIBEXT", GPEXT)
6554 SMB_MODULE(gpext_security, libgpo/gpext/security.o, "bin/security.$SHLIBEXT", GPEXT)
6555 SMB_SUBSYSTEM(GPEXT, libgpo/gpext/gpext.o)
6556
6557 AC_DEFINE_UNQUOTED(STRING_STATIC_MODULES, "$string_static_modules", [String list of builtin modules])
6558
6559 #################################################
6560 # do extra things if we are running insure
6561
6562 if test "${ac_cv_prog_CC}" = "insure"; then
6563         CPPFLAGS="$CPPFLAGS -D__INSURE__"
6564 fi
6565
6566 #################################################
6567 # If run from the build farm, enable NASTY hacks
6568 #################################################
6569 AC_MSG_CHECKING(whether to enable build farm hacks)
6570 if test x"$RUN_FROM_BUILD_FARM" = x"yes"; then
6571         AC_MSG_RESULT(yes)
6572         AC_DEFINE(ENABLE_BUILD_FARM_HACKS, 1, [Defined if running in the build farm])
6573 else
6574         AC_MSG_RESULT(no)
6575 fi
6576
6577 #################################################
6578 # check for bad librt/libpthread interactions
6579
6580 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes" -o \
6581     x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes" -o \
6582     x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6583     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6584
6585 SMB_IF_RTSIGNAL_BUG(
6586         [
6587             # Have RT_SIGNAL bug, need to check whether the problem will
6588             # affect anything we have configured.
6589
6590             rt_do_error=no
6591             if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
6592                 if test x"$rt_signal_lease_ok" = x"no" ; then
6593                     rt_do_error=yes
6594                 fi
6595             fi
6596
6597             if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
6598                 if test x"$rt_signal_notify_ok" = x"no" ; then
6599                     rt_do_error=yes
6600                 fi
6601             fi
6602
6603             if test x"$samba_cv_HAVE_AIO64" = x"yes" -o \
6604                     x"$samba_cv_HAVE_AIO" = x"yes" ; then
6605                 if test x"$rt_signal_aio_ok" = x"no" ; then
6606                     rt_do_error=yes
6607                 fi
6608             fi
6609
6610             if test x"$rt_do_error" = x"yes" ; then
6611                 SMB_IS_LIBPTHREAD_LINKED(
6612                     [
6613                         cat<<MSG
6614
6615 *** On this platforms, linking Samba against pthreads causes problems
6616 *** with the oplock and change notification mechanisms. You may be
6617 *** using pthreads as a side-effect of using the --with-aio-support
6618 *** or --with-profiling-data options. Please remove these and try again.
6619
6620 MSG
6621                     ],
6622                     [
6623                         cat<<MSG
6624
6625 *** On this platform, the oplock and change notification mechanisms do not
6626 *** appear to work. Please report this problem to samba-technical@samba.org
6627 *** and attach the config.log file from this directory.
6628
6629 MSG
6630                     ])
6631                 AC_MSG_ERROR(unable to use realtime signals on this platform)
6632             fi
6633         ],
6634         [
6635             # no RT_SIGNAL bug, we are golden
6636             SMB_IS_LIBPTHREAD_LINKED(
6637                 [
6638                     AC_MSG_WARN(using libpthreads - this may degrade performance)
6639                 ])
6640
6641         ],
6642         [
6643             # cross compiling, I hope you know what you are doing
6644             true
6645         ])
6646
6647 fi
6648
6649 AC_ARG_ENABLE(merged-build, 
6650 [AS_HELP_STRING([--enable-merged-build], [Build Samba 4 as well])], 
6651 [ enable_merged_build=$enableval ], [ enable_merged_build=auto ])
6652
6653 if test x"$enable_merged_build" = x"yes" -a \
6654         x"$merged_build_possible" = x"no" ; then
6655         AC_MSG_ERROR(Merged build required but not possible)
6656 fi
6657
6658 m4_include(../lib/zlib/zlib.m4)
6659
6660 if test x$enable_merged_build = xauto; then
6661         # Check for python
6662         m4_include(../m4/check_python.m4)
6663         AC_SAMBA_PYTHON_DEVEL([true], [merged_build_possible=no])
6664
6665         AC_MSG_CHECKING([whether it would be possible to do a merged build])
6666         AC_MSG_RESULT([$merged_build_possible])
6667
6668         # Enable merged build automatically if possible, when in developer mode
6669         if test "x$developer" = xyes; then
6670                 enable_merged_build=$merged_build_possible
6671         fi
6672 fi
6673
6674 if test x$enable_merged_build = xyes; then
6675         MERGED_BUILD=1
6676         saved_USESHARED="$USESHARED"
6677         USESHARED="false"
6678         smbtorture4_path="bin/smbtorture4"
6679         smbtorture4_option="-t bin/smbtorture4"
6680         AC_SUBST(smbtorture4_path)
6681         AC_SUBST(smbtorture4_option)
6682         USESHARED="$saved_USESHARED"
6683 fi
6684
6685 AC_SUBST(ZLIB_LIBS)
6686 AC_SUBST(ZLIB_OBJS)
6687 AC_ZLIB([ZLIB_OBJS=""], [
6688         ZLIB_LIBS=""
6689         for o in adler32.o compress.o crc32.o gzio.o uncompr.o \
6690                      deflate.o trees.o zutil.o inflate.o infback.o \
6691                          inftrees.o inffast.o
6692         do
6693                 ZLIB_OBJS="$ZLIB_OBJS ../lib/zlib/$o"
6694         done
6695         CFLAGS="-I../lib/zlib $CFLAGS"
6696 ])
6697
6698 AC_ARG_ENABLE(dmalloc, [AS_HELP_STRING([--enable-dmalloc], [Enable heap debugging [default=no]])])
6699
6700 if test "x$enable_dmalloc" = xyes
6701 then
6702         AC_DEFINE(ENABLE_DMALLOC, 1, [Define to turn on dmalloc debugging])
6703         AC_DEFINE(DMALLOC_FUNC_CHECK, 1,
6704                   [Define to check invariants around some common functions])
6705         LIBS="$LIBS -ldmalloc"
6706 fi
6707
6708 dnl Remove -L/usr/lib/? from LDFLAGS and LIBS
6709 LIB_REMOVE_USR_LIB(LDFLAGS)
6710 LIB_REMOVE_USR_LIB(LIBS)
6711
6712 dnl Remove -I/usr/include/? from CFLAGS and CPPFLAGS
6713 CFLAGS_REMOVE_USR_INCLUDE(CFLAGS)
6714 CFLAGS_REMOVE_USR_INCLUDE(CPPFLAGS)
6715
6716 #################################################
6717 # Display summary of libraries detected
6718
6719 AC_MSG_RESULT([Using libraries:])
6720 AC_MSG_RESULT([    LIBS = $LIBS])
6721 if test x"$with_ads_support" != x"no"; then
6722     AC_MSG_RESULT([    KRB5_LIBS = $KRB5_LIBS])
6723 fi
6724 if test x"$with_ldap_support" != x"no"; then
6725     AC_MSG_RESULT([    LDAP_LIBS = $LDAP_LIBS])
6726 fi
6727 if test x"$with_dnsupdate_support" != x"no"; then
6728     AC_MSG_RESULT([    UUID_LIBS = $UUID_LIBS])
6729 fi
6730 if test x"$have_dnssd_support" != x"no"; then
6731     AC_MSG_RESULT([    DNSSD_LIBS = $DNSSD_LIBS])
6732 fi
6733 AC_MSG_RESULT([    AUTH_LIBS = $AUTH_LIBS])
6734
6735 #################################################
6736 # final configure stuff
6737
6738 AC_MSG_CHECKING([configure summary])
6739 AC_TRY_RUN([#include "${srcdir-.}/../tests/summary.c"],
6740            AC_MSG_RESULT(yes),
6741            AC_MSG_ERROR([summary failure. Aborting config]); exit 1;,
6742            AC_MSG_WARN([cannot run when cross-compiling]))
6743
6744 dnl Merge in developer cflags from now on
6745 AC_SUBST(DEVELOPER_CFLAGS)
6746 if test x"$krb5_developer" = x"yes" -o x"$developer" = x"yes" -o x"$picky_developer" = x"yes"; then
6747     CFLAGS="${CFLAGS} \$(DEVELOPER_CFLAGS)"
6748 fi
6749
6750 # Stuff the smbd-only libraries at the end of the smbd link
6751 # path (if we have them).
6752 SMBD_LIBS="$samba_dmapi_libs"
6753 AC_SUBST(SMBD_LIBS)
6754
6755 CFLAGS="${CFLAGS} \$(FLAGS)"
6756 CFLAGS="${CFLAGS} -D_SAMBA_BUILD_=3"
6757
6758 AC_SUBST(MAKEFILE)
6759 if test x$samba_cv_gnu_make = xyes; then
6760         MAKEFILE=Makefile
6761 else
6762         # When we don't have GNU Make, generate a copy of Makefile.in 
6763         # that doesn't have the "include " statements but just includes 
6764         # the files verbatim.
6765         MAKEFILE=Makefile-noincludes
6766         $PERL ./script/expand-includes.pl Makefile.in > $MAKEFILE.in
6767 fi
6768 AC_OUTPUT($MAKEFILE
6769           script/findsmb smbadduser script/gen-8bit-gap.sh script/installbin.sh script/uninstallbin.sh
6770           lib/netapi/examples/Makefile
6771           lib/netapi/tests/Makefile
6772           pkgconfig/smbclient.pc
6773           pkgconfig/wbclient.pc
6774           pkgconfig/netapi.pc
6775           pkgconfig/smbsharemodes.pc
6776           ../examples/libsmbclient/Makefile.internal
6777           )
6778 dnl If we had to expand the includes, make tsure the output file is moved back
6779 AC_OUTPUT_COMMANDS([
6780 if test x$MAKEFILE != Makefile; then
6781         mv $MAKEFILE Makefile
6782 fi
6783 ])
6784
6785 #################################################
6786 # Print very concise instructions on building/use
6787 if test "x$enable_dmalloc" = xyes
6788 then
6789         AC_MSG_RESULT([Note: The dmalloc debug library will be included.  To turn it on use])
6790         AC_MSG_RESULT([      \$ eval \`dmalloc samba\`.])
6791 fi