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