ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/configure.ac
Revision: 1.22
Committed: Thu Feb 29 18:02:43 2024 UTC (3 months, 1 week ago) by root
Branch: MAIN
CVS Tags: HEAD
Changes since 1.21: +0 -14 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 AC_INIT
2     AC_CONFIG_SRCDIR([libeio/eio.h])
3 root 1.6 AC_CONFIG_HEADERS([config.h])
4 root 1.1
5 root 1.5 AC_PREREQ(2.60)
6     AC_USE_SYSTEM_EXTENSIONS
7    
8 root 1.1 AC_PROG_CC
9    
10     m4_include([libeio/libeio.m4])
11    
12 root 1.6 # for these to work, you need to run autoheader in IO::AIO, not libeio :(
13    
14     AC_CACHE_CHECK(for set/getrlimit, ac_cv_rlimits, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
15     #include <sys/time.h>
16     #include <sys/resource.h>
17     int main (void)
18     {
19     struct rlimit srl;
20 root 1.13 int res;
21 root 1.6 srl.rlim_cur = srl.rlim_max = RLIM_INFINITY;
22     res = getrlimit (RLIMIT_NOFILE, &srl);
23     res = setrlimit (RLIMIT_NOFILE, &srl);
24     return 0;
25     }
26     ]])],ac_cv_rlimits=yes,ac_cv_rlimits=no)])
27     test $ac_cv_rlimits = yes && AC_DEFINE(HAVE_RLIMITS, 1, setrlimit/getrlimit is available)
28    
29     dnl at least uclibc defines _POSIX_ADVISORY_INFO without *any* of the required
30     dnl functionality actually being present. ugh.
31     AC_CACHE_CHECK(for posix_madvise, ac_cv_posix_madvise, [AC_LINK_IFELSE([AC_LANG_SOURCE([
32     #include <sys/mman.h>
33     int main (void)
34     {
35     int res = posix_madvise ((void *)0, (size_t)0, POSIX_MADV_NORMAL);
36     int a = POSIX_MADV_SEQUENTIAL;
37     int b = POSIX_MADV_RANDOM;
38     int c = POSIX_MADV_WILLNEED;
39     int d = POSIX_MADV_DONTNEED;
40     return 0;
41     }
42     ])],ac_cv_posix_madvise=yes,ac_cv_posix_madvise=no)])
43     test $ac_cv_posix_madvise = yes && AC_DEFINE(HAVE_POSIX_MADVISE, 1, posix_madvise(2) is available)
44    
45     AC_CACHE_CHECK(for posix_fadvise, ac_cv_posix_fadvise, [AC_LINK_IFELSE([AC_LANG_SOURCE([
46     #define _XOPEN_SOURCE 600
47     #include <fcntl.h>
48     int main (void)
49     {
50     int res = posix_fadvise ((int)0, (off_t)0, (off_t)0, POSIX_FADV_NORMAL);
51     int a = POSIX_FADV_SEQUENTIAL;
52     int b = POSIX_FADV_NOREUSE;
53     int c = POSIX_FADV_RANDOM;
54     int d = POSIX_FADV_WILLNEED;
55     int e = POSIX_FADV_DONTNEED;
56     return 0;
57     }
58     ])],ac_cv_posix_fadvise=yes,ac_cv_posix_fadvise=no)])
59     test $ac_cv_posix_fadvise = yes && AC_DEFINE(HAVE_POSIX_FADVISE, 1, posix_fadvise(2) is available)
60    
61     dnl lots of linux specifics
62     AC_CHECK_HEADERS([linux/fs.h linux/fiemap.h])
63    
64 root 1.8 dnl glibc major/minor macros
65     AC_CHECK_HEADERS([sys/sysmacros.h])
66    
67 root 1.9 dnl solaris major/minor
68     AC_CHECK_HEADERS([sys/mkdev.h])
69    
70 root 1.12 dnl readv / preadv, vmsplice
71     AC_CHECK_HEADERS([sys/uio.h])
72    
73 root 1.20 dnl fexecve has always been in the single unix specification
74     dnl but some atrocities (like opsnbsd and osx) claim implementing it
75     dnl but then not definining it. ugh. garbage. and fexecve would be
76     dnl useful for security, but, no, not on openbsd. we'd rather lie
77     dnl about it.
78     AC_CACHE_CHECK(for fexecve, ac_cv_fexecve, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
79     #include <fcntl.h>
80     #include <unistd.h>
81     int main (void)
82     {
83 root 1.21 char *const argv[] = { "foo", "bar", 0 };
84     int res = fexecve (-1, argv, 0);
85 root 1.20 return 0;
86     }
87     ]])],ac_cv_fexecve=yes,ac_cv_fexecve=no)])
88     test $ac_cv_fexecve = yes && AC_DEFINE(HAVE_FEXECVE, 1, fexecve(2) is available)
89    
90 root 1.17 AC_CACHE_CHECK([for siginfo_t], ac_cv_siginfo_t, [AC_LINK_IFELSE([AC_LANG_SOURCE([
91     #include <signal.h>
92     int main (void)
93     {
94     siginfo_t si;
95     si.si_code;
96     si.si_pid;
97     si.si_uid;
98     si.si_value.sival_int;
99     si.si_value.sival_ptr;
100     return 0;
101     }
102     ])],ac_cv_siginfo_t=yes,ac_cv_siginfo_t=no)])
103     test $ac_cv_siginfo_t = yes && AC_DEFINE(HAVE_SIGINFO_T, 1, have siginfo_t in signal.h)
104    
105 root 1.16 AC_CACHE_CHECK([for unix-style syscall interface], ac_cv_syscall, [AC_LINK_IFELSE([AC_LANG_SOURCE([
106     #include <unistd.h>
107     #include <sys/syscall.h>
108     int main (void)
109     {
110     long res = syscall (SYS_exit, 0);
111     return 0;
112     }
113     ])],ac_cv_syscall=yes,ac_cv_syscall=no)])
114     test $ac_cv_syscall = yes && AC_DEFINE(HAVE_SYSCALL, 1, unix syscall interface)
115 root 1.12
116 root 1.6 AC_CACHE_CHECK([for splice, vmsplice and tee], ac_cv_linux_splice, [AC_LINK_IFELSE([AC_LANG_SOURCE([
117 root 1.11 #include <sys/types.h>
118 root 1.6 #include <fcntl.h>
119 root 1.12 #include <sys/uio.h>
120 root 1.6 int main (void)
121     {
122     ssize_t res;
123     res = splice ((int)0, (loff_t)0, (int)0, (loff_t *)0, (size_t)0, SPLICE_F_MOVE | SPLICE_F_NONBLOCK | SPLICE_F_MORE);
124     res = tee ((int)0, (int)0, (size_t)0, SPLICE_F_NONBLOCK);
125     res = vmsplice ((int)0, (struct iovec *)0, 0, SPLICE_F_NONBLOCK | SPLICE_F_GIFT);
126     return 0;
127     }
128     ])],ac_cv_linux_splice=yes,ac_cv_linux_splice=no)])
129     test $ac_cv_linux_splice = yes && AC_DEFINE(HAVE_LINUX_SPLICE, 1, splice/vmsplice/tee(2) are available)
130    
131     AC_CACHE_CHECK(for pipe2, ac_cv_pipe2, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
132     #include <fcntl.h>
133     #include <unistd.h>
134     int main (void)
135     {
136 root 1.13 int res;
137 root 1.6 res = pipe2 (0, 0);
138     return 0;
139     }
140     ]])],ac_cv_pipe2=yes,ac_cv_pipe2=no)])
141     test $ac_cv_pipe2 = yes && AC_DEFINE(HAVE_PIPE2, 1, pipe2(2) is available)
142    
143     AC_CACHE_CHECK(for eventfd, ac_cv_eventfd, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
144     #include <sys/eventfd.h>
145     int main (void)
146     {
147 root 1.13 int res;
148 root 1.6 res = eventfd (1, EFD_CLOEXEC | EFD_NONBLOCK);
149     return 0;
150     }
151     ]])],ac_cv_eventfd=yes,ac_cv_eventfd=no)])
152     test $ac_cv_eventfd = yes && AC_DEFINE(HAVE_EVENTFD, 1, eventfd(2) is available)
153    
154 root 1.14 AC_CACHE_CHECK(for timerfd_*, ac_cv_timerfd, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
155 root 1.6 #include <sys/timerfd.h>
156     int main (void)
157     {
158     struct itimerspec its;
159 root 1.13 int res;
160 root 1.6 res = timerfd_create (CLOCK_REALTIME, TFD_CLOEXEC | TFD_NONBLOCK);
161     res = timerfd_settime (res, TFD_TIMER_ABSTIME /*| TFD_TIMER_CANCEL_ON_SET*/, &its, 0);
162     res = timerfd_gettime (res, &its);
163     return 0;
164     }
165     ]])],ac_cv_timerfd=yes,ac_cv_timerfd=no)])
166     test $ac_cv_timerfd = yes && AC_DEFINE(HAVE_TIMERFD, 1, timerfd_*(2) are available)
167    
168 root 1.14 AC_CACHE_CHECK(for memfd_create, ac_cv_memfd_create, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
169     #include <sys/mman.h>
170     int main (void)
171     {
172     int res = memfd_create ("name", MFD_CLOEXEC | MFD_ALLOW_SEALING);
173     return 0;
174     }
175     ]])],ac_cv_memfd_create=yes,ac_cv_memfd_create=no)])
176     test $ac_cv_memfd_create = yes && AC_DEFINE(HAVE_MEMFD_CREATE, 1, memfd_create(2) is available)
177    
178 root 1.6 AC_CACHE_CHECK(for st_xtimensec, ac_cv_xtimensec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
179     #include "EXTERN.h"
180     #include "perl.h"
181     #include "XSUB.h"
182    
183     int main (void)
184     {
185     return PL_statcache.st_atimensec
186     + PL_statcache.st_mtimensec
187     + PL_statcache.st_ctimensec;
188     }
189     ]])],ac_cv_xtimensec=yes,ac_cv_xtimensec=no)])
190     test $ac_cv_xtimensec = yes && AC_DEFINE(HAVE_ST_XTIMENSEC, 1, stat nanosecond access by st_xtimensec)
191    
192     AC_CACHE_CHECK(for st_xtimespec, ac_cv_xtimespec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
193     #include "EXTERN.h"
194     #include "perl.h"
195     #include "XSUB.h"
196    
197     int main (void)
198     {
199     return PL_statcache.st_atim.tv_nsec
200     + PL_statcache.st_mtim.tv_nsec
201     + PL_statcache.st_ctim.tv_nsec;
202     }
203     ]])],ac_cv_xtimespec=yes,ac_cv_xtimespec=no)])
204     test $ac_cv_xtimespec = yes && AC_DEFINE(HAVE_ST_XTIMESPEC, 1, stat nanosecond access by st_xtimespec)
205    
206 root 1.7 # apparently, True64 uses st_u[amc]time, aix uses at_[amc]time_n and apple uses st_[amc,birth]timespec?
207    
208 root 1.10 AC_CACHE_CHECK(for st_birthtimensec, ac_cv_birthtimensec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
209     #include "EXTERN.h"
210     #include "perl.h"
211     #include "XSUB.h"
212    
213     int main (void)
214     {
215     return PL_statcache.st_birthtime + PL_statcache.st_birthtimensec;
216     }
217     ]])],ac_cv_birthtimensec=yes,ac_cv_birthtimensec=no)])
218     test $ac_cv_birthtimensec = yes && AC_DEFINE(HAVE_ST_BIRTHTIMENSEC, 1, birthtime nanosecond access by st_birthtimensec)
219    
220     AC_CACHE_CHECK(for st_birthtimespec, ac_cv_birthtimespec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
221     #include "EXTERN.h"
222     #include "perl.h"
223     #include "XSUB.h"
224    
225     int main (void)
226     {
227     return PL_statcache.st_birthtim.tv_sec + PL_statcache.st_birthtim.tv_nsec;
228     }
229     ]])],ac_cv_birthtimespec=yes,ac_cv_birthtimespec=no)])
230     test $ac_cv_birthtimespec = yes && AC_DEFINE(HAVE_ST_BIRTHTIMESPEC, 1, birthtime nanosecond access by st_birthtimespec)
231    
232     AC_CACHE_CHECK(for st_gen, ac_cv_st_gen, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
233     #include "EXTERN.h"
234     #include "perl.h"
235     #include "XSUB.h"
236    
237     int main (void)
238     {
239     return PL_statcache.st_gen;
240     }
241     ]])],ac_cv_st_gen=yes,ac_cv_st_gen=no)])
242     test $ac_cv_st_gen = yes && AC_DEFINE(HAVE_ST_GEN, 1, stat st_gen member)
243    
244 root 1.13 AC_CACHE_CHECK(for statx, ac_cv_statx, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
245     #include <sys/types.h>
246     #include <sys/stat.h>
247     #include <unistd.h>
248     #include <fcntl.h>
249     int res;
250     int main (void)
251     {
252     struct statx sx;
253     int res;
254     res = statx (AT_FDCWD, ".",
255     AT_EMPTY_PATH | AT_NO_AUTOMOUNT | AT_SYMLINK_NOFOLLOW | AT_STATX_SYNC_AS_STAT | AT_STATX_FORCE_SYNC | AT_STATX_DONT_SYNC,
256     STATX_ALL, &sx);
257     STATX_TYPE; STATX_MODE; STATX_NLINK; STATX_UID; STATX_GID; STATX_ATIME; STATX_MTIME; STATX_CTIME;
258     STATX_INO; STATX_SIZE; STATX_BLOCKS; STATX_BASIC_STATS; STATX_BTIME; STATX_ALL;
259     STATX_ATTR_COMPRESSED; STATX_ATTR_IMMUTABLE; STATX_ATTR_APPEND; STATX_ATTR_NODUMP; STATX_ATTR_ENCRYPTED;
260     return 0;
261     }
262     ]])],ac_cv_statx=yes,ac_cv_statx=no)])
263     test $ac_cv_statx = yes && AC_DEFINE(HAVE_STATX, 1, statx(2) is available)
264    
265 root 1.15 AC_CACHE_CHECK(for accept4, ac_cv_accept4, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
266     #include <sys/types.h>
267     #include <sys/socket.h>
268     int main (void)
269     {
270 root 1.19 int res = accept4 (1, (struct sockaddr *)0, (socklen_t)0, SOCK_NONBLOCK | SOCK_CLOEXEC);
271 root 1.15 return 0;
272     }
273     ]])],ac_cv_accept4=yes,ac_cv_accept4=no)])
274     test $ac_cv_accept4 = yes && AC_DEFINE(HAVE_ACCEPT4, 1, accept4(2) is available)
275    
276 root 1.18 AC_CHECK_HEADERS([sys/mount.h])
277 root 1.19 AC_CACHE_CHECK(for mount, ac_cv_mount, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
278 root 1.18 #include <sys/mount.h>
279     int main (void)
280     {
281 root 1.19 int res = mount ("path", "path", "fstype", MS_RDONLY, 0);
282 root 1.18 return 0;
283     }
284     ]])],ac_cv_mount=yes,ac_cv_mount=no)])
285 root 1.19 test $ac_cv_mount = yes && AC_DEFINE(HAVE_MOUNT, 1, mount is available)
286     AC_CACHE_CHECK(for umount, ac_cv_umount, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
287     #include <sys/mount.h>
288     int main (void)
289     {
290     int res = umount ("path");
291     return 0;
292     }
293     ]])],ac_cv_umount=yes,ac_cv_umount=no)])
294     test $ac_cv_umount = yes && AC_DEFINE(HAVE_UMOUNT, 1, umount is available)
295 root 1.18 AC_CACHE_CHECK(for umount2, ac_cv_umount2, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
296     #include <sys/mount.h>
297     int main (void)
298     {
299 root 1.19 int res = umount2 ("path", MNT_FORCE|MNT_DETACH);
300 root 1.18 return 0;
301     }
302     ]])],ac_cv_umount2=yes,ac_cv_umount2=no)])
303     test $ac_cv_umount2 = yes && AC_DEFINE(HAVE_UMOUNT2, 1, umount2 is available)
304    
305 root 1.1 AC_OUTPUT
306 root 1.6