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