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