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