deac542e2bdf8df49ee48939d7c00c86398148d8
[ira/wip.git] / source4 / build / m4 / rewrite.m4
1 dnl Checks for programs.
2 dnl Unique-to-Samba variables we'll be playing with.
3
4 AC_SUBST(SHLIBEXT)
5 AC_SUBST(LDSHFLAGS)
6 AC_SUBST(SONAMEFLAG)
7 AC_SUBST(DYNEXP)
8 AC_SUBST(PICFLAG)
9
10 AC_SYS_LARGEFILE
11
12 #
13 # Config CPPFLAG settings for strange OS's that must be set
14 # before other tests.
15 #
16 case "$host_os" in
17 # Try to work out if this is the native HPUX compiler that uses the -Ae flag.
18     *hpux*)    
19       AC_PROG_CC_FLAG(Ae)
20       # mmap on HPUX is completely broken...
21       AC_DEFINE(MMAP_BLACKLIST, 1, [Whether MMAP is broken])
22       if test $ac_cv_prog_cc_Ae = yes; then
23         CPPFLAGS="$CPPFLAGS -Ae"
24       fi
25     ;;
26 #
27 # VOS may need to have POSIX support and System V compatibility enabled.
28 #
29     *vos*)
30           case "$CPPFLAGS" in
31               *-D_POSIX_C_SOURCE*)
32                 ;;
33           *)
34                 CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200112L"
35                 AC_DEFINE(_POSIX_C_SOURCE, 200112L, [Whether to enable POSIX support])
36                 ;;
37           esac
38           case "$CPPFLAGS" in
39              *-D_SYSV*|*-D_SVID_SOURCE*)
40                 ;;
41              *)
42                 CPPFLAGS="$CPPFLAGS -D_SYSV"
43                 AC_DEFINE(_SYSV, 1, [Whether to enable System V compatibility])
44           esac
45     ;;
46
47 esac
48
49
50 AC_HEADER_DIRENT
51 AC_HEADER_TIME
52 AC_HEADER_SYS_WAIT
53 AC_CHECK_HEADERS(sys/select.h fcntl.h sys/fcntl.h sys/time.h stdarg.h)
54 AC_CHECK_HEADERS(utime.h grp.h sys/id.h limits.h compat.h math.h)
55 AC_CHECK_HEADERS(ctype.h sys/wait.h sys/resource.h sys/ioctl.h sys/ipc.h sys/mode.h)
56 AC_CHECK_HEADERS(sys/mman.h sys/filio.h sys/priv.h sys/shm.h string.h strings.h stdlib.h)
57 AC_CHECK_HEADERS(sys/fs/s5param.h sys/filsys.h termios.h termio.h)
58 AC_CHECK_HEADERS(fnmatch.h pwd.h sys/termio.h sys/time.h)
59 AC_CHECK_HEADERS(locale.h shadow.h)
60 AC_CHECK_HEADERS(nss.h nss_common.h ns_api.h sys/security.h)
61 AC_CHECK_HEADERS(sys/acl.h)
62
63 AC_CHECK_HEADERS(sys/capability.h)
64
65
66 AC_TYPE_SIGNAL
67 AC_TYPE_UID_T
68 AC_TYPE_MODE_T
69 AC_TYPE_OFF_T
70 AC_TYPE_SIZE_T
71 AC_TYPE_PID_T
72 AC_STRUCT_ST_RDEV
73 AC_DIRENT_D_OFF
74 AC_CHECK_TYPE(ino_t,unsigned)
75 AC_CHECK_TYPE(loff_t,off_t)
76 AC_CHECK_TYPE(offset_t,loff_t)
77 AC_CHECK_TYPES(long long)
78
79
80 AC_CACHE_CHECK([for sig_atomic_t type],samba_cv_sig_atomic_t, [
81     AC_TRY_COMPILE([
82 #include <sys/types.h>
83 #if STDC_HEADERS
84 #include <stdlib.h>
85 #include <stddef.h>
86 #endif
87 #include <signal.h>],[sig_atomic_t i = 0],
88         samba_cv_sig_atomic_t=yes,samba_cv_sig_atomic_t=no)])
89 if test x"$samba_cv_sig_atomic_t" = x"yes"; then
90    AC_DEFINE(HAVE_SIG_ATOMIC_T_TYPE,1,[Whether we have the atomic_t variable type])
91 fi
92
93 AC_FUNC_MEMCMP
94
95 AC_CHECK_FUNCS(setsid pipe crypt16 getauthuid)
96 AC_CHECK_FUNCS(strftime sigprocmask sigblock sigaction)
97 AC_CHECK_FUNCS(setgroups sysconf getpwanam srandom random srand rand usleep)
98 AC_CHECK_FUNCS(backtrace setbuffer)
99
100 AC_SUBST(BLDSHARED)
101 # Assume non-shared by default and override below
102 BLDSHARED="false"
103
104 # these are the defaults, good for lots of systems
105 DYNEXP=
106 HOST_OS="$host_os"
107 LDSHFLAGS="-shared"
108 SONAMEFLAG=""
109 SHLD="\${CC}"
110 PICFLAG=""
111 PICSUFFIX="po"
112 SHLIBEXT="so"
113
114 AC_MSG_CHECKING([ability to build shared libraries])
115
116 # and these are for particular systems
117 case "$host_os" in
118         *linux*)   AC_DEFINE(LINUX,1,[Whether the host os is linux])
119                 BLDSHARED="true"
120                 LDSHFLAGS="-shared" 
121                 DYNEXP="-Wl,--export-dynamic"
122                 PICFLAG="-fPIC"
123                 SONAMEFLAG="-Wl,-soname="
124                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
125                 ;;
126         *solaris*) AC_DEFINE(SUNOS5,1,[Whether the host os is solaris])
127                 BLDSHARED="true"
128                 LDSHFLAGS="-G"
129                 if test "${GCC}" = "yes"; then
130                         PICFLAG="-fPIC"
131                         if test "${ac_cv_prog_gnu_ld}" = "yes"; then
132                                 DYNEXP="-Wl,-E"
133                         fi
134                 else
135                         PICFLAG="-KPIC"
136                         ## ${CFLAGS} added for building 64-bit shared 
137                         ## libs using Sun's Compiler
138                         LDSHFLAGS="-G \${CFLAGS}"
139                         PICSUFFIX="po.o"
140                 fi
141                 AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
142                 ;;
143         *sunos*) AC_DEFINE(SUNOS4,1,[Whether the host os is sunos4])
144                 BLDSHARED="true"
145                 LDSHFLAGS="-G"
146                 PICFLAG="-KPIC"   # Is this correct for SunOS
147                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
148                 ;;
149         *netbsd* | *freebsd*)  BLDSHARED="true"
150                 LDSHFLAGS="-shared"
151                 DYNEXP="-Wl,--export-dynamic"
152                 PICFLAG="-fPIC -DPIC"
153                 AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
154                 ;;
155         *openbsd*)  BLDSHARED="true"
156                 LDSHFLAGS="-shared"
157                 DYNEXP="-Wl,-Bdynamic"
158                 PICFLAG="-fPIC"
159                 AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
160                 ;;
161         *irix*) AC_DEFINE(IRIX,1,[Whether the host os is irix])
162                 ATTEMPT_WRAP32_BUILD=yes
163                 BLDSHARED="true"
164                 LDSHFLAGS="-set_version sgi1.0 -shared"
165                 SONAMEFLAG="-soname "
166                 SHLD="\${LD}"
167                 if test "${GCC}" = "yes"; then
168                         PICFLAG="-fPIC"
169                 else 
170                         PICFLAG="-KPIC"
171                 fi
172                 AC_DEFINE(STAT_ST_BLOCKSIZE,512,[The size of a block])
173                 ;;
174         *aix*) AC_DEFINE(AIX,1,[Whether the host os is aix])
175                 BLDSHARED="true"
176                 LDSHFLAGS="-Wl,-bexpall,-bM:SRE,-bnoentry,-berok"
177                 DYNEXP="-Wl,-brtl,-bexpall,-bbigtoc"
178                 PICFLAG="-O2"
179                 if test "${GCC}" != "yes"; then
180                         ## for funky AIX compiler using strncpy()
181                         CFLAGS="$CFLAGS -D_LINUX_SOURCE_COMPAT -qmaxmem=32000"
182                 fi
183
184                 AC_DEFINE(STAT_ST_BLOCKSIZE,DEV_BSIZE,[The size of a block])
185                 ;;
186         *hpux*) AC_DEFINE(HPUX,1,[Whether the host os is HPUX])
187                 SHLIBEXT="sl"
188                 # Use special PIC flags for the native HP-UX compiler.
189                 if test $ac_cv_prog_cc_Ae = yes; then
190                         BLDSHARED="true"
191                         SHLD="/usr/bin/ld"
192                         LDSHFLAGS="-B symbolic -b -z"
193                         SONAMEFLAG="+h "
194                         PICFLAG="+z"
195                 fi
196                 DYNEXP="-Wl,-E"
197                 AC_DEFINE(STAT_ST_BLOCKSIZE,8192,[The size of a block])
198                 ;;
199         *qnx*) AC_DEFINE(QNX,1,[Whether the host os is qnx])
200                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
201                 ;;
202         *osf*) AC_DEFINE(OSF1,1,[Whether the host os is osf1])
203                 BLDSHARED="true"
204                 LDSHFLAGS="-shared"
205                 SONAMEFLAG="-Wl,-soname,"
206                 PICFLAG="-fPIC"
207                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
208                 ;;
209         *sco*) AC_DEFINE(SCO,1,[Whether the host os is sco unix])
210                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
211                 ;;
212         *unixware*) AC_DEFINE(UNIXWARE,1,[Whether the host os is unixware])
213                 BLDSHARED="true"
214                 LDSHFLAGS="-shared"
215                 SONAMEFLAG="-Wl,-soname,"
216                 PICFLAG="-KPIC"
217                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
218                 ;;
219         *next2*) AC_DEFINE(NEXT2,1,[Whether the host os is NeXT v2])
220                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
221                 ;;
222         *dgux*) AC_CHECK_PROG( ROFF, groff, [groff -etpsR -Tascii -man])
223                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
224                 ;;
225         *sysv4*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
226                 case "$host" in
227                         *-univel-*)     if [ test "$GCC" != yes ]; then
228                                         AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
229                                 fi
230                                 LDSHFLAGS="-G"
231                                         DYNEXP="-Bexport"
232                         ;;
233                         *mips-sni-sysv4*) AC_DEFINE(RELIANTUNIX,1,[Whether the host os is reliantunix]);;
234                 esac
235                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
236                 ;;
237
238         *sysv5*) AC_DEFINE(SYSV,1,[Whether this is a system V system])
239                 if [ test "$GCC" != yes ]; then
240                         AC_DEFINE(HAVE_MEMSET,1,[Whether memset() is available])
241                 fi
242                 LDSHFLAGS="-G"
243                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
244                 ;;
245         *-vms)
246                 BLDSHARED="false"
247                 LDSHFLAGS=""
248                 ;;
249         *vos*) AC_DEFINE(STAT_ST_BLOCKSIZE,4096)
250                 BLDSHARED="false"
251                 LDSHFLAGS=""
252                 ;;
253         *)
254                 AC_DEFINE(STAT_ST_BLOCKSIZE,512)
255                 ;;
256 esac
257 AC_MSG_RESULT($BLDSHARED)
258 AC_MSG_CHECKING([linker flags for shared libraries])
259 AC_MSG_RESULT([$LDSHFLAGS])
260 AC_MSG_CHECKING([compiler flags for position-independent code])
261 AC_MSG_RESULT([$PICFLAGS])
262
263 #######################################################
264 # test whether building a shared library actually works
265 if test $BLDSHARED = true; then
266 AC_CACHE_CHECK([whether building shared libraries actually works], 
267                [ac_cv_shlib_works],[
268    ac_cv_shlib_works=no
269    # try building a trivial shared library
270    if test "$PICSUFFIX" = "po"; then
271      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.po ${srcdir-.}/build/tests/shlib.c &&
272        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
273        ac_cv_shlib_works=yes
274    else
275      $CC $CPPFLAGS $CFLAGS $PICFLAG -c -o shlib.$PICSUFFIX ${srcdir-.}/build/tests/shlib.c &&
276        mv shlib.$PICSUFFIX shlib.po &&
277        $CC $CPPFLAGS $CFLAGS `eval echo $LDSHFLAGS` -o shlib.so shlib.po &&
278        ac_cv_shlib_works=yes
279    fi
280    rm -f shlib.so shlib.po
281 ])
282 if test $ac_cv_shlib_works = no; then
283    BLDSHARED=false
284 fi
285 fi
286
287 AC_CACHE_CHECK([for Linux kernel oplocks],samba_cv_HAVE_KERNEL_OPLOCKS_LINUX,[
288 AC_TRY_RUN([
289 #include <sys/types.h>
290 #include <fcntl.h>
291 #ifndef F_GETLEASE
292 #define F_GETLEASE      1025
293 #endif
294 main() {
295        int fd = open("/dev/null", O_RDONLY);
296        return fcntl(fd, F_GETLEASE, 0) == -1;
297 }
298 ],
299 samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=no,samba_cv_HAVE_KERNEL_OPLOCKS_LINUX=cross)])
300 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_LINUX" = x"yes"; then
301     AC_DEFINE(HAVE_KERNEL_OPLOCKS_LINUX,1,[Whether to use linux kernel oplocks])
302 fi
303
304 AC_CACHE_CHECK([for kernel change notify support],samba_cv_HAVE_KERNEL_CHANGE_NOTIFY,[
305 AC_TRY_RUN([
306 #include <sys/types.h>
307 #include <fcntl.h>
308 #include <signal.h>
309 #ifndef F_NOTIFY
310 #define F_NOTIFY 1026
311 #endif
312 main() {
313         exit(fcntl(open("/tmp", O_RDONLY), F_NOTIFY, 0) == -1 ?  1 : 0);
314 }
315 ],
316 samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=yes,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=no,samba_cv_HAVE_KERNEL_CHANGE_NOTIFY=cross)])
317 if test x"$samba_cv_HAVE_KERNEL_CHANGE_NOTIFY" = x"yes"; then
318     AC_DEFINE(HAVE_KERNEL_CHANGE_NOTIFY,1,[Whether kernel notifies changes])
319 fi
320
321 AC_CACHE_CHECK([for kernel share modes],samba_cv_HAVE_KERNEL_SHARE_MODES,[
322 AC_TRY_RUN([
323 #include <sys/types.h>
324 #include <fcntl.h>
325 #include <signal.h>
326 #include <sys/file.h>
327 #ifndef LOCK_MAND
328 #define LOCK_MAND       32
329 #define LOCK_READ       64
330 #endif
331 main() {
332         exit(flock(open("/dev/null", O_RDWR), LOCK_MAND|LOCK_READ) != 0);
333 }
334 ],
335 samba_cv_HAVE_KERNEL_SHARE_MODES=yes,samba_cv_HAVE_KERNEL_SHARE_MODES=no,samba_cv_HAVE_KERNEL_SHARE_MODES=cross)])
336 if test x"$samba_cv_HAVE_KERNEL_SHARE_MODES" = x"yes"; then
337     AC_DEFINE(HAVE_KERNEL_SHARE_MODES,1,[Whether the kernel supports share modes])
338 fi
339
340 AC_CACHE_CHECK([for IRIX kernel oplock type definitions],samba_cv_HAVE_KERNEL_OPLOCKS_IRIX,[
341 AC_TRY_COMPILE([#include <sys/types.h>
342 #include <fcntl.h>],
343 [oplock_stat_t t; t.os_state = OP_REVOKE; t.os_dev = 1; t.os_ino = 1;],
344 samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=yes,samba_cv_HAVE_KERNEL_OPLOCKS_IRIX=no)])
345 if test x"$samba_cv_HAVE_KERNEL_OPLOCKS_IRIX" = x"yes"; then
346     AC_DEFINE(HAVE_KERNEL_OPLOCKS_IRIX,1,[Whether IRIX kernel oplock type definitions are available])
347 fi
348
349
350 AC_CACHE_CHECK([for ftruncate extend],samba_cv_HAVE_FTRUNCATE_EXTEND,[
351 AC_TRY_RUN([#include "${srcdir-.}/build/tests/ftruncate.c"],
352            samba_cv_HAVE_FTRUNCATE_EXTEND=yes,samba_cv_HAVE_FTRUNCATE_EXTEND=no,samba_cv_HAVE_FTRUNCATE_EXTEND=cross)])
353 if test x"$samba_cv_HAVE_FTRUNCATE_EXTEND" = x"yes"; then
354     AC_DEFINE(HAVE_FTRUNCATE_EXTEND,1,[Truncate extend])
355 fi
356
357 AC_CACHE_CHECK([for sysconf(_SC_NGROUPS_MAX)],samba_cv_SYSCONF_SC_NGROUPS_MAX,[
358 AC_TRY_RUN([#include <unistd.h>
359 main() { exit(sysconf(_SC_NGROUPS_MAX) == -1 ? 1 : 0); }],
360 samba_cv_SYSCONF_SC_NGROUPS_MAX=yes,samba_cv_SYSCONF_SC_NGROUPS_MAX=no,samba_cv_SYSCONF_SC_NGROUPS_MAX=cross)])
361 if test x"$samba_cv_SYSCONF_SC_NGROUPS_MAX" = x"yes"; then
362     AC_DEFINE(SYSCONF_SC_NGROUPS_MAX,1,[Whether sysconf(_SC_NGROUPS_MAX) is available])
363 fi
364
365 AC_CACHE_CHECK([for working mmap],samba_cv_HAVE_MMAP,[
366 AC_TRY_RUN([#include "${srcdir-.}/build/tests/shared_mmap.c"],
367            samba_cv_HAVE_MMAP=yes,samba_cv_HAVE_MMAP=no,samba_cv_HAVE_MMAP=cross)])
368 if test x"$samba_cv_HAVE_MMAP" = x"yes"; then
369     AC_DEFINE(HAVE_MMAP,1,[Whether mmap works])
370 fi
371
372 case "$host_os" in
373 *linux*)
374 AC_CACHE_CHECK([for broken RedHat 7.2 system header files],samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS,[
375 AC_TRY_COMPILE([
376 #ifdef HAVE_SYS_VFS_H
377 #include <sys/vfs.h>
378 #endif
379 #ifdef HAVE_SYS_CAPABILITY_H
380 #include <sys/capability.h>
381 #endif
382 ],[int i;],
383    samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=no,samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS=yes)])
384 if test x"$samba_cv_BROKEN_REDHAT_7_SYSTEM_HEADERS" = x"yes"; then
385    AC_DEFINE(BROKEN_REDHAT_7_SYSTEM_HEADERS,1,[Broken RedHat 7.2 system header files])
386 fi
387 ;;
388 esac
389
390 AC_CACHE_CHECK([for O_DIRECT flag to open(2)],samba_cv_HAVE_OPEN_O_DIRECT,[
391 AC_TRY_COMPILE([
392 #include <unistd.h>
393 #ifdef HAVE_FCNTL_H
394 #include <fcntl.h>
395 #endif],
396 [int fd = open("/dev/null", O_DIRECT);],
397 samba_cv_HAVE_OPEN_O_DIRECT=yes,samba_cv_HAVE_OPEN_O_DIRECT=no)])
398 if test x"$samba_cv_HAVE_OPEN_O_DIRECT" = x"yes"; then
399     AC_DEFINE(HAVE_OPEN_O_DIRECT,1,[Whether the open(2) accepts O_DIRECT])
400 fi