ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/configure.ac
Revision: 1.20
Committed: Wed Sep 28 08:24:25 2022 UTC (19 months, 2 weeks ago) by root
Branch: MAIN
CVS Tags: rel-4_80
Changes since 1.19: +16 -0 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     int res = fexecve (-1, "argv", 0);
84     return 0;
85     }
86     ]])],ac_cv_fexecve=yes,ac_cv_fexecve=no)])
87     test $ac_cv_fexecve = yes && AC_DEFINE(HAVE_FEXECVE, 1, fexecve(2) is available)
88    
89 root 1.17 AC_CACHE_CHECK([for siginfo_t], ac_cv_siginfo_t, [AC_LINK_IFELSE([AC_LANG_SOURCE([
90     #include <signal.h>
91     int main (void)
92     {
93     siginfo_t si;
94     si.si_code;
95     si.si_pid;
96     si.si_uid;
97     si.si_value.sival_int;
98     si.si_value.sival_ptr;
99     return 0;
100     }
101     ])],ac_cv_siginfo_t=yes,ac_cv_siginfo_t=no)])
102     test $ac_cv_siginfo_t = yes && AC_DEFINE(HAVE_SIGINFO_T, 1, have siginfo_t in signal.h)
103    
104 root 1.16 AC_CACHE_CHECK([for unix-style syscall interface], ac_cv_syscall, [AC_LINK_IFELSE([AC_LANG_SOURCE([
105     #include <unistd.h>
106     #include <sys/syscall.h>
107     int main (void)
108     {
109     long res = syscall (SYS_exit, 0);
110     return 0;
111     }
112     ])],ac_cv_syscall=yes,ac_cv_syscall=no)])
113     test $ac_cv_syscall = yes && AC_DEFINE(HAVE_SYSCALL, 1, unix syscall interface)
114 root 1.12
115 root 1.6 AC_CACHE_CHECK([for splice, vmsplice and tee], ac_cv_linux_splice, [AC_LINK_IFELSE([AC_LANG_SOURCE([
116 root 1.11 #include <sys/types.h>
117 root 1.6 #include <fcntl.h>
118 root 1.12 #include <sys/uio.h>
119 root 1.6 int main (void)
120     {
121     ssize_t res;
122     res = splice ((int)0, (loff_t)0, (int)0, (loff_t *)0, (size_t)0, SPLICE_F_MOVE | SPLICE_F_NONBLOCK | SPLICE_F_MORE);
123     res = tee ((int)0, (int)0, (size_t)0, SPLICE_F_NONBLOCK);
124     res = vmsplice ((int)0, (struct iovec *)0, 0, SPLICE_F_NONBLOCK | SPLICE_F_GIFT);
125     return 0;
126     }
127     ])],ac_cv_linux_splice=yes,ac_cv_linux_splice=no)])
128     test $ac_cv_linux_splice = yes && AC_DEFINE(HAVE_LINUX_SPLICE, 1, splice/vmsplice/tee(2) are available)
129    
130     AC_CACHE_CHECK(for pipe2, ac_cv_pipe2, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
131     #include <fcntl.h>
132     #include <unistd.h>
133     int main (void)
134     {
135 root 1.13 int res;
136 root 1.6 res = pipe2 (0, 0);
137     return 0;
138     }
139     ]])],ac_cv_pipe2=yes,ac_cv_pipe2=no)])
140     test $ac_cv_pipe2 = yes && AC_DEFINE(HAVE_PIPE2, 1, pipe2(2) is available)
141    
142     AC_CACHE_CHECK(for eventfd, ac_cv_eventfd, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
143     #include <sys/eventfd.h>
144     int main (void)
145     {
146 root 1.13 int res;
147 root 1.6 res = eventfd (1, EFD_CLOEXEC | EFD_NONBLOCK);
148     return 0;
149     }
150     ]])],ac_cv_eventfd=yes,ac_cv_eventfd=no)])
151     test $ac_cv_eventfd = yes && AC_DEFINE(HAVE_EVENTFD, 1, eventfd(2) is available)
152    
153 root 1.14 AC_CACHE_CHECK(for timerfd_*, ac_cv_timerfd, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
154 root 1.6 #include <sys/timerfd.h>
155     int main (void)
156     {
157     struct itimerspec its;
158 root 1.13 int res;
159 root 1.6 res = timerfd_create (CLOCK_REALTIME, TFD_CLOEXEC | TFD_NONBLOCK);
160     res = timerfd_settime (res, TFD_TIMER_ABSTIME /*| TFD_TIMER_CANCEL_ON_SET*/, &its, 0);
161     res = timerfd_gettime (res, &its);
162     return 0;
163     }
164     ]])],ac_cv_timerfd=yes,ac_cv_timerfd=no)])
165     test $ac_cv_timerfd = yes && AC_DEFINE(HAVE_TIMERFD, 1, timerfd_*(2) are available)
166    
167 root 1.14 AC_CACHE_CHECK(for memfd_create, ac_cv_memfd_create, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
168     #include <sys/mman.h>
169     int main (void)
170     {
171     int res = memfd_create ("name", MFD_CLOEXEC | MFD_ALLOW_SEALING);
172     return 0;
173     }
174     ]])],ac_cv_memfd_create=yes,ac_cv_memfd_create=no)])
175     test $ac_cv_memfd_create = yes && AC_DEFINE(HAVE_MEMFD_CREATE, 1, memfd_create(2) is available)
176    
177 root 1.6 AC_CACHE_CHECK(for copy_file_range, ac_cv_copy_file_range, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
178     #include <unistd.h>
179     #include <sys/syscall.h>
180     /*#include <linux/copy.h>*/
181     int main (void)
182     {
183 root 1.13 int res;
184 root 1.6 /*res = syscall (SYS_copy_file_range, 0, 0, 0, 0, 0, COPY_FR_REFLINK | COPY_FR_DEDUP | COPY_FR_COPY);*/
185     res = syscall (SYS_copy_file_range, 0, 0, 0, 0, 0, 0);
186     return 0;
187     }
188     ]])],ac_cv_copy_file_range=yes,ac_cv_copy_file_range=no)])
189     test $ac_cv_copy_file_range = yes && AC_DEFINE(HAVE_COPY_FILE_RANGE, 1, copy_file_range(2) is available)
190    
191     AC_CACHE_CHECK(for st_xtimensec, ac_cv_xtimensec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
192     #include "EXTERN.h"
193     #include "perl.h"
194     #include "XSUB.h"
195    
196     int main (void)
197     {
198     return PL_statcache.st_atimensec
199     + PL_statcache.st_mtimensec
200     + PL_statcache.st_ctimensec;
201     }
202     ]])],ac_cv_xtimensec=yes,ac_cv_xtimensec=no)])
203     test $ac_cv_xtimensec = yes && AC_DEFINE(HAVE_ST_XTIMENSEC, 1, stat nanosecond access by st_xtimensec)
204    
205     AC_CACHE_CHECK(for st_xtimespec, ac_cv_xtimespec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
206     #include "EXTERN.h"
207     #include "perl.h"
208     #include "XSUB.h"
209    
210     int main (void)
211     {
212     return PL_statcache.st_atim.tv_nsec
213     + PL_statcache.st_mtim.tv_nsec
214     + PL_statcache.st_ctim.tv_nsec;
215     }
216     ]])],ac_cv_xtimespec=yes,ac_cv_xtimespec=no)])
217     test $ac_cv_xtimespec = yes && AC_DEFINE(HAVE_ST_XTIMESPEC, 1, stat nanosecond access by st_xtimespec)
218    
219 root 1.7 # apparently, True64 uses st_u[amc]time, aix uses at_[amc]time_n and apple uses st_[amc,birth]timespec?
220    
221 root 1.10 AC_CACHE_CHECK(for st_birthtimensec, ac_cv_birthtimensec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
222     #include "EXTERN.h"
223     #include "perl.h"
224     #include "XSUB.h"
225    
226     int main (void)
227     {
228     return PL_statcache.st_birthtime + PL_statcache.st_birthtimensec;
229     }
230     ]])],ac_cv_birthtimensec=yes,ac_cv_birthtimensec=no)])
231     test $ac_cv_birthtimensec = yes && AC_DEFINE(HAVE_ST_BIRTHTIMENSEC, 1, birthtime nanosecond access by st_birthtimensec)
232    
233     AC_CACHE_CHECK(for st_birthtimespec, ac_cv_birthtimespec, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
234     #include "EXTERN.h"
235     #include "perl.h"
236     #include "XSUB.h"
237    
238     int main (void)
239     {
240     return PL_statcache.st_birthtim.tv_sec + PL_statcache.st_birthtim.tv_nsec;
241     }
242     ]])],ac_cv_birthtimespec=yes,ac_cv_birthtimespec=no)])
243     test $ac_cv_birthtimespec = yes && AC_DEFINE(HAVE_ST_BIRTHTIMESPEC, 1, birthtime nanosecond access by st_birthtimespec)
244    
245     AC_CACHE_CHECK(for st_gen, ac_cv_st_gen, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
246     #include "EXTERN.h"
247     #include "perl.h"
248     #include "XSUB.h"
249    
250     int main (void)
251     {
252     return PL_statcache.st_gen;
253     }
254     ]])],ac_cv_st_gen=yes,ac_cv_st_gen=no)])
255     test $ac_cv_st_gen = yes && AC_DEFINE(HAVE_ST_GEN, 1, stat st_gen member)
256    
257 root 1.13 AC_CACHE_CHECK(for statx, ac_cv_statx, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
258     #include <sys/types.h>
259     #include <sys/stat.h>
260     #include <unistd.h>
261     #include <fcntl.h>
262     int res;
263     int main (void)
264     {
265     struct statx sx;
266     int res;
267     res = statx (AT_FDCWD, ".",
268     AT_EMPTY_PATH | AT_NO_AUTOMOUNT | AT_SYMLINK_NOFOLLOW | AT_STATX_SYNC_AS_STAT | AT_STATX_FORCE_SYNC | AT_STATX_DONT_SYNC,
269     STATX_ALL, &sx);
270     STATX_TYPE; STATX_MODE; STATX_NLINK; STATX_UID; STATX_GID; STATX_ATIME; STATX_MTIME; STATX_CTIME;
271     STATX_INO; STATX_SIZE; STATX_BLOCKS; STATX_BASIC_STATS; STATX_BTIME; STATX_ALL;
272     STATX_ATTR_COMPRESSED; STATX_ATTR_IMMUTABLE; STATX_ATTR_APPEND; STATX_ATTR_NODUMP; STATX_ATTR_ENCRYPTED;
273     return 0;
274     }
275     ]])],ac_cv_statx=yes,ac_cv_statx=no)])
276     test $ac_cv_statx = yes && AC_DEFINE(HAVE_STATX, 1, statx(2) is available)
277    
278 root 1.15 AC_CACHE_CHECK(for accept4, ac_cv_accept4, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
279     #include <sys/types.h>
280     #include <sys/socket.h>
281     int main (void)
282     {
283 root 1.19 int res = accept4 (1, (struct sockaddr *)0, (socklen_t)0, SOCK_NONBLOCK | SOCK_CLOEXEC);
284 root 1.15 return 0;
285     }
286     ]])],ac_cv_accept4=yes,ac_cv_accept4=no)])
287     test $ac_cv_accept4 = yes && AC_DEFINE(HAVE_ACCEPT4, 1, accept4(2) is available)
288    
289 root 1.18 AC_CHECK_HEADERS([sys/mount.h])
290 root 1.19 AC_CACHE_CHECK(for mount, ac_cv_mount, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
291 root 1.18 #include <sys/mount.h>
292     int main (void)
293     {
294 root 1.19 int res = mount ("path", "path", "fstype", MS_RDONLY, 0);
295 root 1.18 return 0;
296     }
297     ]])],ac_cv_mount=yes,ac_cv_mount=no)])
298 root 1.19 test $ac_cv_mount = yes && AC_DEFINE(HAVE_MOUNT, 1, mount is available)
299     AC_CACHE_CHECK(for umount, ac_cv_umount, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
300     #include <sys/mount.h>
301     int main (void)
302     {
303     int res = umount ("path");
304     return 0;
305     }
306     ]])],ac_cv_umount=yes,ac_cv_umount=no)])
307     test $ac_cv_umount = yes && AC_DEFINE(HAVE_UMOUNT, 1, umount is available)
308 root 1.18 AC_CACHE_CHECK(for umount2, ac_cv_umount2, [AC_LINK_IFELSE([AC_LANG_SOURCE([[
309     #include <sys/mount.h>
310     int main (void)
311     {
312 root 1.19 int res = umount2 ("path", MNT_FORCE|MNT_DETACH);
313 root 1.18 return 0;
314     }
315     ]])],ac_cv_umount2=yes,ac_cv_umount2=no)])
316     test $ac_cv_umount2 = yes && AC_DEFINE(HAVE_UMOUNT2, 1, umount2 is available)
317    
318 root 1.1 AC_OUTPUT
319 root 1.6