s3:smbd: add a nfs backend for sysquotas.
[amitay/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 AC_LIBREPLACE_RUNTIME_LIB_PATH_VAR
27
28 m4_include(../lib/tevent/libtevent.m4)
29
30 LIBTEVENT_OBJ0=""
31 for obj in ${TEVENT_OBJ}; do
32         LIBTEVENT_OBJ0="${LIBTEVENT_OBJ0} ${teventdir}/${obj}"
33 done
34 AC_SUBST(LIBTEVENT_OBJ0)
35 LIBS="${LIBS} ${TEVENT_LIBS}"
36
37 SAMBA_CPPFLAGS="-Iinclude -I${srcdir-.}/include  -I. -I${srcdir-.}"
38 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/replace"
39 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TEVENT_CFLAGS}"
40 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/libaddns"
41 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/librpc"
42 SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/.."
43
44 SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CPPFLAGS} -I${srcdir-.}/../lib/popt"
45
46 ## cleanup the $(srcdir) in the Makefile if we are outside of the tree
47 if test "x${srcdir-.}" != "x."; then
48         SAMBA_CPPFLAGS=`echo ${SAMBA_CPPFLAGS} | sed -e "s;${srcdir};\$\(srcdir\);g"`
49 fi
50
51 dnl Unique-to-Samba variables we'll be playing with.
52 AC_SUBST(SAMBA_CPPFLAGS)
53 AC_SUBST(SHELL)
54 AC_SUBST(LDSHFLAGS)
55 AC_SUBST(SONAMEFLAG)
56 AC_SUBST(SHLD)
57 AC_SUBST(MODULE_EXPORTS)
58 AC_SUBST(DSO_EXPORTS)
59 AC_SUBST(HOST_OS)
60 AC_SUBST(PICFLAG)
61 AC_SUBST(PIE_CFLAGS)
62 AC_SUBST(PIE_LDFLAGS)
63 AC_SUBST(RELRO_LDFLAGS)
64 AC_SUBST(SHLIBEXT)
65 AC_SUBST(INSTALLLIBCMD_SH)
66 AC_SUBST(INSTALLLIBCMD_A)
67 AC_SUBST(UNINSTALLLIBCMD_SH)
68 AC_SUBST(UNINSTALLLIBCMD_A)
69
70 AC_SUBST(INSTALL_LIBWBCLIENT)
71 AC_SUBST(UNINSTALL_LIBWBCLIENT)
72 AC_SUBST(LIBWBCLIENT_SHARED_TARGET)
73 AC_SUBST(LIBWBCLIENT_SHARED)
74 AC_SUBST(LIBWBCLIENT_STATIC_TARGET)
75 AC_SUBST(LIBWBCLIENT_STATIC)
76 AC_SUBST(LIBWBCLIENT_SOVER)
77 AC_SUBST(LIBWBCLIENT)
78 AC_SUBST(LIBWBCLIENT_LIBS)
79
80 AC_SUBST(LIBSAMBAUTIL_SHARED)
81
82 AC_SUBST(PRINT_LIBS)
83 AC_SUBST(AUTH_LIBS)
84 AC_SUBST(ACL_LIBS)
85 AC_SUBST(PASSDB_LIBS)
86 AC_SUBST(IDMAP_LIBS)
87 AC_SUBST(KRB5_LIBS)
88 AC_SUBST(UUID_LIBS)
89 AC_SUBST(LDAP_LIBS)
90 AC_SUBST(GPEXT_LIBS)
91 AC_SUBST(PAM_MODULES)
92 AC_SUBST(INSTALL_PAM_MODULES)
93 AC_SUBST(UNINSTALL_PAM_MODULES)
94 AC_SUBST(NSS_MODULES)
95 AC_SUBST(EXTRA_BIN_PROGS)
96 AC_SUBST(CIFSMOUNT_PROGS)
97 AC_SUBST(INSTALL_CIFSMOUNT)
98 AC_SUBST(UNINSTALL_CIFSMOUNT)
99 AC_SUBST(CIFSUMOUNT_PROGS)
100 AC_SUBST(INSTALL_CIFSUMOUNT)
101 AC_SUBST(UNINSTALL_CIFSUMOUNT)
102 AC_SUBST(CIFSUPCALL_PROGS)
103 AC_SUBST(INSTALL_CIFSUPCALL)
104 AC_SUBST(UNINSTALL_CIFSUPCALL)
105 AC_SUBST(EXTRA_SBIN_PROGS)
106 AC_SUBST(EXTRA_ALL_TARGETS)
107 AC_SUBST(CONFIG_LIBS)
108 AC_SUBST(NSCD_LIBS)
109
110 # compile with optimization and without debugging by default, but
111 # allow people to set their own preference.
112 # do this here since AC_CACHE_CHECK apparently sets the CFLAGS to "-g -O2"
113 # if it has no value.  This prevent *very* large debug binaries from occurring
114 # by default.
115 if test "x$debug" = "xyes" ; then
116         CFLAGS="${CFLAGS} -g"
117 fi
118 if test "x$CFLAGS" = x; then
119   CFLAGS="-O"
120 fi
121
122 m4_include(../lib/socket_wrapper/config.m4)
123 m4_include(../lib/nss_wrapper/config.m4)
124 m4_include(../lib/util/time.m4)
125
126 m4_include(m4/swat.m4)
127
128 DEVELOPER_CFLAGS="-DDEBUG_PASSWORD -DDEVELOPER"
129
130 # Probe the gcc version for extra CFLAGS. We always stash these in
131 # DEVELOPER_CFLAGS, so that you can turn them on and off with a simple
132 # Makefile edit, avoiding the need to re-run configure.
133 if test x"$ac_cv_prog_gcc" = x"yes" ; then
134         DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -g -Wall -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings"
135         # Add -Wdeclaration-after-statement if compiler supports it
136         AC_CACHE_CHECK(
137           [that the C compiler understands -Wdeclaration-after-statement],
138           samba_cv_HAVE_Wdeclaration_after_statement, [
139           AC_TRY_RUN_STRICT([
140             int main(void)
141             {
142                 return 0;
143             }],[$CFLAGS -Wdeclaration-after-statement],[$CPPFLAGS],[$LDFLAGS],
144             samba_cv_HAVE_Wdeclaration_after_statement=yes,
145             samba_cv_HAVE_Wdeclaration_after_statement=no,
146             samba_cv_HAVE_Wdeclaration_after_statement=cross)
147        ])
148
149         if test x"$samba_cv_HAVE_Wdeclaration_after_statement" = x"yes"; then
150             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Wdeclaration-after-statement"
151         fi
152
153         #-Werror-implicit-function-declaration
154         AC_CACHE_CHECK(
155           [that the C compiler understands -Werror-implicit-function-declaration],
156           samba_cv_HAVE_Werror_implicit_function_declaration, [
157           AC_TRY_RUN_STRICT([
158             int main(void)
159             {
160                 return 0;
161             }],[$CFLAGS -Werror-implicit-function-declaration],[$CPPFLAGS],[$LDFLAGS],
162             samba_cv_HAVE_Werror_implicit_function_declaration=yes,
163             samba_cv_HAVE_Werror_implicit_function_declaration=no,
164             samba_cv_HAVE_Werror_implicit_function_declaration=cross)
165        ])
166        if test x"$samba_cv_HAVE_Werror_implicit_function_declaration" = x"yes"; then
167             DEVELOPER_CFLAGS="${DEVELOPER_CFLAGS} -Werror-implicit-function-declaration"
168        fi
169
170         # krb5developer is like developer, except we don't get
171         # -Wstrict-prototypes.
172        if test x"$krb5_developer" != x"$yes" ; then
173             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Wstrict-prototypes"
174        fi
175
176        if test x"$picky_developer" = x"yes"; then
177             DEVELOPER_CFLAGS="$DEVELOPER_CFLAGS -Werror"
178        fi
179 fi
180
181 #################################################
182 # check for a shared memory profiling support
183 AC_MSG_CHECKING(whether to use profiling)
184 AC_ARG_WITH(profiling-data,
185 [AS_HELP_STRING([--with-profiling-data], [Include gathering source code profile information (default=no)])],
186 [ case "$withval" in
187   yes)
188     AC_MSG_RESULT(yes)
189     AC_DEFINE(WITH_PROFILE,1,[Whether to use profiling])
190     samba_cv_WITH_PROFILE=yes
191     ;;
192   *)
193     AC_MSG_RESULT(no)
194     samba_cv_WITH_PROFILE=no
195     ;;
196   esac ],
197   AC_MSG_RESULT(no)
198 )
199
200 dnl Checks for programs.
201 merged_build_possible=yes
202
203 AC_PROG_INSTALL
204 AC_PROG_AWK
205 # Check for GNU make
206 m4_include(../m4/check_make.m4)
207 AC_SAMBA_GNU_MAKE([true], [true])
208
209 # Check for perl
210 m4_include(../m4/check_perl.m4)
211 AC_SAMBA_PERL([true], [merged_build_possible=no])
212
213 # Check for python
214 m4_include(../m4/check_python.m4)
215 AC_SAMBA_PYTHON_DEVEL([true], [merged_build_possible=no])
216
217 AC_CHECK_TOOL(AR, ar)
218
219 dnl Check if we (actually our C compiler!) use GNU ld
220 AC_PROG_LD_GNU
221
222 dnl Certain versions of GNU ld the default is not to have the
223 dnl --allow-shlib-undefined flag defined.  This causes a stackload of
224 dnl warnings when building modules.
225 if test "$ac_cv_prog_gnu_ld" = "yes"; then
226         ac_cv_gnu_ld_version=`$CC -Wl,-v /dev/null 2>/dev/null | head -1`
227         AC_MSG_CHECKING(GNU ld release date)
228         changequote(,)dnl
229         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'`
230         changequote([,])dnl
231         AC_MSG_RESULT(${ac_cv_gnu_ld_date})
232         if test -n "$ac_cv_gnu_ld_date"; then
233         if test "$ac_cv_gnu_ld_date" -lt 20030217; then
234                 ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
235         fi
236         if test "$ac_cv_gnu_ld_date" -gt 20030101; then
237                 ac_cv_gnu_ld_version_script=yes
238         fi
239         else
240            AC_MSG_CHECKING(GNU ld release version)
241            changequote(,)dnl
242            ac_cv_gnu_ld_vernr=`echo $ac_cv_gnu_ld_version | awk '{print $NF}' | sed -n 's,\([1-9][0-9]*\.[0-9][0-9]*\).*$,\1,p'`
243            ac_cv_gnu_ld_vernr_major=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 1`
244            ac_cv_gnu_ld_vernr_minor=`echo $ac_cv_gnu_ld_vernr | cut -d '.' -f 2`
245            changequote([,])dnl
246            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr})
247            AC_MSG_CHECKING(GNU ld release version major)
248            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_major})
249            AC_MSG_CHECKING(GNU ld release version minor)
250            AC_MSG_RESULT(${ac_cv_gnu_ld_vernr_minor})
251            if test "$ac_cv_gnu_ld_vernr_major" -lt 2 || test "$ac_cv_gnu_ld_vernr_minor" -lt 14; then
252              ac_cv_gnu_ld_no_default_allow_shlib_undefined=yes
253            fi
254            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
255              ac_cv_gnu_ld_version_script=yes
256            fi
257         fi
258 fi
259
260 dnl look for executable suffix
261 AC_EXEEXT
262
263 dnl Check if C compiler understands -c and -o at the same time
264 AC_PROG_CC_C_O
265 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
266       BROKEN_CC=
267 else
268       BROKEN_CC=#
269 fi
270 AC_SUBST(BROKEN_CC)
271
272 dnl Check if the C compiler understands -Werror (GNU)
273 AC_CACHE_CHECK([that the C compiler understands -Werror],samba_cv_HAVE_Werror, [
274  AC_TRY_RUN_STRICT([
275   int main(void)
276   {
277         return 0;
278   }],[$CFLAGS -Werror],[$CPPFLAGS],[$LDFLAGS],
279   samba_cv_HAVE_Werror=yes,samba_cv_HAVE_Werror=no,samba_cv_HAVE_Werror=cross)])
280 if test x"$samba_cv_HAVE_Werror" = x"yes"; then
281    Werror_FLAGS="-Werror"
282 else
283 dnl Check if the C compiler understands -w2
284 AC_CACHE_CHECK([that the C compiler understands -w2],samba_cv_HAVE_w2, [
285  AC_TRY_RUN_STRICT([
286   int main(void)
287   {
288         return 0;
289   }],[$CFLAGS -w2],[$CPPFLAGS],[$LDFLAGS],
290   samba_cv_HAVE_w2=yes,samba_cv_HAVE_w2=no,samba_cv_HAVE_w2=cross)])
291 if test x"$samba_cv_HAVE_w2" = x"yes"; then
292    Werror_FLAGS="-w2"
293 else
294 dnl Check if the C compiler understands -errwarn (Sun)
295 AC_CACHE_CHECK([that the C compiler understands -errwarn],samba_cv_HAVE_errwarn, [
296   AC_TRY_RUN_STRICT([
297    int main(void)
298    {
299         return 0;
300    }],[$CFLAGS -errwarn=%all],[$CPPFLAGS],[$LDFLAGS],
301    samba_cv_HAVE_errwarn=yes,samba_cv_HAVE_errwarn=no,samba_cv_HAVE_errwarn=cross)])
302 if test x"$samba_cv_HAVE_errwarn" = x"yes"; then
303    Werror_FLAGS="-errwarn=%all"
304 else
305 dnl Check if the C compiler understands -qhalt (IBM)
306 AC_CACHE_CHECK([that the C compiler understands -qhalt],samba_cv_HAVE_qhalt, [
307   AC_TRY_RUN_STRICT([
308    int main(void)
309    {
310         return 0;
311    }],[$CFLAGS -qhalt=w],[$CPPFLAGS],[$LDFLAGS],
312    samba_cv_HAVE_qhalt=yes,samba_cv_HAVE_qhalt=no,samba_cv_HAVE_qhalt=cross)])
313 if test x"$samba_cv_HAVE_qhalt" = x"yes"; then
314    Werror_FLAGS="-qhalt=w"
315 fi
316 fi
317 fi
318 fi
319
320 ############################################
321 # check if the compiler can handle negative enum values
322 # and don't truncate the values to INT_MAX
323 # a runtime test is needed here
324 AC_SUBST(PIDL_ARGS)
325 AC_CACHE_CHECK([that the C compiler understands negative enum values],samba_cv_CC_NEGATIVE_ENUM_VALUES, [
326     AC_TRY_RUN(
327 [
328         #include <stdio.h>
329         enum negative_values { NEGATIVE_VALUE = 0xFFFFFFFF };
330         int main(void) {
331                 enum negative_values v1 = NEGATIVE_VALUE;
332                 unsigned v2 = NEGATIVE_VALUE;
333
334                 if (v1 != 0xFFFFFFFF) {
335                         printf("%u != 0xFFFFFFFF\n", v1);
336                         return 1;
337                 }
338                 if (v2 != 0xFFFFFFFF) {
339                         printf("%u != 0xFFFFFFFF\n", v2);
340                         return 1;
341                 }
342
343                 return 0;
344         }
345 ],
346         samba_cv_CC_NEGATIVE_ENUM_VALUES=yes,samba_cv_CC_NEGATIVE_ENUM_VALUES=no)])
347 if test x"$samba_cv_CC_NEGATIVE_ENUM_VALUES" != x"yes"; then
348         AC_MSG_WARN([using --uint-enums for pidl])
349         PIDL_ARGS="$PIDL_ARGS --uint-enums"
350 fi
351
352 dnl Figure out the flags to support named structure initializers
353
354 LIBREPLACE_C99_STRUCT_INIT([],[AC_MSG_ERROR([c99 structure initializer are not supported])])
355
356 UNAME_S=`(uname -s) 2>/dev/null` || UNAME_S="unknown"
357 AC_MSG_CHECKING(uname -s)
358 AC_MSG_RESULT(${UNAME_S})
359
360 UNAME_R=`(uname -r) 2>/dev/null` || UNAME_R="unknown"
361 AC_MSG_CHECKING(uname -r)
362 AC_MSG_RESULT(${UNAME_R})
363
364 UNAME_M=`(uname -m) 2>/dev/null` || UNAME_M="unknown"
365 AC_MSG_CHECKING(uname -m)
366 AC_MSG_RESULT(${UNAME_M})
367
368 UNAME_P=`(uname -p) 2>/dev/null` || UNAME_P="unknown"
369 AC_MSG_CHECKING(uname -p)
370 AC_MSG_RESULT(${UNAME_P})
371
372 UNAME_I=`(uname -i) 2>/dev/null` || UNAME_I="unknown"
373 AC_MSG_CHECKING(uname -i)
374 AC_MSG_RESULT(${UNAME_I})
375
376 dnl Add #include for broken IRIX header files
377   case "$host_os" in
378         *irix6*)
379                 #TODO add to libreplace
380                 if test x"$ac_cv_prog_gcc" != x"yes" ; then
381                         dnl Fix sensible defaults for MIPSPro compilers. The
382                         dnl error numbers are valid for the 7.3 compilers,
383                         dnl hopefully also valid for the 7.4 series.
384                         dnl
385                         dnl Bugzilla 3801. Force an error on warning 1035
386                         dnl so we don't incorrectly detect stdint.h. This
387                         dnl warning is emitted for #error directives.
388                         CFLAGS="$CFLAGS -diag_error 1035"
389                         dnl 1209: Controlling expression is constant
390                         dnl 1174: Function foo declared but never referenced
391                         dnl 3201: Parameter foo was never referenced
392                         CFLAGS="$CFLAGS -woff 1209,1174,3201"
393                 fi
394         ;;
395 esac
396
397 DYNEXP=
398 AC_SUBST(DYNEXP)
399 LDSHFLAGS_Z_DEFS=
400 AC_SUBST(LDSHFLAGS_Z_DEFS)
401 LDSHFLAGS_Z_NODEFS=
402 AC_SUBST(LDSHFLAGS_Z_NODEFS)
403
404 dnl Add modules that have to be built by default here
405 dnl These have to be built static:
406 default_static_modules=""
407 default_static_modules="$default_static_modules pdb_smbpasswd"
408 default_static_modules="$default_static_modules pdb_tdbsam"
409 default_static_modules="$default_static_modules pdb_wbc_sam"
410 default_static_modules="$default_static_modules rpc_lsarpc"
411 default_static_modules="$default_static_modules rpc_samr"
412 default_static_modules="$default_static_modules rpc_winreg"
413 default_static_modules="$default_static_modules rpc_initshutdown"
414 default_static_modules="$default_static_modules rpc_dssetup"
415 default_static_modules="$default_static_modules rpc_wkssvc"
416 default_static_modules="$default_static_modules rpc_svcctl"
417 default_static_modules="$default_static_modules rpc_ntsvcs"
418 default_static_modules="$default_static_modules rpc_netlogon"
419 default_static_modules="$default_static_modules rpc_netdfs"
420 default_static_modules="$default_static_modules rpc_srvsvc"
421 default_static_modules="$default_static_modules rpc_spoolss"
422 default_static_modules="$default_static_modules rpc_eventlog"
423 default_static_modules="$default_static_modules auth_sam"
424 default_static_modules="$default_static_modules auth_unix"
425 default_static_modules="$default_static_modules auth_winbind"
426 default_static_modules="$default_static_modules auth_wbc"
427 default_static_modules="$default_static_modules auth_server"
428 default_static_modules="$default_static_modules auth_domain"
429 default_static_modules="$default_static_modules auth_builtin"
430 default_static_modules="$default_static_modules auth_netlogond"
431 default_static_modules="$default_static_modules vfs_default"
432 default_static_modules="$default_static_modules nss_info_template"
433
434 dnl These are preferably build shared, and static if dlopen() is not available
435 default_shared_modules=""
436 default_shared_modules="$default_shared_modules vfs_recycle"
437 default_shared_modules="$default_shared_modules vfs_audit"
438 default_shared_modules="$default_shared_modules vfs_extd_audit"
439 default_shared_modules="$default_shared_modules vfs_full_audit"
440 default_shared_modules="$default_shared_modules vfs_netatalk"
441 default_shared_modules="$default_shared_modules vfs_fake_perms"
442 default_shared_modules="$default_shared_modules vfs_default_quota"
443 default_shared_modules="$default_shared_modules vfs_readonly"
444 default_shared_modules="$default_shared_modules vfs_cap"
445 default_shared_modules="$default_shared_modules vfs_expand_msdfs"
446 default_shared_modules="$default_shared_modules vfs_shadow_copy"
447 default_shared_modules="$default_shared_modules vfs_shadow_copy2"
448 default_shared_modules="$default_shared_modules charset_CP850"
449 default_shared_modules="$default_shared_modules charset_CP437"
450 default_shared_modules="$default_shared_modules auth_script"
451 default_shared_modules="$default_shared_modules vfs_readahead"
452 default_shared_modules="$default_shared_modules vfs_xattr_tdb"
453 default_shared_modules="$default_shared_modules vfs_streams_xattr"
454 default_shared_modules="$default_shared_modules vfs_streams_depot"
455 default_shared_modules="$default_shared_modules vfs_acl_xattr"
456 default_shared_modules="$default_shared_modules vfs_acl_tdb"
457 default_shared_modules="$default_shared_modules vfs_smb_traffic_analyzer"
458 default_shared_modules="$default_shared_modules vfs_preopen"
459 default_shared_modules="$default_shared_modules vfs_catia"
460 default_shared_modules="$default_shared_modules vfs_scannedonly"
461 default_shared_modules="$default_shared_modules vfs_crossrename"
462 default_shared_modules="$default_shared_modules vfs_linux_xfs_sgid"
463
464 if test "x$developer" = xyes; then
465    default_static_modules="$default_static_modules rpc_rpcecho pdb_ads"
466    default_shared_modules="$default_shared_modules charset_weird perfcount_test"
467 fi
468
469 #
470 # Config CPPFLAG settings for strange OS's that must be set
471 # before other tests. Do NOT invoke AC_CHECK_HEADERS within this
472 # case statement; its first reference must be unconditional.
473 #
474 case "$host_os" in
475     *hpux*)
476 #
477 # Defines needed for HPUX support.
478 # HPUX has bigcrypt but (sometimes?) doesn't use it for
479 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
480 #
481       case `uname -r` in
482                 *9*|*10*|*11)
483                         AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
484                 ;;
485       esac
486       ;;
487
488 #
489 # CRAY Unicos has broken const handling
490        *unicos*)
491           AC_MSG_RESULT([disabling const])
492           CPPFLAGS="$CPPFLAGS -Dconst="
493           ;;
494         
495 #
496 # AIX4.x doesn't even admit to having large
497 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
498 #
499     *aix4*)
500           AC_MSG_RESULT([enabling large file support])
501       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
502           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
503       ;;
504 #
505 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
506 # to the existance of large files..
507 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
508 # recommendations on large file support, however it makes the
509 # compile work using gcc 2.7 and 2.8, whereas using the Sun
510 # recommendation makes the compile fail on gcc2.7. JRA.
511 #
512 # Solaris uses SYSV printing.  Make sure to set that here.  --jerry
513 #
514         *solaris*)
515                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
516                 case `uname -r` in
517                         5.0|5.0.*|5.1|5.1.*|5.2|5.2.*|5.3|5.3.*|5.5|5.5.*)
518                                 AC_MSG_RESULT([no large file support])
519                                 ;;
520                         5.*)
521                         AC_MSG_RESULT([enabling large file support])
522                         if test "$ac_cv_prog_gcc" = yes; then
523                                 ${CC-cc} -v >conftest.c 2>&1
524                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
525                                 rm -fr conftest.c
526                                 case "$ac_cv_gcc_compiler_version_number" in
527                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
528                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE -D_REENTRANT"
529                                                 LDFLAGS="$LDFLAGS -lthread"
530                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
531                                                 ;;
532                                         *)
533                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
534                                                 LDFLAGS="$LDFLAGS -lthread"
535                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
536                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
537                                                 ;;
538                                 esac
539                         else
540                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_REENTRANT -D_FILE_OFFSET_BITS=64"
541                                 LDFLAGS="$LDFLAGS -lthread"
542                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
543                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
544                         fi
545                         ;;
546                 esac
547                 ;;
548 #
549 # IRIX uses SYSV printing.  Make sure to set that here
550 #
551         *irix*)
552                 AC_DEFINE(SYSV, 1, [Whether to enable System V compatibility])
553                 ;;
554         *freebsd*|*dragonfly*)
555                 AC_DEFINE(FREEBSD, 1, [Whether the host os is FreeBSD])
556                 ;;
557 #
558 # VOS may need to have POSIX support and System V compatibility enabled.
559 #
560     *vos*)
561     case "$CPPFLAGS" in
562           *-D_POSIX_C_SOURCE*)
563                 ;;
564           *)
565                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
566                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
567                 ;;
568     esac
569     case "$CPPFLAGS" in
570           *-D_SYSV*|*-D_SVID_SOURCE*)
571                 ;;
572           *)
573                 CPPFLAGS="$CPPFLAGS -D_SYSV"
574                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
575     esac
576     ;;
577 #
578 # Tests needed for SINIX large file support.
579 #
580     *sysv4*)
581       if test $host = mips-sni-sysv4 ; then
582         AC_MSG_CHECKING([for LFS support])
583         old_CPPFLAGS="$CPPFLAGS"
584         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
585         AC_TRY_RUN([
586 #include <unistd.h>
587 main () {
588 #if _LFS64_LARGEFILE == 1
589 exit(0);
590 #else
591 exit(1);
592 #endif
593 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
594         CPPFLAGS="$old_CPPFLAGS"
595         if test x$SINIX_LFS_SUPPORT = xyes ; then
596           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
597                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
598           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
599           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
600           LIBS="`getconf LFS64_LIBS` $LIBS"
601         fi
602       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
603       fi
604     ;;
605
606 # Systems with LFS support.
607 #
608     gnu* | k*bsd*-gnu | kopensolaris*-gnu)
609         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
610         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
611         AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
612         AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
613         ;;
614
615 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
616 #
617     *linux*)
618         AC_MSG_CHECKING([for LFS support])
619         old_CPPFLAGS="$CPPFLAGS"
620         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
621        AC_TRY_RUN([
622 #include <unistd.h>
623 #include <sys/utsname.h>
624 #include <string.h>
625 #include <stdlib.h>
626 main() {
627 #if _LFS64_LARGEFILE == 1
628        struct utsname uts;
629        char *release;
630        int major, minor;
631
632        /* Ensure this is glibc 2.2 or higher */
633 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
634        int libc_major = __GLIBC__;
635        int libc_minor = __GLIBC_MINOR__;
636
637        if (libc_major < 2)
638               exit(1);
639        if (libc_minor < 2)
640               exit(1);
641 #endif
642
643        /* Ensure this is kernel 2.4 or higher */
644
645        uname(&uts);
646        release = strdup(uts.release);
647        major = atoi(strsep(&release, "."));
648        minor = atoi(strsep(&release, "."));
649
650        if (major > 2 || (major == 2 && minor > 3))
651                exit(0);
652        exit(1);
653 #else
654        exit(1);
655 #endif
656 }
657 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
658         CPPFLAGS="$old_CPPFLAGS"
659         if test x$LINUX_LFS_SUPPORT = xyes ; then
660                 CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
661                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
662                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
663                 AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
664         fi
665         AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
666         ;;
667
668 #
669 # MacOS X is the *only* system that uses compose character in utf8. This
670 # is so horribly broken....
671 #
672     *darwin*)
673         AC_DEFINE(BROKEN_UNICODE_COMPOSE_CHARACTERS, 1, [Does this system use unicode compose characters])
674
675 # Add a system specific charset module.
676         default_shared_modules="$default_shared_modules charset_macosxfs"
677
678         ;;
679     *hurd*)
680         AC_MSG_CHECKING([for LFS support])
681         old_CPPFLAGS="$CPPFLAGS"
682         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
683         AC_TRY_RUN([
684 #include <unistd.h>
685 main () {
686 #if _LFS64_LARGEFILE == 1
687 exit(0);
688 #else
689 exit(1);
690 #endif
691 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
692         CPPFLAGS="$old_CPPFLAGS"
693         if test x$GLIBC_LFS_SUPPORT = xyes ; then
694           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
695                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
696           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
697         fi
698       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
699     ;;
700     *qnx*)
701         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
702         AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
703         ;;
704
705 esac
706
707 SAVE_CPPFLAGS="${CPPFLAGS}"
708 CPPFLAGS="${CPPFLAGS} ${SAMBA_CONFIGURE_CPPFLAGS}"
709
710 AC_LIBREPLACE_BROKEN_CHECKS
711 AC_CHECK_FUNCS([syslog],[],[AC_MSG_ERROR([Required function not found])])
712 AC_LIBREPLACE_NETWORK_CHECKS
713
714 CPPFLAGS="${SAVE_CPPFLAGS}"
715
716 LIBREPLACE_DIR=`echo ${libreplacedir} | sed -e "s;${srcdir};;" -e "s;^/;;"`
717
718 LIBREPLACE_OBJS="${LIBREPLACEOBJ}"
719 AC_SUBST(LIBREPLACE_OBJS)
720
721 LIBREPLACE_LIBS="${LIBREPLACE_NETWORK_LIBS}"
722 AC_SUBST(LIBREPLACE_LIBS)
723
724
725 # add -ldl to the global LIBS
726 LIBS="${LIBS} ${LIBDL} ${LIBREPLACE_NETWORK_LIBS}"
727 AUTH_LIBS="${AUTH_LIBS} ${CRYPT_LIBS}"
728
729
730 AC_CHECK_HEADERS(aio.h sys/fcntl.h sys/select.h fcntl.h sys/time.h sys/unistd.h rpc/nettype.h)
731 AC_CHECK_HEADERS(unistd.h grp.h sys/id.h memory.h alloca.h)
732 AC_CHECK_HEADERS(limits.h float.h libintl.h)
733 AC_CHECK_HEADERS(rpc/rpc.h rpcsvc/nis.h rpcsvc/ypclnt.h)
734 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)
735 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
736 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
737 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h)
738 AC_CHECK_HEADERS(sys/sysmacros.h)
739 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
740 AC_CHECK_HEADERS(langinfo.h locale.h)
741 AC_CHECK_HEADERS(xfs/libxfs.h)
742 AC_CHECK_HEADERS(netgroup.h)
743
744 AC_CHECK_HEADERS(rpcsvc/yp_prot.h,,,[[
745 #if HAVE_RPC_RPC_H
746 #include <rpc/rpc.h>
747 #endif
748 ]])
749
750 ## These fail to compile on IRIX so just check for their presence
751 AC_CHECK_HEADERS(sys/mode.h,,,)
752
753 # Look for Darwin headers
754 old_CPPFLAGS="$CPPFLAGS"
755 CPPFLAGS="-Iinclude $CPPFLAGS"
756 AC_CHECK_HEADERS([CoreFoundation/CFStringEncodingConverter.h], [], [AC_CHECK_HEADERS([CFStringEncodingConverter.h])])
757 CPPFLAGS="$old_CPPFLAGS"
758
759 # In valgrind 1.0.x, it's just valgrind.h.  In 1.9.x+ there's a
760 # subdirectory of headers.
761 AC_CHECK_HEADERS(valgrind.h valgrind/valgrind.h valgrind/memcheck.h)
762
763 #
764 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
765 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
766 #
767 case "$host_os" in
768     *hpux*)
769                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
770                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
771                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
772                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
773                 fi
774         ;;
775 esac
776 AC_CHECK_HEADERS(shadow.h)
777 AC_CHECK_HEADERS(nss.h nss_common.h nsswitch.h ns_api.h sys/security.h)
778 AC_CHECK_HEADERS(syscall.h sys/syscall.h)
779
780 AC_CHECK_HEADERS(sys/attributes.h attr/xattr.h sys/xattr.h sys/extattr.h sys/uio.h)
781 AC_CHECK_HEADERS(sys/ea.h sys/proplist.h)
782
783 AC_CHECK_HEADERS(sys/cdefs.h glob.h)
784
785 # For experimental utmp support (lastlog on some BSD-like systems)
786 AC_CHECK_HEADERS(utmp.h utmpx.h lastlog.h)
787
788 AC_CHECK_SIZEOF(int,cross)
789 AC_CHECK_SIZEOF(long,cross)
790 AC_CHECK_SIZEOF(long long,cross)
791 AC_CHECK_SIZEOF(short,cross)
792
793 AC_C_CONST
794 AC_C_INLINE
795 AC_C_BIGENDIAN
796 AC_C_CHAR_UNSIGNED
797
798 AC_TYPE_SIGNAL
799 AC_TYPE_UID_T
800 AC_TYPE_MODE_T
801 AC_TYPE_OFF_T
802 AC_TYPE_SIZE_T
803 AC_TYPE_PID_T
804 AC_STRUCT_ST_RDEV
805 AC_DIRENT_D_OFF
806 AC_CHECK_TYPE(ssize_t, int)
807 AC_CHECK_TYPE(wchar_t, unsigned short)
808
809 ############################################
810 # for cups support we need libcups, and a handful of header files
811
812 AC_ARG_ENABLE(cups,
813 [AS_HELP_STRING([--enable-cups], [Turn on CUPS support (default=auto)])])
814
815 if test x$enable_cups != xno; then
816         AC_PATH_PROG(CUPS_CONFIG, cups-config)
817
818         if test "x$CUPS_CONFIG" != x; then
819
820                 ac_save_LDFLAGS=$LDFLAGS
821                 ac_save_PRINT_LIBS=$PRINT_LIBS
822                 AC_CHECK_HEADERS(cups/cups.h cups/language.h)
823
824                 if test x"$ac_cv_header_cups_cups_h" = xyes -a \
825                         x"$ac_cv_header_cups_language_h" = xyes; then
826                         # try linking with -lcups alone first. That should work unless libcups is
827                         # underlinked. With cups-config --libs we pull in unwanted and unneeded
828                         # dendencies including thread libraries - use cups-config only if really
829                         # required. 
830                         AC_CHECK_LIB_EXT(cups, ac_save_PRINT_LIBS , httpConnect,
831                                 [PRINT_LIBS"$ac_save_PRINT_LIBS -lcups"],
832                                 [AC_MSG_WARN([your cups library doesn't link with -lcups alone, it might be underlinked.]) ;
833                                  PRINT_LIBS="$ac_save_PRINT_LIBS `$CUPS_CONFIG --libs`"])
834
835                         AC_DEFINE(HAVE_CUPS,1,[Whether we have CUPS])
836                         samba_cv_HAVE_CUPS=yes
837                         AC_CHECK_LIB_EXT(cups, PRINT_LIBS, httpConnectEncrypt)
838                 else
839                         AC_MSG_WARN([cups-config around but cups-devel not installed])
840                         CFLAGS=$ac_save_CFLAGS
841                         LDFLAGS=$ac_save_LDFLAGS
842                         PRINT_LIBS=$ac_save_PRINT_LIBS
843                 fi
844
845         elif test x"$enable_cups" = x"yes"; then
846                 AC_MSG_ERROR(Cups support required but cups-config not located.  Make sure cups-devel related files are installed.)
847         fi
848 fi
849
850 AC_ARG_ENABLE(iprint,
851 [AS_HELP_STRING([--enable-iprint], [Turn on iPrint support (default=yes if cups is yes)])])
852
853 if test x$enable_iprint != xno; then
854         if test x"$samba_cv_HAVE_CUPS" = xyes; then
855                 AC_DEFINE(HAVE_IPRINT,1,[Whether we have iPrint])
856         elif test x"$enable_iprint" = x"yes"; then
857                 AC_MSG_ERROR(iPrint support required but cups not enabled.  Make sure cups-devel related files are installed and that cups is enabled.)
858         fi
859 fi
860
861 ############################################
862 # check if the compiler will optimize out function calls
863 AC_CACHE_CHECK([if the compiler will optimize out function calls],samba_cv_optimize_out_funcation_calls, [
864     AC_TRY_LINK([
865 #include <stdio.h>],
866 [
867                 if (0) {
868                    this_function_does_not_exist();
869                 } else {
870                   return 1;
871                 }
872
873 ],
874         samba_cv_optimize_out_funcation_calls=yes,samba_cv_optimize_out_funcation_calls=no)])
875 if test x"$samba_cv_optimize_out_funcation_calls" = x"yes"; then
876    AC_DEFINE(HAVE_COMPILER_WILL_OPTIMIZE_OUT_FNS,1,[Whether the compiler will optimize out function calls])
877 fi
878
879 #############################################
880 # check for fd passing struct via msg_control
881 AC_CACHE_CHECK([for fd passing via msg_control],samba_cv_msghdr_msg_control, [
882     AC_TRY_COMPILE([
883 #include <sys/types.h>
884 #include <stdlib.h>
885 #include <stddef.h>
886 #include <sys/socket.h>
887 #include <sys/un.h>],
888 [
889         struct msghdr msg;
890         union {
891               struct cmsghdr cm;
892               char control[CMSG_SPACE(sizeof(int))];
893         } control_un;
894         msg.msg_control = control_un.control;
895         msg.msg_controllen = sizeof(control_un.control);
896 ],
897         samba_cv_msghdr_msg_control=yes,samba_cv_msghdr_msg_control=no)])
898 if test x"$samba_cv_msghdr_msg_control" = x"yes"; then
899    AC_DEFINE(HAVE_MSGHDR_MSG_CONTROL,1,
900              [If we can use msg_control for passing file descriptors])
901 fi
902
903 #############################################
904 # check for fd passing struct via msg_acctrights
905 AC_CACHE_CHECK([for fd passing via msg_acctrights],
906                 samba_cv_msghdr_msg_acctrights, [
907     AC_TRY_COMPILE([
908 #include <sys/types.h>
909 #include <stdlib.h>
910 #include <stddef.h>
911 #include <sys/socket.h>
912 #include <sys/un.h>],
913 [
914         struct msghdr msg;
915         int fd;
916         msg.msg_acctrights = (caddr_t) &fd;
917         msg.msg_acctrightslen = sizeof(fd);
918 ],
919         samba_cv_msghdr_msg_acctrights=yes,samba_cv_msghdr_msg_acctrights=no)])
920 if test x"$samba_cv_msghdr_msg_acctrights" = x"yes"; then
921    AC_DEFINE(HAVE_MSGHDR_MSG_ACCTRIGHTS,1,
922              [If we can use msg_acctrights for passing file descriptors])
923 fi
924
925 AC_CHECK_FUNCS(dirfd)
926 if test x"$ac_cv_func_dirfd" = x"yes"; then
927         default_shared_modules="$default_shared_modules vfs_syncops vfs_dirsort"
928 fi
929
930 AC_CACHE_CHECK([for struct sigevent type],samba_cv_struct_sigevent, [
931     AC_TRY_COMPILE([
932 #include <sys/types.h>
933 #if STDC_HEADERS
934 #include <stdlib.h>
935 #include <stddef.h>
936 #endif
937 #include <signal.h>],[struct sigevent s;],
938         samba_cv_struct_sigevent=yes,samba_cv_struct_sigevent=no)])
939 if test x"$samba_cv_struct_sigevent" = x"yes"; then
940    AC_DEFINE(HAVE_STRUCT_SIGEVENT,1,[Whether we have the struct sigevent])
941    AC_CHECK_MEMBERS([struct sigevent.sigev_value.sival_ptr,struct sigevent.sigev_value.sigval_ptr], , ,
942         [#include <signal.h>])
943 fi
944
945 AC_CACHE_CHECK([for struct timespec type],samba_cv_struct_timespec, [
946     AC_TRY_COMPILE([
947 #include <sys/types.h>
948 #if STDC_HEADERS
949 #include <stdlib.h>
950 #include <stddef.h>
951 #endif
952 #if TIME_WITH_SYS_TIME
953 # include <sys/time.h>
954 # include <time.h>
955 #else
956 # if HAVE_SYS_TIME_H
957 #  include <sys/time.h>
958 # else
959 #  include <time.h>
960 # endif
961 #endif
962 ],[struct timespec ts;],
963         samba_cv_struct_timespec=yes,samba_cv_struct_timespec=no)])
964 if test x"$samba_cv_struct_timespec" = x"yes"; then
965    AC_DEFINE(HAVE_STRUCT_TIMESPEC,1,[Whether we have struct timespec])
966 fi
967
968 # and glibc has setresuid under linux but the function does
969 # nothing until kernel 2.1.44! very dumb.
970 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
971     AC_TRY_RUN([#include <errno.h>
972 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
973         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
974 if test x"$samba_cv_have_setresuid" = x"yes"; then
975     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
976 fi
977
978 # Do the same check for setresguid...
979 #
980 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
981     AC_TRY_RUN([#include <unistd.h>
982 #include <errno.h>
983 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
984         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
985 if test x"$samba_cv_have_setresgid" = x"yes"; then
986     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
987 fi
988
989 AC_FUNC_MEMCMP
990
991 ###############################################
992 # Readline included by default unless explicitly asked not to
993 test "${with_readline+set}" != "set" && with_readline=yes
994
995 # test for where we get readline() from
996 AC_MSG_CHECKING(whether to use readline)
997 AC_ARG_WITH(readline,
998 [AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])],
999 [  case "$with_readline" in
1000   yes)
1001     AC_MSG_RESULT(yes)
1002
1003     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1004     AC_CHECK_HEADERS(readline/history.h)
1005
1006     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1007       for termlib in ncurses curses termcap terminfo termlib tinfo; do
1008        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1009       done
1010       AC_CHECK_LIB(readline, rl_callback_handler_install,
1011        [TERMLIBS="-lreadline $TERMLIBS"
1012        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1013        break], [TERMLIBS=], $TERMLIBS)])
1014     ;;
1015   no)
1016     AC_MSG_RESULT(no)
1017     ;;
1018   *)
1019     AC_MSG_RESULT(yes)
1020
1021     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
1022     # alternate readline path
1023     _ldflags=${LDFLAGS}
1024     _cppflags=${CPPFLAGS}
1025
1026     # Add additional search path
1027     LDFLAGS="-L$with_readline/lib $LDFLAGS"
1028     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1029
1030     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
1031     AC_CHECK_HEADERS(readline/history.h)
1032
1033     AC_CHECK_HEADERS(readline.h readline/readline.h,[
1034       for termlib in ncurses curses termcap terminfo termlib; do
1035        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
1036       done
1037       AC_CHECK_LIB(readline, rl_callback_handler_install,
1038        [TERMLDFLAGS="-L$with_readline/lib"
1039        TERMCPPFLAGS="-I$with_readline/include"
1040        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
1041        TERMLIBS="-lreadline $TERMLIBS"
1042        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
1043        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
1044
1045     LDFLAGS=$_ldflags
1046     ;;
1047   esac],
1048   AC_MSG_RESULT(no)
1049 )
1050 AC_SUBST(TERMLIBS)
1051 AC_SUBST(TERMLDFLAGS)
1052
1053 # The readline API changed slightly from readline3 to readline4, so
1054 # code will generate warnings on one of them unless we have a few
1055 # special cases.
1056 AC_CHECK_LIB(readline, rl_completion_matches,
1057              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1,
1058                         [Do we have rl_completion_matches?])],
1059              [],
1060              [$TERMLIBS])
1061
1062 # not all readline libs have rl_event_hook or history_list
1063 AC_CHECK_DECLS(rl_event_hook, [], [], [#include <readline/readline.h>])
1064 AC_CHECK_LIB(readline, history_list,
1065              [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])],
1066              [],
1067              [$TERMLIBS])
1068
1069 ###############################################
1070 # test for where we get yp_get_default_domain() from
1071 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
1072 AC_CHECK_FUNCS(yp_get_default_domain)
1073
1074 # Check if we have execl, if not we need to compile smbrun.
1075 AC_CHECK_FUNCS(execl)
1076 if test x"$ac_cv_func_execl" = x"no"; then
1077     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
1078 fi
1079
1080 AC_CHECK_FUNCS(getcwd fchown chmod fchmod mknod mknod64)
1081 AC_CHECK_FUNCS(strtol)
1082 AC_CHECK_FUNCS(strchr chflags)
1083 AC_CHECK_FUNCS(getrlimit fsync setpgid)
1084 AC_CHECK_FUNCS(fdatasync,,[AC_CHECK_LIB_EXT(rt, LIBS, fdatasync)])
1085 AC_CHECK_FUNCS(setsid glob strpbrk crypt16 getauthuid)
1086 AC_CHECK_FUNCS(sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
1087 AC_CHECK_FUNCS(initgroups select poll rdchk getgrnam getgrent pathconf)
1088 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf stat64 fstat64)
1089 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt lseek64 ftruncate64 posix_fallocate posix_fallocate64)
1090 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam)
1091 AC_CHECK_FUNCS(opendir64 readdir64 seekdir64 telldir64 rewinddir64 closedir64)
1092 AC_CHECK_FUNCS(getpwent_r)
1093 AC_CHECK_FUNCS(getdents64)
1094 AC_CHECK_FUNCS(setenv strcasecmp fcvt fcvtl)
1095 AC_CHECK_FUNCS(syslog vsyslog timegm)
1096 AC_CHECK_FUNCS(setlocale nl_langinfo)
1097 AC_CHECK_FUNCS(nanosleep,,[AC_CHECK_LIB_EXT(rt, LIBS, nanosleep)])
1098 AC_CHECK_FUNCS(lutimes futimes utimensat futimens)
1099 AC_CHECK_FUNCS(mlock munlock mlockall munlockall)
1100 AC_CHECK_FUNCS(memalign posix_memalign hstrerror)
1101 AC_CHECK_HEADERS(sys/mman.h)
1102 # setbuffer, shmget, shm_open are needed for smbtorture
1103 AC_CHECK_FUNCS(shmget shm_open)
1104 AC_CHECK_FUNCS(gettext dgettext)
1105 AC_CHECK_FUNCS(bindtextdomain textdomain)
1106 AC_CHECK_FUNCS(strupr)
1107
1108 # Find a method of generating a stack trace
1109 AC_CHECK_HEADERS(execinfo.h libexc.h libunwind.h)
1110 # libexecinfo provides backtrace_symbols on FreeBSD
1111 AC_SEARCH_LIBS(backtrace_symbols, [execinfo])
1112 AC_CHECK_FUNCS(backtrace_symbols)
1113 AC_CHECK_LIB(exc, trace_back_stack)
1114
1115 # check for sysctlbyname for BSD systems
1116 AC_CHECK_FUNCS(sysctlbyname)
1117
1118 #################################################
1119 # Check to see if core dump directory is defined in linux
1120 # with /proc/sys/kernel/core_pattern
1121
1122 AC_CHECK_FILE([/proc/sys/kernel/core_pattern],
1123         AC_DEFINE(HAVE_SYS_KERNEL_PROC_CORE_PATTERN, 1,
1124         [Whether Linux kernel uses core_pattern for core files]),
1125          [])
1126
1127 #############################
1128 # check if building with gpfs
1129 AC_CHECK_HEADERS(gpfs_gpl.h)
1130 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes"; then
1131     AC_DEFINE(HAVE_GPFS,1,[Whether GPFS GPL headers are available])
1132     default_shared_modules="$default_shared_modules vfs_gpfs"
1133 fi
1134
1135 #############################################
1136 # check if building on Isilon OneFS
1137 printf "%s" "checking for Isilon OneFS... "
1138 save_LIBS="$LIBS"
1139 LIBS="$LIBS -lisi_version"
1140 AC_TRY_LINK([#include <isi_version/isi_version.h>],
1141           [get_isilon_copyright()],
1142           samba_cv_HAVE_ONEFS=yes,
1143           samba_cv_HAVE_ONEFS=no)
1144 echo $samba_cv_HAVE_ONEFS
1145 if test x"$samba_cv_HAVE_ONEFS" = x"yes"; then
1146     AC_DEFINE(HAVE_ONEFS,1,[Whether building on Isilon OneFS])
1147     default_shared_modules="$default_shared_modules vfs_onefs vfs_onefs_shadow_copy perfcount_onefs"
1148     default_static_modules="$default_static_modules"
1149     ONEFS_LIBS="-lisi_acl -lisi_ecs -lisi_event -lisi_util"
1150     # Need to also add general libs for oplocks support
1151     save_LIBS="$save_LIBS -lisi_ecs -lisi_event -lisi_util -ldevstat"
1152 fi
1153 AC_SUBST(ONEFS_LIBS)
1154 LIBS="$save_LIBS"
1155
1156 # Note that all the libunwind symbols in the API are defined to internal
1157 # platform-specific version, so we must include libunwind.h before checking
1158 # any of them.
1159 AC_MSG_CHECKING([for libunwind])
1160 save_LIBS=$LIBS
1161
1162 UNWIND_ARCH="unknown"
1163 if test x"$UNAME_I" != x"unknown"; then
1164         UNWIND_ARCH="$UNAME_I"
1165 elif test x"$UNAME_M" != x"unknown"; then
1166         UNWIND_ARCH="$UNAME_M"
1167 elif test x"$UNAME_P" != x"unknown"; then
1168         UNWIND_ARCH="$UNAME_P"
1169 fi
1170
1171 case "$UNWIND_ARCH" in
1172         unknown)
1173                 # This probably won't link without
1174                 # the platform-specific libunwind.
1175                 LIBS="$LIBS -lunwind"
1176                 ;;
1177         i386|i586|i686)
1178                 # Add the platform-specific libunwind module.
1179                 LIBS="$LIBS -lunwind -lunwind-x86"
1180                 ;;
1181         *)
1182                 # Add the platform-specific libunwind module.
1183                 # based on uname -i, uname -m or uname -p
1184                 LIBS="$LIBS -lunwind -lunwind-$UNWIND_ARCH"
1185                 ;;
1186 esac
1187
1188 AC_TRY_LINK(
1189     [
1190 #ifdef HAVE_LIBUNWIND_H
1191 #include <libunwind.h>
1192 #endif
1193     ],
1194     [
1195         unw_context_t ctx; unw_cursor_t cur;
1196         char buf[256]; unw_word_t off;
1197         unw_getcontext(&ctx); unw_init_local(&cur, &ctx);
1198         unw_get_proc_name(&cur, buf, sizeof(buf), &off);
1199     ],
1200     [
1201         AC_MSG_RESULT(yes)
1202         AC_DEFINE(HAVE_LIBUNWIND, 1, [Whether libunwind is available])
1203
1204         # If we have libunwind, test whether we also have libunwind-ptrace
1205         # which would let us unwind arbitrary processes.
1206         save_LIBS=$LIBS
1207         AC_CHECK_HEADERS(libunwind-ptrace.h)
1208         AC_CHECK_LIB(unwind-ptrace, _UPT_create,
1209             [
1210                 LIBUNWIND_PTRACE="-lunwind-ptrace";
1211                 AC_DEFINE(HAVE_LIBUNWIND_PTRACE, 1,
1212                     [Whether libunwind-ptrace.a is available.])
1213             ],
1214             [ LIBUNWIND_PTRACE="" ])
1215
1216         LIBS=$save_LIBS
1217     ],
1218     [
1219         AC_MSG_RESULT(no)
1220         LIBS=$save_LIBS
1221     ])
1222
1223 # To use libunwind-ptrace, we also need to make some ptrace system calls.
1224 if test x"$LIBUNWIND_PTRACE" != x"" ; then
1225     AC_CHECK_HEADERS(sys/ptrace.h)
1226     AC_MSG_CHECKING([for the Linux ptrace(2) interface])
1227     AC_TRY_LINK(
1228             [
1229 #if HAVE_SYS_TYPES_H
1230 #include <sys/types.h>
1231 #endif
1232 #if HAVE_SYS_PTRACE_H
1233 #include <sys/ptrace.h>
1234 #endif
1235             ],
1236             [
1237                 pid_t me = (pid_t)-1;
1238                 ptrace(PTRACE_ATTACH, me, 0, 0);
1239                 ptrace(PTRACE_DETACH, me, 0, 0);
1240                 return 0;
1241             ],
1242             [
1243                 AC_MSG_RESULT(yes)
1244                 AC_DEFINE(HAVE_LINUX_PTRACE, 1,
1245                     [Whether the Linux ptrace(2) interface is available.])
1246             ],
1247             [
1248                 AC_MSG_RESULT(no)
1249                 LIBUNWIND_PTRACE=""
1250             ])
1251 fi
1252
1253 AC_SUBST(LIBUNWIND_PTRACE)
1254
1255 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
1256 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
1257 AC_CHECK_FUNCS(__getcwd _getcwd)
1258 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
1259 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
1260 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
1261 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
1262 AC_CHECK_FUNCS(getdents __getdents _lseek __lseek _read __read)
1263 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
1264 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
1265 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
1266 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
1267 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
1268 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
1269 AC_CHECK_FUNCS(prctl)
1270
1271 AC_TRY_COMPILE([
1272 #ifdef HAVE_SYS_PRCTL_H
1273 #include <sys/prctl.h>
1274 #endif
1275 ],
1276 [int i; i = prtcl(0); ],
1277 AC_DEFINE(HAVE_PRCTL, 1, [Whether prctl is available]),[])
1278
1279 #
1280 #
1281 #
1282 case "$host_os" in
1283     *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
1284        # glibc <= 2.3.2 has a broken getgrouplist
1285        AC_CACHE_CHECK([for good getgrouplist],samba_cv_linux_getgrouplist_ok,[AC_TRY_RUN([
1286 #include <unistd.h>
1287 #include <sys/utsname.h>
1288 main() {
1289        /* glibc up to 2.3 has a broken getgrouplist */
1290 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
1291        int libc_major = __GLIBC__;
1292        int libc_minor = __GLIBC_MINOR__;
1293
1294        if (libc_major < 2)
1295               exit(1);
1296        if ((libc_major == 2) && (libc_minor <= 3))
1297               exit(1);
1298 #endif
1299        exit(0);
1300 }
1301 ], [samba_cv_linux_getgrouplist_ok=yes],
1302    [samba_cv_linux_getgrouplist_ok=no],
1303    [samba_cv_linux_getgrouplist_ok=cross])])
1304        if test x"$samba_cv_linux_getgrouplist_ok" = x"yes"; then
1305           AC_DEFINE(HAVE_GETGROUPLIST, 1, [Have good getgrouplist])
1306        fi
1307        ;;
1308     *)
1309        AC_CHECK_FUNCS(getgrouplist)
1310        ;;
1311 esac
1312
1313 #
1314 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
1315 #
1316
1317 if test x$ac_cv_func_stat64 = xno ; then
1318   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
1319   AC_TRY_LINK([
1320 #if defined(HAVE_UNISTD_H)
1321 #include <unistd.h>
1322 #endif
1323 #include <sys/stat.h>
1324 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
1325   AC_MSG_RESULT([$ac_cv_func_stat64])
1326   if test x$ac_cv_func_stat64 = xyes ; then
1327     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
1328   fi
1329 fi
1330
1331 if test x$ac_cv_func_lstat64 = xno ; then
1332   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
1333   AC_TRY_LINK([
1334 #if defined(HAVE_UNISTD_H)
1335 #include <unistd.h>
1336 #endif
1337 #include <sys/stat.h>
1338 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
1339   AC_MSG_RESULT([$ac_cv_func_lstat64])
1340   if test x$ac_cv_func_lstat64 = xyes ; then
1341     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
1342   fi
1343 fi
1344
1345 if test x$ac_cv_func_fstat64 = xno ; then
1346   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
1347   AC_TRY_LINK([
1348 #if defined(HAVE_UNISTD_H)
1349 #include <unistd.h>
1350 #endif
1351 #include <sys/stat.h>
1352 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
1353   AC_MSG_RESULT([$ac_cv_func_fstat64])
1354   if test x$ac_cv_func_fstat64 = xyes ; then
1355     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
1356   fi
1357 fi
1358
1359 #################################################
1360 # Check whether struct stat has timestamps with sub-second resolution.
1361 #
1362
1363 samba_cv_stat_hires=no
1364 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec], # Linux, Solaris
1365         [samba_cv_stat_hires=yes])
1366 AC_CHECK_MEMBERS([struct stat.st_mtimensec], # BSD, if defined _POSIX_SOURCE
1367         [samba_cv_stat_hires=yes])
1368 AC_CHECK_MEMBERS([struct stat.st_mtimespec.tv_nsec], # BSD, if not defined _POSIX_SOURCE
1369         [samba_cv_stat_hires=yes])
1370 AC_CHECK_MEMBERS([struct stat.st_mtime_n], # AIX
1371         [samba_cv_stat_hires=yes])
1372 AC_CHECK_MEMBERS([struct stat.st_umtime], # Tru64
1373         [samba_cv_stat_hires=yes])
1374
1375 if test x"$samba_cv_stat_hires" = x"yes" ; then
1376     AC_DEFINE(HAVE_STAT_HIRES_TIMESTAMPS, 1,
1377             [whether struct stat has sub-second timestamps])
1378 fi
1379
1380 # recent FreeBSD, NetBSD have creation timestamps called birthtime:
1381 AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec])
1382 AC_CHECK_MEMBERS([struct stat.st_birthtime], AC_CHECK_MEMBERS([struct stat.st_birthtimensec]))
1383
1384
1385 AC_CACHE_CHECK([whether there is DOS flags support in the stat struct], samba_cv_stat_dos_flags,
1386     [
1387         AC_TRY_COMPILE(
1388             [#include <sys/stat.h>],
1389             [
1390                 int a = UF_DOS_ARCHIVE;
1391                 int h = UF_DOS_HIDDEN;
1392                 int r = UF_DOS_RO;
1393                 int s = UF_DOS_SYSTEM;
1394                 int i = UF_DOS_NOINDEX;
1395                 int f = UF_DOS_FLAGS;
1396             ],
1397             samba_cv_stat_dos_flags=yes, samba_cv_stat_dos_flags=no)
1398     ])
1399
1400 if test x"$samba_cv_stat_dos_flags" = x"yes" ; then
1401     AC_DEFINE(HAVE_STAT_DOS_FLAGS, 1, [whether there is DOS flags support in the stat struct])
1402 fi
1403
1404 AC_CACHE_CHECK([whether we can compile with __attribute__((destructor))],
1405                samba_cv_function_attribute_destructor,
1406                [
1407                  AC_COMPILE_IFELSE(
1408                         [
1409                                 __attribute__((destructor))
1410                                 static void cleanup(void) { }
1411                         ],
1412                         samba_cv_function_attribute_destructor=yes)
1413                 ])
1414
1415 if test x"$samba_cv_function_attribute_destructor" = xyes ; then
1416    AC_DEFINE(HAVE_FUNCTION_ATTRIBUTE_DESTRUCTOR, 1,
1417              [whether we can compile with __attribute__((destructor))])
1418 fi
1419
1420 #####################################
1421 # needed for SRV lookups
1422 AC_CHECK_LIB(resolv, dn_expand)
1423 AC_CHECK_LIB(resolv, _dn_expand)
1424 AC_CHECK_LIB(resolv, __dn_expand)
1425
1426 #
1427 # Check for the functions putprpwnam, set_auth_parameters,
1428 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
1429 # Needed for OSF1 and HPUX.
1430 #
1431
1432 AC_LIBTESTFUNC(security, putprpwnam)
1433 AC_LIBTESTFUNC(sec, putprpwnam)
1434
1435 AC_LIBTESTFUNC(security, set_auth_parameters)
1436 AC_LIBTESTFUNC(sec, set_auth_parameters)
1437
1438 # UnixWare 7.x has its getspnam in -lgen
1439 AC_LIBTESTFUNC(gen, getspnam)
1440
1441 AC_LIBTESTFUNC(security, getspnam)
1442 AC_LIBTESTFUNC(sec, getspnam)
1443
1444 AC_LIBTESTFUNC(security, bigcrypt)
1445 AC_LIBTESTFUNC(sec, bigcrypt)
1446
1447 AC_LIBTESTFUNC(security, getprpwnam)
1448 AC_LIBTESTFUNC(sec, getprpwnam)
1449
1450 AC_CHECK_FUNCS(strsignal)
1451
1452 ############################################
1453 # Check for EA implementations
1454 case "$host_os" in
1455   *osf*)
1456         AC_SEARCH_LIBS(getproplist, [proplist])
1457         AC_CHECK_FUNCS(getproplist fgetproplist setproplist fsetproplist)
1458         AC_CHECK_FUNCS(delproplist fdelproplist add_proplist_entry get_proplist_entry)
1459         AC_CHECK_FUNCS(sizeof_proplist_entry)
1460   ;;
1461   *freebsd4* | *dragonfly* )
1462         AC_DEFINE(BROKEN_EXTATTR, 1, [Does extattr API work])
1463   ;;
1464   *solaris*)
1465         AC_CHECK_FUNCS(attropen)
1466   ;;
1467   *)
1468         AC_SEARCH_LIBS(getxattr, [attr])
1469         AC_CHECK_FUNCS(getxattr,[
1470                 AC_CHECK_FUNCS(lgetxattr fgetxattr listxattr llistxattr flistxattr removexattr lremovexattr fremovexattr setxattr lsetxattr fsetxattr)
1471                 ])
1472         AC_CHECK_FUNCS(getea,[
1473                 AC_CHECK_FUNCS(fgetea lgetea listea flistea llistea removeea fremoveea lremoveea setea fsetea lsetea)
1474                 ])
1475         AC_CHECK_FUNCS(attr_get,[
1476                 AC_CHECK_FUNCS(attr_list attr_set attr_remove attr_getf attr_listf attr_setf attr_removef)
1477                 ])
1478         AC_CHECK_FUNCS(extattr_delete_file,[
1479                 AC_CHECK_FUNCS(extattr_delete_fd extattr_delete_link extattr_get_fd extattr_get_file extattr_get_link extattr_list_fd extattr_list_file extattr_list_link extattr_set_fd extattr_set_file extattr_set_link)
1480                 ])
1481   ;;
1482 esac
1483
1484 ########################################################
1485 # Do xattr functions take additional options like on Darwin?
1486 if test x"$ac_cv_func_getxattr" = x"yes" ; then
1487         AC_CACHE_CHECK([whether xattr interface takes additional options], smb_attr_cv_xattr_add_opt, [
1488                 old_LIBS=$LIBS
1489                 LIBS="$LIBS $ACL_LIBS"
1490                 AC_TRY_COMPILE([
1491                         #include <sys/types.h>
1492                         #if HAVE_ATTR_XATTR_H
1493                         #include <attr/xattr.h>
1494                         #elif HAVE_SYS_XATTR_H
1495                         #include <sys/xattr.h>
1496                         #endif
1497                 ],[
1498                         getxattr(0, 0, 0, 0, 0, 0);
1499                 ],
1500                 [smb_attr_cv_xattr_add_opt=yes],
1501                 [smb_attr_cv_xattr_add_opt=no;LIBS=$old_LIBS])
1502         ])
1503         if test x"$smb_attr_cv_xattr_add_opt" = x"yes"; then
1504                 AC_DEFINE(XATTR_ADD_OPT, 1, [xattr functions have additional options])
1505         fi
1506 fi
1507
1508 AC_DISABLE_STATIC
1509 AC_ENABLE_SHARED
1510
1511 # Set defaults
1512 PIE_CFLAGS=""
1513 PIE_LDFLAGS=""
1514 AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Turn on pie support if available (default=yes)])])
1515
1516 if test "x$enable_pie" != xno
1517 then
1518         AC_CACHE_CHECK(for -pie and -fPIE, samba_cv_fpie,
1519         [
1520                 cat > conftest.c <<EOF
1521 int foo;
1522 int main () { return 0;}
1523 EOF
1524                 if AC_TRY_COMMAND_NO_STDERR([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -pie -fPIE -o conftest conftest.c])
1525                 then
1526                         samba_cv_fpie=yes
1527                 else
1528                         samba_cv_fpie=no
1529                 fi
1530                 rm -f conftest*
1531         ])
1532         if test x"${samba_cv_fpie}" = x"yes"
1533         then
1534                 PIE_CFLAGS="-fPIE"
1535                 PIE_LDFLAGS="-pie"
1536         fi
1537 fi
1538
1539 # Set defaults
1540 RELRO_LDFLAGS=""
1541 AC_ARG_ENABLE(relro, [AS_HELP_STRING([--enable-relro], [Turn on Relocations Read-Only (relro) support if available (default=yes)])])
1542
1543 if test "x$enable_relro" != xno
1544 then
1545         AC_CACHE_CHECK([for -Wl,-z,relro], samba_cv_relro,
1546         [
1547                 cat > conftest.c <<EOF
1548 int foo;
1549 main () { return 0;}
1550 EOF
1551                 if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-z,relro -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
1552                 then
1553                         samba_cv_relro=yes
1554                 else
1555                         samba_cv_relro=no
1556                 fi
1557                 rm -f conftest*
1558         ])
1559         if test x"${samba_cv_relro}" = x"yes"
1560         then
1561                 RELRO_LDFLAGS="-Wl,-z,relro"
1562         fi
1563 fi
1564
1565 # Set defaults
1566 SYMSEXT="syms"
1567 AC_SUBST(SYMSEXT)
1568
1569 # Assume non-shared by default and override below
1570 BLDSHARED="false"
1571
1572 # these are the defaults, good for lots of systems
1573 HOST_OS="$host_os"
1574 LDSHFLAGS="-shared"
1575 MODULE_EXPORTS=""
1576 SONAMEFLAG="#"
1577 SHLD="\${CC} \${CFLAGS}"
1578 PICFLAG="${PIE_CFLAGS}"
1579 SHLIBEXT="so"
1580 DSO_EXPORTS=""
1581
1582 # this bit needs to be modified for each OS that supports share libs
1583 # You need to specify how to create a shared library and
1584   # how to compile C code to produce PIC object files
1585
1586   AC_MSG_CHECKING([ability to build shared libraries])
1587
1588   # and these are for particular systems
1589   case "$host_os" in
1590                 *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu | *qnx*)
1591                         case "$host_os" in
1592                                 *linux*) AC_DEFINE(LINUX,1,[Whether the host os is linux]) ;;
1593                                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx]) ;;
1594                         esac
1595                         BLDSHARED="true"
1596                         LDSHFLAGS="-shared -Wl,-Bsymbolic"
1597                         if test "${ac_cv_gnu_ld_no_default_allow_shlib_undefined}" = "yes"; then
1598                                 LDSHFLAGS_Z_NODEFS="-Wl,--allow-shlib-undefined"
1599                         fi
1600                         DYNEXP="-Wl,--export-dynamic"
1601                         PICFLAG="-fPIC"
1602                         SONAMEFLAG="-Wl,-soname="
1603                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1604                         ;;
1605                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
1606                         BLDSHARED="true"
1607                         if test "${GCC}" = "yes"; then
1608                                 PICFLAG="-fPIC"
1609                                 SONAMEFLAG="-Wl,-soname="
1610                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
1611                                         DYNEXP="-Wl,-E"
1612                                 fi
1613                                 LDSHFLAGS="-shared"
1614                         else
1615                                 PICFLAG="-KPIC"
1616                                 LDSHFLAGS="-G"
1617                         fi
1618                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1619                                 SONAMEFLAG="-Wl,-soname="
1620                         else
1621                                 SONAMEFLAG="-Wl,-h,"
1622                         fi
1623                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1624                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1625                         ;;
1626                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
1627                         BLDSHARED="true"
1628                         LDSHFLAGS="-G"
1629                         SONAMEFLAG="-Wl,-h,"
1630                         PICFLAG="-KPIC"   # Is this correct for SunOS
1631                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1632                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1633                         ;;
1634                 *netbsd* | *freebsd* | *dragonfly* )
1635                         BLDSHARED="true"
1636                         LDSHFLAGS="-shared"
1637                         DYNEXP="-Wl,--export-dynamic"
1638                         SONAMEFLAG="-Wl,-soname,"
1639                         PICFLAG="-fPIC -DPIC"
1640                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1641                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1642                         ;;
1643                 *openbsd*)  BLDSHARED="true"
1644                         LDSHFLAGS="-shared"
1645                         DYNEXP="-Wl,-Bdynamic"
1646                         SONAMEFLAG="-Wl,-soname,"
1647                         PICFLAG="-fPIC"
1648                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1649                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1650                         ;;
1651                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
1652                         case "$host_os" in
1653                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
1654                         ;;
1655                         esac
1656                         BLDSHARED="true"
1657                         LDSHFLAGS="-Wl,-set_version,sgi1.0 -shared"
1658                         SONAMEFLAG="-Wl,-soname,"
1659                         if test "${GCC}" = "yes"; then
1660                                 PICFLAG="-fPIC"
1661                         else
1662                                 PICFLAG="-KPIC"
1663                         fi
1664                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
1665                         ;;
1666                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
1667                         BLDSHARED="true"
1668                         # use expfull to export underscored symbols
1669                         # add rtl to remove /lib/crt0.o warning
1670                         LDSHFLAGS="-Wl,-G,-bexpfull,-bbigtoc,-brtl"
1671                         DYNEXP="-Wl,-brtl,-bexpfull,-bbigtoc"
1672                         PICFLAG="-O2"
1673                         # as AIX code is always position independent...
1674                         # .po will just create compile warnings, use po.o:
1675                         if test "${GCC}" != "yes"; then
1676                                 ## for funky AIX compiler using strncpy()
1677                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000 -qhalt=e"
1678                         fi
1679
1680                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
1681                         AC_DEFINE(BROKEN_STRNLEN,1,[Does strnlen work correctly])
1682                         AC_DEFINE(BROKEN_STRNDUP,1,[Does strndup work correctly])
1683                         ;;
1684                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
1685                         # ia64: 64bit build using gcc with CFLAGS="-mpl64"
1686                         #       64bit build using HP's cc with CFLAGS="+DD64"
1687                         # hppa: 64bit build unsupported by gcc
1688                         #       64bit build using HP's cc with CFLAGS="+DA2.0w"
1689                         # HP-UX 11.00 ld needs PHSS_33034
1690                         BLDSHARED="true"
1691                         if test "${GCC}" = "yes"; then
1692                                 PICFLAG="-fPIC"
1693                                 LDSHFLAGS="-shared"
1694                         else
1695                                 PICFLAG="+z"
1696                                 LDSHFLAGS="-b"
1697                                 # "Uses depth-first symbol resolution"
1698                                 LDSHFLAGS="$LDSHFLAGS -Wl,-B,symbolic,-b"
1699                                 if test "$host_cpu" != "ia64"; then
1700                                         # "don't store literals in read-only memory" (?):
1701                                         PICFLAG="$PICFLAG +ESnolit"
1702                                 fi
1703                         fi
1704                         if test "$host_cpu" = "ia64"; then
1705                                 SHLIBEXT="so"
1706                                 # TODO: does the linker find the right 32/64 bit version of the libs? :
1707                                 DYNEXP="-Wl,-E,+b/usr/local/lib/hpux32:/usr/lib/hpux32:/usr/local/lib/hpux64:/usr/lib/hpux64"
1708                         else
1709                                 SHLIBEXT="sl"
1710                                 DYNEXP="-Wl,-E,+b/usr/local/lib:/usr/lib"
1711                         fi
1712                         if test "$ac_cv_prog_gnu_ld" = "yes"; then
1713                                 SONAMEFLAG="-Wl,-soname="
1714                         else
1715                                 SONAMEFLAG="-Wl,+h,"
1716                         fi
1717                         # PIE/PIC flags at link time are required on HP-UX because
1718                         # linking requires a temporary source file, which is being
1719                         # compiled with the indicated flags - which need to contain
1720                         # PIC flags when we don't support PIE flags:
1721                         if test "$PIE_LDFLAGS" = "" ; then
1722                                 PIE_LDFLAGS=\${PICFLAG}
1723                         fi
1724                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
1725                         AC_DEFINE(POSIX_ACL_NEEDS_MASK,1,[Does a POSIX ACL need a mask element])
1726                         ;;
1727                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
1728                         BLDSHARED="true"
1729                         LDSHFLAGS="-shared"
1730                         SONAMEFLAG="-Wl,-soname,"
1731                         PICFLAG="-fPIC"
1732                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1733                         AC_DEFINE(BROKEN_GETGRNAM,1,[Does getgrnam work correctly])
1734                         for flags in "-expect_unresolved '*'" "-Wl,-expect_unresolved,'*'" ; do
1735                                 saved_ldflags="$LDFLAGS"
1736                                 AC_MSG_CHECKING([if $flags works])
1737                                 LDFLAGS="$flags $saved_ldflags"
1738                                 AC_TRY_LINK([],[],
1739                                         [AC_MSG_RESULT([yes])
1740                                         LDSHFLAGS_Z_NODEFS=$flags],
1741                                         AC_MSG_RESULT([no]))
1742                                 LDFLAGS="$saved_ldflags"
1743                                 test x"$LDSHFLAGS_Z_NODEFS" != x && break
1744                         done
1745                         ;;
1746                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
1747                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1748                         ;;
1749                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
1750                         BLDSHARED="true"
1751                         LDSHFLAGS="-shared"
1752                         SONAMEFLAG="-Wl,-soname,"
1753                         PICFLAG="-KPIC"
1754                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1755                         ;;
1756                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
1757                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1758                         ;;
1759                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
1760                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1761                         ;;
1762                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1763                         case "$host" in
1764                                 *-univel-*)     if [ test "$GCC" != yes ]; then
1765                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1766                                         fi
1767                                         LDSHFLAGS="-G"
1768                                         DYNEXP="-Bexport"
1769                                 ;;
1770                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
1771                         esac
1772                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1773                         ;;
1774
1775                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
1776                         if [ test "$GCC" != yes ]; then
1777                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
1778                         fi
1779                         LDSHFLAGS="-G"
1780                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1781                         ;;
1782                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
1783                         BLDSHARED="false"
1784                         LDSHFLAGS=""
1785                         ;;
1786
1787                 *darwin*)   AC_DEFINE(DARWINOS,1,[Whether the host os is Darwin/MacOSX])
1788                         BLDSHARED="true"
1789                         LDSHFLAGS="-dynamiclib -flat_namespace -undefined suppress"
1790                         CFLAGS="$CFLAGS -fno-common"
1791                         SHLD="\${CC}"
1792                         SHLIBEXT="dylib"
1793                         MODULE_EXPORTS="-exported_symbols_list \$(srcdir)/exports/modules-darwin.syms"
1794                         SHLIBEXT="dylib"
1795                         # Since gcc doesn't fail on unrecognised options, the
1796                         # PIE test incorrectly succeeds. Darwin gcc does not
1797                         # actually support the PIE stuff.
1798                         PIE_LDFLAGS=
1799                         PIE_CFLAGS=
1800                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1801                         ;;
1802
1803                 *)
1804                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
1805                         ;;
1806   esac
1807
1808 if test "$enable_shared" != "yes"; then
1809         BLDSHARED=false
1810 fi
1811
1812 if test "$enable_shared" = yes -a "${ac_cv_gnu_ld_version_script}" = yes; then
1813         DSO_EXPORTS=\$\(DSO_EXPORTS_CMD\)
1814 fi
1815
1816 if test x"$BLDSHARED" = x"true" ; then
1817         LDFLAGS="$LDFLAGS -L./bin"
1818 fi
1819
1820 AC_MSG_RESULT($BLDSHARED)
1821
1822 if test x"$enable_developer" = x"yes" ; then
1823         default_as_needed=auto
1824 else
1825         default_as_needed=no
1826 fi
1827 AC_ARG_ENABLE(as-needed,
1828         AS_HELP_STRING([--enable-as-needed],
1829         [Turn on as-needed support if available (default=no)]),
1830         [enable_as_needed=$enableval],
1831         [enable_as_needed=$default_as_needed])
1832 if test "x$enable_as_needed" != xno; then
1833     saved_before_as_needed_ldflags="$LDFLAGS"
1834     for flags in "-Wl,--as-needed" "-Wl,-z,ignore" "-z ignore" ; do
1835         saved_ldflags="$LDFLAGS"
1836         AC_MSG_CHECKING([if $flags works])
1837         LDFLAGS="$flags $saved_ldflags"
1838         AC_TRY_LINK([],[],
1839                 [AC_MSG_RESULT([yes])
1840                 LD_AS_NEEDED_FLAG=$flags
1841                 ld_as_needed_flag_found=yes],
1842                 AC_MSG_RESULT([no]))
1843         LDFLAGS="$LD_AS_NEEDED_FLAG $saved_ldflags"
1844         test x"$ld_as_needed_flag_found" = xyes && break
1845     done
1846 fi
1847
1848 if test x$ld_as_needed_flag_found = xyes -a x$enable_as_needed = xauto ; then
1849 # check if ld has bug described in https://bugzilla.samba.org/show_bug.cgi?id=7209#c17
1850         AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG has explicit external libs bug])
1851 cat > conftest_shb.c <<END
1852 void b() {}
1853 END
1854 cat > conftest_sha.c <<END
1855 extern void b();
1856 void a() {
1857         b();
1858 }
1859 END
1860 cat > conftest.c <<END
1861 extern void a();
1862 int main() {
1863         a();
1864         return 0;
1865 }
1866 END
1867
1868         rm -fr conftest
1869         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_sha.o conftest_sha.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1870         AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o conftest_shb.o conftest_shb.c 1>&AS_MESSAGE_LOG_FD 2>&1])
1871         TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1872         AC_TRY_COMMAND([$TESTCMD -o libconftest_shb.$SHLIBEXT conftest_shb.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1873         AC_TRY_COMMAND([$TESTCMD -o libconftest_sha.$SHLIBEXT conftest_sha.o 1>&AS_MESSAGE_LOG_FD 2>&1])
1874         AC_TRY_COMMAND([$CC -o conftest conftest.c $LDFLAGS -L. -lconftest_sha -lconftest_shb 1>&AS_MESSAGE_LOG_FD 2>&1])
1875         if AC_TRY_COMMAND([eval "$LIB_PATH_VAR=. ./conftest 1>&AS_MESSAGE_LOG_FD 2>&1"])
1876         then
1877                 AC_MSG_RESULT([no])
1878         else
1879                 ld_as_needed_flag_found=no
1880                 LDFLAGS="$saved_before_as_needed_ldflags"
1881                 AC_MSG_RESULT([yes])
1882         fi
1883         rm conftest* libconftest*
1884 fi
1885
1886 # check if we have to disable LD_AS_NEEDED_FLAG:
1887 # On some systems for a veriety of reasons linking with
1888 # -Wl,--as-needed -lreadline -lncurses fails
1889 # we have to retest, if these combination is detected before.
1890 # Bugzilla #7209
1891
1892 if test x$ac_cv_lib_readline_rl_callback_handler_install = xyes ; then
1893         if test x$ld_as_needed_flag_found = xyes ; then
1894                 AC_MSG_CHECKING([if $LD_AS_NEEDED_FLAG works with readline])
1895                 # try if check no fails
1896                 save_LIBS=$LIBS
1897                 LIBS="$LIBS $TERMLIBS"
1898                 AC_TRY_LINK([], [rl_callback_handler_install();], [AC_MSG_RESULT([yes])],[ AC_MSG_RESULT([no]); LDFLAGS="$saved_before_as_needed_ldflags"])
1899                 LIBS="$save_LIBS"
1900         fi
1901 fi
1902
1903
1904
1905 # for historical reasons almost all linkers don't complain about unresolved
1906 # symbols in shared libs. Except for the internal samba modules we want to get
1907 # errors when we produce a shared lib with unresolved symbols. On some
1908 # platforms unresolved symbols might be intended, so we might have to add
1909 # platform specific exceptions here.
1910
1911 for flags in "-Wl,-z,defs" "-error_unresolved" "-Wl,-error_unresolved" ; do
1912         saved_ldflags="$LDFLAGS"
1913         AC_MSG_CHECKING([if $flags works])
1914         LDFLAGS="$flags $saved_ldflags"
1915         AC_TRY_LINK([],[],
1916         [AC_MSG_RESULT([yes])
1917         LDSHFLAGS_Z_DEFS=$flags
1918         ldshflags_z_defs_found=yes],
1919         AC_MSG_RESULT([no]))
1920         LDFLAGS=$saved_ldflags
1921         test x"$ldshflags_z_defs_found" = xyes && break
1922 done
1923
1924 AC_MSG_CHECKING([LDSHFLAGS_Z_DEFS])
1925 AC_MSG_RESULT([$LDSHFLAGS_Z_DEFS])
1926 AC_MSG_CHECKING([LDFLAGS])
1927 AC_MSG_RESULT([$LDFLAGS])
1928 AC_MSG_CHECKING([DYNEXP])
1929 AC_MSG_RESULT([$DYNEXP])
1930
1931 #######################################################
1932 # test whether building a shared library actually works
1933 if test $BLDSHARED = true; then
1934
1935 AC_MSG_CHECKING([SHLD])
1936 AC_MSG_RESULT([$SHLD])
1937 AC_MSG_CHECKING([LDSHFLAGS])
1938 AC_MSG_RESULT([$LDSHFLAGS])
1939
1940 AC_MSG_CHECKING([SHLIBEXT])
1941 AC_MSG_RESULT([$SHLIBEXT])
1942 AC_MSG_CHECKING([SONAMEFLAG])
1943 AC_MSG_RESULT([$SONAMEFLAG])
1944
1945 AC_MSG_CHECKING([PICFLAG])
1946 AC_MSG_RESULT([$PICFLAG])
1947
1948 AC_MSG_CHECKING([NSSSONAMEVERSIONSUFFIX])
1949 AC_MSG_RESULT([$NSSSONAMEVERSIONSUFFIX])
1950
1951 AC_CACHE_CHECK([whether building shared libraries actually works],
1952                [ac_cv_shlib_works],[
1953    # try building a trivial shared library
1954    ac_cv_shlib_works=no
1955    # The $SHLD and $LDSHFLAGS variables may contain references to other
1956    # variables so they need to be eval'ed.
1957    if AC_TRY_COMMAND([$CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.o ${srcdir-.}/../tests/shlib.c 1>&AS_MESSAGE_LOG_FD])
1958    then
1959      TESTCMD="`eval echo \"$SHLD $LDSHFLAGS $PICFLAG\"`"
1960      TESTCMD="$TESTCMD -o \"shlib.$SHLIBEXT\" shlib.o"
1961      if AC_TRY_COMMAND([eval $TESTCMD 1>&AS_MESSAGE_LOG_FD 2>&1])
1962      then
1963        ac_cv_shlib_works=yes
1964      fi
1965    fi
1966    rm -f "shlib.$SHLIBEXT" shlib.o
1967
1968 ])
1969 if test $ac_cv_shlib_works = no; then
1970    BLDSHARED=false
1971 fi
1972 fi
1973
1974 if test x"$BLDSHARED" != x"true"; then
1975         LDSHFLAGS="shared-libraries-disabled"
1976         SONAMEFLAG="shared-libraries-disabled"
1977         NSSSONAMEVERSIONSUFFIX="shared-libraries-disabled"
1978         SHLD="shared-libraries-disabled"
1979         PICFLAG="${PIE_CFLAGS}"
1980         SHLIBEXT="shared_libraries_disabled"
1981         merged_build_possible=no
1982 fi
1983
1984 AC_MSG_CHECKING([used PICFLAG])
1985 AC_MSG_RESULT([$PICFLAG])
1986
1987 AC_DEFINE_UNQUOTED(SHLIBEXT, "$SHLIBEXT", [Shared library extension])
1988
1989
1990
1991 ###########################################################
1992 #
1993 # Configuration of subsystems / libraries
1994 #
1995 ###########################################################
1996
1997 INSTALLLIBCMD_SH=:
1998 INSTALLLIBCMD_A=:
1999 UNINSTALLLIBCMD_SH=:
2000 UNINSTALLLIBCMD_A=:
2001
2002 if test $BLDSHARED = true; then
2003         INSTALLLIBCMD_SH="\$(INSTALLCMD)"
2004         UNINSTALLLIBCMD_SH="rm -f"
2005 fi
2006 if test $enable_static = yes; then
2007         INSTALLLIBCMD_A="\$(INSTALLCMD)"
2008         UNINSTALLLIBCMD_A="rm -f"
2009 fi
2010
2011 #################################################
2012 # --disable-shared-libs
2013 # can be used to disable the internal use of shared libs altogether
2014 # (this only has an effect when building shared libs is enabled)
2015 #
2016 USESHARED=false
2017 AC_SUBST(USESHARED)
2018
2019 AC_MSG_CHECKING(whether to use shared libraries internally)
2020 AC_ARG_ENABLE([shared-libs],
2021         AS_HELP_STRING([--enable-shared-libs],
2022                 [Use shared libraries internally (default=yes)]),
2023         [enable_shared_libs=$enableval],
2024         [enable_shared_libs=yes])
2025
2026 if test x"$enable_shared_libs" != x"no" ; then
2027         USESHARED=$BLDSHARED
2028 fi
2029
2030 AC_MSG_RESULT([$USESHARED])
2031
2032 if test x"$enable_shared_libs" = x"yes" -a x"$BLDSHARED" != x"true" ; then
2033         AC_MSG_WARN([--enable-shared-libs: no support for shared libraries])
2034 fi
2035
2036 #################################################
2037 # --with-static-libs=LIBS:
2038 #   link (internal) libs dynamically or statically?
2039 #
2040 # If a subsystem is built as a library then this controls whether they are
2041 # linked into Samba targets statically or dynamically:
2042 #
2043 # * If we build the shared library at all, we link dynamically by default.
2044 #
2045 # * We only link statically if we don't build shared or if the library
2046 #   appears in the --with-static-libs configure option.
2047 #
2048 # Example:
2049 #   --with-static-libs=libtalloc makes use of libtalloc.a instead
2050 #   of linking the dynamic variant with -ltalloc.
2051 #
2052 # NOTE: This option only affects libraries that we do not only build
2053 # but that samba also links against as libraries (as opposed to linking
2054 # the plain object files. - This has to be configured in Makefile.in.
2055 # So in particular it does not harm to give invalid or unknown names here.
2056 #
2057
2058 AC_ARG_WITH([static-libs],
2059         [AS_HELP_STRING([--with-static-libs=LIBS],
2060                 [Comma-separated list of names of (internal) libraries to link statically (instead of dynamically)])],
2061         [AS_IF([test $withval],
2062                 [for lib in `echo $withval | sed -e 's/,/ /g'` ; do
2063                         [lib=`echo $lib | tr '[a-z]' '[A-Z]'`]
2064                         eval LINK_$lib=STATIC
2065                 done], [])],
2066         [])
2067
2068 #
2069 # WORKAROUND:
2070 #   until we have organized other internal subsystems (as util, registry
2071 #   and smbconf) into shared libraries, we CAN NOT link libnetapi
2072 #   dynamically to samba programs.
2073 #
2074 LINK_LIBNETAPI=STATIC
2075
2076 LINK_LIBSMBCLIENT=STATIC
2077
2078 #
2079 #  The library versions are hardcoded here
2080 #  and filled into the LIBFOO_SOVER variable.
2081 #
2082 #  TODO: for talloc and tdb (at least), these should
2083 #  be extracted from their respective source directories
2084 #
2085 AC_ARG_ENABLE(external_libtalloc, [AS_HELP_STRING([--enable-external-libtalloc], [Enable external talloc [default=auto]])],
2086 [ enable_external_libtalloc=$enableval ], [ enable_external_libtalloc=auto ])
2087
2088 if test "x$enable_external_libtalloc" != xno
2089 then
2090         PKG_CHECK_MODULES(LIBTALLOC, talloc >= 2.0.1,
2091                 [ enable_external_libtalloc=yes ],
2092                 [ if test x$enable_external_libtalloc = xyes; then
2093                         AC_MSG_ERROR([Unable to find libtalloc])
2094                   else
2095                         enable_external_libtalloc=no
2096                   fi
2097                 ])
2098 fi
2099
2100 if test "x$enable_external_libtalloc" = xno
2101 then
2102         m4_include(../lib/talloc/libtalloc.m4)
2103         LINK_LIBTALLOC=STATIC
2104         SMB_LIBRARY(talloc, 2)
2105         LIBTALLOC_OBJ0=""
2106         for obj in ${TALLOC_OBJ}; do
2107                 LIBTALLOC_OBJ0="${LIBTALLOC_OBJ0} ${tallocdir}/${obj}"
2108         done
2109         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TALLOC_CFLAGS}"
2110         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TALLOC_CFLAGS}"
2111         AC_SUBST(LIBTALLOC_OBJ0)
2112
2113         TALLOCTORT="bin/talloctort\$(EXEEXT)"
2114         AC_SUBST(TALLOCTORT)
2115 fi
2116
2117
2118 AC_ARG_ENABLE(external_libtdb,
2119         [AS_HELP_STRING([--enable-external-libtdb],
2120                 [Enable external tdb [default=auto]])],
2121                 [ enable_external_libtalloc=$enableval ],
2122                 [ enable_external_libtalloc=auto ])
2123
2124 if test "x$enable_external_libtdb" != xno
2125 then
2126         PKG_CHECK_MODULES(LIBTDB, tdb >= 1.2.2,
2127                 [ enable_external_libtdb=yes ],
2128                 [
2129                 if test x$enable_external_libtdb = xyes; then
2130                         AC_MSG_ERROR([Unable to find libtdb])
2131                 else
2132                         enable_external_libtdb=no
2133                 fi
2134                 ])
2135 fi
2136
2137 AC_SUBST(LIBTDB_OBJ0)
2138 if test "x$enable_external_libtdb" = xno
2139 then
2140         m4_include(../lib/tdb/libtdb.m4)
2141         LINK_LIBTDB=STATIC
2142         SMB_LIBRARY(tdb, 1)
2143         LIBTDB_OBJ0=""
2144         LIBTDB_LIBS="$LIBTDB_LIBS $TDB_DEPS"
2145         for obj in ${TDB_OBJ}; do
2146                 LIBTDB_OBJ0="${LIBTDB_OBJ0} ${tdbdir}/${obj}"
2147         done
2148         AC_SUBST(LIBTDB_OBJ0)
2149         SAMBA_CPPFLAGS="${SAMBA_CPPFLAGS} ${TDB_CFLAGS}"
2150         SAMBA_CONFIGURE_CPPFLAGS="${SAMBA_CONFIGURE_CPPFLAGS} ${TDB_CFLAGS}"
2151
2152         TDBBACKUP="bin/tdbbackup\$(EXEEXT)"
2153         AC_SUBST(TDBBACKUP)
2154         TDBDUMP="bin/tdbdump\$(EXEEXT)"
2155         AC_SUBST(TDBDUMP)
2156         TDBTOOL="bin/tdbtool\$(EXEEXT)"
2157         AC_SUBST(TDBTOOL)
2158         TDBTORTURE="bin/tdbtorture\$(EXEEXT)"
2159         AC_SUBST(TDBTORTURE)
2160         ac_cv_have_tdb_err_nesting=yes
2161 else
2162         AC_TRY_COMPILE([#include "tdb.h"],
2163                        [enum TDB_ERROR err = TDB_ERR_NESTING],
2164                        ac_cv_have_tdb_err_nesting=yes,
2165                        ac_cv_have_tdb_err_nesting=no)
2166 fi
2167
2168 if test x"$ac_cv_have_tdb_err_nesting" = xyes; then
2169    AC_DEFINE(HAVE_TDB_ERR_NESTING, 1, [Whether we have TDB_ERR_NESTING])
2170 fi
2171
2172 SMB_LIBRARY(netapi, 0)
2173 SMB_LIBRARY(smbclient, 0)
2174 SMB_LIBRARY(smbsharemodes, 0)
2175 SMB_LIBRARY(addns, 0, no, [undefined API])
2176
2177
2178
2179 ################
2180
2181 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
2182 AC_TRY_RUN([#include <stdio.h>
2183 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
2184 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
2185 if test x"$samba_cv_have_longlong" = x"yes"; then
2186     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
2187     AC_CHECK_TYPE(intptr_t, unsigned long long)
2188 else
2189     AC_CHECK_TYPE(intptr_t, unsigned long)
2190 fi
2191
2192 #
2193 # Check if the compiler supports the LL prefix on long long integers.
2194 # AIX needs this.
2195
2196 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
2197     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
2198         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
2199 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
2200    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
2201 fi
2202
2203
2204 AC_CACHE_CHECK([for 64 bit time_t],samba_cv_SIZEOF_TIME_T,[
2205 AC_TRY_RUN([#include <time.h>
2206 main() { exit((sizeof(time_t) == 8) ? 0 : 1); }],
2207 samba_cv_SIZEOF_TIME_T=yes,samba_cv_SIZEOF_TIME_T=no,samba_cv_SIZEOF_TIME_T=cross)])
2208 if test x"$samba_cv_SIZEOF_TIME_T" = x"yes"; then
2209     AC_DEFINE(SIZEOF_TIME_T,8,[The size of the 'time_t' type])
2210 fi
2211
2212 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
2213 AC_TRY_RUN([#include <stdio.h>
2214 #include <sys/stat.h>
2215 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
2216 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
2217 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
2218     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
2219 fi
2220
2221 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
2222 AC_TRY_RUN([
2223 #if defined(HAVE_UNISTD_H)
2224 #include <unistd.h>
2225 #endif
2226 #include <stdio.h>
2227 #include <sys/stat.h>
2228 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2229 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
2230 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
2231     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
2232 fi
2233
2234 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
2235 AC_TRY_RUN([
2236 #if defined(HAVE_UNISTD_H)
2237 #include <unistd.h>
2238 #endif
2239 #include <stdio.h>
2240 #include <sys/stat.h>
2241 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
2242 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
2243 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
2244     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
2245 fi
2246
2247 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
2248 AC_TRY_RUN([
2249 #if defined(HAVE_UNISTD_H)
2250 #include <unistd.h>
2251 #endif
2252 #include <stdio.h>
2253 #include <sys/stat.h>
2254 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2255 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
2256 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
2257     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
2258 fi
2259
2260 AC_CACHE_CHECK([for 64 bit dev_t],samba_cv_SIZEOF_DEV_T,[
2261 AC_TRY_RUN([
2262 #if defined(HAVE_UNISTD_H)
2263 #include <unistd.h>
2264 #endif
2265 #include <stdio.h>
2266 #include <sys/stat.h>
2267 main() { exit((sizeof(dev_t) == 8) ? 0 : 1); }],
2268 samba_cv_SIZEOF_DEV_T=yes,samba_cv_SIZEOF_DEV_T=no,samba_cv_SIZEOF_DEV_T=cross)])
2269 if test x"$samba_cv_SIZEOF_DEV_T" = x"yes"; then
2270     AC_DEFINE(SIZEOF_DEV_T,8,[The size of the 'dev_t' type])
2271 fi
2272
2273 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
2274 AC_TRY_RUN([
2275 #if defined(HAVE_UNISTD_H)
2276 #include <unistd.h>
2277 #endif
2278 #include <stdio.h>
2279 #include <sys/stat.h>
2280 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
2281 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
2282 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
2283     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
2284 fi
2285
2286 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIR64,[
2287 AC_TRY_COMPILE([
2288 #if defined(HAVE_UNISTD_H)
2289 #include <unistd.h>
2290 #endif
2291 #include <sys/types.h>
2292 #include <dirent.h>],
2293 [DIR64 de;],
2294 samba_cv_HAVE_STRUCT_DIR64=yes,samba_cv_HAVE_STRUCT_DIR64=no)])
2295 if test x"$samba_cv_HAVE_STRUCT_DIR64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2296     AC_DEFINE(HAVE_STRUCT_DIR64,1,[Whether the 'DIR64' abstract data type is available])
2297 fi
2298
2299 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
2300 AC_TRY_COMPILE([
2301 #if defined(HAVE_UNISTD_H)
2302 #include <unistd.h>
2303 #endif
2304 #include <sys/types.h>
2305 #include <dirent.h>],
2306 [struct dirent64 de;],
2307 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
2308 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
2309     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
2310 fi
2311
2312 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
2313 AC_TRY_RUN([
2314 #if defined(HAVE_UNISTD_H)
2315 #include <unistd.h>
2316 #endif
2317 #include <sys/types.h>
2318 main() { dev_t dev; int i = major(dev); return 0; }],
2319 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
2320 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
2321     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
2322 fi
2323
2324 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
2325 AC_TRY_RUN([
2326 #if defined(HAVE_UNISTD_H)
2327 #include <unistd.h>
2328 #endif
2329 #include <sys/types.h>
2330 main() { dev_t dev; int i = minor(dev); return 0; }],
2331 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
2332 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
2333     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
2334 fi
2335
2336 AC_CACHE_CHECK([for makedev macro],samba_cv_HAVE_MAKEDEV,[
2337 AC_TRY_RUN([
2338 #if defined(HAVE_UNISTD_H)
2339 #include <unistd.h>
2340 #endif
2341 #include <sys/types.h>
2342 main() { dev_t dev = makedev(1,2); return 0; }],
2343 samba_cv_HAVE_MAKEDEV=yes,samba_cv_HAVE_MAKEDEV=no,samba_cv_HAVE_MAKEDEV=cross)])
2344 if test x"$samba_cv_HAVE_MAKEDEV" = x"yes"; then
2345     AC_DEFINE(HAVE_MAKEDEV,1,[Whether the macro for makedev is available])
2346 fi
2347
2348 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
2349 AC_TRY_RUN([#include <stdio.h>
2350 main() { char c; c=250; exit((c > 0)?0:1); }],
2351 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
2352 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
2353     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
2354 fi
2355
2356 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
2357 AC_TRY_COMPILE([#include <sys/types.h>
2358 #include <dirent.h>
2359 void seekdir(DIR *d, long loc) { return; }],[return 0;],
2360 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
2361 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
2362     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
2363 fi
2364
2365 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
2366 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
2367 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
2368 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
2369     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
2370 fi
2371
2372
2373 if test x"$samba_cv_WITH_PROFILE" = x"yes"; then
2374
2375     # On some systems (eg. Linux) librt can pull in libpthread. We
2376     # don't want this to happen because libpthreads changes signal delivery
2377     # semantics in ways we are not prepared for. This breaks Linux oplocks
2378     # which rely on signals.
2379
2380     AC_LIBTESTFUNC(rt, clock_gettime,
2381             [
2382                             AC_DEFINE(HAVE_CLOCK_GETTIME, 1,
2383                                 [Whether clock_gettime is available])
2384                             SMB_CHECK_CLOCK_ID(CLOCK_MONOTONIC)
2385                             SMB_CHECK_CLOCK_ID(CLOCK_PROCESS_CPUTIME_ID)
2386                             SMB_CHECK_CLOCK_ID(CLOCK_REALTIME)
2387                         ])
2388
2389 fi
2390
2391 AC_CACHE_CHECK([for broken readdir name],samba_cv_HAVE_BROKEN_READDIR_NAME,[
2392 AC_TRY_RUN([#include <sys/types.h>
2393 #include <dirent.h>
2394 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
2395 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
2396 di->d_name[0] == 0) exit(0); exit(1);} ],
2397 samba_cv_HAVE_BROKEN_READDIR_NAME=yes,samba_cv_HAVE_BROKEN_READDIR_NAME=no,samba_cv_HAVE_BROKEN_READDIR_NAME=cross)])
2398 if test x"$samba_cv_HAVE_BROKEN_READDIR_NAME" = x"yes"; then
2399     AC_DEFINE(HAVE_BROKEN_READDIR_NAME,1,[Whether readdir() returns the wrong name offset])
2400 fi
2401
2402 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
2403 AC_TRY_COMPILE([#include <sys/types.h>
2404 #include <utime.h>],
2405 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
2406 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
2407 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
2408     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
2409 fi
2410
2411 ##############
2412 # Check utmp details, but only if our OS offers utmp.h
2413 if test x"$ac_cv_header_utmp_h" = x"yes"; then
2414 dnl  utmp and utmpx come in many flavours
2415 dnl  We need to check for many of them
2416 dnl  But we don't need to do each and every one, because our code uses
2417 dnl  mostly just the utmp (not utmpx) fields.
2418
2419 AC_CHECK_FUNCS(pututline pututxline updwtmp updwtmpx getutmpx getutxent)
2420
2421 AC_CACHE_CHECK([for ut_name in utmp],samba_cv_HAVE_UT_UT_NAME,[
2422 AC_TRY_COMPILE([#include <sys/types.h>
2423 #include <utmp.h>],
2424 [struct utmp ut;  ut.ut_name[0] = 'a';],
2425 samba_cv_HAVE_UT_UT_NAME=yes,samba_cv_HAVE_UT_UT_NAME=no,samba_cv_HAVE_UT_UT_NAME=cross)])
2426 if test x"$samba_cv_HAVE_UT_UT_NAME" = x"yes"; then
2427     AC_DEFINE(HAVE_UT_UT_NAME,1,[Whether the utmp struct has a property ut_name])
2428 fi
2429
2430 AC_CACHE_CHECK([for ut_user in utmp],samba_cv_HAVE_UT_UT_USER,[
2431 AC_TRY_COMPILE([#include <sys/types.h>
2432 #include <utmp.h>],
2433 [struct utmp ut;  ut.ut_user[0] = 'a';],
2434 samba_cv_HAVE_UT_UT_USER=yes,samba_cv_HAVE_UT_UT_USER=no,samba_cv_HAVE_UT_UT_USER=cross)])
2435 if test x"$samba_cv_HAVE_UT_UT_USER" = x"yes"; then
2436     AC_DEFINE(HAVE_UT_UT_USER,1,[Whether the utmp struct has a property ut_user])
2437 fi
2438
2439 AC_CACHE_CHECK([for ut_id in utmp],samba_cv_HAVE_UT_UT_ID,[
2440 AC_TRY_COMPILE([#include <sys/types.h>
2441 #include <utmp.h>],
2442 [struct utmp ut;  ut.ut_id[0] = 'a';],
2443 samba_cv_HAVE_UT_UT_ID=yes,samba_cv_HAVE_UT_UT_ID=no,samba_cv_HAVE_UT_UT_ID=cross)])
2444 if test x"$samba_cv_HAVE_UT_UT_ID" = x"yes"; then
2445     AC_DEFINE(HAVE_UT_UT_ID,1,[Whether the utmp struct has a property ut_id])
2446 fi
2447
2448 AC_CACHE_CHECK([for ut_host in utmp],samba_cv_HAVE_UT_UT_HOST,[
2449 AC_TRY_COMPILE([#include <sys/types.h>
2450 #include <utmp.h>],
2451 [struct utmp ut;  ut.ut_host[0] = 'a';],
2452 samba_cv_HAVE_UT_UT_HOST=yes,samba_cv_HAVE_UT_UT_HOST=no,samba_cv_HAVE_UT_UT_HOST=cross)])
2453 if test x"$samba_cv_HAVE_UT_UT_HOST" = x"yes"; then
2454     AC_DEFINE(HAVE_UT_UT_HOST,1,[Whether the utmp struct has a property ut_host])
2455 fi
2456
2457 AC_CACHE_CHECK([for ut_time in utmp],samba_cv_HAVE_UT_UT_TIME,[
2458 AC_TRY_COMPILE([#include <sys/types.h>
2459 #include <utmp.h>],
2460 [struct utmp ut;  time_t t; ut.ut_time = t;],
2461 samba_cv_HAVE_UT_UT_TIME=yes,samba_cv_HAVE_UT_UT_TIME=no,samba_cv_HAVE_UT_UT_TIME=cross)])
2462 if test x"$samba_cv_HAVE_UT_UT_TIME" = x"yes"; then
2463     AC_DEFINE(HAVE_UT_UT_TIME,1,[Whether the utmp struct has a property ut_time])
2464 fi
2465
2466 AC_CACHE_CHECK([for ut_tv in utmp],samba_cv_HAVE_UT_UT_TV,[
2467 AC_TRY_COMPILE([#include <sys/types.h>
2468 #include <utmp.h>],
2469 [struct utmp ut;  struct timeval tv; ut.ut_tv = tv;],
2470 samba_cv_HAVE_UT_UT_TV=yes,samba_cv_HAVE_UT_UT_TV=no,samba_cv_HAVE_UT_UT_TV=cross)])
2471 if test x"$samba_cv_HAVE_UT_UT_TV" = x"yes"; then
2472     AC_DEFINE(HAVE_UT_UT_TV,1,[Whether the utmp struct has a property ut_tv])
2473 fi
2474
2475 AC_CACHE_CHECK([for ut_type in utmp],samba_cv_HAVE_UT_UT_TYPE,[
2476 AC_TRY_COMPILE([#include <sys/types.h>
2477 #include <utmp.h>],
2478 [struct utmp ut;  ut.ut_type = 0;],
2479 samba_cv_HAVE_UT_UT_TYPE=yes,samba_cv_HAVE_UT_UT_TYPE=no,samba_cv_HAVE_UT_UT_TYPE=cross)])
2480 if test x"$samba_cv_HAVE_UT_UT_TYPE" = x"yes"; then
2481     AC_DEFINE(HAVE_UT_UT_TYPE,1,[Whether the utmp struct has a property ut_type])
2482 fi
2483
2484 AC_CACHE_CHECK([for ut_pid in utmp],samba_cv_HAVE_UT_UT_PID,[
2485 AC_TRY_COMPILE([#include <sys/types.h>
2486 #include <utmp.h>],
2487 [struct utmp ut;  ut.ut_pid = 0;],
2488 samba_cv_HAVE_UT_UT_PID=yes,samba_cv_HAVE_UT_UT_PID=no,samba_cv_HAVE_UT_UT_PID=cross)])
2489 if test x"$samba_cv_HAVE_UT_UT_PID" = x"yes"; then
2490     AC_DEFINE(HAVE_UT_UT_PID,1,[Whether the utmp struct has a property ut_pid])
2491 fi
2492
2493 AC_CACHE_CHECK([for ut_exit in utmp],samba_cv_HAVE_UT_UT_EXIT,[
2494 AC_TRY_COMPILE([#include <sys/types.h>
2495 #include <utmp.h>],
2496 [struct utmp ut;  ut.ut_exit.e_exit = 0;],
2497 samba_cv_HAVE_UT_UT_EXIT=yes,samba_cv_HAVE_UT_UT_EXIT=no,samba_cv_HAVE_UT_UT_EXIT=cross)])
2498 if test x"$samba_cv_HAVE_UT_UT_EXIT" = x"yes"; then
2499     AC_DEFINE(HAVE_UT_UT_EXIT,1,[Whether the utmp struct has a property ut_exit])
2500 fi
2501
2502 dnl Look for the IPv6 varient by preference. Many systems have both.
2503 AC_CACHE_CHECK([for ut_addr_v6 in utmp],samba_cv_HAVE_UT_UT_ADDR_V6,[
2504 AC_TRY_COMPILE([#include <sys/types.h>
2505 #include <utmp.h>],
2506 [struct utmp ut;  ut.ut_addr_v6[0] = 0;],
2507 samba_cv_HAVE_UT_UT_ADDR_V6=yes,samba_cv_HAVE_UT_UT_ADDR_V6=no,samba_cv_HAVE_UT_UT_ADDR_V6=cross)])
2508 if test x"$samba_cv_HAVE_UT_UT_ADDR_V6" = x"yes"; then
2509     AC_DEFINE(HAVE_UT_UT_ADDR_V6,1,[Whether the utmp struct has a property ut_addr_v6])
2510 fi
2511
2512 AC_CACHE_CHECK([for ut_addr in utmp],samba_cv_HAVE_UT_UT_ADDR,[
2513 AC_TRY_COMPILE([#include <sys/types.h>
2514 #include <utmp.h>],
2515 [struct utmp ut;  ut.ut_addr = 0;],
2516 samba_cv_HAVE_UT_UT_ADDR=yes,samba_cv_HAVE_UT_UT_ADDR=no,samba_cv_HAVE_UT_UT_ADDR=cross)])
2517 if test x"$samba_cv_HAVE_UT_UT_ADDR" = x"yes"; then
2518     AC_DEFINE(HAVE_UT_UT_ADDR,1,[Whether the utmp struct has a property ut_addr])
2519 fi
2520
2521 if test x$ac_cv_func_pututline = xyes ; then
2522   AC_CACHE_CHECK([whether pututline returns pointer],samba_cv_PUTUTLINE_RETURNS_UTMP,[
2523   AC_TRY_COMPILE([#include <sys/types.h>
2524 #include <utmp.h>],
2525   [struct utmp utarg; struct utmp *utreturn; utreturn = pututline(&utarg);],
2526   samba_cv_PUTUTLINE_RETURNS_UTMP=yes,samba_cv_PUTUTLINE_RETURNS_UTMP=no)])
2527   if test x"$samba_cv_PUTUTLINE_RETURNS_UTMP" = x"yes"; then
2528       AC_DEFINE(PUTUTLINE_RETURNS_UTMP,1,[Whether pututline returns pointer])
2529   fi
2530 fi
2531
2532 AC_CACHE_CHECK([for ut_syslen in utmpx],samba_cv_HAVE_UX_UT_SYSLEN,[
2533 AC_TRY_COMPILE([#include <sys/types.h>
2534 #include <utmpx.h>],
2535 [struct utmpx ux;  ux.ut_syslen = 0;],
2536 samba_cv_HAVE_UX_UT_SYSLEN=yes,samba_cv_HAVE_UX_UT_SYSLEN=no,samba_cv_HAVE_UX_UT_SYSLEN=cross)])
2537 if test x"$samba_cv_HAVE_UX_UT_SYSLEN" = x"yes"; then
2538     AC_DEFINE(HAVE_UX_UT_SYSLEN,1,[Whether the utmpx struct has a property ut_syslen])
2539 fi
2540
2541 fi
2542 # end utmp details
2543
2544
2545 ICONV_LOOK_DIRS="/usr /usr/local /sw /opt"
2546 AC_ARG_WITH(libiconv,
2547 [AS_HELP_STRING([--with-libiconv=BASEDIR], [Use libiconv in BASEDIR/lib and BASEDIR/include (default=auto)])],
2548 [
2549   if test "$withval" = "no" ; then
2550     AC_MSG_ERROR([argument to --with-libiconv must be a directory])
2551   else
2552      if test "$withval" != "yes" ; then
2553         ICONV_PATH_SPEC=yes
2554         ICONV_LOOK_DIRS="$withval"
2555      fi
2556   fi
2557 ])
2558
2559 for i in $ICONV_LOOK_DIRS ; do
2560
2561     save_LIBS="$LIBS"
2562     save_LDFLAGS="$LDFLAGS"
2563     save_CPPFLAGS="$CPPFLAGS"
2564
2565     iconv_current_LIBS=""
2566     iconv_current_LDFLAGS=""
2567     iconv_current_CPPFLAGS=""
2568
2569     ICONV_FOUND="no"
2570     unset libext
2571
2572     #  This is here to handle -withval stuff for --with-libiconv
2573     #  Perhaps we should always add a -L
2574     CPPFLAGS="$save_CPPFLAGS -I$i/include"
2575
2576     # Check lib and lib32 library variants to cater for IRIX ABI-specific
2577     # installation paths. This gets a little tricky since we might have iconv
2578     # in both libiconv and in libc. In this case the jm_ICONV test will always
2579     # succeed when the header is found. To counter this, make sure the
2580     # library directory is there and check the ABI directory first (which
2581     # should be harmless on other systems, but causes tons of linker warnings on
2582     # 64bit Ubuntu systems).
2583     # As the build farm doesn't seem to have any IRIX machines with iconv.h
2584     # installed, I've decided to fix the linker warnings.
2585     # -- Kai
2586     # For IA64 HPUX systems, the libs are located in lib/hpux32 instead of lib.
2587     for l in "lib" "lib32" "lib/hpux32"; do
2588         if test -d "$i/$l" ; then
2589                 LDFLAGS="$save_LDFLAGS -L$i/$l"
2590                 LIBS=
2591                 export LDFLAGS LIBS CPPFLAGS
2592                 # Try to find iconv(3)
2593                 jm_ICONV($i/$l)
2594                 if test x"$ICONV_FOUND" = "xyes" ; then
2595                     libext="$l"
2596                     break
2597                 fi
2598         fi
2599     done
2600
2601     if test x"$ICONV_FOUND" = "xyes" ; then
2602         iconv_current_LDFLAGS="-L$i/$libext"
2603         iconv_current_CPPFLAGS="-I$i/include"
2604
2605         if test x"$jm_cv_lib_iconv" != x; then
2606             iconv_current_LIBS="$LIBS -l$jm_cv_lib_iconv"
2607         else
2608             # We found iconv in libc.
2609             iconv_current_LIBS=""
2610         fi
2611
2612     fi
2613
2614     if test x"$ICONV_FOUND" = "xyes" ; then
2615
2616         LDFLAGS="$save_LDFLAGS $iconv_current_LDFLAGS"
2617         CPPFLAGS="$save_CPPFLAGS $iconv_current_CPPFLAGS"
2618         LIBS="$save_LIBS $iconv_current_LIBS"
2619         export LDFLAGS LIBS CPPFLAGS
2620
2621         default_dos_charset=no
2622         default_display_charset=no
2623         default_unix_charset=no
2624
2625         # check for default dos charset name
2626         for j in CP850 IBM850 ; do
2627             rjs_CHARSET($j)
2628             default_dos_charset="$ICONV_CHARSET"
2629             if test x"$default_dos_charset" = x"$j"; then
2630                 break
2631             fi
2632         done
2633
2634         # check for default display charset name
2635         for j in ASCII 646 ; do
2636             rjs_CHARSET($j)
2637             default_display_charset="$ICONV_CHARSET"
2638             if test x"$default_display_charset" = x"$j"; then
2639                 break
2640             fi
2641         done
2642
2643         # check for default unix charset name
2644         for j in UTF-8 UTF8 ; do
2645             rjs_CHARSET($j)
2646             default_unix_charset="$ICONV_CHARSET"
2647             if test x"$default_unix_charset" = x"$j"; then
2648                 break
2649             fi
2650         done
2651
2652         if test "$default_dos_charset" != "no" -a \
2653                 "$default_dos_charset" != "cross" -a \
2654                 "$default_display_charset" != "no" -a \
2655                 "$default_display_charset" != "cross" -a \
2656                 "$default_unix_charset" != "no" -a \
2657                 "$default_unix_charset" != "cross"
2658         then
2659                 samba_cv_HAVE_NATIVE_ICONV=yes
2660         else
2661             if test "$default_dos_charset" = "cross" -o \
2662                      "$default_display_charset" = "cross" -o \
2663                      "$default_unix_charset" = "cross"
2664             then
2665                     samba_cv_HAVE_NATIVE_ICONV=cross
2666             else
2667                     samba_cv_HAVE_NATIVE_ICONV=no
2668             fi
2669         fi
2670
2671         # At this point, we have a libiconv candidate. We know that
2672         # we have the right headers and libraries, but we don't know
2673         # whether it does the conversions we want. We can't test this
2674         # because we are cross-compiling. This is not necessarily a big
2675         # deal, since we can't guarantee that the results we get now will
2676         # match the results we get at runtime anyway.
2677         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"cross" ; then
2678             default_dos_charset="CP850"
2679             default_display_charset="ASCII"
2680             default_unix_charset="UTF-8"
2681             samba_cv_HAVE_NATIVE_ICONV=yes
2682             AC_MSG_WARN(assuming the libiconv in $iconv_current_LDFLAGS can convert)
2683             AC_MSG_WARN([$default_dos_charset, $default_display_charset and $default_unix_charset to UCS-16LE])
2684         fi
2685
2686         if test x"$samba_cv_HAVE_NATIVE_ICONV" = x"yes" ; then
2687
2688             CPPFLAGS=$save_CPPFLAGS
2689             LDFLAGS=$save_LDFLAGS
2690             LIBS=$save_LIBS
2691
2692             if test x"$iconv_current_LIBS" != x; then
2693                 LIBS="$LIBS $iconv_current_LIBS"
2694             fi
2695
2696             # Add the flags we need to CPPFLAGS and LDFLAGS
2697             CPPFLAGS="$CPPFLAGS $iconv_current_CPPFLAGS"
2698             LDFLAGS="$LDFLAGS $iconv_current_LDFLAGS"
2699
2700             # Turn the #defines into string literals
2701             default_dos_charset="\"$default_dos_charset\""
2702             default_display_charset="\"$default_display_charset\""
2703             default_unix_charset="\"$default_unix_charset\""
2704
2705             AC_DEFINE(HAVE_NATIVE_ICONV,1,[Whether to use native iconv])
2706             AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,$default_dos_charset,[Default dos charset name])
2707             AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,$default_display_charset,[Default display charset name])
2708             AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,$default_unix_charset,[Default unix charset name])
2709
2710            break
2711         fi
2712
2713     # We didn't find a working iconv, so keep going
2714     fi
2715
2716     #  We only need to clean these up here for the next pass through the loop
2717     CPPFLAGS=$save_CPPFLAGS
2718     LDFLAGS=$save_LDFLAGS
2719     LIBS=$save_LIBS
2720     export LDFLAGS LIBS CPPFLAGS
2721 done
2722 unset libext
2723
2724
2725 if test x"$ICONV_FOUND" = x"no" -o x"$samba_cv_HAVE_NATIVE_ICONV" != x"yes" ; then
2726     AC_MSG_WARN([Sufficient support for iconv function was not found.
2727     Install libiconv from http://freshmeat.net/projects/libiconv/ for better charset compatibility!])
2728    AC_DEFINE_UNQUOTED(DEFAULT_DOS_CHARSET,"ASCII",[Default dos charset name])
2729    AC_DEFINE_UNQUOTED(DEFAULT_DISPLAY_CHARSET,"ASCII",[Default display charset name])
2730    AC_DEFINE_UNQUOTED(DEFAULT_UNIX_CHARSET,"UTF8",[Default unix charset name])
2731 fi
2732
2733
2734 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
2735 AC_TRY_RUN([
2736 #include <sys/types.h>
2737 #include <fcntl.h>
2738 #ifndef F_GETLEASE
2739 #define F_GETLEASE      1025
2740 #endif
2741 main() {
2742        int fd = open("/dev/null", O_RDONLY);
2743        return fcntl(fd, F_GETLEASE, 0) == -1;
2744 }
2745 ],
2746 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
2747 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
2748     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
2749 fi
2750
2751 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
2752 AC_TRY_RUN([
2753 #include <sys/types.h>
2754 #include <fcntl.h>
2755 #include <signal.h>
2756 #ifndef F_NOTIFY
2757 #define F_NOTIFY 1026
2758 #endif
2759 main() {
2760         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
2761 }
2762 ],
2763 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
2764 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
2765     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
2766 fi
2767
2768 AC_CACHE_CHECK([for inotify support],samba_cv_HAVE_INOTIFY,[
2769 AC_CHECK_HEADERS(linux/inotify.h asm/unistd.h sys/inotify.h)
2770 AC_CHECK_FUNCS(inotify_init)
2771 AC_HAVE_DECL(__NR_inotify_init, [#include <asm/unistd.h>])
2772 ],
2773 samba_cv_HAVE_INOTIFY=yes,
2774 samba_cv_HAVE_INOTIFY=no,
2775 samba_cv_HAVE_INOTIFY=cross)
2776
2777 if test x"$ac_cv_func_inotify_init" = x"yes" -a x"$ac_cv_header_linux_inotify_h" = x"yes"; then
2778     AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support])
2779 fi
2780
2781 #################################################
2782 # Check if FAM notifications are available. For FAM info, see
2783 #       http://oss.sgi.com/projects/fam/
2784 #       http://savannah.nongnu.org/projects/fam/
2785 AC_ARG_ENABLE(fam,
2786 [AS_HELP_STRING([--enable-fam], [Turn on FAM support (default=auto)])])
2787
2788 if test x$enable_fam != xno; then
2789     AC_CHECK_HEADERS(fam.h, [samba_cv_HAVE_FAM_H=yes], [samba_cv_HAVE_FAM_H=no])
2790     if test x"$samba_cv_HAVE_FAM_H" = x"yes"; then
2791         # On IRIX, libfam requires libC, but other FAM implementations
2792         # might not need it.
2793         AC_CHECK_LIB(fam, FAMOpen2,
2794             [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam";
2795             AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2796             [samba_cv_HAVE_LIBFAM=no])
2797
2798         if test x"$samba_cv_HAVE_LIBFAM" = x"no" ; then
2799             samba_fam_xtra=-lC
2800             AC_CHECK_LIB_EXT(fam, samba_fam_xtra, FAMOpen2,
2801                 [samba_cv_HAVE_LIBFAM=yes; SMB_FAM_LIBS="-lfam -lC";
2802                 AC_DEFINE(HAVE_FAMOPEN2, 1, Define to 1 if there is support for FAMOpen2)],
2803                 [samba_cv_HAVE_LIBFAM=no])
2804             unset samba_fam_xtra
2805         fi
2806     fi
2807     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2808         default_shared_modules="$default_shared_modules vfs_notify_fam"
2809         AC_TRY_COMPILE([#include <fam.h>],
2810                     [enum FAMCodes code = FAMChanged;],
2811                     AC_DEFINE(HAVE_FAM_H_FAMCODES_TYPEDEF, 1,
2812                         [Whether fam.h contains a typedef for enum FAMCodes]),
2813                     [])
2814     fi
2815
2816     if test x"$samba_cv_HAVE_LIBFAM" = x"yes" ; then
2817         AC_CHECK_LIB(fam, FAMNoExists,
2818             [AC_DEFINE(HAVE_FAMNOEXISTS, 1, Define to 1 if there is support for FAMNoExists)])
2819     fi
2820
2821     if test x$enable_fam = xyes && test x"$samba_cv_HAVE_LIBFAM" != xyes ; then
2822         AC_MSG_ERROR(FAM support requested but FAM library not available )
2823     fi
2824 fi
2825
2826 AC_SUBST(SMB_FAM_LIBS)
2827
2828 #################################################
2829 # Check for DMAPI interfaces in libdm/libjfsdm/libxsdm
2830
2831
2832 with_dmapi_support=auto
2833 AC_MSG_CHECKING(whether to use DMAPI support)
2834 AC_ARG_WITH(dmapi,
2835 [AS_HELP_STRING([--with-dmapi], [Include DMAPI/XDSM support (default=auto)])],
2836 [ case "$withval" in
2837   yes|no)
2838     with_dmapi_support=$withval
2839     ;;
2840   esac ]
2841 )
2842 AC_MSG_RESULT([$with_dmapi_support])
2843
2844 if test x"$with_dmapi_support" != xno ; then
2845         SMB_CHECK_DMAPI([], [
2846                 AC_MSG_NOTICE(DMAPI support not present)
2847                 if test x"$with_dmapi_support" = xyes ; then
2848                         AC_MSG_ERROR(no DMAPI support found but requested!)
2849                 fi
2850                 ]
2851         )
2852 fi
2853
2854 # Add TSM SM VFS module only if there are both GPFS and DMAPI support
2855 # Theoretically it should work with AIX JFS2 too but this needs testing
2856 if test x"$ac_cv_header_gpfs_gpl_h" = x"yes" && test x"$samba_dmapi_libs" != x"" ; then
2857     default_shared_modules="$default_shared_modules vfs_tsmsm"
2858 fi
2859
2860 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
2861 AC_TRY_RUN([
2862 #include <sys/types.h>
2863 #include <fcntl.h>
2864 #include <signal.h>
2865 #include <sys/file.h>
2866 #ifndef LOCK_MAND
2867 #define LOCK_MAND       32
2868 #define LOCK_READ       64
2869 #endif
2870 main() {
2871         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
2872 }
2873 ],
2874 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
2875 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
2876     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
2877 fi
2878
2879
2880 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
2881 AC_TRY_COMPILE([#include <sys/types.h>
2882 #include <fcntl.h>],
2883 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
2884 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
2885 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
2886     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
2887 fi
2888
2889 #################################################
2890 # Check for POSIX capability support
2891
2892 AC_CHECK_HEADER(sys/capability.h, [samba_cv_HAVE_SYS_CAPABILITY_H=yes;
2893     AC_DEFINE(HAVE_SYS_CAPABILITY_H, 1, Whether sys/capability.h is present)],
2894     [], [])
2895
2896 if test x"$samba_cv_HAVE_SYS_CAPABILITY_H" = x"yes"; then
2897
2898     ac_save_LIBS=$LIBS
2899     AC_LIBTESTFUNC(cap, cap_get_proc)
2900
2901     AC_CACHE_CHECK([for POSIX capabilities],
2902             samba_cv_HAVE_POSIX_CAPABILITIES,
2903             [
2904                 AC_TRY_RUN([
2905 #include <sys/types.h>
2906 #include <sys/capability.h>
2907 main() {
2908  cap_t cap;
2909  cap_value_t vals[1];
2910  if (!(cap = cap_get_proc()))
2911    exit(1);
2912  vals[0] = CAP_CHOWN;
2913  cap_set_flag(cap, CAP_INHERITABLE, 1, vals, CAP_CLEAR);
2914  cap_set_proc(cap);
2915  exit(0);
2916 }],
2917                 samba_cv_HAVE_POSIX_CAPABILITIES=yes,
2918                 samba_cv_HAVE_POSIX_CAPABILITIES=no,
2919                 samba_cv_HAVE_POSIX_CAPABILITIES=cross)
2920             ])
2921
2922 if test x"$samba_cv_HAVE_POSIX_CAPABILITIES" = x"yes"; then
2923     AC_DEFINE(HAVE_POSIX_CAPABILITIES, 1,
2924             [Whether POSIX capabilities are available])
2925 else
2926     LIBS=$ac_save_LIBS
2927 fi
2928
2929 fi
2930
2931 #
2932 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
2933 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
2934 #
2935
2936 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
2937 AC_TRY_COMPILE([#include <sys/types.h>
2938 #if defined(HAVE_RPC_RPC_H)
2939 #include <rpc/rpc.h>
2940 #endif],
2941 [int16 testvar;],
2942 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
2943 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
2944     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
2945 fi
2946
2947 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
2948 AC_TRY_COMPILE([#include <sys/types.h>
2949 #if defined(HAVE_RPC_RPC_H)
2950 #include <rpc/rpc.h>
2951 #endif],
2952 [uint16 testvar;],
2953 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
2954 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
2955     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
2956 fi
2957
2958 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
2959 AC_TRY_COMPILE([#include <sys/types.h>
2960 #if defined(HAVE_RPC_RPC_H)
2961 #include <rpc/rpc.h>
2962 #endif],
2963 [int32 testvar;],
2964 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
2965 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
2966     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
2967 fi
2968
2969 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
2970 AC_TRY_COMPILE([#include <sys/types.h>
2971 #if defined(HAVE_RPC_RPC_H)
2972 #include <rpc/rpc.h>
2973 #endif],
2974 [uint32 testvar;],
2975 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
2976 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
2977     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
2978 fi
2979
2980 dnl
2981 dnl Some systems (SCO) have a problem including
2982 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
2983 dnl as a #define in <prot.h> and as part of an enum
2984 dnl in <rpc/rpc.h>.
2985 dnl
2986
2987 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
2988 AC_TRY_COMPILE([#include <sys/types.h>
2989 #ifdef HAVE_SYS_SECURITY_H
2990 #include <sys/security.h>
2991 #include <prot.h>
2992 #endif  /* HAVE_SYS_SECURITY_H */
2993 #if defined(HAVE_RPC_RPC_H)
2994 #include <rpc/rpc.h>
2995 #endif],
2996 [int testvar;],
2997 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
2998 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
2999     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
3000 fi
3001
3002 AC_MSG_CHECKING([for test routines])
3003 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
3004            AC_MSG_RESULT(yes),
3005            AC_MSG_ERROR([cant find test code. Aborting config]),
3006            AC_MSG_WARN([cannot run when cross-compiling]))
3007
3008 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
3009 AC_TRY_RUN([#include "${srcdir-.}/../tests/ftruncate.c"],
3010            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
3011 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
3012     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
3013 fi
3014
3015 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
3016 AC_TRY_RUN([#include "${srcdir-.}/../tests/getgroups.c"],
3017            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
3018 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
3019     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
3020 fi
3021
3022 SMB_CHECK_SYSCONF(_SC_NGROUPS_MAX)
3023 SMB_CHECK_SYSCONF(_SC_NPROC_ONLN)
3024 SMB_CHECK_SYSCONF(_SC_NPROCESSORS_ONLN)
3025 SMB_CHECK_SYSCONF(_SC_PAGESIZE)
3026 AC_CHECK_FUNCS(getpagesize)
3027
3028 ################################################
3029 # look for a method of setting the effective uid
3030 seteuid=no;
3031
3032 if test $seteuid = no; then
3033 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
3034 AC_TRY_RUN([
3035 #define AUTOCONF_TEST 1
3036 #define USE_SETREUID 1
3037 #include "confdefs.h"
3038 #include "${srcdir-.}/lib/util_sec.c"],
3039            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
3040 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
3041     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
3042 fi
3043 fi
3044
3045 # we check for setresuid second as it conflicts with AIO on Linux. 
3046 # see http://samba.org/~tridge/junkcode/aio_uid.c
3047 if test $seteuid = no; then
3048 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
3049 AC_TRY_RUN([
3050 #define AUTOCONF_TEST 1
3051 #define USE_SETRESUID 1
3052 #include "confdefs.h"
3053 #include "${srcdir-.}/lib/util_sec.c"],
3054            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
3055 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
3056     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
3057 fi
3058 fi
3059
3060 if test $seteuid = no; then
3061 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
3062 AC_TRY_RUN([
3063 #define AUTOCONF_TEST 1
3064 #define USE_SETEUID 1
3065 #include "confdefs.h"
3066 #include "${srcdir-.}/lib/util_sec.c"],
3067            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
3068 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
3069     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
3070 fi
3071 fi
3072
3073 if test $seteuid = no; then
3074 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
3075 AC_TRY_RUN([
3076 #define AUTOCONF_TEST 1
3077 #define USE_SETUIDX 1
3078 #include "confdefs.h"
3079 #include "${srcdir-.}/lib/util_sec.c"],
3080            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
3081 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
3082     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
3083 fi
3084 fi
3085
3086 AC_CACHE_CHECK([for the Darwin initgroups system call],
3087         samba_cv_DARWIN_INITGROUPS,
3088         AC_TRY_LINK([
3089 #include <sys/syscall.h>
3090 #include <unistd.h>
3091         ],
3092         [ syscall(SYS_initgroups, 16, NULL, NULL, 0); ],
3093         samba_cv_DARWIN_INITGROUPS=yes,
3094         samba_cv_DARWIN_INITGROUPS=no)
3095 )
3096
3097 if test x"$samba_cv_DARWIN_INITGROUPS" = x"yes" ; then
3098     AC_DEFINE(HAVE_DARWIN_INITGROUPS, 1,
3099         [Whether to use the Darwin-specific initgroups system call])
3100 fi
3101
3102 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
3103 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock.c"],
3104            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
3105 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
3106     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
3107 fi
3108
3109 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
3110 AC_TRY_RUN([#include "${srcdir-.}/../tests/fcntl_lock64.c"],
3111            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
3112 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
3113     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
3114
3115 else
3116
3117 dnl
3118 dnl Don't check for 64 bit fcntl locking if we know that the
3119 dnl glibc2.1 broken check has succeeded.
3120 dnl
3121
3122   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
3123   AC_TRY_RUN([
3124 #if defined(HAVE_UNISTD_H)
3125 #include <unistd.h>
3126 #endif
3127 #include <stdio.h>
3128 #include <stdlib.h>
3129
3130 #ifdef HAVE_FCNTL_H
3131 #include <fcntl.h>
3132 #endif
3133
3134 #ifdef HAVE_SYS_FCNTL_H
3135 #include <sys/fcntl.h>
3136 #endif
3137 main() { struct flock64 fl64;
3138 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
3139 exit(0);
3140 #else
3141 exit(1);
3142 #endif
3143 }],
3144        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
3145
3146   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
3147       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
3148   fi
3149 fi
3150
3151 # glibc up to 2.3.6 had dangerously broken posix_fallocate(). DON'T USE IT.
3152 AC_CACHE_CHECK([for broken posix_fallocate],samba_cv_HAVE_BROKEN_POSIX_FALLOCATE,[
3153 AC_TRY_COMPILE([
3154   #define _XOPEN_SOURCE 600
3155   #include <stdlib.h>
3156   #if defined(__GLIBC__) && ((__GLIBC__ < 2) || (__GLIBC__ == 2 && __GLIBC_MINOR__ < 4))
3157     probably broken posix_fallocate
3158   #endif
3159 ], [
3160 ], 
3161 samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=no,samba_cv_HAVE_BROKEN_POSIX_FALLOCATE=yes)])
3162 if test x"$samba_cv_HAVE_BROKEN_POSIX_FALLOCATE" = xyes; then
3163         AC_DEFINE(HAVE_BROKEN_POSIX_FALLOCATE,, Whether we have a broken posix_fallocate)
3164 fi
3165
3166
3167 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
3168 AC_TRY_COMPILE([#include <sys/types.h>
3169 #include <sys/stat.h>
3170 #include <unistd.h>],
3171 [struct stat st;  st.st_blocks = 0;],
3172 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
3173 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
3174     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
3175 fi
3176
3177 AC_CHECK_TYPES([blksize_t, blkcnt_t], [], [], [[#include <sys/stat.h>]])
3178
3179 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
3180 AC_TRY_COMPILE([#include <sys/types.h>
3181 #include <sys/stat.h>
3182 #include <unistd.h>],
3183 [struct stat st;  st.st_blksize = 0;],
3184 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
3185 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
3186     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
3187 fi
3188
3189 AC_CACHE_CHECK([for st_flags in struct stat],
3190         samba_cv_HAVE_STAT_ST_FLAGS,
3191         [
3192             AC_TRY_COMPILE([#include <sys/types.h>
3193 #include <sys/stat.h>
3194 #include <unistd.h>],
3195             [struct stat st;  st.st_flags = 0;],
3196             samba_cv_HAVE_STAT_ST_FLAGS=yes,
3197             samba_cv_HAVE_STAT_ST_FLAGS=no,
3198             samba_cv_HAVE_STAT_ST_FLAGS=cross)
3199         ])
3200
3201 if test x"$samba_cv_HAVE_STAT_ST_FLAGS" = x"yes"; then
3202     AC_DEFINE(HAVE_STAT_ST_FLAGS, 1,
3203                 [Whether the stat struct has a st_flags member])
3204 fi
3205
3206 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
3207 AC_TRY_COMPILE([
3208 #include <sys/types.h>
3209 #include <sys/acl.h>
3210 #if defined(HAVE_RPCSVC_NIS_H)
3211 #include <rpcsvc/nis.h>
3212 #endif],
3213 [int i;],
3214 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
3215 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
3216         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
3217 fi
3218
3219 AC_CACHE_CHECK([if the realpath function allows a NULL argument],samba_cv_REALPATH_TAKES_NULL,[
3220 AC_TRY_RUN([
3221 #include <stdio.h>
3222 #include <limits.h>
3223 #include <signal.h>
3224
3225 void exit_on_core(int ignored) {
3226         exit(1);
3227 }
3228
3229 main() {
3230         char *newpath;
3231         signal(SIGSEGV, exit_on_core);
3232         newpath = realpath("/tmp", NULL);
3233         exit((newpath != NULL) ? 0 : 1);
3234 }
3235 ],
3236 samba_cv_REALPATH_TAKES_NULL=yes,samba_cv_REALPATH_TAKES_NULL=no,samba_cv_REALPATH_TAKES_NULL=cross)])
3237 if test x"$samba_cv_REALPATH_TAKES_NULL" = x"yes"; then
3238     AC_DEFINE(REALPATH_TAKES_NULL,1,[Whether the realpath function allows NULL])
3239 fi
3240
3241 #################################################
3242 # check for AFS clear-text auth support
3243 samba_cv_WITH_AFS=no
3244 AC_MSG_CHECKING(whether to use AFS clear-text auth)
3245 AC_ARG_WITH(afs,
3246 [AS_HELP_STRING([--with-afs], [Include AFS clear-text auth support (default=no)])],
3247 [ case "$withval" in
3248   yes|auto)
3249     AC_MSG_RESULT($withval)
3250     samba_cv_WITH_AFS=$withval
3251     ;;
3252   *)
3253     AC_MSG_RESULT(no)
3254     ;;
3255   esac ],
3256   AC_MSG_RESULT(no)
3257 )
3258
3259 ####################################################
3260 # check for Linux-specific AFS fake-kaserver support
3261 samba_cv_WITH_FAKE_KASERVER=no
3262 AC_MSG_CHECKING(whether to use AFS fake-kaserver)
3263 AC_ARG_WITH(fake-kaserver,
3264 [AS_HELP_STRING([--with-fake-kaserver], [Include AFS fake-kaserver support (default=no)])],
3265 [ case "$withval" in
3266   yes|auto)
3267     AC_MSG_RESULT($withval)
3268     samba_cv_WITH_FAKE_KASERVER=$withval
3269     ;;
3270   *)
3271     AC_MSG_RESULT(no)
3272     ;;
3273   esac ],
3274   AC_MSG_RESULT(no)
3275 )
3276
3277 #################################################
3278 # decide whether we can support WITH_AFS and / or WITH_FAKE_KASERVER
3279 if test x"$samba_cv_WITH_AFS" != x"no" ||
3280    test x"$samba_cv_WITH_FAKE_KASERVER" != x"no"; then
3281
3282     # see if this box has the OpenSSL DES libraries
3283     AC_CHECK_LIB( crypto, DES_pcbc_encrypt, LIBS="$LIBS -lcrypto" , [AC_ERROR(OpenSSL library: libcrypto ot found!)] )
3284
3285     # see if this box has the afs-headers in /usr/include/afs
3286     AC_MSG_CHECKING(for /usr/include/afs)
3287     if test -d /usr/include/afs; then
3288           AC_MSG_RESULT(yes)
3289     else
3290       AC_MSG_RESULT(no)
3291     fi
3292
3293     # check for afs.h
3294     have_afs_headers=no
3295     AC_CHECK_HEADERS(afs.h afs/afs.h)
3296     if test x"$ac_cv_header_afs_h" = x"no" && test x"$ac_cv_header_afs_afs_h" = x"no"; then
3297         if test x"$samba_cv_WITH_FAKE_KASERVER" = x"auto" ||
3298            test x"$samba_cv_WITH_AFS" = x"auto"; then
3299                 AC_MSG_WARN([AFS cannot be supported without afs.h])
3300         else
3301                 AC_MSG_ERROR([AFS cannot be supported without afs.h])
3302         fi
3303     else
3304         have_afs_headers=yes
3305     fi
3306 fi
3307
3308 FAKE_KASERVER_OBJ=""
3309 if test x"$samba_cv_WITH_FAKE_KASERVER" != x"no" && test x"$have_afs_headers" = x"yes"; then
3310     AC_DEFINE(WITH_FAKE_KASERVER,1,[Whether to include AFS fake-kaserver support])
3311     FAKE_KASERVER_OBJ="utils/net_afs.o"
3312 fi
3313 AC_SUBST(FAKE_KASERVER_OBJ)
3314
3315 #################################################
3316 # check whether to compile AFS/NT ACL mapping module
3317 samba_cv_WITH_VFS_AFSACL=no
3318 AC_MSG_CHECKING(whether to use AFS ACL mapping module)
3319 AC_ARG_WITH(vfs-afsacl,
3320 [AS_HELP_STRING([--with-vfs-afsacl], [Include AFS to NT ACL mapping module (default=no)])],
3321 [ case "$withval" in
3322   yes|auto)
3323     AC_MSG_RESULT($withval)
3324     samba_cv_WITH_VFS_AFSACL=yes
3325     ;;
3326   *)
3327     AC_MSG_RESULT(no)
3328     ;;
3329   esac ],
3330   AC_MSG_RESULT(no)
3331 )
3332
3333 if test x"$samba_cv_WITH_VFS_AFSACL" = x"yes"; then
3334    default_shared_modules="$default_shared_modules vfs_afsacl"
3335 fi
3336         
3337 if test x"$samba_cv_WITH_AFS" != x"no" && test x"$have_afs_headers" = x"yes"; then
3338     AC_DEFINE(WITH_AFS,1,[Whether to include AFS clear-text auth support])
3339 fi
3340
3341 #################################################
3342 # check for the DFS clear-text auth system
3343 AC_MSG_CHECKING(whether to use DFS clear-text auth)
3344 AC_ARG_WITH(dfs,
3345 [AS_HELP_STRING([--with-dce-dfs], [Include DCE/DFS clear-text auth support (default=no)])],
3346 [ case "$withval" in
3347   yes)
3348     AC_MSG_RESULT(yes)
3349     AC_DEFINE(WITH_DFS,1,[Whether to include DFS support])
3350     ;;
3351   *)
3352     AC_MSG_RESULT(no)
3353     ;;
3354   esac ],
3355   AC_MSG_RESULT(no)
3356 )
3357
3358 ########################################################
3359 # Compile with LDAP support?
3360
3361 with_ldap_support=auto
3362 AC_MSG_CHECKING([for LDAP support])
3363
3364 AC_ARG_WITH(ldap,
3365 [AS_HELP_STRING([--with-ldap], [LDAP support (default=auto)])],
3366 [ case "$withval" in
3367     yes|no)
3368         with_ldap_support=$withval
3369         ;;
3370   esac ])
3371
3372 AC_MSG_RESULT($with_ldap_support)
3373
3374 SMBLDAP=""
3375 AC_SUBST(SMBLDAP)
3376 SMBLDAPUTIL=""
3377 AC_SUBST(SMBLDAPUTIL)
3378
3379 if test x"$with_ldap_support" != x"no"; then
3380
3381   ##################################################################
3382   # first test for ldap.h and lber.h
3383   # (ldap.h is required for this test)
3384   AC_CHECK_HEADERS(ldap.h lber.h)
3385
3386   if test x"$ac_cv_header_ldap_h" != x"yes"; then
3387         if test x"$with_ldap_support" = x"yes"; then
3388          AC_MSG_ERROR(ldap.h is needed for LDAP support)
3389         else
3390          AC_MSG_WARN(ldap.h is needed for LDAP support)
3391         fi
3392         
3393         with_ldap_support=no
3394   fi
3395
3396   ##################################################################
3397   # HP/UX does not have ber_tag_t in lber.h - it must be configured as
3398   # unsigned int in include/includes.h
3399   case $host_os in
3400         *hpux*)
3401          AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3402          AC_MSG_WARN(ber_tag_t must be configured in includes.h for hpux)
3403         with_ldap_support=yes
3404         ;;
3405         *)
3406         AC_CHECK_TYPE(ber_tag_t,,,[#include <lber.h>])
3407         if test x"$ac_cv_type_ber_tag_t" != x"yes"; then
3408                 if test x"$with_ldap_support" = x"yes"; then
3409                 AC_MSG_ERROR(ber_tag_t is needed for LDAP support)
3410                 else
3411                 AC_MSG_WARN(ber_tag_t is needed for LDAP support)
3412                 fi
3413                 with_ldap_support=no
3414         fi
3415         ;;
3416   esac
3417 fi
3418
3419 if test x"$with_ldap_support" != x"no"; then
3420   ac_save_LIBS=$LIBS
3421
3422   ##################################################################
3423   # we might need the lber lib on some systems. To avoid link errors
3424   # this test must be before the libldap test
3425   AC_CHECK_LIB_EXT(lber, LDAP_LIBS, ber_scanf)
3426
3427   ########################################################
3428   # If ber_sockbuf_add_io() is available we can add
3429   # SASL wrapping hooks
3430   AC_CHECK_FUNC_EXT(ber_sockbuf_add_io,$LDAP_LIBS)
3431
3432   AC_CACHE_CHECK([for LDAP_OPT_SOCKBUF],samba_cv_HAVE_LDAP_OPT_SOCKBUF,[
3433                  AC_TRY_COMPILE([#include <ldap.h>],
3434                                 [int val = LDAP_OPT_SOCKBUF;],
3435                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=yes,
3436                         samba_cv_HAVE_LDAP_OPT_SOCKBUF=no)])
3437
3438   if test x"$ac_cv_func_ext_ber_sockbuf_add_io" = x"yes" -a \
3439           x"$samba_cv_HAVE_LDAP_OPT_SOCKBUF" = x"yes"; then
3440         AC_DEFINE(HAVE_LDAP_SASL_WRAPPING, 1, [Support for SASL wrapping])
3441   fi
3442
3443   #######################################################
3444   # if we have LBER_OPT_LOG_PRINT_FN, we can intercept
3445   # ldap logging and print it out in the samba logs
3446   AC_CACHE_CHECK([for LBER_OPT_LOG_PRINT_FN],
3447                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN,
3448                  [AC_TRY_COMPILE([#include <lber.h>],
3449                                  [int val = LBER_OPT_LOG_PRINT_FN;],
3450                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=yes,
3451                                  samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN=no)])
3452
3453   if test x"$samba_cv_HAVE_LBER_OPT_LOG_PRINT_FN" = x"yes"; then
3454         AC_DEFINE(HAVE_LBER_LOG_PRINT_FN, 1,
3455                   [Support for LDAP/LBER logging interception])
3456   fi
3457
3458   ########################################################
3459   # now see if we can find the ldap libs in standard paths
3460   AC_CHECK_LIB_EXT(ldap, LDAP_LIBS, ldap_init)
3461
3462   ########################################################
3463   # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
3464   # Check found in pam_ldap 145.
3465   AC_CHECK_FUNC_EXT(ldap_set_rebind_proc,$LDAP_LIBS)
3466
3467   LIBS="$LIBS $LDAP_LIBS"
3468   AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, smb_ldap_cv_ldap_set_rebind_proc, [
3469     AC_TRY_COMPILE([
3470         #include <lber.h>
3471         #include <ldap.h>],
3472         [ldap_set_rebind_proc(0, 0, 0);],
3473         [smb_ldap_cv_ldap_set_rebind_proc=3],
3474         [smb_ldap_cv_ldap_set_rebind_proc=2]
3475     )
3476   ])
3477
3478   AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $smb_ldap_cv_ldap_set_rebind_proc, [Number of arguments to ldap_set_rebind_proc])
3479
3480   AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3481
3482   if test x"$ac_cv_lib_ext_ldap_ldap_init" = x"yes"; then
3483     AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])
3484     CPPFLAGS="$CPPFLAGS -DLDAP_DEPRECATED"
3485     default_static_modules="$default_static_modules pdb_ldap idmap_ldap";
3486     default_shared_modules="$default_shared_modules";
3487     SMBLDAP="lib/smbldap.o"
3488     SMBLDAPUTIL="lib/smbldap_util.o"
3489     with_ldap_support=yes
3490     AC_MSG_CHECKING(whether LDAP support is used)
3491     AC_MSG_RESULT(yes)
3492   else
3493     if test x"$with_ldap_support" = x"yes"; then
3494         AC_MSG_ERROR(libldap is needed for LDAP support)
3495     else
3496         AC_MSG_WARN(libldap is needed for LDAP support)
3497     fi
3498
3499     LDAP_LIBS=""
3500     with_ldap_support=no
3501   fi
3502   LIBS=$ac_save_LIBS
3503 fi
3504
3505
3506 #################################################
3507 # active directory support
3508
3509 with_ads_support=auto
3510 AC_MSG_CHECKING([for Active Directory and krb5 support])
3511
3512 AC_ARG_WITH(ads,
3513 [AS_HELP_STRING([--with-ads], [Active Directory support (default=auto)])],
3514 [ case "$withval" in
3515     yes|no)
3516         with_ads_support="$withval"
3517         ;;
3518   esac ])
3519
3520 AC_MSG_RESULT($with_ads_support)
3521
3522 FOUND_KRB5=no
3523 KRB5_LIBS=""
3524
3525 if test x"$with_ldap_support" != x"yes"; then
3526
3527     if test x"$with_ads_support" = x"yes"; then
3528         AC_MSG_ERROR(Active Directory Support requires LDAP support)
3529     elif test x"$with_ads_support" = x"auto"; then
3530         AC_MSG_WARN(Disabling Active Directory support (requires LDAP support))
3531         with_ads_support=no
3532     fi
3533
3534 else
3535
3536     # Check to see whether there is enough LDAP functionality to be able
3537     # to build AD support.
3538
3539 # HPUX only has ldap_init; ok, we take care of this in smbldap.c
3540 case "$host_os" in
3541         *hpux*)
3542     AC_CHECK_FUNC_EXT(ldap_init,$LDAP_LIBS)
3543
3544     if test x"$ac_cv_func_ext_ldap_init" != x"yes"; then
3545         if test x"$with_ads_support" = x"yes"; then
3546             AC_MSG_ERROR(Active Directory support on HPUX requires ldap_init)
3547         elif test x"$with_ads_support" = x"auto"; then
3548             AC_MSG_WARN(Disabling Active Directory support (requires ldap_init on HPUX))
3549             with_ads_support=no
3550         fi
3551     fi
3552     ;;
3553         *)
3554     AC_CHECK_FUNC_EXT(ldap_initialize,$LDAP_LIBS)
3555
3556     if test x"$ac_cv_func_ext_ldap_initialize" != x"yes"; then
3557         if test x"$with_ads_support" = x"yes"; then
3558             AC_MSG_ERROR(Active Directory support requires ldap_initialize)
3559         elif test x"$with_ads_support" = x"auto"; then
3560             AC_MSG_WARN(Disabling Active Directory support (requires ldap_initialize))
3561             with_ads_support=no
3562         fi
3563     fi
3564     ;;
3565 esac
3566
3567
3568     AC_CHECK_FUNC_EXT(ldap_add_result_entry,$LDAP_LIBS)
3569
3570     if test x"$ac_cv_func_ext_ldap_add_result_entry" != x"yes"; then
3571         if test x"$with_ads_support" = x"yes"; then
3572             AC_MSG_ERROR(Active Directory support requires ldap_add_result_entry)
3573         elif test x"$with_ads_support" = x"auto"; then
3574             AC_MSG_WARN(Disabling Active Directory support (requires ldap_add_result_entry))
3575             with_ads_support=no
3576         fi
3577     fi
3578
3579 fi
3580
3581 if test x"$with_ads_support" != x"no"; then
3582
3583   # Do no harm to the values of CFLAGS and LIBS while testing for
3584   # Kerberos support.
3585
3586   if test x$FOUND_KRB5 = x"no"; then
3587     #################################################
3588     # check for location of Kerberos 5 install
3589     AC_MSG_CHECKING(for kerberos 5 install path)
3590     AC_ARG_WITH(krb5,
3591     [AS_HELP_STRING([--with-krb5=base-dir], [Locate Kerberos 5 support (default=/usr)])],
3592     [ case "$withval" in
3593       no)
3594         AC_MSG_RESULT(no krb5-path given)
3595         ;;
3596       yes)
3597         AC_MSG_RESULT(/usr)
3598         FOUND_KRB5=yes
3599         ;;
3600       *)
3601         AC_MSG_RESULT($withval)
3602         KRB5_CFLAGS="-I$withval/include"
3603         KRB5_CPPFLAGS="-I$withval/include"
3604         KRB5_LDFLAGS="-L$withval/lib"
3605         FOUND_KRB5=yes
3606         if test -x "$withval/bin/krb5-config"; then
3607                 KRB5CONFIG=$withval/bin/krb5-config
3608         fi
3609         ;;
3610       esac ],
3611       AC_MSG_RESULT(no krb5-path given)
3612     )
3613   fi
3614
3615   #################################################
3616   # check for krb5-config from recent MIT and Heimdal kerberos 5
3617   AC_PATH_PROG(KRB5CONFIG, krb5-config)
3618   AC_MSG_CHECKING(for working krb5-config)
3619   if test -x "$KRB5CONFIG" && $KRB5CONFIG --libs gssapi > /dev/null ; then
3620     ac_save_CFLAGS=$CFLAGS
3621     CFLAGS="";export CFLAGS
3622     ac_save_LDFLAGS=$LDFLAGS
3623     LDFLAGS="";export LDFLAGS
3624     KRB5_LIBS="`$KRB5CONFIG --libs gssapi`"
3625     KRB5_LDFLAGS="`$KRB5CONFIG --libs gssapi | sed s/-lgss.*//`"
3626     KRB5_CFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3627     KRB5_CPPFLAGS="`$KRB5CONFIG --cflags | sed s/@INCLUDE_des@//`"
3628     CFLAGS=$ac_save_CFLAGS;export CFLAGS
3629     LDFLAGS=$ac_save_LDFLAGS;export LDFLAGS
3630     FOUND_KRB5=yes
3631     AC_MSG_RESULT(yes)
3632   else
3633     AC_MSG_RESULT(no. Fallback to previous krb5 detection strategy)
3634   fi
3635
3636   if test x$FOUND_KRB5 = x"no"; then
3637     #################################################
3638     # see if this&nb