source: branches/samba-3.2.x/source/configure.in@ 231

Last change on this file since 231 was 228, checked in by Herwig Bauernfeind, 16 years ago

Update 3.2 branch to 3.2.6

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