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