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