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