move all old configure checks to build/m4/rewrite.m4
[samba.git] / source4 / build / m4 / rewrite.m4
1 dnl Checks for programs.
2 AC_PROG_CC
3 AC_PROG_INSTALL
4 AC_PATH_PROG(PERL, perl)
5
6 # compile with optimization and without debugging by default, but
7 # allow people to set their own preference.
8 if test "x$CFLAGS" = x
9 then
10   CFLAGS="-O ${CFLAGS}"
11 fi
12
13 dnl Check if we use GNU ld
14 LD=ld
15 AC_PROG_LD_GNU
16
17 dnl needed before AC_TRY_COMPILE
18 AC_ISC_POSIX
19
20 dnl look for executable suffix
21 AC_EXEEXT
22
23 dnl Check if C compiler understands -c and -o at the same time
24 AC_PROG_CC_C_O
25 if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
26       BROKEN_CC=
27 else
28       BROKEN_CC=#
29 fi
30 AC_SUBST(BROKEN_CC)
31
32 AC_CACHE_CHECK([that the C compiler can precompile header files],samba_cv_precompiled_headers, [
33         dnl Check whether the compiler can generate precompiled headers
34         touch conftest.h
35         if ${CC-cc} conftest.h 2> /dev/null && test -f conftest.h.gch; then
36                 samba_cv_precompiled_headers=yes
37         else
38                 samba_cv_precompiled_headers=no
39         fi])
40 PCH_AVAILABLE="#"
41 if test x"$samba_cv_precompiled_headers" = x"yes"; then
42         PCH_AVAILABLE=""
43 fi
44 AC_SUBST(PCH_AVAILABLE)
45
46
47 dnl Check if the C compiler understands volatile (it should, being ANSI).
48 AC_CACHE_CHECK([that the C compiler understands volatile],samba_cv_volatile, [
49     AC_TRY_COMPILE([#include <sys/types.h>],[volatile int i = 0],
50         samba_cv_volatile=yes,samba_cv_volatile=no)])
51 if test x"$samba_cv_volatile" = x"yes"; then
52    AC_DEFINE(HAVE_VOLATILE, 1, [Whether the C compiler understands volatile])
53 fi
54
55
56 AC_CANONICAL_SYSTEM
57
58 dnl Add #include for broken IRIX header files
59   case "$host_os" in
60         *irix6*) AC_ADD_INCLUDE(<standards.h>)
61         ;;
62 esac
63
64 AC_VALIDATE_CACHE_SYSTEM_TYPE
65
66 DYNEXP=
67
68 #
69 # Config CPPFLAG settings for strange OS's that must be set
70 # before other tests.
71 #
72 case "$host_os" in
73 # Try to work out if this is the native HPUX compiler that uses the -Ae flag.
74     *hpux*)
75     
76       AC_PROG_CC_FLAG(Ae)
77       # mmap on HPUX is completely broken...
78       AC_DEFINE(MMAP_BLACKLIST, 1, [Whether MMAP is broken])
79       if test $ac_cv_prog_cc_Ae = yes; then
80         CPPFLAGS="$CPPFLAGS -Ae"
81       fi
82 #
83 # Defines needed for HPUX support.
84 # HPUX has bigcrypt but (sometimes?) doesn't use it for
85 # password hashing - hence the USE_BOTH_CRYPT_CALLS define.
86 #
87       case `uname -r` in
88                         *9*|*10*)
89                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
90                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
91                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
92                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
93                                 AC_DEFINE(_ALIGNMENT_REQUIRED,1,[Required alignment])
94                                 AC_DEFINE(_MAX_ALIGNMENT,4,[Maximum alignment])
95                                 ;;
96                         *11*)
97                                 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_POSIX_SOURCE -D_LARGEFILE64_SOURCE -D_ALIGNMENT_REQUIRED=1 -D_MAX_ALIGNMENT=4 -DMAX_POSITIVE_LOCK_OFFSET=0x1ffffffffffLL"
98                                 AC_DEFINE(USE_BOTH_CRYPT_CALLS, 1, [Whether to use both of HPUX' crypt calls])
99                                 AC_DEFINE(_HPUX_SOURCE, 1, [Whether to use HPUX extensions])
100                                 AC_DEFINE(_POSIX_SOURCE, 1, [Whether to use POSIX compatible functions])
101                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to use large file support])
102                                 AC_DEFINE(_ALIGNMENT_REQUIRED, 1, [Required alignment])
103                                 AC_DEFINE(_MAX_ALIGNMENT, 4, [Maximum alignment])
104                                 ;;
105       esac
106       DYNEXP="-Wl,-E"
107       ;;
108
109 #
110 # CRAY Unicos has broken const handling
111        *unicos*)
112           AC_MSG_RESULT([disabling const])
113           CPPFLAGS="$CPPFLAGS -Dconst="
114           ;;
115         
116 #
117 # AIX4.x doesn't even admit to having large
118 # files *at all* unless the -D_LARGE_FILE or -D_LARGE_FILE_API flags are set.
119 #
120     *aix4*)
121           AC_MSG_RESULT([enabling large file support])
122       CPPFLAGS="$CPPFLAGS -D_LARGE_FILES"
123           AC_DEFINE(_LARGE_FILES, 1, [Whether to enable large file support])
124       ;;    
125 #
126 # Defines needed for Solaris 2.6/2.7 aka 7.0 to make it admit
127 # to the existance of large files..
128 # Note that -D_LARGEFILE64_SOURCE is different from the Sun
129 # recommendations on large file support, however it makes the
130 # compile work using gcc 2.7 and 2.8, whereas using the Sun
131 # recommendation makes the compile fail on gcc2.7. JRA.
132 #
133         *solaris*)
134                 case `uname -r` in
135                         5.0*|5.1*|5.2*|5.3*|5.5*)
136                                 AC_MSG_RESULT([no large file support])
137                                 ;;
138                         5.*)
139                         AC_MSG_RESULT([enabling large file support])
140                         if test "$ac_cv_prog_gcc" = yes; then
141                                 ${CC-cc} -v >conftest.c 2>&1
142                                 ac_cv_gcc_compiler_version_number=`grep 'gcc version' conftest.c`
143                                 rm -fr conftest.c
144                                 case "$ac_cv_gcc_compiler_version_number" in
145                                         *"gcc version 2.6"*|*"gcc version 2.7"*)
146                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE"
147                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
148                                                 ;;
149                                         *)
150                                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
151                                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
152                                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
153                                                 ;;
154                                 esac
155                         else
156                                 CPPFLAGS="$CPPFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
157                                 AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
158                                 AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
159                         fi
160                         ;;
161                 esac
162                 ;;
163 #
164 # VOS may need to have POSIX support and System V compatibility enabled.
165 #
166     *vos*)
167     case "$CPPFLAGS" in
168           *-D_POSIX_C_SOURCE*)
169                 ;;
170           *)
171                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=199506L"
172                 AC_DEFINE(_POSIX_C_SOURCE, 199506L, [Whether to enable POSIX support])
173                 ;;
174     esac
175     case "$CPPFLAGS" in
176           *-D_SYSV*|*-D_SVID_SOURCE*)
177                 ;;
178           *)
179                 CPPFLAGS="$CPPFLAGS -D_SYSV"
180                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
181     esac
182     ;;
183 #
184 # Tests needed for SINIX large file support.
185 #
186     *sysv4*)
187       if test $host = mips-sni-sysv4 ; then
188         AC_MSG_CHECKING([for LFS support])
189         old_CPPFLAGS="$CPPFLAGS"
190         CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
191         AC_TRY_RUN([
192 #include <unistd.h>
193 main () {
194 #if _LFS64_LARGEFILE == 1
195 exit(0);
196 #else
197 exit(1);
198 #endif
199 }], [SINIX_LFS_SUPPORT=yes], [SINIX_LFS_SUPPORT=no], [SINIX_LFS_SUPPORT=cross])
200         CPPFLAGS="$old_CPPFLAGS"
201         if test x$SINIX_LFS_SUPPORT = xyes ; then
202           CPPFLAGS="-D_LARGEFILE64_SOURCE $CPPFLAGS"
203                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
204           CFLAGS="`getconf LFS64_CFLAGS` $CFLAGS"
205           LDFLAGS="`getconf LFS64_LDFLAGS` $LDFLAGS"
206           LIBS="`getconf LFS64_LIBS` $LIBS"
207         fi
208       AC_MSG_RESULT([$SINIX_LFS_SUPPORT])
209       fi
210     ;;
211
212 # Tests for linux LFS support. Need kernel 2.4 and glibc2.2 or greater support.
213 #
214     *linux*)
215         AC_MSG_CHECKING([for LFS support])
216         old_CPPFLAGS="$CPPFLAGS"
217         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
218        AC_TRY_RUN([
219 #include <unistd.h>
220 #include <sys/utsname.h>
221 #include <string.h>
222 #include <stdlib.h>
223 main() {
224 #if _LFS64_LARGEFILE == 1
225        struct utsname uts;
226        char *release;
227        int major, minor;
228
229        /* Ensure this is glibc 2.2 or higher */
230 #if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
231        int libc_major = __GLIBC__;
232        int libc_minor = __GLIBC_MINOR__;
233
234        if (libc_major < 2)
235               exit(1);
236        if (libc_minor < 2)
237               exit(1);
238 #endif
239
240        /* Ensure this is kernel 2.4 or higher */
241
242        uname(&uts);
243        release = uts.release;
244        major = atoi(strsep(&release, "."));
245        minor = atoi(strsep(&release, "."));
246
247        if (major > 2 || (major == 2 && minor > 3))
248                exit(0);
249        exit(1);
250 #else
251        exit(1);
252 #endif
253 }
254 ], [LINUX_LFS_SUPPORT=yes], [LINUX_LFS_SUPPORT=no], [LINUX_LFS_SUPPORT=cross])
255         CPPFLAGS="$old_CPPFLAGS"
256         if test x$LINUX_LFS_SUPPORT = xyes ; then
257           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE $CPPFLAGS"
258                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
259           AC_DEFINE(_FILE_OFFSET_BITS, 64, [File offset bits])
260           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
261         fi
262        AC_MSG_RESULT([$LINUX_LFS_SUPPORT])
263                 ;;
264
265     *hurd*)
266         AC_MSG_CHECKING([for LFS support])
267         old_CPPFLAGS="$CPPFLAGS"
268         CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
269         AC_TRY_RUN([
270 #include <unistd.h>
271 main () {
272 #if _LFS64_LARGEFILE == 1
273 exit(0);
274 #else
275 exit(1);
276 #endif
277 }], [GLIBC_LFS_SUPPORT=yes], [GLIBC_LFS_SUPPORT=no], [GLIBC_LFS_SUPPORT=cross])
278         CPPFLAGS="$old_CPPFLAGS"
279         if test x$GLIBC_LFS_SUPPORT = xyes ; then
280           CPPFLAGS="-D_LARGEFILE64_SOURCE -D_GNU_SOURCE $CPPFLAGS"
281                   AC_DEFINE(_LARGEFILE64_SOURCE, 1, [Whether to enable large file support])
282           AC_DEFINE(_GNU_SOURCE, 1, [Whether to use GNU libc extensions])
283         fi
284       AC_MSG_RESULT([$GLIBC_LFS_SUPPORT])
285     ;;
286
287 esac
288
289 AC_INLINE
290 AC_HEADER_STDC
291 AC_HEADER_DIRENT
292 AC_HEADER_TIME
293 AC_HEADER_SYS_WAIT
294 AC_CHECK_HEADERS(arpa/inet.h sys/select.h fcntl.h sys/fcntl.h sys/time.h)
295 AC_CHECK_HEADERS(unistd.h utime.h grp.h sys/id.h limits.h memory.h net/if.h)
296 AC_CHECK_HEADERS(compat.h rpc/rpc.h rpcsvc/nis.h rpcsvc/yp_prot.h rpcsvc/ypclnt.h)
297 AC_CHECK_HEADERS(sys/param.h ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/mode.h)
298 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h sys/socket.h)
299 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h termio.h)
300 AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
301 AC_CHECK_HEADERS(security/pam_modules.h security/_pam_macros.h dlfcn.h)
302 AC_CHECK_HEADERS(sys/syslog.h syslog.h)
303
304 #
305 # HPUX has a bug in that including shadow.h causes a re-definition of MAXINT.
306 # This causes configure to fail to detect it. Check for shadow separately on HPUX.
307 #
308 case "$host_os" in
309     *hpux*)
310                 AC_TRY_COMPILE([#include <shadow.h>],[struct spwd testme],
311                         ac_cv_header_shadow_h=yes,ac_cv_header_shadow_h=no)
312                 if test x"$ac_cv_header_shadow_h" = x"yes"; then
313                    AC_DEFINE(HAVE_SHADOW_H,1,[Whether we have shadow.h])
314                 fi
315         ;;
316 esac
317 AC_CHECK_HEADERS(shadow.h netinet/ip.h netinet/tcp.h netinet/in_systm.h netinet/in_ip.h)
318 AC_CHECK_HEADERS(nss.h nss_common.h ns_api.h sys/security.h security/pam_appl.h security/pam_modules.h)
319 AC_CHECK_HEADERS(stropts.h)
320 AC_CHECK_HEADERS(sys/capability.h syscall.h sys/syscall.h)
321 AC_CHECK_HEADERS(sys/acl.h)
322
323 AC_CHECK_SIZEOF(int,cross)
324 AC_CHECK_SIZEOF(long,cross)
325 AC_CHECK_SIZEOF(short,cross)
326
327 AC_C_CONST
328 AC_C_INLINE
329 AC_C_BIGENDIAN
330 AC_C_CHAR_UNSIGNED
331
332 AC_TYPE_SIGNAL
333 AC_TYPE_UID_T
334 AC_TYPE_MODE_T
335 AC_TYPE_OFF_T
336 AC_TYPE_SIZE_T
337 AC_TYPE_PID_T
338 AC_STRUCT_ST_RDEV
339 AC_DIRENT_D_OFF
340 AC_CHECK_TYPE(ino_t,unsigned)
341 AC_CHECK_TYPE(loff_t,off_t)
342 AC_CHECK_TYPE(offset_t,loff_t)
343 AC_CHECK_TYPE(ssize_t, int)
344 AC_CHECK_TYPE(wchar_t, unsigned short)
345 AC_CHECK_TYPE(uint_t, unsigned int)
346
347 ############################################
348 # we need dlopen/dlclose/dlsym/dlerror for PAM, the password database plugins and the plugin loading code
349 AC_SEARCH_LIBS(dlopen, [dl])
350 # dlopen/dlclose/dlsym/dlerror will be checked again later and defines will be set then
351
352 ############################################
353 # check if the compiler can do immediate structures
354 AC_CACHE_CHECK([for immediate structures],samba_cv_immediate_structures, [
355     AC_TRY_COMPILE([
356 #include <stdio.h>],
357 [
358    typedef struct {unsigned x;} FOOBAR;
359    #define X_FOOBAR(x) ((FOOBAR) { x })
360    #define FOO_ONE X_FOOBAR(1)
361    FOOBAR f = FOO_ONE;   
362    static struct {
363         FOOBAR y; 
364         } f2[] = {
365                 {FOO_ONE}
366         };   
367 ],
368         samba_cv_immediate_structures=yes,samba_cv_immediate_structures=no)])
369 if test x"$samba_cv_immediate_structures" = x"yes"; then
370    AC_DEFINE(HAVE_IMMEDIATE_STRUCTURES,1,[Whether the compiler supports immediate structures])
371 fi
372
373 ############################################
374 # check for unix domain sockets
375 AC_CACHE_CHECK([for unix domain sockets],samba_cv_unixsocket, [
376     AC_TRY_COMPILE([
377 #include <sys/types.h>
378 #include <stdlib.h>
379 #include <stddef.h>
380 #include <sys/socket.h>
381 #include <sys/un.h>],
382 [
383   struct sockaddr_un sunaddr; 
384   sunaddr.sun_family = AF_UNIX;
385 ],
386         samba_cv_unixsocket=yes,samba_cv_unixsocket=no)])
387 if test x"$samba_cv_unixsocket" = x"yes"; then
388    AC_DEFINE(HAVE_UNIXSOCKET,1,[If we need to build with unixscoket support])
389 fi
390
391
392 AC_CACHE_CHECK([for socklen_t type],samba_cv_socklen_t, [
393     AC_TRY_COMPILE([
394 #include <sys/types.h>
395 #if STDC_HEADERS
396 #include <stdlib.h>
397 #include <stddef.h>
398 #endif
399 #include <sys/socket.h>],[socklen_t i = 0],
400         samba_cv_socklen_t=yes,samba_cv_socklen_t=no)])
401 if test x"$samba_cv_socklen_t" = x"yes"; then
402    AC_DEFINE(HAVE_SOCKLEN_T_TYPE,1,[Whether we have the variable type socklen_t])
403 fi
404
405 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
406     AC_TRY_COMPILE([
407 #include <sys/types.h>
408 #if STDC_HEADERS
409 #include <stdlib.h>
410 #include <stddef.h>
411 #endif
412 #include <signal.h>],[sig_atomic_t i = 0],
413         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
414 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
415    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
416 fi
417
418 # stupid headers have the functions but no declaration. grrrr.
419 AC_HAVE_DECL(errno, [#include <errno.h>])
420 AC_HAVE_DECL(setresuid, [#include <unistd.h>])
421 AC_HAVE_DECL(setresgid, [#include <unistd.h>])
422 AC_HAVE_DECL(asprintf, [#include <stdio.h>])
423 AC_HAVE_DECL(vasprintf, [#include <stdio.h>])
424 AC_HAVE_DECL(vsnprintf, [#include <stdio.h>])
425 AC_HAVE_DECL(snprintf, [#include <stdio.h>])
426
427 # and glibc has setresuid under linux but the function does
428 # nothing until kernel 2.1.44! very dumb.
429 AC_CACHE_CHECK([for real setresuid],samba_cv_have_setresuid,[
430     AC_TRY_RUN([#include <errno.h>
431 main() { setresuid(1,1,1); setresuid(2,2,2); exit(errno==EPERM?0:1);}],
432         samba_cv_have_setresuid=yes,samba_cv_have_setresuid=no,samba_cv_have_setresuid=cross)])
433 if test x"$samba_cv_have_setresuid" = x"yes"; then
434     AC_DEFINE(HAVE_SETRESUID,1,[Whether the system has setresuid])
435 fi
436
437 # Do the same check for setresguid...
438 #
439 AC_CACHE_CHECK([for real setresgid],samba_cv_have_setresgid,[
440     AC_TRY_RUN([#include <unistd.h>
441 #include <errno.h>
442 main() { errno = 0; setresgid(1,1,1); exit(errno != 0 ? (errno==EPERM ? 0 : 1) : 0);}],
443         samba_cv_have_setresgid=yes,samba_cv_have_setresgid=no,samba_cv_have_setresgid=cross)])
444 if test x"$samba_cv_have_setresgid" = x"yes"; then
445     AC_DEFINE(HAVE_SETRESGID,1,[Whether the system has setresgid])
446 fi
447
448 AC_FUNC_MEMCMP
449
450 ###############################################
451 # Readline included by default unless explicitly asked not to
452 test "${with_readline+set}" != "set" && with_readline=yes
453
454 # test for where we get readline() from
455 AC_MSG_CHECKING(whether to use readline)
456 AC_ARG_WITH(readline,
457 [  --with-readline[=DIR]   Look for readline include/libs in DIR (default=auto) ],
458 [  case "$with_readline" in
459   yes)
460     AC_MSG_RESULT(yes)
461
462     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
463     AC_CHECK_HEADERS(readline/history.h)
464
465     AC_CHECK_HEADERS(readline.h readline/readline.h,[
466       for termlib in ncurses curses termcap terminfo termlib tinfo; do
467        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
468       done
469       AC_CHECK_LIB(readline, rl_callback_handler_install,
470        [TERMLIBS="-lreadline $TERMLIBS"
471        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
472        break], [TERMLIBS=], $TERMLIBS)])
473     ;;
474   no)
475     AC_MSG_RESULT(no)
476     ;;
477   *)
478     AC_MSG_RESULT(yes)
479
480     # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
481     # alternate readline path
482     _ldflags=${LDFLAGS}
483     _cppflags=${CPPFLAGS}
484
485     # Add additional search path
486     LDFLAGS="-L$with_readline/lib $LDFLAGS"
487     CPPFLAGS="-I$with_readline/include $CPPFLAGS"
488
489     AC_CHECK_HEADERS(readline.h history.h readline/readline.h)
490     AC_CHECK_HEADERS(readline/history.h)
491
492     AC_CHECK_HEADERS(readline.h readline/readline.h,[
493       for termlib in ncurses curses termcap terminfo termlib; do
494        AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break])
495       done
496       AC_CHECK_LIB(readline, rl_callback_handler_install,
497        [TERMLDFLAGS="-L$with_readline/lib"
498        TERMCPPFLAGS="-I$with_readline/include"
499        CPPFLAGS="-I$with_readline/include $CPPFLAGS"
500        TERMLIBS="-lreadline $TERMLIBS"
501        AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline])
502        break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)])
503
504     LDFLAGS=$_ldflags
505     ;;
506   esac],
507   AC_MSG_RESULT(no)
508 )
509 AC_SUBST(TERMLIBS)
510 AC_SUBST(TERMLDFLAGS)
511
512 # The readline API changed slightly from readline3 to readline4, so
513 # code will generate warnings on one of them unless we have a few
514 # special cases.
515 AC_CHECK_LIB(readline, rl_completion_matches,
516              [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, 
517                         [Do we have rl_completion_matches?])],
518              [],
519              [$TERMLIBS])
520
521 # The following test taken from the cvs sources
522 # If we can't find connect, try looking in -lsocket, -lnsl, and -linet.
523 # The Irix 5 libc.so has connect and gethostbyname, but Irix 5 also has
524 # libsocket.so which has a bad implementation of gethostbyname (it
525 # only looks in /etc/hosts), so we only look for -lsocket if we need
526 # it.
527 AC_CHECK_FUNCS(connect)
528 if test x"$ac_cv_func_connect" = x"no"; then
529     case "$LIBS" in
530     *-lnsl*) ;;
531     *) AC_CHECK_LIB(nsl_s, printf) ;;
532     esac
533     case "$LIBS" in
534     *-lnsl*) ;;
535     *) AC_CHECK_LIB(nsl, printf) ;;
536     esac
537     case "$LIBS" in
538     *-lsocket*) ;;
539     *) AC_CHECK_LIB(socket, connect) ;;
540     esac
541     case "$LIBS" in
542     *-linet*) ;;
543     *) AC_CHECK_LIB(inet, connect) ;;
544     esac
545     dnl We can't just call AC_CHECK_FUNCS(connect) here, because the value
546     dnl has been cached.
547     if test x"$ac_cv_lib_socket_connect" = x"yes" || 
548        test x"$ac_cv_lib_inet_connect" = x"yes"; then
549         # ac_cv_func_connect=yes
550         # don't!  it would cause AC_CHECK_FUNC to succeed next time configure is run
551         AC_DEFINE(HAVE_CONNECT,1,[Whether the system has connect()])
552     fi
553 fi
554
555 ###############################################
556 # test for where we get yp_get_default_domain() from
557 AC_SEARCH_LIBS(yp_get_default_domain, [nsl])
558 AC_CHECK_FUNCS(yp_get_default_domain)
559
560 # Check if we have execl, if not we need to compile smbrun.
561 AC_CHECK_FUNCS(execl)
562 if test x"$ac_cv_func_execl" = x"no"; then
563     EXTRA_BIN_PROGS="$EXTRA_BIN_PROGS bin/smbrun\$(EXEEXT)"
564 fi
565
566 AC_CHECK_FUNCS(dlopen dlclose dlsym dlerror waitpid getcwd strdup strndup strnlen strtoul strerror chown fchown chmod fchmod chroot link mknod mknod64)
567 AC_CHECK_FUNCS(fstat strchr utime utimes getrlimit fsync bzero memset strlcpy strlcat setpgid)
568 AC_CHECK_FUNCS(memmove vsnprintf snprintf asprintf vasprintf setsid glob strpbrk pipe crypt16 getauthuid)
569 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction sigset innetgr setnetgrent getnetgrent endnetgrent)
570 AC_CHECK_FUNCS(initgroups select rdchk getgrnam getgrent pathconf realpath)
571 AC_CHECK_FUNCS(setpriv setgidx setuidx setgroups sysconf mktime rename ftruncate stat64 fstat64)
572 AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64)
573 AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
574 AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
575 AC_CHECK_FUNCS(syslog vsyslog getgrouplist timegm)
576 # setbuffer, shmget, shm_open are needed for smbtorture
577 AC_CHECK_FUNCS(setbuffer shmget shm_open)
578
579 # syscall() is needed for smbwrapper.
580 AC_CHECK_FUNCS(syscall)
581
582 AC_CHECK_FUNCS(_dup _dup2 _opendir _readdir _seekdir _telldir _closedir)
583 AC_CHECK_FUNCS(__dup __dup2 __opendir __readdir __seekdir __telldir __closedir)
584 AC_CHECK_FUNCS(__getcwd _getcwd)
585 AC_CHECK_FUNCS(__xstat __fxstat __lxstat)
586 AC_CHECK_FUNCS(_stat _lstat _fstat __stat __lstat __fstat)
587 AC_CHECK_FUNCS(_acl __acl _facl __facl _open __open _chdir __chdir)
588 AC_CHECK_FUNCS(_close __close _fchdir __fchdir _fcntl __fcntl)
589 AC_CHECK_FUNCS(getdents _getdents __getdents _lseek __lseek _read __read)
590 AC_CHECK_FUNCS(getdirentries _write __write _fork __fork)
591 AC_CHECK_FUNCS(_stat64 __stat64 _fstat64 __fstat64 _lstat64 __lstat64)
592 AC_CHECK_FUNCS(__sys_llseek llseek _llseek __llseek readdir64 _readdir64 __readdir64)
593 AC_CHECK_FUNCS(pread _pread __pread pread64 _pread64 __pread64)
594 AC_CHECK_FUNCS(pwrite _pwrite __pwrite pwrite64 _pwrite64 __pwrite64)
595 AC_CHECK_FUNCS(open64 _open64 __open64 creat64)
596
597 #
598 # stat64 family may need <sys/stat.h> on some systems, notably ReliantUNIX
599 #
600
601 if test x$ac_cv_func_stat64 = xno ; then
602   AC_MSG_CHECKING([for stat64 in <sys/stat.h>])
603   AC_TRY_LINK([
604 #if defined(HAVE_UNISTD_H)
605 #include <unistd.h>
606 #endif
607 #include <sys/stat.h>
608 ], [struct stat64 st64; exit(stat64(".",&st64));], [ac_cv_func_stat64=yes])
609   AC_MSG_RESULT([$ac_cv_func_stat64])
610   if test x$ac_cv_func_stat64 = xyes ; then
611     AC_DEFINE(HAVE_STAT64,1,[Whether stat64() is available])
612   fi
613 fi
614
615 if test x$ac_cv_func_lstat64 = xno ; then
616   AC_MSG_CHECKING([for lstat64 in <sys/stat.h>])
617   AC_TRY_LINK([
618 #if defined(HAVE_UNISTD_H)
619 #include <unistd.h>
620 #endif
621 #include <sys/stat.h>
622 ], [struct stat64 st64; exit(lstat64(".",&st64));], [ac_cv_func_lstat64=yes])
623   AC_MSG_RESULT([$ac_cv_func_lstat64])
624   if test x$ac_cv_func_lstat64 = xyes ; then
625     AC_DEFINE(HAVE_LSTAT64,[Whether lstat64() is available])
626   fi
627 fi
628
629 if test x$ac_cv_func_fstat64 = xno ; then
630   AC_MSG_CHECKING([for fstat64 in <sys/stat.h>])
631   AC_TRY_LINK([
632 #if defined(HAVE_UNISTD_H)
633 #include <unistd.h>
634 #endif
635 #include <sys/stat.h>
636 ], [struct stat64 st64; exit(fstat64(0,&st64));], [ac_cv_func_fstat64=yes])
637   AC_MSG_RESULT([$ac_cv_func_fstat64])
638   if test x$ac_cv_func_fstat64 = xyes ; then
639     AC_DEFINE(HAVE_FSTAT64,1,[Whether fstat64() is available])
640   fi
641 fi
642
643 #####################################
644 # we might need the resolv library on some systems
645 AC_CHECK_LIB(resolv, dn_expand)
646
647 #
648 # Check for the functions putprpwnam, set_auth_parameters,
649 # getspnam, bigcrypt and getprpwnam in -lsec and -lsecurity
650 # Needed for OSF1 and HPUX.
651 #
652
653 AC_LIBTESTFUNC(security, putprpwnam)
654 AC_LIBTESTFUNC(sec, putprpwnam)
655
656 AC_LIBTESTFUNC(security, set_auth_parameters)
657 AC_LIBTESTFUNC(sec, set_auth_parameters)
658
659 # UnixWare 7.x has its getspnam in -lgen
660 AC_LIBTESTFUNC(gen, getspnam)
661
662 AC_LIBTESTFUNC(security, getspnam)
663 AC_LIBTESTFUNC(sec, getspnam)
664
665 AC_LIBTESTFUNC(security, bigcrypt)
666 AC_LIBTESTFUNC(sec, bigcrypt)
667
668 AC_LIBTESTFUNC(security, getprpwnam)
669 AC_LIBTESTFUNC(sec, getprpwnam)
670
671 # Assume non-shared by default and override below
672 BLDSHARED="false"
673
674 # these are the defaults, good for lots of systems
675 HOST_OS="$host_os"
676 LDSHFLAGS="-shared"
677 SONAMEFLAG="#"
678 SHLD="\${CC}"
679 PICFLAG=""
680 PICSUFFIX="po"
681 POBAD_CC="#"
682 SHLIBEXT="so"
683
684 if test "$enable_shared" = "yes"; then
685   # this bit needs to be modified for each OS that is suported by
686   # smbwrapper. You need to specify how to created a shared library and
687   # how to compile C code to produce PIC object files
688
689   AC_MSG_CHECKING([ability to build shared libraries])
690
691   # and these are for particular systems
692   case "$host_os" in
693                 *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
694                         BLDSHARED="true"
695                         LDSHFLAGS="-shared" 
696                         DYNEXP="-Wl,--export-dynamic"
697                         PICFLAG="-fPIC"
698                         SONAMEFLAG="-Wl,-soname="
699                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
700                         ;;
701                 *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
702                         BLDSHARED="true"
703                         LDSHFLAGS="-G"
704                         SONAMEFLAG="-h "
705                         if test "${GCC}" = "yes"; then
706                                 PICFLAG="-fPIC"
707                                 if test "${ac_cv_prog_gnu_ld}" = "yes"; then
708                                         DYNEXP="-Wl,-E"
709                                 fi
710                         else
711                                 PICFLAG="-KPIC"
712                                 ## ${CFLAGS} added for building 64-bit shared 
713                                 ## libs using Sun's Compiler
714                                 LDSHFLAGS="-G \${CFLAGS}"
715                                 POBAD_CC=""
716                                 PICSUFFIX="po.o"
717                         fi
718                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
719                         ;;
720                 *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
721                         BLDSHARED="true"
722                         LDSHFLAGS="-G"
723                         SONAMEFLAG="-Wl,-h,"
724                         PICFLAG="-KPIC"   # Is this correct for SunOS
725                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
726                         ;;
727                 *netbsd* | *freebsd*)  BLDSHARED="true"
728                         LDSHFLAGS="-shared"
729                         DYNEXP="-Wl,--export-dynamic"
730                         SONAMEFLAG="-Wl,-soname,"
731                         PICFLAG="-fPIC -DPIC"
732                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
733                         ;;
734                 *openbsd*)  BLDSHARED="true"
735                         LDSHFLAGS="-shared"
736                         DYNEXP="-Wl,-Bdynamic"
737                         SONAMEFLAG="-Wl,-soname,"
738                         PICFLAG="-fPIC"
739                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
740                         ;;
741                 *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
742                         case "$host_os" in
743                         *irix6*) AC_DEFINE(IRIX6,1,[Whether the host os is irix6])
744                         ;;
745                         esac
746                         ATTEMPT_WRAP32_BUILD=yes
747                         BLDSHARED="true"
748                         LDSHFLAGS="-set_version sgi1.0 -shared"
749                         SONAMEFLAG="-soname "
750                         SHLD="\${LD}"
751                         if test "${GCC}" = "yes"; then
752                                 PICFLAG="-fPIC"
753                         else 
754                                 PICFLAG="-KPIC"
755                         fi
756                         AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
757                         ;;
758                 *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
759                         BLDSHARED="true"
760                         LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry"
761                         DYNEXP="-Wl,-brtl,-bexpall"
762                         PICFLAG="-O2"
763                         if test "${GCC}" != "yes"; then
764                                 ## for funky AIX compiler using strncpy()
765                                 CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
766                         fi
767
768                         AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
769                         ;;
770                 *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
771                         SHLIBEXT="sl"
772                         # Use special PIC flags for the native HP-UX compiler.
773                         if test $ac_cv_prog_cc_Ae = yes; then
774                                 BLDSHARED="true"
775                                 SHLD="/usr/bin/ld"
776                                 LDSHFLAGS="-B symbolic -b -z"
777                                 SONAMEFLAG="+h "
778                                 PICFLAG="+z"
779                         fi
780                         DYNEXP="-Wl,-E"
781                         AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
782                         ;;
783                 *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
784                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
785                         ;;
786                 *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
787                         BLDSHARED="true"
788                         LDSHFLAGS="-shared"
789                         SONAMEFLAG="-Wl,-soname,"
790                         PICFLAG="-fPIC"
791                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
792                         ;;
793                 *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
794                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
795                         ;;
796                 *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
797                         BLDSHARED="true"
798                         LDSHFLAGS="-shared"
799                         SONAMEFLAG="-Wl,-soname,"
800                         PICFLAG="-KPIC"
801                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
802                         ;;
803                 *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
804                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
805                         ;;
806                 *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
807                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
808                         ;;
809                 *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
810                         case "$host" in
811                                 *-univel-*)     if [ test "$GCC" != yes ]; then
812                                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
813                                         fi
814                                         LDSHFLAGS="-G"
815                                         DYNEXP="-Bexport"
816                                 ;;
817                                 *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
818                         esac
819                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
820                         ;;
821
822                 *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
823                         if [ test "$GCC" != yes ]; then
824                                 AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
825                         fi
826                         LDSHFLAGS="-G"
827                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
828                         ;;
829                 *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
830                         BLDSHARED="false"
831                         LDSHFLAGS=""
832                         ;;
833                 *)
834                         AC_DEFINE(STAT_ST_BLOCKSIZE,512)
835                         ;;
836   esac
837   AC_SUBST(DYNEXP)
838   AC_MSG_RESULT($BLDSHARED)
839   AC_MSG_CHECKING([linker flags for shared libraries])
840   AC_MSG_RESULT([$LDSHFLAGS])
841   AC_MSG_CHECKING([compiler flags for position-independent code])
842   AC_MSG_RESULT([$PICFLAGS])
843 fi
844
845 #######################################################
846 # test whether building a shared library actually works
847 if test $BLDSHARED = true; then
848 AC_CACHE_CHECK([whether building shared libraries actually works], 
849                [ac_cv_shlib_works],[
850    ac_cv_shlib_works=no
851    # try building a trivial shared library
852    if test "$PICSUFFIX" = "po"; then
853      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.po ${srcdir-.}/tests/shlib.c &&
854        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
855        ac_cv_shlib_works=yes
856    else
857      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.$PICSUFFIX ${srcdir-.}/tests/shlib.c &&
858        mv shlib.$PICSUFFIX shlib.po &&
859        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
860        ac_cv_shlib_works=yes
861    fi
862    rm -f shlib.so shlib.po
863 ])
864 if test $ac_cv_shlib_works = no; then
865    BLDSHARED=false
866 fi
867 fi
868
869 ################
870
871 AC_CACHE_CHECK([for long long],samba_cv_have_longlong,[
872 AC_TRY_RUN([#include <stdio.h>
873 main() { long long x = 1000000; x *= x; exit(((x/1000000) == 1000000)? 0: 1); }],
874 samba_cv_have_longlong=yes,samba_cv_have_longlong=no,samba_cv_have_longlong=cross)])
875 if test x"$samba_cv_have_longlong" = x"yes"; then
876     AC_DEFINE(HAVE_LONGLONG,1,[Whether the host supports long long's])
877 fi
878
879 #
880 # Check if the compiler supports the LL prefix on long long integers.
881 # AIX needs this.
882
883 AC_CACHE_CHECK([for LL suffix on long long integers],samba_cv_compiler_supports_ll, [
884     AC_TRY_COMPILE([#include <stdio.h>],[long long i = 0x8000000000LL],
885         samba_cv_compiler_supports_ll=yes,samba_cv_compiler_supports_ll=no)])
886 if test x"$samba_cv_compiler_supports_ll" = x"yes"; then
887    AC_DEFINE(COMPILER_SUPPORTS_LL,1,[Whether the compiler supports the LL prefix on long long integers])
888 fi
889
890   
891 AC_CACHE_CHECK([for 64 bit off_t],samba_cv_SIZEOF_OFF_T,[
892 AC_TRY_RUN([#include <stdio.h>
893 #include <sys/stat.h>
894 main() { exit((sizeof(off_t) == 8) ? 0 : 1); }],
895 samba_cv_SIZEOF_OFF_T=yes,samba_cv_SIZEOF_OFF_T=no,samba_cv_SIZEOF_OFF_T=cross)])
896 if test x"$samba_cv_SIZEOF_OFF_T" = x"yes"; then
897     AC_DEFINE(SIZEOF_OFF_T,8,[The size of the 'off_t' type])
898 fi
899
900 AC_CACHE_CHECK([for off64_t],samba_cv_HAVE_OFF64_T,[
901 AC_TRY_RUN([
902 #if defined(HAVE_UNISTD_H)
903 #include <unistd.h>
904 #endif
905 #include <stdio.h>
906 #include <sys/stat.h>
907 main() { struct stat64 st; off64_t s; if (sizeof(off_t) == sizeof(off64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
908 samba_cv_HAVE_OFF64_T=yes,samba_cv_HAVE_OFF64_T=no,samba_cv_HAVE_OFF64_T=cross)])
909 if test x"$samba_cv_HAVE_OFF64_T" = x"yes"; then
910     AC_DEFINE(HAVE_OFF64_T,1,[Whether off64_t is available])
911 fi
912
913 AC_CACHE_CHECK([for 64 bit ino_t],samba_cv_SIZEOF_INO_T,[
914 AC_TRY_RUN([#include <stdio.h>
915 #include <sys/stat.h>
916 main() { exit((sizeof(ino_t) == 8) ? 0 : 1); }],
917 samba_cv_SIZEOF_INO_T=yes,samba_cv_SIZEOF_INO_T=no,samba_cv_SIZEOF_INO_T=cross)])
918 if test x"$samba_cv_SIZEOF_INO_T" = x"yes"; then
919     AC_DEFINE(SIZEOF_INO_T,8,[The size of the 'ino_t' type])
920 fi
921
922 AC_CACHE_CHECK([for ino64_t],samba_cv_HAVE_INO64_T,[
923 AC_TRY_RUN([
924 #if defined(HAVE_UNISTD_H)
925 #include <unistd.h>
926 #endif
927 #include <stdio.h>
928 #include <sys/stat.h>
929 main() { struct stat64 st; ino64_t s; if (sizeof(ino_t) == sizeof(ino64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
930 samba_cv_HAVE_INO64_T=yes,samba_cv_HAVE_INO64_T=no,samba_cv_HAVE_INO64_T=cross)])
931 if test x"$samba_cv_HAVE_INO64_T" = x"yes"; then
932     AC_DEFINE(HAVE_INO64_T,1,[Whether the 'ino64_t' type is available])
933 fi
934
935 AC_CACHE_CHECK([for dev64_t],samba_cv_HAVE_DEV64_T,[
936 AC_TRY_RUN([
937 #if defined(HAVE_UNISTD_H)
938 #include <unistd.h>
939 #endif
940 #include <stdio.h>
941 #include <sys/stat.h>
942 main() { struct stat64 st; dev64_t s; if (sizeof(dev_t) == sizeof(dev64_t)) exit(1); exit((lstat64("/dev/null", &st)==0)?0:1); }],
943 samba_cv_HAVE_DEV64_T=yes,samba_cv_HAVE_DEV64_T=no,samba_cv_HAVE_DEV64_T=cross)])
944 if test x"$samba_cv_HAVE_DEV64_T" = x"yes"; then
945     AC_DEFINE(HAVE_DEV64_T,1,[Whether the 'dev64_t' type is available])
946 fi
947
948 AC_CACHE_CHECK([for struct dirent64],samba_cv_HAVE_STRUCT_DIRENT64,[
949 AC_TRY_COMPILE([
950 #if defined(HAVE_UNISTD_H)
951 #include <unistd.h>
952 #endif
953 #include <sys/types.h>
954 #include <dirent.h>],
955 [struct dirent64 de;],
956 samba_cv_HAVE_STRUCT_DIRENT64=yes,samba_cv_HAVE_STRUCT_DIRENT64=no)])
957 if test x"$samba_cv_HAVE_STRUCT_DIRENT64" = x"yes" && test x"$ac_cv_func_readdir64" = x"yes"; then
958     AC_DEFINE(HAVE_STRUCT_DIRENT64,1,[Whether the 'dirent64' struct is available])
959 fi
960
961 AC_CACHE_CHECK([for major macro],samba_cv_HAVE_DEVICE_MAJOR_FN,[
962 AC_TRY_RUN([
963 #if defined(HAVE_UNISTD_H)
964 #include <unistd.h>
965 #endif
966 #include <sys/types.h>
967 main() { dev_t dev; int i = major(dev); return 0; }],
968 samba_cv_HAVE_DEVICE_MAJOR_FN=yes,samba_cv_HAVE_DEVICE_MAJOR_FN=no,samba_cv_HAVE_DEVICE_MAJOR_FN=cross)])
969 if test x"$samba_cv_HAVE_DEVICE_MAJOR_FN" = x"yes"; then
970     AC_DEFINE(HAVE_DEVICE_MAJOR_FN,1,[Whether the major macro for dev_t is available])
971 fi
972
973 AC_CACHE_CHECK([for minor macro],samba_cv_HAVE_DEVICE_MINOR_FN,[
974 AC_TRY_RUN([
975 #if defined(HAVE_UNISTD_H)
976 #include <unistd.h>
977 #endif
978 #include <sys/types.h>
979 main() { dev_t dev; int i = minor(dev); return 0; }],
980 samba_cv_HAVE_DEVICE_MINOR_FN=yes,samba_cv_HAVE_DEVICE_MINOR_FN=no,samba_cv_HAVE_DEVICE_MINOR_FN=cross)])
981 if test x"$samba_cv_HAVE_DEVICE_MINOR_FN" = x"yes"; then
982     AC_DEFINE(HAVE_DEVICE_MINOR_FN,1,[Whether the minor macro for dev_t is available])
983 fi
984
985 AC_CACHE_CHECK([for unsigned char],samba_cv_HAVE_UNSIGNED_CHAR,[
986 AC_TRY_RUN([#include <stdio.h>
987 main() { char c; c=250; exit((c > 0)?0:1); }],
988 samba_cv_HAVE_UNSIGNED_CHAR=yes,samba_cv_HAVE_UNSIGNED_CHAR=no,samba_cv_HAVE_UNSIGNED_CHAR=cross)])
989 if test x"$samba_cv_HAVE_UNSIGNED_CHAR" = x"yes"; then
990     AC_DEFINE(HAVE_UNSIGNED_CHAR,1,[Whether the 'unsigned char' type is available])
991 fi
992
993 AC_CACHE_CHECK([for sin_len in sock],samba_cv_HAVE_SOCK_SIN_LEN,[
994 AC_TRY_COMPILE([#include <sys/types.h>
995 #include <sys/socket.h>
996 #include <netinet/in.h>],
997 [struct sockaddr_in sock; sock.sin_len = sizeof(sock);],
998 samba_cv_HAVE_SOCK_SIN_LEN=yes,samba_cv_HAVE_SOCK_SIN_LEN=no)])
999 if test x"$samba_cv_HAVE_SOCK_SIN_LEN" = x"yes"; then
1000     AC_DEFINE(HAVE_SOCK_SIN_LEN,1,[Whether the sockaddr_in struct has a sin_len property])
1001 fi
1002
1003 AC_CACHE_CHECK([whether seekdir returns void],samba_cv_SEEKDIR_RETURNS_VOID,[
1004 AC_TRY_COMPILE([#include <sys/types.h>
1005 #include <dirent.h>
1006 void seekdir(DIR *d, long loc) { return; }],[return 0;],
1007 samba_cv_SEEKDIR_RETURNS_VOID=yes,samba_cv_SEEKDIR_RETURNS_VOID=no)])
1008 if test x"$samba_cv_SEEKDIR_RETURNS_VOID" = x"yes"; then
1009     AC_DEFINE(SEEKDIR_RETURNS_VOID,1,[Whether seekdir returns void])
1010 fi
1011
1012 AC_CACHE_CHECK([for __FUNCTION__ macro],samba_cv_HAVE_FUNCTION_MACRO,[
1013 AC_TRY_COMPILE([#include <stdio.h>], [printf("%s\n", __FUNCTION__);],
1014 samba_cv_HAVE_FUNCTION_MACRO=yes,samba_cv_HAVE_FUNCTION_MACRO=no)])
1015 if test x"$samba_cv_HAVE_FUNCTION_MACRO" = x"yes"; then
1016     AC_DEFINE(HAVE_FUNCTION_MACRO,1,[Whether there is a __FUNCTION__ macro])
1017 fi
1018
1019 AC_CACHE_CHECK([if gettimeofday takes tz argument],samba_cv_HAVE_GETTIMEOFDAY_TZ,[
1020 AC_TRY_RUN([
1021 #include <sys/time.h>
1022 #include <unistd.h>
1023 main() { struct timeval tv; exit(gettimeofday(&tv, NULL));}],
1024            samba_cv_HAVE_GETTIMEOFDAY_TZ=yes,samba_cv_HAVE_GETTIMEOFDAY_TZ=no,samba_cv_HAVE_GETTIMEOFDAY_TZ=cross)])
1025 if test x"$samba_cv_HAVE_GETTIMEOFDAY_TZ" = x"yes"; then
1026     AC_DEFINE(HAVE_GETTIMEOFDAY_TZ,1,[Whether gettimeofday() is available])
1027 fi
1028
1029 AC_CACHE_CHECK([for __va_copy],samba_cv_HAVE_VA_COPY,[
1030 AC_TRY_LINK([#include <stdarg.h>
1031 va_list ap1,ap2;], [__va_copy(ap1,ap2);],
1032 samba_cv_HAVE_VA_COPY=yes,samba_cv_HAVE_VA_COPY=no)])
1033 if test x"$samba_cv_HAVE_VA_COPY" = x"yes"; then
1034     AC_DEFINE(HAVE_VA_COPY,1,[Whether __va_copy() is available])
1035 fi
1036
1037 AC_CACHE_CHECK([for C99 vsnprintf],samba_cv_HAVE_C99_VSNPRINTF,[
1038 AC_TRY_RUN([
1039 #include <sys/types.h>
1040 #include <stdarg.h>
1041 void foo(const char *format, ...) { 
1042        va_list ap;
1043        int len;
1044        char buf[5];
1045
1046        va_start(ap, format);
1047        len = vsnprintf(buf, 0, format, ap);
1048        va_end(ap);
1049        if (len != 5) exit(1);
1050
1051        va_start(ap, format);
1052        len = vsnprintf(0, 0, format, ap);
1053        va_end(ap);
1054        if (len != 5) exit(1);
1055
1056        if (snprintf(buf, 3, "hello") != 5 || strcmp(buf, "he") != 0) exit(1);
1057
1058        exit(0);
1059 }
1060 main() { foo("hello"); }
1061 ],
1062 samba_cv_HAVE_C99_VSNPRINTF=yes,samba_cv_HAVE_C99_VSNPRINTF=no,samba_cv_HAVE_C99_VSNPRINTF=cross)])
1063 if test x"$samba_cv_HAVE_C99_VSNPRINTF" = x"yes"; then
1064     AC_DEFINE(HAVE_C99_VSNPRINTF,1,[Whether there is a C99 compliant vsnprintf])
1065 fi
1066
1067 AC_CACHE_CHECK([for broken readdir],samba_cv_HAVE_BROKEN_READDIR,[
1068 AC_TRY_RUN([#include <sys/types.h>
1069 #include <dirent.h>
1070 main() { struct dirent *di; DIR *d = opendir("."); di = readdir(d);
1071 if (di && di->d_name[-2] == '.' && di->d_name[-1] == 0 &&
1072 di->d_name[0] == 0) exit(0); exit(1);} ],
1073 samba_cv_HAVE_BROKEN_READDIR=yes,samba_cv_HAVE_BROKEN_READDIR=no,samba_cv_HAVE_BROKEN_READDIR=cross)])
1074 if test x"$samba_cv_HAVE_BROKEN_READDIR" = x"yes"; then
1075     AC_DEFINE(HAVE_BROKEN_READDIR,1,[Whether readdir() is broken])
1076 fi
1077
1078 AC_CACHE_CHECK([for utimbuf],samba_cv_HAVE_UTIMBUF,[
1079 AC_TRY_COMPILE([#include <sys/types.h>
1080 #include <utime.h>],
1081 [struct utimbuf tbuf;  tbuf.actime = 0; tbuf.modtime = 1; exit(utime("foo.c",&tbuf));],
1082 samba_cv_HAVE_UTIMBUF=yes,samba_cv_HAVE_UTIMBUF=no,samba_cv_HAVE_UTIMBUF=cross)])
1083 if test x"$samba_cv_HAVE_UTIMBUF" = x"yes"; then
1084     AC_DEFINE(HAVE_UTIMBUF,1,[Whether struct utimbuf is available])
1085 fi
1086
1087 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
1088 AC_TRY_RUN([
1089 #include <sys/types.h>
1090 #include <fcntl.h>
1091 #ifndef F_GETLEASE
1092 #define F_GETLEASE      1025
1093 #endif
1094 main() {
1095        int fd = open("/dev/null", O_RDONLY);
1096        return fcntl(fd, F_GETLEASE, 0) == -1;
1097 }
1098 ],
1099 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
1100 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
1101     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
1102 fi
1103
1104 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
1105 AC_TRY_RUN([
1106 #include <sys/types.h>
1107 #include <fcntl.h>
1108 #include <signal.h>
1109 #ifndef F_NOTIFY
1110 #define F_NOTIFY 1026
1111 #endif
1112 main() {
1113         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
1114 }
1115 ],
1116 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
1117 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
1118     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
1119 fi
1120
1121 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
1122 AC_TRY_RUN([
1123 #include <sys/types.h>
1124 #include <fcntl.h>
1125 #include <signal.h>
1126 #include <sys/file.h>
1127 #ifndef LOCK_MAND
1128 #define LOCK_MAND       32
1129 #define LOCK_READ       64
1130 #endif
1131 main() {
1132         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
1133 }
1134 ],
1135 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
1136 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
1137     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
1138 fi
1139
1140
1141
1142
1143 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
1144 AC_TRY_COMPILE([#include <sys/types.h>
1145 #include <fcntl.h>],
1146 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
1147 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
1148 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
1149     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
1150 fi
1151
1152 AC_CACHE_CHECK([for irix specific capabilities],samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES,[
1153 AC_TRY_RUN([#include <sys/types.h>
1154 #include <sys/capability.h>
1155 main() {
1156  cap_t cap;
1157  if ((cap = cap_get_proc()) == NULL)
1158    exit(1);
1159  cap->cap_effective |= CAP_NETWORK_MGT;
1160  cap->cap_inheritable |= CAP_NETWORK_MGT;
1161  cap_set_proc(cap);
1162  exit(0);
1163 }
1164 ],
1165 samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=yes,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=no,samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES=cross)])
1166 if test x"$samba_cv_HAVE_IRIX_SPECIFIC_CAPABILITIES" = x"yes"; then
1167     AC_DEFINE(HAVE_IRIX_SPECIFIC_CAPABILITIES,1,[Whether IRIX specific capabilities are available])
1168 fi
1169
1170 #
1171 # Check for int16, uint16, int32 and uint32 in rpc/types.h included from rpc/rpc.h
1172 # This is *really* broken but some systems (DEC OSF1) do this.... JRA.
1173 #
1174
1175 AC_CACHE_CHECK([for int16 typedef included by rpc/rpc.h],samba_cv_HAVE_INT16_FROM_RPC_RPC_H,[
1176 AC_TRY_COMPILE([#include <sys/types.h>
1177 #if defined(HAVE_RPC_RPC_H)
1178 #include <rpc/rpc.h>
1179 #endif],
1180 [int16 testvar;],
1181 samba_cv_HAVE_INT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT16_FROM_RPC_RPC_H=no)])
1182 if test x"$samba_cv_HAVE_INT16_FROM_RPC_RPC_H" = x"yes"; then
1183     AC_DEFINE(HAVE_INT16_FROM_RPC_RPC_H,1,[Whether int16 typedef is included by rpc/rpc.h])
1184 fi
1185
1186 AC_CACHE_CHECK([for uint16 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT16_FROM_RPC_RPC_H,[
1187 AC_TRY_COMPILE([#include <sys/types.h>
1188 #if defined(HAVE_RPC_RPC_H)
1189 #include <rpc/rpc.h>
1190 #endif],
1191 [uint16 testvar;],
1192 samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT16_FROM_RPC_RPC_H=no)])
1193 if test x"$samba_cv_HAVE_UINT16_FROM_RPC_RPC_H" = x"yes"; then
1194     AC_DEFINE(HAVE_UINT16_FROM_RPC_RPC_H,1,[Whether uint16 typedef is included by rpc/rpc.h])
1195 fi
1196
1197 AC_CACHE_CHECK([for int32 typedef included by rpc/rpc.h],samba_cv_HAVE_INT32_FROM_RPC_RPC_H,[
1198 AC_TRY_COMPILE([#include <sys/types.h>
1199 #if defined(HAVE_RPC_RPC_H)
1200 #include <rpc/rpc.h>
1201 #endif],
1202 [int32 testvar;],
1203 samba_cv_HAVE_INT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_INT32_FROM_RPC_RPC_H=no)])
1204 if test x"$samba_cv_HAVE_INT32_FROM_RPC_RPC_H" = x"yes"; then
1205     AC_DEFINE(HAVE_INT32_FROM_RPC_RPC_H,1,[Whether int32 typedef is included by rpc/rpc.h])
1206 fi
1207
1208 AC_CACHE_CHECK([for uint32 typedef included by rpc/rpc.h],samba_cv_HAVE_UINT32_FROM_RPC_RPC_H,[
1209 AC_TRY_COMPILE([#include <sys/types.h>
1210 #if defined(HAVE_RPC_RPC_H)
1211 #include <rpc/rpc.h>
1212 #endif],
1213 [uint32 testvar;],
1214 samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=yes,samba_cv_HAVE_UINT32_FROM_RPC_RPC_H=no)])
1215 if test x"$samba_cv_HAVE_UINT32_FROM_RPC_RPC_H" = x"yes"; then
1216     AC_DEFINE(HAVE_UINT32_FROM_RPC_RPC_H,1,[Whether uint32 typedef is included by rpc/rpc.h])
1217 fi
1218
1219 dnl
1220 dnl Some systems (SCO) have a problem including
1221 dnl <prot.h> and <rpc/rpc.h> due to AUTH_ERROR being defined
1222 dnl as a #define in <prot.h> and as part of an enum
1223 dnl in <rpc/rpc.h>.
1224 dnl
1225
1226 AC_CACHE_CHECK([for conflicting AUTH_ERROR define in rpc/rpc.h],samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT,[
1227 AC_TRY_COMPILE([#include <sys/types.h>
1228 #ifdef HAVE_SYS_SECURITY_H
1229 #include <sys/security.h>
1230 #include <prot.h>
1231 #endif  /* HAVE_SYS_SECURITY_H */
1232 #if defined(HAVE_RPC_RPC_H)
1233 #include <rpc/rpc.h>
1234 #endif],
1235 [int testvar;],
1236 samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=no,samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT=yes)])
1237 if test x"$samba_cv_HAVE_RPC_AUTH_ERROR_CONFLICT" = x"yes"; then
1238     AC_DEFINE(HAVE_RPC_AUTH_ERROR_CONFLICT,1,[Whether there is a conflicting AUTH_ERROR define in rpc/rpc.h])
1239 fi
1240
1241 AC_MSG_CHECKING([for test routines])
1242 AC_TRY_RUN([#include "${srcdir-.}/tests/trivial.c"],
1243            AC_MSG_RESULT(yes),
1244            AC_MSG_ERROR([cant find test code. Aborting config]),
1245            AC_MSG_WARN([cannot run when cross-compiling]))
1246
1247 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
1248 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncate.c"],
1249            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
1250 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
1251     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
1252 fi
1253
1254 AC_CACHE_CHECK([for AF_LOCAL socket support], samba_cv_HAVE_WORKING_AF_LOCAL, [
1255 AC_TRY_RUN([#include "${srcdir-.}/tests/unixsock.c"],
1256            samba_cv_HAVE_WORKING_AF_LOCAL=yes,
1257            samba_cv_HAVE_WORKING_AF_LOCAL=no,
1258            samba_cv_HAVE_WORKING_AF_LOCAL=cross)])
1259 if test x"$samba_cv_HAVE_WORKING_AF_LOCAL" != xno
1260 then
1261     AC_DEFINE(HAVE_WORKING_AF_LOCAL, 1, [Define if you have working AF_LOCAL sockets])
1262 fi
1263
1264 AC_CACHE_CHECK([for broken getgroups],samba_cv_HAVE_BROKEN_GETGROUPS,[
1265 AC_TRY_RUN([#include "${srcdir-.}/tests/getgroups.c"],
1266            samba_cv_HAVE_BROKEN_GETGROUPS=yes,samba_cv_HAVE_BROKEN_GETGROUPS=no,samba_cv_HAVE_BROKEN_GETGROUPS=cross)])
1267 if test x"$samba_cv_HAVE_BROKEN_GETGROUPS" = x"yes"; then
1268     AC_DEFINE(HAVE_BROKEN_GETGROUPS,1,[Whether getgroups is broken])
1269 fi
1270
1271 AC_CACHE_CHECK([whether getpass should be replaced],samba_cv_REPLACE_GETPASS,[
1272 SAVE_CPPFLAGS="$CPPFLAGS"
1273 CPPFLAGS="$CPPFLAGS -I${srcdir-.}/ -I${srcdir-.}/include -I${srcdir-.}/ubiqx -I${srcdir-.}/popt  -I${srcdir-.}/smbwrapper"
1274 AC_TRY_COMPILE([
1275 #define REPLACE_GETPASS 1
1276 #define NO_CONFIG_H 1
1277 #define main dont_declare_main
1278 #include "${srcdir-.}/lib/getsmbpass.c"
1279 #undef main
1280 ],[],samba_cv_REPLACE_GETPASS=yes,samba_cv_REPLACE_GETPASS=no)
1281 CPPFLAGS="$SAVE_CPPFLAGS"
1282 ])
1283 if test x"$samba_cv_REPLACE_GETPASS" = x"yes"; then
1284         AC_DEFINE(REPLACE_GETPASS,1,[Whether getpass should be replaced])
1285 fi
1286
1287 AC_CACHE_CHECK([for broken inet_ntoa],samba_cv_REPLACE_INET_NTOA,[
1288 AC_TRY_RUN([
1289 #include <stdio.h>
1290 #include <sys/types.h>
1291 #include <netinet/in.h>
1292 #ifdef HAVE_ARPA_INET_H
1293 #include <arpa/inet.h>
1294 #endif
1295 main() { struct in_addr ip; ip.s_addr = 0x12345678;
1296 if (strcmp(inet_ntoa(ip),"18.52.86.120") &&
1297     strcmp(inet_ntoa(ip),"120.86.52.18")) { exit(0); } 
1298 exit(1);}],
1299            samba_cv_REPLACE_INET_NTOA=yes,samba_cv_REPLACE_INET_NTOA=no,samba_cv_REPLACE_INET_NTOA=cross)])
1300 if test x"$samba_cv_REPLACE_INET_NTOA" = x"yes"; then
1301     AC_DEFINE(REPLACE_INET_NTOA,1,[Whether inet_ntoa should be replaced])
1302 fi
1303
1304 AC_CACHE_CHECK([for secure mkstemp],samba_cv_HAVE_SECURE_MKSTEMP,[
1305 AC_TRY_RUN([#include <stdlib.h>
1306 #include <sys/types.h>
1307 #include <sys/stat.h>
1308 #include <unistd.h>
1309 main() { 
1310   struct stat st;
1311   char tpl[20]="/tmp/test.XXXXXX"; 
1312   int fd = mkstemp(tpl); 
1313   if (fd == -1) exit(1);
1314   unlink(tpl);
1315   if (fstat(fd, &st) != 0) exit(1);
1316   if ((st.st_mode & 0777) != 0600) exit(1);
1317   exit(0);
1318 }],
1319 samba_cv_HAVE_SECURE_MKSTEMP=yes,
1320 samba_cv_HAVE_SECURE_MKSTEMP=no,
1321 samba_cv_HAVE_SECURE_MKSTEMP=cross)])
1322 if test x"$samba_cv_HAVE_SECURE_MKSTEMP" = x"yes"; then
1323     AC_DEFINE(HAVE_SECURE_MKSTEMP,1,[Whether mkstemp is secure])
1324 fi
1325
1326 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
1327 AC_TRY_RUN([#include <unistd.h>
1328 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
1329 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
1330 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
1331     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
1332 fi
1333
1334 AC_CACHE_CHECK([for root],samba_cv_HAVE_ROOT,[
1335 AC_TRY_RUN([main() { exit(getuid() != 0); }],
1336            samba_cv_HAVE_ROOT=yes,samba_cv_HAVE_ROOT=no,samba_cv_HAVE_ROOT=cross)])
1337 if test x"$samba_cv_HAVE_ROOT" = x"yes"; then
1338     AC_DEFINE(HAVE_ROOT,1,[Whether current user is root])
1339 else
1340     AC_MSG_WARN(running as non-root will disable some tests)
1341 fi
1342
1343 ##################
1344 # look for a method of finding the list of network interfaces
1345 iface=no;
1346 AC_CACHE_CHECK([for iface AIX],samba_cv_HAVE_IFACE_AIX,[
1347 AC_TRY_RUN([
1348 #define HAVE_IFACE_AIX 1
1349 #define AUTOCONF_TEST 1
1350 #include "confdefs.h"
1351 #include "${srcdir-.}/lib/interfaces.c"],
1352            samba_cv_HAVE_IFACE_AIX=yes,samba_cv_HAVE_IFACE_AIX=no,samba_cv_HAVE_IFACE_AIX=cross)])
1353 if test x"$samba_cv_HAVE_IFACE_AIX" = x"yes"; then
1354     iface=yes;AC_DEFINE(HAVE_IFACE_AIX,1,[Whether iface AIX is available])
1355 fi
1356
1357 if test $iface = no; then
1358 AC_CACHE_CHECK([for iface ifconf],samba_cv_HAVE_IFACE_IFCONF,[
1359 AC_TRY_RUN([
1360 #define HAVE_IFACE_IFCONF 1
1361 #define AUTOCONF_TEST 1
1362 #include "confdefs.h"
1363 #include "${srcdir-.}/lib/interfaces.c"],
1364            samba_cv_HAVE_IFACE_IFCONF=yes,samba_cv_HAVE_IFACE_IFCONF=no,samba_cv_HAVE_IFACE_IFCONF=cross)])
1365 if test x"$samba_cv_HAVE_IFACE_IFCONF" = x"yes"; then
1366     iface=yes;AC_DEFINE(HAVE_IFACE_IFCONF,1,[Whether iface ifconf is available])
1367 fi
1368 fi
1369
1370 if test $iface = no; then
1371 AC_CACHE_CHECK([for iface ifreq],samba_cv_HAVE_IFACE_IFREQ,[
1372 AC_TRY_RUN([
1373 #define HAVE_IFACE_IFREQ 1
1374 #define AUTOCONF_TEST 1
1375 #include "confdefs.h"
1376 #include "${srcdir-.}/lib/interfaces.c"],
1377            samba_cv_HAVE_IFACE_IFREQ=yes,samba_cv_HAVE_IFACE_IFREQ=no,samba_cv_HAVE_IFACE_IFREQ=cross)])
1378 if test x"$samba_cv_HAVE_IFACE_IFREQ" = x"yes"; then
1379     iface=yes;AC_DEFINE(HAVE_IFACE_IFREQ,1,[Whether iface ifreq is available])
1380 fi
1381 fi
1382
1383
1384 ################################################
1385 # look for a method of setting the effective uid
1386 seteuid=no;
1387 if test $seteuid = no; then
1388 AC_CACHE_CHECK([for setresuid],samba_cv_USE_SETRESUID,[
1389 AC_TRY_RUN([
1390 #define AUTOCONF_TEST 1
1391 #define USE_SETRESUID 1
1392 #include "confdefs.h"
1393 #include "${srcdir-.}/lib/util_sec.c"],
1394            samba_cv_USE_SETRESUID=yes,samba_cv_USE_SETRESUID=no,samba_cv_USE_SETRESUID=cross)])
1395 if test x"$samba_cv_USE_SETRESUID" = x"yes"; then
1396     seteuid=yes;AC_DEFINE(USE_SETRESUID,1,[Whether setresuid() is available])
1397 fi
1398 fi
1399
1400
1401 if test $seteuid = no; then
1402 AC_CACHE_CHECK([for setreuid],samba_cv_USE_SETREUID,[
1403 AC_TRY_RUN([
1404 #define AUTOCONF_TEST 1
1405 #define USE_SETREUID 1
1406 #include "confdefs.h"
1407 #include "${srcdir-.}/lib/util_sec.c"],
1408            samba_cv_USE_SETREUID=yes,samba_cv_USE_SETREUID=no,samba_cv_USE_SETREUID=cross)])
1409 if test x"$samba_cv_USE_SETREUID" = x"yes"; then
1410     seteuid=yes;AC_DEFINE(USE_SETREUID,1,[Whether setreuid() is available])
1411 fi
1412 fi
1413
1414 if test $seteuid = no; then
1415 AC_CACHE_CHECK([for seteuid],samba_cv_USE_SETEUID,[
1416 AC_TRY_RUN([
1417 #define AUTOCONF_TEST 1
1418 #define USE_SETEUID 1
1419 #include "confdefs.h"
1420 #include "${srcdir-.}/lib/util_sec.c"],
1421            samba_cv_USE_SETEUID=yes,samba_cv_USE_SETEUID=no,samba_cv_USE_SETEUID=cross)])
1422 if test x"$samba_cv_USE_SETEUID" = x"yes"; then
1423     seteuid=yes;AC_DEFINE(USE_SETEUID,1,[Whether seteuid() is available])
1424 fi
1425 fi
1426
1427 if test $seteuid = no; then
1428 AC_CACHE_CHECK([for setuidx],samba_cv_USE_SETUIDX,[
1429 AC_TRY_RUN([
1430 #define AUTOCONF_TEST 1
1431 #define USE_SETUIDX 1
1432 #include "confdefs.h"
1433 #include "${srcdir-.}/lib/util_sec.c"],
1434            samba_cv_USE_SETUIDX=yes,samba_cv_USE_SETUIDX=no,samba_cv_USE_SETUIDX=cross)])
1435 if test x"$samba_cv_USE_SETUIDX" = x"yes"; then
1436     seteuid=yes;AC_DEFINE(USE_SETUIDX,1,[Whether setuidx() is available])
1437 fi
1438 fi
1439
1440
1441 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
1442 AC_TRY_RUN([#include "${srcdir-.}/tests/shared_mmap.c"],
1443            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
1444 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
1445     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
1446 fi
1447
1448 AC_CACHE_CHECK([for ftruncate needs root],samba_cv_FTRUNCATE_NEEDS_ROOT,[
1449 AC_TRY_RUN([#include "${srcdir-.}/tests/ftruncroot.c"],
1450            samba_cv_FTRUNCATE_NEEDS_ROOT=yes,samba_cv_FTRUNCATE_NEEDS_ROOT=no,samba_cv_FTRUNCATE_NEEDS_ROOT=cross)])
1451 if test x"$samba_cv_FTRUNCATE_NEEDS_ROOT" = x"yes"; then
1452     AC_DEFINE(FTRUNCATE_NEEDS_ROOT,1,[Whether ftruncate() needs root])
1453 fi
1454
1455 AC_CACHE_CHECK([for fcntl locking],samba_cv_HAVE_FCNTL_LOCK,[
1456 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock.c"],
1457            samba_cv_HAVE_FCNTL_LOCK=yes,samba_cv_HAVE_FCNTL_LOCK=no,samba_cv_HAVE_FCNTL_LOCK=cross)])
1458 if test x"$samba_cv_HAVE_FCNTL_LOCK" = x"yes"; then
1459     AC_DEFINE(HAVE_FCNTL_LOCK,1,[Whether fcntl locking is available])
1460 fi
1461
1462 AC_CACHE_CHECK([for broken (glibc2.1/x86) 64 bit fcntl locking],samba_cv_HAVE_BROKEN_FCNTL64_LOCKS,[
1463 AC_TRY_RUN([#include "${srcdir-.}/tests/fcntl_lock64.c"],
1464            samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=yes,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=no,samba_cv_HAVE_BROKEN_FCNTL64_LOCKS=cross)])
1465 if test x"$samba_cv_HAVE_BROKEN_FCNTL64_LOCKS" = x"yes"; then
1466     AC_DEFINE(HAVE_BROKEN_FCNTL64_LOCKS,1,[Whether fcntl64 locks are broken])
1467
1468 else
1469
1470 dnl
1471 dnl Don't check for 64 bit fcntl locking if we know that the
1472 dnl glibc2.1 broken check has succeeded.
1473 dnl 
1474
1475   AC_CACHE_CHECK([for 64 bit fcntl locking],samba_cv_HAVE_STRUCT_FLOCK64,[
1476   AC_TRY_RUN([
1477 #if defined(HAVE_UNISTD_H)
1478 #include <unistd.h>
1479 #endif
1480 #include <stdio.h>
1481 #include <stdlib.h>
1482
1483 #ifdef HAVE_FCNTL_H
1484 #include <fcntl.h>
1485 #endif
1486
1487 #ifdef HAVE_SYS_FCNTL_H
1488 #include <sys/fcntl.h>
1489 #endif
1490 main() { struct flock64 fl64;
1491 #if defined(F_SETLKW64) && defined(F_SETLK64) && defined(F_GETLK64)
1492 exit(0);
1493 #else
1494 exit(1);
1495 #endif
1496 }],
1497        samba_cv_HAVE_STRUCT_FLOCK64=yes,samba_cv_HAVE_STRUCT_FLOCK64=no,samba_cv_HAVE_STRUCT_FLOCK64=cross)])
1498
1499   if test x"$samba_cv_HAVE_STRUCT_FLOCK64" = x"yes"; then
1500       AC_DEFINE(HAVE_STRUCT_FLOCK64,1,[Whether the flock64 struct is available])
1501   fi
1502 fi
1503
1504 AC_CACHE_CHECK([for st_blocks in struct stat],samba_cv_HAVE_STAT_ST_BLOCKS,[
1505 AC_TRY_COMPILE([#include <sys/types.h>
1506 #include <sys/stat.h>
1507 #include <unistd.h>],
1508 [struct stat st;  st.st_blocks = 0;],
1509 samba_cv_HAVE_STAT_ST_BLOCKS=yes,samba_cv_HAVE_STAT_ST_BLOCKS=no,samba_cv_HAVE_STAT_ST_BLOCKS=cross)])
1510 if test x"$samba_cv_HAVE_STAT_ST_BLOCKS" = x"yes"; then
1511     AC_DEFINE(HAVE_STAT_ST_BLOCKS,1,[Whether the stat struct has a st_block property])
1512 fi 
1513
1514 AC_CACHE_CHECK([for st_blksize in struct stat],samba_cv_HAVE_STAT_ST_BLKSIZE,[
1515 AC_TRY_COMPILE([#include <sys/types.h>
1516 #include <sys/stat.h>
1517 #include <unistd.h>],
1518 [struct stat st;  st.st_blksize = 0;],
1519 samba_cv_HAVE_STAT_ST_BLKSIZE=yes,samba_cv_HAVE_STAT_ST_BLKSIZE=no,samba_cv_HAVE_STAT_ST_BLKSIZE=cross)])
1520 if test x"$samba_cv_HAVE_STAT_ST_BLKSIZE" = x"yes"; then
1521     AC_DEFINE(HAVE_STAT_ST_BLKSIZE,1,[Whether the stat struct has a st_blksize property])
1522 fi
1523
1524 case "$host_os" in
1525 *linux*)
1526 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
1527 AC_TRY_COMPILE([
1528 #ifdef HAVE_SYS_VFS_H
1529 #include <sys/vfs.h>
1530 #endif
1531 #ifdef HAVE_SYS_CAPABILITY_H
1532 #include <sys/capability.h>
1533 #endif
1534 ],[int i;],
1535    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
1536 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
1537    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
1538 fi
1539 ;;
1540 esac
1541
1542 AC_CACHE_CHECK([for broken nisplus include files],samba_cv_BROKEN_NISPLUS_INCLUDE_FILES,[
1543 AC_TRY_COMPILE([#include <sys/acl.h>
1544 #if defined(HAVE_RPCSVC_NIS_H)
1545 #include <rpcsvc/nis.h>
1546 #endif],
1547 [int i;],
1548 samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=no,samba_cv_BROKEN_NISPLUS_INCLUDE_FILES=yes)])
1549 if test x"$samba_cv_BROKEN_NISPLUS_INCLUDE_FILES" = x"yes"; then
1550         AC_DEFINE(BROKEN_NISPLUS_INCLUDE_FILES,1,[Whether the nisplus include files are broken])
1551 fi
1552
1553 AC_SUBST(SMBD_EXTRA_OBJS)
1554 AC_SUBST(SMBD_EXTRA_LIBS)
1555
1556 sinclude(libads/config.m4)
1557
1558 ###############################################
1559 # test for where we get crypt() from
1560 AC_SEARCH_LIBS(crypt, [crypt],
1561   [test "$ac_cv_search_crypt" = "none required" || AUTHLIBS="-lcrypt $AUTHLIBS"
1562   AC_DEFINE(HAVE_CRYPT,1,[Whether the system has the crypt() function])])
1563
1564 ##
1565 ## moved after the check for -lcrypt in order to
1566 ## ensure that the necessary libraries are included
1567 ## check checking for truncated salt.  Wrapped by the
1568 ## $with_pam_for_crypt variable as above   --jerry
1569 ##
1570 if test x"$with_pam_for_crypt" != x"yes"; then
1571 AC_CACHE_CHECK([for a crypt that needs truncated salt],samba_cv_HAVE_TRUNCATED_SALT,[
1572 crypt_LIBS="$LIBS"
1573 LIBS="$AUTHLIBS $LIBS"
1574 AC_TRY_RUN([#include "${srcdir-.}/tests/crypttest.c"],
1575         samba_cv_HAVE_TRUNCATED_SALT=no,samba_cv_HAVE_TRUNCATED_SALT=yes,samba_cv_HAVE_TRUNCATED_SALT=cross)
1576 LIBS="$crypt_LIBS"])
1577 if test x"$samba_cv_HAVE_TRUNCATED_SALT" = x"yes"; then
1578         AC_DEFINE(HAVE_TRUNCATED_SALT,1,[Whether crypt needs truncated salt])
1579 fi
1580 fi
1581
1582 #################################################
1583 # these tests are taken from the GNU fileutils package
1584 AC_CHECKING(how to get filesystem space usage)
1585 space=no
1586
1587 # Test for statvfs64.
1588 if test $space = no; then
1589   # SVR4
1590   AC_CACHE_CHECK([statvfs64 function (SVR4)], fu_cv_sys_stat_statvfs64,
1591   [AC_TRY_RUN([
1592 #if defined(HAVE_UNISTD_H)
1593 #include <unistd.h>
1594 #endif
1595 #include <sys/types.h>
1596 #include <sys/statvfs.h>
1597   main ()
1598   {
1599     struct statvfs64 fsd;
1600     exit (statvfs64 (".", &fsd));
1601   }],
1602   fu_cv_sys_stat_statvfs64=yes,
1603   fu_cv_sys_stat_statvfs64=no,
1604   fu_cv_sys_stat_statvfs64=cross)])
1605   if test $fu_cv_sys_stat_statvfs64 = yes; then
1606     space=yes
1607     AC_DEFINE(STAT_STATVFS64,1,[Whether statvfs64() is available])
1608   fi
1609 fi
1610
1611 # Perform only the link test since it seems there are no variants of the
1612 # statvfs function.  This check is more than just AC_CHECK_FUNCS(statvfs)
1613 # because that got a false positive on SCO OSR5.  Adding the declaration
1614 # of a `struct statvfs' causes this test to fail (as it should) on such
1615 # systems.  That system is reported to work fine with STAT_STATFS4 which
1616 # is what it gets when this test fails.
1617 if test $space = no; then
1618   # SVR4
1619   AC_CACHE_CHECK([statvfs function (SVR4)], fu_cv_sys_stat_statvfs,
1620                  [AC_TRY_LINK([#include <sys/types.h>
1621 #include <sys/statvfs.h>],
1622                               [struct statvfs fsd; statvfs (0, &fsd);],
1623                               fu_cv_sys_stat_statvfs=yes,
1624                               fu_cv_sys_stat_statvfs=no)])
1625   if test $fu_cv_sys_stat_statvfs = yes; then
1626     space=yes
1627     AC_DEFINE(STAT_STATVFS,1,[Whether statvfs() is available])
1628   fi
1629 fi
1630
1631 if test $space = no; then
1632   # DEC Alpha running OSF/1
1633   AC_MSG_CHECKING([for 3-argument statfs function (DEC OSF/1)])
1634   AC_CACHE_VAL(fu_cv_sys_stat_statfs3_osf1,
1635   [AC_TRY_RUN([
1636 #include <sys/param.h>
1637 #include <sys/types.h>
1638 #include <sys/mount.h>
1639   main ()
1640   {
1641     struct statfs fsd;
1642     fsd.f_fsize = 0;
1643     exit (statfs (".", &fsd, sizeof (struct statfs)));
1644   }],
1645   fu_cv_sys_stat_statfs3_osf1=yes,
1646   fu_cv_sys_stat_statfs3_osf1=no,
1647   fu_cv_sys_stat_statfs3_osf1=no)])
1648   AC_MSG_RESULT($fu_cv_sys_stat_statfs3_osf1)
1649   if test $fu_cv_sys_stat_statfs3_osf1 = yes; then
1650     space=yes
1651     AC_DEFINE(STAT_STATFS3_OSF1,1,[Whether statfs requires 3 arguments])
1652   fi
1653 fi
1654
1655 if test $space = no; then
1656 # AIX
1657   AC_MSG_CHECKING([for two-argument statfs with statfs.bsize dnl
1658 member (AIX, 4.3BSD)])
1659   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_bsize,
1660   [AC_TRY_RUN([
1661 #ifdef HAVE_SYS_PARAM_H
1662 #include <sys/param.h>
1663 #endif
1664 #ifdef HAVE_SYS_MOUNT_H
1665 #include <sys/mount.h>
1666 #endif
1667 #ifdef HAVE_SYS_VFS_H
1668 #include <sys/vfs.h>
1669 #endif
1670   main ()
1671   {
1672   struct statfs fsd;
1673   fsd.f_bsize = 0;
1674   exit (statfs (".", &fsd));
1675   }],
1676   fu_cv_sys_stat_statfs2_bsize=yes,
1677   fu_cv_sys_stat_statfs2_bsize=no,
1678   fu_cv_sys_stat_statfs2_bsize=no)])
1679   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_bsize)
1680   if test $fu_cv_sys_stat_statfs2_bsize = yes; then
1681     space=yes
1682     AC_DEFINE(STAT_STATFS2_BSIZE,1,[Whether statfs requires two arguments and struct statfs has bsize property])
1683   fi
1684 fi
1685
1686 if test $space = no; then
1687 # SVR3
1688   AC_MSG_CHECKING([for four-argument statfs (AIX-3.2.5, SVR3)])
1689   AC_CACHE_VAL(fu_cv_sys_stat_statfs4,
1690   [AC_TRY_RUN([#include <sys/types.h>
1691 #include <sys/statfs.h>
1692   main ()
1693   {
1694   struct statfs fsd;
1695   exit (statfs (".", &fsd, sizeof fsd, 0));
1696   }],
1697     fu_cv_sys_stat_statfs4=yes,
1698     fu_cv_sys_stat_statfs4=no,
1699     fu_cv_sys_stat_statfs4=no)])
1700   AC_MSG_RESULT($fu_cv_sys_stat_statfs4)
1701   if test $fu_cv_sys_stat_statfs4 = yes; then
1702     space=yes
1703     AC_DEFINE(STAT_STATFS4,1,[Whether statfs requires 4 arguments])
1704   fi
1705 fi
1706
1707 if test $space = no; then
1708 # 4.4BSD and NetBSD
1709   AC_MSG_CHECKING([for two-argument statfs with statfs.fsize dnl
1710 member (4.4BSD and NetBSD)])
1711   AC_CACHE_VAL(fu_cv_sys_stat_statfs2_fsize,
1712   [AC_TRY_RUN([#include <sys/types.h>
1713 #ifdef HAVE_SYS_PARAM_H
1714 #include <sys/param.h>
1715 #endif
1716 #ifdef HAVE_SYS_MOUNT_H
1717 #include <sys/mount.h>
1718 #endif
1719   main ()
1720   {
1721   struct statfs fsd;
1722   fsd.f_fsize = 0;
1723   exit (statfs (".", &fsd));
1724   }],
1725   fu_cv_sys_stat_statfs2_fsize=yes,
1726   fu_cv_sys_stat_statfs2_fsize=no,
1727   fu_cv_sys_stat_statfs2_fsize=no)])
1728   AC_MSG_RESULT($fu_cv_sys_stat_statfs2_fsize)
1729   if test $fu_cv_sys_stat_statfs2_fsize = yes; then
1730     space=yes
1731         AC_DEFINE(STAT_STATFS2_FSIZE,1,[Whether statfs requires 2 arguments and struct statfs has fsize])
1732   fi
1733 fi
1734
1735 if test $space = no; then
1736   # Ultrix
1737   AC_MSG_CHECKING([for two-argument statfs with struct fs_data (Ultrix)])
1738   AC_CACHE_VAL(fu_cv_sys_stat_fs_data,
1739   [AC_TRY_RUN([#include <sys/types.h>
1740 #ifdef HAVE_SYS_PARAM_H
1741 #include <sys/param.h>
1742 #endif
1743 #ifdef HAVE_SYS_MOUNT_H
1744 #include <sys/mount.h>
1745 #endif
1746 #ifdef HAVE_SYS_FS_TYPES_H
1747 #include <sys/fs_types.h>
1748 #endif
1749   main ()
1750   {
1751   struct fs_data fsd;
1752   /* Ultrix's statfs returns 1 for success,
1753      0 for not mounted, -1 for failure.  */
1754   exit (statfs (".", &fsd) != 1);
1755   }],
1756   fu_cv_sys_stat_fs_data=yes,
1757   fu_cv_sys_stat_fs_data=no,
1758   fu_cv_sys_stat_fs_data=no)])
1759   AC_MSG_RESULT($fu_cv_sys_stat_fs_data)
1760   if test $fu_cv_sys_stat_fs_data = yes; then
1761     space=yes
1762     AC_DEFINE(STAT_STATFS2_FS_DATA,1,[Whether statfs requires 2 arguments and struct fs_data is available])
1763   fi
1764 fi
1765
1766 #
1767 # As a gating factor for large file support, in order to
1768 # use <4GB files we must have the following minimal support
1769 # available.
1770 # long long, and a 64 bit off_t or off64_t.
1771 # If we don't have all of these then disable large
1772 # file support.
1773 #
1774 AC_MSG_CHECKING([if large file support can be enabled])
1775 AC_TRY_COMPILE([
1776 #if defined(HAVE_LONGLONG) && (defined(HAVE_OFF64_T) || (defined(SIZEOF_OFF_T) && (SIZEOF_OFF_T == 8)))
1777 #include <sys/types.h>
1778 #else
1779 __COMPILE_ERROR_
1780 #endif
1781 ],
1782 [int i],
1783 samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=yes,samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT=no)
1784 if test x"$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT" = x"yes"; then
1785         AC_DEFINE(HAVE_EXPLICIT_LARGEFILE_SUPPORT,1,[Whether large file support can be enabled])
1786 fi
1787 AC_MSG_RESULT([$samba_cv_HAVE_EXPLICIT_LARGEFILE_SUPPORT])