]> granicus.if.org Git - strace/blob - configure.ac
Robustify mpers.awk against invalid input
[strace] / configure.ac
1 dnl Process this file with autoconf to create configure.  Use autoreconf.
2 AC_PREREQ(2.57)
3 AC_INIT([strace],
4         m4_esyscmd([./git-version-gen .tarball-version]),
5         [strace-devel@lists.sourceforge.net])
6 AC_CONFIG_SRCDIR([strace.c])
7 AC_CONFIG_AUX_DIR([.])
8 AC_CONFIG_HEADERS([config.h])
9 AM_INIT_AUTOMAKE([foreign nostdinc dist-xz no-dist-gzip silent-rules parallel-tests])
10 AM_MAINTAINER_MODE
11 AC_CANONICAL_HOST
12
13 AC_PROG_CC
14 AX_PROG_CC_FOR_BUILD
15 AC_USE_SYSTEM_EXTENSIONS
16 AC_PROG_RANLIB
17
18 AC_MSG_CHECKING([for supported architecture])
19 arch_m32=
20 arch_mx32=
21 case "$host_cpu" in
22 bfin)
23         arch=bfin
24         AC_DEFINE([BFIN], 1, [Define for the Blackfin architecture.])
25         ;;
26 i[[3456]]86|pentium)
27         arch=i386
28         AC_DEFINE([I386], 1, [Define for the i386 architecture.])
29         ;;
30 ia64)
31         arch=ia64
32         AC_DEFINE([IA64], 1, [Define for the IA64 architecture.])
33         ;;
34 m68k)
35         arch=m68k
36         AC_DEFINE([M68K], 1, [Define for the m68k architecture.])
37         ;;
38 sparc64*)
39         arch=sparc64
40         arch_m32=sparc
41         AC_DEFINE([SPARC64], 1, [Define for the SPARC64 architecture.])
42         ;;
43 sparc*)
44         arch=sparc
45         AC_DEFINE([SPARC], 1, [Define for the SPARC architecture.])
46         ;;
47 metag*)
48         arch=metag
49         AC_DEFINE([METAG], 1, [Define for the Meta architecture.])
50         ;;
51 mips*)
52         arch=mips
53         AC_DEFINE([MIPS], 1, [Define for the MIPS architecture.])
54         ;;
55 alpha*)
56         arch=alpha
57         AC_DEFINE([ALPHA], 1, [Define for the Alpha architecture.])
58         ;;
59 powerpc*)
60         AC_DEFINE([POWERPC], 1, [Define for the PowerPC architecture.])
61         AC_TRY_COMPILE(
62 [#ifndef __LP64__
63 # error 32 bit
64 #endif], [], arch=powerpc64, arch=powerpc)
65         if test "$arch" = "powerpc64"; then
66                 arch_m32=powerpc
67                 AC_DEFINE([POWERPC64], 1, [Define for the PowerPC64 architecture.])
68         fi
69         ;;
70 arm*)
71         arch=arm
72         AC_DEFINE([ARM], 1, [Define for the ARM architecture.])
73         ;;
74 aarch64*)
75         arch=aarch64
76         arch_m32=arm
77         AC_DEFINE([AARCH64], 1, [Define for the AArch64 architecture.])
78         ;;
79 avr32*)
80         arch=avr32
81         AC_DEFINE([AVR32], 1, [Define for the AVR32 architecture.])
82         ;;
83 arc*)
84         arch=arc
85         AC_DEFINE([ARC], 1, [Define for the ARC architecture.])
86         ;;
87 s390)
88         arch=s390
89         AC_DEFINE([S390], 1, [Define for the S390 architecture.])
90         ;;
91 s390x)
92         arch=s390x
93         AC_DEFINE([S390X], 1, [Define for the S390x architecture.])
94         ;;
95 hppa*|parisc*)
96         arch=hppa
97         AC_DEFINE([HPPA], 1, [Define for the HPPA architecture.])
98         ;;
99 sh64*)
100         arch=sh64
101         AC_DEFINE([SH64], 1, [Define for the SH64 architecture.])
102         ;;
103 sh*)
104         arch=sh
105         AC_DEFINE([SH], 1, [Define for the SH architecture.])
106         ;;
107 x86?64*)
108         arch_m32=i386
109         AC_TRY_COMPILE(
110 [#ifndef __ILP32__
111 # error not x32
112 #endif], [], arch=x32, arch=x86_64)
113         if test "$arch" = "x86_64"; then
114                 arch_mx32=x32
115                 AC_DEFINE([X86_64], 1, [Define for the 64bit AMD x86-64 architecture.])
116         else
117                 AC_DEFINE([X32], 1, [Define for the 32bit AMD x86-64 architecture.])
118         fi
119         ;;
120 cris|crisv10)
121         arch=crisv10
122         AC_DEFINE([CRISV10], 1, [Define for the CRISv10 architecture.])
123         ;;
124 crisv32)
125         arch=crisv32
126         AC_DEFINE([CRISV32], 1, [Define for the CRISv32 architecture.])
127         ;;
128 tile*)
129         arch=tile
130         AC_DEFINE([TILE], 1, [Define for the Tile architecture])
131         ;;
132 microblaze*)
133         arch=microblaze
134         AC_DEFINE([MICROBLAZE], 1, [Define for the MicroBlaze architecture.])
135         ;;
136 nios2*)
137         arch=nios2
138         AC_DEFINE([NIOS2], 1, [Define for the Nios-II architecture.])
139         ;;
140
141 or1k*)
142         arch=or1k
143         AC_DEFINE([OR1K], 1, [Define for the OpenRISC 1000 architecture.])
144         ;;
145
146 xtensa*)
147         arch=xtensa
148         AC_DEFINE([XTENSA], 1, [Define for the Xtensa architecture])
149         ;;
150
151 *)
152         AC_MSG_RESULT([NO!])
153         AC_MSG_ERROR([architecture $host_cpu is not supported by strace])
154         ;;
155 esac
156 AC_MSG_RESULT($arch)
157
158 test -n "$arch_m32" ||
159         arch_m32=$arch
160 test -n "$arch_mx32" ||
161         arch_mx32=$arch
162 AC_SUBST(arch)
163 AC_SUBST(arch_m32)
164 AC_SUBST(arch_mx32)
165
166 if test "$arch" = mips; then
167         AC_CACHE_CHECK([for _MIPS_SIM], [st_cv__MIPS_SIM],
168                        [AC_COMPUTE_INT([st_cv__MIPS_SIM], [_MIPS_SIM],
169                                        [#include <sgidefs.h>],
170                                        [AC_MSG_ERROR([_MIPS_SIM cannot be determined])])])
171
172         AC_CACHE_CHECK([for MIPS ABI], [st_cv_mips_abi],
173                 [AC_COMPILE_IFELSE(
174                         [AC_LANG_PROGRAM([[#include <sgidefs.h>]],
175                                          [[int i[_MIPS_SIM == _MIPS_SIM_ABI32 ? 1 : - 1];]])],
176                         [st_cv_mips_abi=o32],
177                 [AC_COMPILE_IFELSE(
178                         [AC_LANG_PROGRAM([[#include <sgidefs.h>]],
179                                          [[int i[_MIPS_SIM == _MIPS_SIM_NABI32 ? 1 : - 1];]])],
180                         [st_cv_mips_abi=n32],
181                 [AC_COMPILE_IFELSE(
182                         [AC_LANG_PROGRAM([[#include <sgidefs.h>]],
183                                          [[int i[_MIPS_SIM == _MIPS_SIM_ABI64 ? 1 : - 1];]])],
184                         [st_cv_mips_abi=n64],
185                         [st_cv_mips_abi=unknown])])])])
186
187         case "$st_cv_mips_abi" in
188                 o32) AC_DEFINE([LINUX_MIPSO32], [1], [Define for _MIPS_SIM_ABI32.]);;
189                 n32) AC_DEFINE([LINUX_MIPSN32], [1], [Define for _MIPS_SIM_NABI32.]);;
190                 n64) AC_DEFINE([LINUX_MIPSN64], [1], [Define for _MIPS_SIM_ABI64.]);;
191                 *) AC_MSG_ERROR([Unsupported _MIPS_SIM]);;
192         esac
193 fi
194
195 AC_ARG_ENABLE([arm-oabi],
196               [AS_HELP_STRING([--enable-arm-oabi],
197                               [enable OABI support on ARM EABI])],
198               [], [enable_arm_oabi=no])
199 case "$enable_arm_oabi" in
200         yes) enable_arm_oabi=1 ;;
201         no) enable_arm_oabi=0 ;;
202         *) AC_MSG_ERROR([bad value $enable_arm_oabi for arm-oabi option]) ;;
203 esac
204 AC_DEFINE_UNQUOTED([ENABLE_ARM_OABI], [$enable_arm_oabi],
205                    [Define to 1 if you want OABI support on ARM EABI.])
206
207 gl_WARN_ADD([-Wall])
208 gl_WARN_ADD([-Wwrite-strings])
209 gl_WARN_ADD([-Wsign-compare])
210 AC_ARG_ENABLE([gcc-Werror],
211   [AS_HELP_STRING([--enable-gcc-Werror], [turn on gcc's -Werror option])],
212   [case $enableval in
213      yes) gl_WARN_ADD([-Werror]) ;;
214      no)  ;;
215      *)   AC_MSG_ERROR([bad value $enableval for gcc-Werror option]) ;;
216    esac]
217 )
218 AC_SUBST([WARN_CFLAGS])
219
220 AC_PROG_CPP
221 AC_PROG_INSTALL
222 AC_C_CONST
223 AC_C_BIGENDIAN
224 AC_HEADER_STDC
225 AC_HEADER_STDBOOL
226 AC_HEADER_DIRENT
227 AC_HEADER_STAT
228 AC_CHECK_MEMBERS(m4_normalize([
229         struct stat.st_atim.tv_nsec,
230         struct stat.st_blksize,
231         struct stat.st_blocks,
232         struct stat.st_ctim.tv_nsec,
233         struct stat.st_flags,
234         struct stat.st_fstype,
235         struct stat.st_gen,
236         struct stat.st_mtim.tv_nsec,
237         struct stat.st_rdev
238 ]))
239
240 AC_TYPE_SIGNAL
241 AC_TYPE_UID_T
242 AC_TYPE_MODE_T
243 AC_TYPE_GETGROUPS
244 AC_HEADER_MAJOR
245 AC_CHECK_TYPES([sig_atomic_t],,, [#include <signal.h>])
246 AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id],,,
247 [#include <sys/types.h>
248 #include <sys/socket.h>
249 #include <netinet/in.h>])
250
251 AC_CHECK_FUNCS(m4_normalize([
252         fanotify_mark
253         fopen64
254         fork
255         fputs_unlocked
256         fstatat
257         ftruncate
258         futimens
259         if_indextoname
260         inet_ntop
261         inet_pton
262         pipe2
263         prctl
264         preadv
265         process_vm_readv
266         pwritev
267         sendmmsg
268         sigaction
269         signalfd
270         stpcpy
271         strerror
272         strsignal
273         utimensat
274 ]))
275 AC_CHECK_HEADERS(m4_normalize([
276         asm/cachectl.h
277         asm/sysmips.h
278         bluetooth/bluetooth.h
279         elf.h
280         inttypes.h
281         ioctls.h
282         linux/bsg.h
283         linux/falloc.h
284         linux/filter.h
285         linux/hiddev.h
286         linux/ip_vs.h
287         linux/ipc.h
288         linux/mmtimer.h
289         linux/msg.h
290         linux/perf_event.h
291         linux/seccomp.h
292         linux/securebits.h
293         linux/sem.h
294         linux/shm.h
295         linux/utsname.h
296         mqueue.h
297         netinet/sctp.h
298         scsi/sg.h
299         stropts.h
300         sys/conf.h
301         sys/epoll.h
302         sys/eventfd.h
303         sys/fanotify.h
304         sys/ioctl.h
305         sys/ipc.h
306         sys/msg.h
307         sys/reg.h
308         sys/sem.h
309         sys/shm.h
310         sys/signalfd.h
311         sys/vfs.h
312         sys/xattr.h
313 ]))
314 AC_CHECK_HEADERS([linux/mqueue.h],,, [#include <linux/types.h>])
315 AC_CHECK_HEADERS([linux/icmp.h linux/in6.h linux/netlink.h linux/if_packet.h],
316                  [], [], [#include <stddef.h>
317 #include <sys/socket.h>
318 #include <asm/types.h>])
319 AC_CHECK_HEADERS([asm/sigcontext.h], [], [], [#include <signal.h>])
320 AC_CHECK_TYPES([struct sigcontext],,, [#include <signal.h>])
321 AC_CHECK_HEADERS([netinet/tcp.h netinet/udp.h],,, [#include <netinet/in.h>])
322 AC_CHECK_HEADERS(m4_normalize([
323         linux/netfilter_arp/arp_tables.h
324         linux/netfilter_bridge/ebtables.h
325         linux/netfilter_ipv4/ip_tables.h
326         linux/netfilter_ipv6/ip6_tables.h
327 ]), [], [], [#include <netinet/in.h>
328 #include <net/if.h>])
329
330 AC_CHECK_TYPES([struct mmsghdr],,, [#include <sys/socket.h>])
331 AC_CHECK_MEMBERS([struct msghdr.msg_control],,, [#include <sys/socket.h>])
332
333 AC_CHECK_MEMBERS(m4_normalize([
334         struct stat.st_atime_nsec,
335         struct stat.st_ctime_nsec,
336         struct stat.st_mtime_nsec
337 ]),,, [#include <sys/types.h>
338 #include <asm/stat.h>])
339
340 AC_CHECK_TYPES([struct stat64],,, [#include <sys/types.h>
341 #include <asm/stat.h>])
342 AC_CHECK_TYPES([struct __old_kernel_stat],,, [#include <asm/stat.h>])
343 AC_CHECK_TYPES([struct statfs64],,, [#include <sys/vfs.h>])
344
345 AC_CHECK_TYPES([struct pt_all_user_regs, struct ia64_fpreg, struct ptrace_peeksiginfo_args],,,
346                [#include <sys/ptrace.h>])
347
348 AC_CHECK_MEMBERS([struct utsname.domainname],,, [#include <sys/utsname.h>])
349
350 AC_CHECK_MEMBERS([struct sigevent._sigev_un._pad,
351                   struct sigevent.__pad,
352                   siginfo_t.si_syscall,
353                   siginfo_t.si_timerid,
354                   siginfo_t.si_overrun],,, [#include <signal.h>])
355
356 AC_CHECK_TYPES([struct flock,
357                 struct flock64,
358                 struct __kernel_flock,
359                 struct __kernel_flock64],,, [#include <sys/types.h>
360 #include <linux/fcntl.h>])
361
362 AC_CHECK_TYPES([__kernel_long_t, __kernel_ulong_t],,, [#include <asm/posix_types.h>])
363
364 AC_CHECK_MEMBERS([struct timex.tai],,, [#include <sys/timex.h>])
365
366 AC_CHECK_HEADERS([linux/input.h], [
367         AC_CHECK_MEMBERS([struct input_absinfo.resolution],,, [#include <linux/input.h>])
368 ])
369
370 AC_CHECK_HEADERS([linux/bpf.h], [
371         AC_CACHE_CHECK([whether union bpf_attr.log_buf initialization works],
372                        [st_cv_have_union_bpf_attr_log_buf],
373                 [AC_COMPILE_IFELSE(
374                         [AC_LANG_PROGRAM([[#include <linux/bpf.h>]],
375                                          [[union bpf_attr a = { .log_buf = 0 };]])],
376                         [st_cv_have_union_bpf_attr_log_buf=yes],
377                         [st_cv_have_union_bpf_attr_log_buf=no])])
378         if test $st_cv_have_union_bpf_attr_log_buf = yes; then
379                 AC_DEFINE(HAVE_UNION_BPF_ATTR_LOG_BUF, [1],
380                           [Define to 1 if union bpf_attr.log_buf initialization works])
381         fi
382 ])
383
384 AC_CHECK_DECLS([sys_errlist])
385 AC_CHECK_DECLS(m4_normalize([
386         PTRACE_PEEKUSER,
387         PTRACE_POKEUSER
388 ]),,, [#include <sys/ptrace.h>])
389
390 AC_CHECK_DECLS(m4_normalize([
391         P_PID,
392         P_PPID,
393         P_PGID,
394         P_SID,
395         P_CID,
396         P_UID,
397         P_GID,
398         P_ALL,
399         P_LWPID
400 ]),,, [#include <sys/wait.h>])
401
402 AC_CHECK_DECLS(m4_normalize([
403         LO_FLAGS_READ_ONLY,
404         LO_FLAGS_AUTOCLEAR,
405         LO_FLAGS_PARTSCAN
406 ]),,, [#include <linux/loop.h>])
407
408 AC_CHECK_DECLS(m4_normalize([
409         CTL_KERN,
410         CTL_VM,
411         CTL_NET,
412         CTL_PROC,
413         CTL_FS,
414         CTL_DEBUG,
415         CTL_DEV,
416         CTL_BUS,
417         CTL_ABI,
418         CTL_CPU,
419         CTL_ARLAN,
420         CTL_S390DBF,
421         CTL_SUNRPC,
422         CTL_PM,
423         CTL_FRV,
424         KERN_OSTYPE,
425         KERN_OSRELEASE,
426         KERN_OSREV,
427         KERN_VERSION,
428         KERN_SECUREMASK,
429         KERN_PROF,
430         KERN_NODENAME,
431         KERN_DOMAINNAME,
432         KERN_PANIC,
433         KERN_REALROOTDEV,
434         KERN_SPARC_REBOOT,
435         KERN_CTLALTDEL,
436         KERN_PRINTK,
437         KERN_NAMETRANS,
438         KERN_PPC_HTABRECLAIM,
439         KERN_PPC_ZEROPAGED,
440         KERN_PPC_POWERSAVE_NAP,
441         KERN_MODPROBE,
442         KERN_SG_BIG_BUFF,
443         KERN_ACCT,
444         KERN_PPC_L2CR,
445         KERN_RTSIGNR,
446         KERN_RTSIGMAX,
447         KERN_SHMMAX,
448         KERN_MSGMAX,
449         KERN_MSGMNB,
450         KERN_MSGPOOL,
451         KERN_SYSRQ,
452         KERN_MAX_THREADS,
453         KERN_RANDOM,
454         KERN_SHMALL,
455         KERN_MSGMNI,
456         KERN_SEM,
457         KERN_SPARC_STOP_A,
458         KERN_SHMMNI,
459         KERN_OVERFLOWUID,
460         KERN_OVERFLOWGID,
461         KERN_SHMPATH,
462         KERN_HOTPLUG,
463         KERN_IEEE_EMULATION_WARNINGS,
464         KERN_S390_USER_DEBUG_LOGGING,
465         KERN_CORE_USES_PID,
466         KERN_TAINTED,
467         KERN_CADPID,
468         KERN_PIDMAX,
469         KERN_CORE_PATTERN,
470         KERN_PANIC_ON_OOPS,
471         KERN_HPPA_PWRSW,
472         KERN_HPPA_UNALIGNED,
473         KERN_PRINTK_RATELIMIT,
474         KERN_PRINTK_RATELIMIT_BURST,
475         KERN_PTY,
476         KERN_NGROUPS_MAX,
477         KERN_SPARC_SCONS_PWROFF,
478         KERN_HZ_TIMER,
479         KERN_UNKNOWN_NMI_PANIC,
480         KERN_BOOTLOADER_TYPE,
481         KERN_RANDOMIZE,
482         KERN_SETUID_DUMPABLE,
483         KERN_SPIN_RETRY,
484         KERN_ACPI_VIDEO_FLAGS,
485         KERN_IA64_UNALIGNED,
486         KERN_COMPAT_LOG,
487         KERN_MAX_LOCK_DEPTH,
488         KERN_NMI_WATCHDOG,
489         KERN_PANIC_ON_NMI,
490         NET_CORE,
491         NET_ETHER,
492         NET_802,
493         NET_UNIX,
494         NET_IPV4,
495         NET_IPX,
496         NET_ATALK,
497         NET_NETROM,
498         NET_AX25,
499         NET_BRIDGE,
500         NET_ROSE,
501         NET_IPV6,
502         NET_X25,
503         NET_TR,
504         NET_DECNET,
505         NET_ECONET,
506         NET_SCTP,
507         NET_LLC,
508         NET_NETFILTER,
509         NET_DCCP,
510         NET_IRDA,
511         NET_CORE_WMEM_MAX,
512         NET_CORE_RMEM_MAX,
513         NET_CORE_WMEM_DEFAULT,
514         NET_CORE_RMEM_DEFAULT,
515         NET_CORE_DESTROY_DELAY,
516         NET_CORE_MAX_BACKLOG,
517         NET_CORE_FASTROUTE,
518         NET_CORE_MSG_COST,
519         NET_CORE_MSG_BURST,
520         NET_CORE_OPTMEM_MAX,
521         NET_CORE_HOT_LIST_LENGTH,
522         NET_CORE_DIVERT_VERSION,
523         NET_CORE_NO_CONG_THRESH,
524         NET_CORE_NO_CONG,
525         NET_CORE_LO_CONG,
526         NET_CORE_MOD_CONG,
527         NET_CORE_DEV_WEIGHT,
528         NET_CORE_SOMAXCONN,
529         NET_CORE_BUDGET,
530         NET_CORE_AEVENT_ETIME,
531         NET_CORE_AEVENT_RSEQTH,
532         NET_CORE_WARNINGS,
533         NET_IPV4_FORWARD,
534         NET_IPV4_DYNADDR,
535         NET_IPV4_CONF,
536         NET_IPV4_NEIGH,
537         NET_IPV4_ROUTE,
538         NET_IPV4_FIB_HASH,
539         NET_IPV4_NETFILTER,
540         NET_IPV4_TCP_TIMESTAMPS,
541         NET_IPV4_TCP_WINDOW_SCALING,
542         NET_IPV4_TCP_SACK,
543         NET_IPV4_TCP_RETRANS_COLLAPSE,
544         NET_IPV4_DEFAULT_TTL,
545         NET_IPV4_AUTOCONFIG,
546         NET_IPV4_NO_PMTU_DISC,
547         NET_IPV4_TCP_SYN_RETRIES,
548         NET_IPV4_IPFRAG_HIGH_THRESH,
549         NET_IPV4_IPFRAG_LOW_THRESH,
550         NET_IPV4_IPFRAG_TIME,
551         NET_IPV4_TCP_MAX_KA_PROBES,
552         NET_IPV4_TCP_KEEPALIVE_TIME,
553         NET_IPV4_TCP_KEEPALIVE_PROBES,
554         NET_IPV4_TCP_RETRIES1,
555         NET_IPV4_TCP_RETRIES2,
556         NET_IPV4_TCP_FIN_TIMEOUT,
557         NET_IPV4_IP_MASQ_DEBUG,
558         NET_TCP_SYNCOOKIES,
559         NET_TCP_STDURG,
560         NET_TCP_RFC1337,
561         NET_TCP_SYN_TAILDROP,
562         NET_TCP_MAX_SYN_BACKLOG,
563         NET_IPV4_LOCAL_PORT_RANGE,
564         NET_IPV4_ICMP_ECHO_IGNORE_ALL,
565         NET_IPV4_ICMP_ECHO_IGNORE_BROADCASTS,
566         NET_IPV4_ICMP_SOURCEQUENCH_RATE,
567         NET_IPV4_ICMP_DESTUNREACH_RATE,
568         NET_IPV4_ICMP_TIMEEXCEED_RATE,
569         NET_IPV4_ICMP_PARAMPROB_RATE,
570         NET_IPV4_ICMP_ECHOREPLY_RATE,
571         NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES,
572         NET_IPV4_IGMP_MAX_MEMBERSHIPS,
573         NET_TCP_TW_RECYCLE,
574         NET_IPV4_ALWAYS_DEFRAG,
575         NET_IPV4_TCP_KEEPALIVE_INTVL,
576         NET_IPV4_INET_PEER_THRESHOLD,
577         NET_IPV4_INET_PEER_MINTTL,
578         NET_IPV4_INET_PEER_MAXTTL,
579         NET_IPV4_INET_PEER_GC_MINTIME,
580         NET_IPV4_INET_PEER_GC_MAXTIME,
581         NET_TCP_ORPHAN_RETRIES,
582         NET_TCP_ABORT_ON_OVERFLOW,
583         NET_TCP_SYNACK_RETRIES,
584         NET_TCP_MAX_ORPHANS,
585         NET_TCP_MAX_TW_BUCKETS,
586         NET_TCP_FACK,
587         NET_TCP_REORDERING,
588         NET_TCP_ECN,
589         NET_TCP_DSACK,
590         NET_TCP_MEM,
591         NET_TCP_WMEM,
592         NET_TCP_RMEM,
593         NET_TCP_APP_WIN,
594         NET_TCP_ADV_WIN_SCALE,
595         NET_IPV4_NONLOCAL_BIND,
596         NET_IPV4_ICMP_RATELIMIT,
597         NET_IPV4_ICMP_RATEMASK,
598         NET_TCP_TW_REUSE,
599         NET_TCP_FRTO,
600         NET_TCP_LOW_LATENCY,
601         NET_IPV4_IPFRAG_SECRET_INTERVAL,
602         NET_IPV4_IGMP_MAX_MSF,
603         NET_TCP_NO_METRICS_SAVE,
604         NET_TCP_DEFAULT_WIN_SCALE,
605         NET_TCP_MODERATE_RCVBUF,
606         NET_TCP_TSO_WIN_DIVISOR,
607         NET_TCP_BIC_BETA,
608         NET_IPV4_ICMP_ERRORS_USE_INBOUND_IFADDR,
609         NET_TCP_CONG_CONTROL,
610         NET_TCP_ABC,
611         NET_IPV4_IPFRAG_MAX_DIST,
612         NET_TCP_MTU_PROBING,
613         NET_TCP_BASE_MSS,
614         NET_IPV4_TCP_WORKAROUND_SIGNED_WINDOWS,
615         NET_TCP_DMA_COPYBREAK,
616         NET_TCP_SLOW_START_AFTER_IDLE,
617         NET_CIPSOV4_CACHE_ENABLE,
618         NET_CIPSOV4_CACHE_BUCKET_SIZE,
619         NET_CIPSOV4_RBM_OPTFMT,
620         NET_CIPSOV4_RBM_STRICTVALID,
621         NET_TCP_AVAIL_CONG_CONTROL,
622         NET_TCP_ALLOWED_CONG_CONTROL,
623         NET_TCP_MAX_SSTHRESH,
624         NET_TCP_FRTO_RESPONSE,
625         NET_IPV4_ROUTE_FLUSH,
626         NET_IPV4_ROUTE_MIN_DELAY,
627         NET_IPV4_ROUTE_MAX_DELAY,
628         NET_IPV4_ROUTE_GC_THRESH,
629         NET_IPV4_ROUTE_MAX_SIZE,
630         NET_IPV4_ROUTE_GC_MIN_INTERVAL,
631         NET_IPV4_ROUTE_GC_TIMEOUT,
632         NET_IPV4_ROUTE_GC_INTERVAL,
633         NET_IPV4_ROUTE_REDIRECT_LOAD,
634         NET_IPV4_ROUTE_REDIRECT_NUMBER,
635         NET_IPV4_ROUTE_REDIRECT_SILENCE,
636         NET_IPV4_ROUTE_ERROR_COST,
637         NET_IPV4_ROUTE_ERROR_BURST,
638         NET_IPV4_ROUTE_GC_ELASTICITY,
639         NET_IPV4_ROUTE_MTU_EXPIRES,
640         NET_IPV4_ROUTE_MIN_PMTU,
641         NET_IPV4_ROUTE_MIN_ADVMSS,
642         NET_IPV4_ROUTE_SECRET_INTERVAL,
643         NET_IPV4_ROUTE_GC_MIN_INTERVAL_MS,
644         NET_IPV4_CONF_FORWARDING,
645         NET_IPV4_CONF_MC_FORWARDING,
646         NET_IPV4_CONF_PROXY_ARP,
647         NET_IPV4_CONF_ACCEPT_REDIRECTS,
648         NET_IPV4_CONF_SECURE_REDIRECTS,
649         NET_IPV4_CONF_SEND_REDIRECTS,
650         NET_IPV4_CONF_SHARED_MEDIA,
651         NET_IPV4_CONF_RP_FILTER,
652         NET_IPV4_CONF_ACCEPT_SOURCE_ROUTE,
653         NET_IPV4_CONF_BOOTP_RELAY,
654         NET_IPV4_CONF_LOG_MARTIANS,
655         NET_IPV4_CONF_TAG,
656         NET_IPV4_CONF_ARPFILTER,
657         NET_IPV4_CONF_MEDIUM_ID,
658         NET_IPV4_CONF_NOXFRM,
659         NET_IPV4_CONF_NOPOLICY,
660         NET_IPV4_CONF_FORCE_IGMP_VERSION,
661         NET_IPV4_CONF_ARP_ANNOUNCE,
662         NET_IPV4_CONF_ARP_IGNORE,
663         NET_IPV4_CONF_PROMOTE_SECONDARIES,
664         NET_IPV4_CONF_ARP_ACCEPT,
665         NET_IPV4_CONF_ARP_NOTIFY,
666         NET_IPV6_CONF,
667         NET_IPV6_NEIGH,
668         NET_IPV6_ROUTE,
669         NET_IPV6_ICMP,
670         NET_IPV6_BINDV6ONLY,
671         NET_IPV6_IP6FRAG_HIGH_THRESH,
672         NET_IPV6_IP6FRAG_LOW_THRESH,
673         NET_IPV6_IP6FRAG_TIME,
674         NET_IPV6_IP6FRAG_SECRET_INTERVAL,
675         NET_IPV6_MLD_MAX_MSF,
676         NET_IPV6_ROUTE_FLUSH,
677         NET_IPV6_ROUTE_GC_THRESH,
678         NET_IPV6_ROUTE_MAX_SIZE,
679         NET_IPV6_ROUTE_GC_MIN_INTERVAL,
680         NET_IPV6_ROUTE_GC_TIMEOUT,
681         NET_IPV6_ROUTE_GC_INTERVAL,
682         NET_IPV6_ROUTE_GC_ELASTICITY,
683         NET_IPV6_ROUTE_MTU_EXPIRES,
684         NET_IPV6_ROUTE_MIN_ADVMSS,
685         NET_IPV6_ROUTE_GC_MIN_INTERVAL_MS,
686         NET_UNIX_DESTROY_DELAY,
687         NET_UNIX_DELETE_DELAY,
688         NET_UNIX_MAX_DGRAM_QLEN,
689         VM_OVERCOMMIT_MEMORY,
690         VM_PAGE_CLUSTER,
691         VM_DIRTY_BACKGROUND,
692         VM_DIRTY_RATIO,
693         VM_DIRTY_WB_CS,
694         VM_DIRTY_EXPIRE_CS,
695         VM_NR_PDFLUSH_THREADS,
696         VM_OVERCOMMIT_RATIO,
697         VM_PAGEBUF,
698         VM_HUGETLB_PAGES,
699         VM_SWAPPINESS,
700         VM_LOWMEM_RESERVE_RATIO,
701         VM_MIN_FREE_KBYTES,
702         VM_MAX_MAP_COUNT,
703         VM_LAPTOP_MODE,
704         VM_BLOCK_DUMP,
705         VM_HUGETLB_GROUP,
706         VM_VFS_CACHE_PRESSURE,
707         VM_LEGACY_VA_LAYOUT,
708         VM_SWAP_TOKEN_TIMEOUT
709 ]),,,
710 [#include <sys/types.h>
711 #include <linux/sysctl.h>])
712
713 AC_CHECK_DECLS(m4_normalize([
714         V4L2_FIELD_ANY,
715         V4L2_FIELD_NONE,
716         V4L2_FIELD_TOP,
717         V4L2_FIELD_BOTTOM,
718         V4L2_FIELD_INTERLACED,
719         V4L2_FIELD_SEQ_TB,
720         V4L2_FIELD_SEQ_BT,
721         V4L2_FIELD_ALTERNATE,
722         V4L2_FIELD_INTERLACED_TB,
723         V4L2_FIELD_INTERLACED_BT,
724         V4L2_BUF_TYPE_VIDEO_CAPTURE,
725         V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE,
726         V4L2_BUF_TYPE_VIDEO_OUTPUT,
727         V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE,
728         V4L2_BUF_TYPE_VIDEO_OVERLAY,
729         V4L2_BUF_TYPE_VBI_CAPTURE,
730         V4L2_BUF_TYPE_VBI_OUTPUT,
731         V4L2_BUF_TYPE_SLICED_VBI_CAPTURE,
732         V4L2_BUF_TYPE_SLICED_VBI_OUTPUT,
733         V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY,
734         V4L2_TUNER_RADIO,
735         V4L2_TUNER_ANALOG_TV,
736         V4L2_TUNER_DIGITAL_TV,
737         V4L2_MEMORY_MMAP,
738         V4L2_MEMORY_USERPTR,
739         V4L2_MEMORY_OVERLAY,
740         V4L2_MEMORY_DMABUF,
741         V4L2_COLORSPACE_SMPTE170M,
742         V4L2_COLORSPACE_SMPTE240M,
743         V4L2_COLORSPACE_REC709,
744         V4L2_COLORSPACE_BT878,
745         V4L2_COLORSPACE_470_SYSTEM_M,
746         V4L2_COLORSPACE_470_SYSTEM_BG,
747         V4L2_COLORSPACE_JPEG,
748         V4L2_COLORSPACE_SRGB,
749         V4L2_PRIORITY_UNSET,
750         V4L2_PRIORITY_BACKGROUND,
751         V4L2_PRIORITY_INTERACTIVE,
752         V4L2_PRIORITY_RECORD,
753         V4L2_FRMSIZE_TYPE_DISCRETE,
754         V4L2_FRMSIZE_TYPE_CONTINUOUS,
755         V4L2_FRMSIZE_TYPE_STEPWISE,
756         V4L2_FRMIVAL_TYPE_DISCRETE,
757         V4L2_FRMIVAL_TYPE_CONTINUOUS,
758         V4L2_FRMIVAL_TYPE_STEPWISE,
759         V4L2_CTRL_TYPE_INTEGER,
760         V4L2_CTRL_TYPE_BOOLEAN,
761         V4L2_CTRL_TYPE_MENU,
762         V4L2_CTRL_TYPE_BUTTON,
763         V4L2_CTRL_TYPE_INTEGER64,
764         V4L2_CTRL_TYPE_CTRL_CLASS,
765         V4L2_CTRL_TYPE_STRING,
766         V4L2_CTRL_TYPE_BITMASK,
767         V4L2_CTRL_TYPE_INTEGER_MENU
768 ]),,, [#include <linux/videodev2.h>])
769
770 AC_CACHE_CHECK([for BLKGETSIZE64], [ac_cv_have_blkgetsize64],
771         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
772 #include <stdlib.h>
773 #include <linux/fs.h>], [return !BLKGETSIZE64;])],
774                            [ac_cv_have_blkgetsize64=yes], [ac_cv_have_blkgetsize64=no])]
775         if test $ac_cv_have_blkgetsize64 = yes; then
776                 AC_DEFINE([HAVE_BLKGETSIZE64], [1], [Define to 1 if you have BLKGETSIZE64.])
777         fi)
778
779 AC_CHECK_SIZEOF([long])
780 AC_CHECK_SIZEOF([long long])
781 AC_CHECK_SIZEOF([off_t],,[#include <sys/types.h>])
782 AC_CHECK_SIZEOF([struct i64_i32],,[struct i64_i32 {long long i64; int i32;};])
783
784 AC_CACHE_CHECK([for SIGRTMIN], [st_cv_SIGRTMIN],
785                [[st_cv_SIGRTMIN="$(echo SIGRTMIN |
786                         $CPP $CPPFLAGS -P -imacros asm/signal.h - |
787                         grep '^[0-9]')"
788                  test -n "$st_cv_SIGRTMIN" || st_cv_SIGRTMIN=no]])
789 if test "x$st_cv_SIGRTMIN" != xno; then
790         AC_DEFINE_UNQUOTED([ASM_SIGRTMIN], [$st_cv_SIGRTMIN],
791                            [SIGRTMIN defined in <asm/signal.h>])
792 fi
793 AC_CACHE_CHECK([for SA_RESTORER], [st_cv_SA_RESTORER],
794                [st_cv_SA_RESTORER="$(echo SA_RESTORER |
795                         $CPP $CPPFLAGS -P -imacros asm/signal.h - |
796                         grep ^0x)"
797                 test -n "$st_cv_SA_RESTORER" || st_cv_SA_RESTORER=no])
798 if test "x$st_cv_SA_RESTORER" != xno; then
799         AC_DEFINE_UNQUOTED([ASM_SA_RESTORER], [$st_cv_SA_RESTORER],
800                            [SA_RESTORER defined in <asm/signal.h>])
801 fi
802
803 AC_CACHE_CHECK([for __builtin_popcount], [st_cv_have___builtin_popcount],
804                [AC_LINK_IFELSE([AC_LANG_PROGRAM([], [__builtin_popcount(0)])],
805                                [st_cv_have___builtin_popcount=yes],
806                                [st_cv_have___builtin_popcount=no])])
807 if test "x$st_cv_have___builtin_popcount" = xyes; then
808         AC_DEFINE([HAVE___BUILTIN_POPCOUNT], [1],
809                   [Define to 1 if the system provides __builtin_popcount function])
810 fi
811
812 AC_CHECK_LIB([dl], [dladdr], [dl_LIBS='-ldl'], [dl_LIBS=])
813 if test "x$ac_cv_lib_dl_dladdr" = xyes; then
814         AC_DEFINE([HAVE_DLADDR], [1], [Define to 1 if the system provides dladdr])
815 fi
816 AC_SUBST(dl_LIBS)
817
818 AC_PATH_PROG([PERL], [perl])
819
820 dnl stack trace with libunwind
821 libunwind_CPPFLAGS=
822 libunwind_LDFLAGS=
823 libunwind_LIBS=
824 AC_ARG_WITH([libunwind],
825             [AS_HELP_STRING([--with-libunwind],
826                             [use libunwind to implement stack tracing support])],
827             [case "${withval}" in
828              yes|no|check) ;;
829              *) with_libunwind=yes
830                 libunwind_CPPFLAGS="-I${withval}/include"
831                 libunwind_LDFLAGS="-L${withval}/lib" ;;
832              esac],
833             [with_libunwind=check]
834 )
835
836 use_libunwind=no
837 AS_IF([test "x$with_libunwind" != xno],
838       [saved_CPPFLAGS="$CPPFLAGS"
839        CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
840
841        AC_CHECK_HEADERS([libunwind-ptrace.h],
842          [saved_LDFLAGS="$LDFLAGS"
843           LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
844
845           AC_CHECK_LIB([unwind], [backtrace],
846             [libunwind_LIBS="-lunwind $libunwind_LIBS"
847
848              AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
849              saved_LIBS="$LIBS"
850              LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
851
852              AC_LINK_IFELSE(
853                [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
854                                 [[return !unw_create_addr_space(0, 0)]])
855                ],
856                [AC_MSG_RESULT([yes])
857                 libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
858
859                 AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
860                   [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
861                    use_libunwind=yes
862                   ],
863                   [if test "x$with_libunwind" != xcheck; then
864                      AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
865                    fi
866                   ],
867                   [$libunwind_LIBS]
868                 )
869                ],
870                [AC_MSG_RESULT([no])
871                 if test "x$with_libunwind" != xcheck; then
872                   AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
873                 fi
874                ]
875              )
876
877              LIBS="$saved_LIBS"
878             ],
879             [if test "x$with_libunwind" != xcheck; then
880                AC_MSG_FAILURE([failed to find libunwind])
881              fi
882             ],
883             [$libunwind_LIBS]
884           )
885
886           LDFLAGS="$saved_LDFLAGS"
887          ],
888          [if test "x$with_libunwind" != xcheck; then
889             AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
890           fi
891          ]
892        )
893
894        CPPFLAGS="$saved_CPPFLAGS"
895       ]
896 )
897
898 dnl enable libunwind
899 AC_MSG_CHECKING([whether to enable stack tracing support using libunwind])
900 if test "x$use_libunwind" = xyes; then
901         AC_DEFINE([USE_LIBUNWIND], 1, [Compile stack tracing functionality])
902         AC_SUBST(libunwind_LIBS)
903         AC_SUBST(libunwind_LDFLAGS)
904         AC_SUBST(libunwind_CPPFLAGS)
905 fi
906 AM_CONDITIONAL([USE_LIBUNWIND], [test "x$use_libunwind" = xyes])
907 AC_MSG_RESULT([$use_libunwind])
908
909 if test "$arch" = mips && test "$no_create" != yes; then
910         mkdir -p linux/mips
911         if $srcdir/linux/mips/genstub.sh linux/mips; then
912                 AC_MSG_RESULT([Generated MIPS syscallent stubs])
913         else
914                 AC_MSG_FAILURE([Failed to generate syscallent stubs])
915         fi
916 fi
917
918 st_MPERS([m32], [aarch64|powerpc64|sparc64|tile|x32|x86_64])
919 st_MPERS([mx32], [x86_64])
920
921 AC_CONFIG_FILES([Makefile tests/Makefile tests-m32/Makefile tests-mx32/Makefile])
922 AC_OUTPUT