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