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