xref: /aosp_15_r20/external/ltp/configure.ac (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1AC_PREREQ(2.64)
2AC_INIT([ltp], [LTP_VERSION], [[email protected]])
3AC_CONFIG_AUX_DIR([.])
4AM_INIT_AUTOMAKE
5AC_CONFIG_HEADERS([include/config.h])
6AC_CONFIG_MACRO_DIR([m4])
7AC_CONFIG_FILES([ \
8    include/mk/config.mk \
9    include/mk/config-openposix.mk \
10    include/mk/features.mk \
11    lib/ltp.pc \
12    m4/Makefile \
13])
14
15AC_ARG_VAR(HOSTCC, [The C compiler on the host])
16
17AM_MAINTAINER_MODE([enable])
18
19AC_CANONICAL_HOST
20
21AC_PROG_CC
22# <= autoconf 2.61 doesn't have AC_PROG_AR, but 2.63 has it. Not sure about
23# 2.62.
24AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)])
25AC_PROG_AR
26AC_PROG_RANLIB
27AC_DEFUN([AC_PROG_STRIP], [AC_CHECK_TOOL(STRIP, strip, :)])
28AC_PROG_STRIP
29AC_PROG_YACC
30
31m4_ifndef([PKG_CHECK_EXISTS],
32	[m4_fatal([must install pkg-config or pkgconfig and pkg.m4 macro (usual dependency), see INSTALL])])
33
34AC_PREFIX_DEFAULT(/opt/ltp)
35
36AC_CHECK_DECLS([IFLA_NET_NS_PID],,,[#include <linux/if_link.h>])
37AC_CHECK_DECLS([MADV_MERGEABLE],,,[#include <sys/mman.h>])
38AC_CHECK_DECLS([NFTA_CHAIN_ID, NFTA_VERDICT_CHAIN_ID],,,[#include <linux/netfilter/nf_tables.h>])
39AC_CHECK_DECLS([PR_CAPBSET_DROP, PR_CAPBSET_READ],,,[#include <sys/prctl.h>])
40AC_CHECK_DECLS([SEM_STAT_ANY],,,[#include <sys/sem.h>])
41
42AC_CHECK_HEADERS_ONCE([ \
43    asm/ldt.h \
44    asm/prctl.h \
45    cpuid.h \
46    emmintrin.h \
47    ifaddrs.h \
48    keyutils.h \
49    linux/can.h \
50    linux/cgroupstats.h \
51    linux/cryptouser.h \
52    linux/close_range.h \
53    linux/dccp.h \
54    linux/fs.h \
55    linux/futex.h \
56    linux/genetlink.h \
57    linux/if_alg.h \
58    linux/if_ether.h \
59    linux/if_packet.h \
60    linux/io_uring.h \
61    linux/ioprio.h \
62    linux/keyctl.h \
63    linux/mempolicy.h \
64    linux/module.h \
65    linux/mount.h \
66    linux/netlink.h \
67    linux/openat2.h \
68    linux/seccomp.h \
69    linux/securebits.h \
70    linux/tls.h \
71    linux/tty.h \
72    linux/types.h \
73    linux/userfaultfd.h \
74    netinet/sctp.h \
75    pthread.h \
76    sys/epoll.h \
77    sys/fanotify.h \
78    sys/inotify.h \
79    sys/pidfd.h
80    sys/prctl.h \
81    sys/random.h \
82    sys/shm.h \
83    sys/timerfd.h \
84    sys/ustat.h \
85    sys/utsname.h \
86    sys/xattr.h \
87    xfs/xqm.h \
88])
89AC_CHECK_HEADERS(fts.h, [have_fts=1])
90AC_SUBST(HAVE_FTS_H, $have_fts)
91AC_CHECK_HEADERS(linux/vm_sockets.h, [], [], [#include <sys/socket.h>])
92
93AC_CHECK_FUNCS_ONCE([ \
94    clone3 \
95    close_range \
96    copy_file_range \
97    epoll_pwait \
98    epoll_pwait2 \
99    execveat \
100    faccessat2 \
101    fallocate \
102    fsconfig \
103    fsmount \
104    fsopen \
105    fspick \
106    fstatat \
107    getauxval \
108    getcontext \
109    getcpu \
110    getdents \
111    getdents64 \
112    io_pgetevents \
113    io_uring_setup \
114    io_uring_register \
115    io_uring_enter \
116    kcmp \
117    mallinfo \
118    mallinfo2 \
119    mallopt \
120    modify_ldt \
121    mount_setattr \
122    move_mount \
123    name_to_handle_at \
124    open_tree \
125    openat \
126    openat2 \
127    pidfd_getfd \
128    pidfd_open \
129    pidfd_send_signal \
130    pkey_mprotect \
131    preadv \
132    preadv2 \
133    profil \
134    pwritev \
135    pwritev2 \
136    quotactl_fd \
137    rand_r \
138    recvmmsg \
139    renameat2 \
140    sched_getcpu \
141    sendmmsg \
142    sethostid \
143    setns \
144    sigpending \
145    splice \
146    statx \
147    stime \
148    sync_file_range \
149    syncfs \
150    tee \
151    timerfd_create \
152    timerfd_gettime \
153    timerfd_settime \
154    unshare \
155    ustat \
156    vmsplice \
157])
158AC_CHECK_FUNCS(mkdtemp,[],AC_MSG_ERROR(mkdtemp() not found!))
159
160AC_CHECK_MEMBERS([struct fanotify_event_info_fid.fsid.__val],,,[#include <sys/fanotify.h>])
161AC_CHECK_MEMBERS([struct perf_event_mmap_page.aux_head],,,[#include <linux/perf_event.h>])
162AC_CHECK_MEMBERS([struct sigaction.sa_sigaction],[],[],[#include <signal.h>])
163AC_CHECK_MEMBERS([struct statx.stx_mnt_id, struct statx.stx_dio_mem_align],,,[
164#define _GNU_SOURCE
165#include <sys/stat.h>
166])
167
168AC_CHECK_MEMBERS([struct utsname.domainname],,,[
169#define _GNU_SOURCE
170#include <sys/utsname.h>
171])
172
173AC_CHECK_TYPES([enum kcmp_type],,,[#include <linux/kcmp.h>])
174AC_CHECK_TYPES([struct acct_v3],,,[#include <sys/acct.h>])
175AC_CHECK_TYPES([struct af_alg_iv, struct sockaddr_alg],,,[# include <linux/if_alg.h>])
176AC_CHECK_TYPES([struct clone_args],,,[#include <sched.h>])
177AC_CHECK_TYPES([struct fanotify_event_info_fid, struct fanotify_event_info_error,
178		struct fanotify_event_info_header, struct fanotify_event_info_pidfd],,,[#include <sys/fanotify.h>])
179AC_CHECK_TYPES([struct file_dedupe_range],,,[#include <linux/fs.h>])
180
181AC_CHECK_TYPES([struct file_handle],,,[
182#define _GNU_SOURCE
183#include <fcntl.h>
184])
185
186AC_CHECK_TYPES([struct fs_quota_statv],,,[#include <xfs/xqm.h>])
187AC_CHECK_TYPES([struct if_nextdqblk],,,[#include <linux/quota.h>])
188AC_CHECK_TYPES([struct iovec],,,[#include <sys/uio.h>])
189AC_CHECK_TYPES([struct ipc64_perm],,,[#include <sys/ipcbuf.h>])
190AC_CHECK_TYPES([struct loop_config],,,[#include <linux/loop.h>])
191
192AC_CHECK_TYPES([struct mmsghdr],,,[
193#define _GNU_SOURCE
194#include <sys/types.h>
195#include <sys/socket.h>
196])
197
198AC_CHECK_TYPES([struct msqid64_ds],,,[#include <sys/msgbuf.h>])
199
200AC_CHECK_TYPES([struct rlimit64],,,[
201#define _LARGEFILE64_SOURCE
202#include <sys/resource.h>
203])
204
205AC_CHECK_TYPES([struct semun],,,[#include <sys/sem.h>])
206AC_CHECK_TYPES([struct semid64_ds],,,[#include <sys/sem.h>])
207AC_CHECK_TYPES([struct shmid64_ds],,,[#include <sys/shmbuf.h>])
208
209AC_CHECK_TYPES([struct statx, struct statx_timestamp],,,[
210#define _GNU_SOURCE
211#include <sys/stat.h>
212])
213
214AC_CHECK_TYPES([struct termio],,,[#include <sys/ioctl.h>])
215AC_CHECK_TYPES([struct tpacket_req3],,,[# include <linux/if_packet.h>])
216AC_CHECK_TYPES([struct user_desc, struct modify_ldt_ldt_s],[],[],[#include <asm/ldt.h>])
217
218AC_CHECK_TYPES([struct xt_entry_match, struct xt_entry_target],,,[
219#include <sys/types.h>
220#include <netinet/in.h>
221#include <net/if.h>
222#include <limits.h>
223#include <linux/netfilter_ipv4/ip_tables.h>
224])
225
226AC_CHECK_TYPES([struct __kernel_itimerspec],,,[#include <linux/time_types.h>])
227AC_CHECK_TYPES([struct __kernel_old_timespec],,,[#include <linux/time_types.h>])
228AC_CHECK_TYPES([struct __kernel_old_timeval],,,[#include <linux/time_types.h>])
229AC_CHECK_TYPES([struct __kernel_old_itimerval],,,[#include <linux/time_types.h>])
230AC_CHECK_TYPES([struct __kernel_old_itimerspec],,,[#include <linux/time_types.h>])
231AC_CHECK_TYPES([struct __kernel_timespec],,,[#include <linux/time_types.h>])
232
233AC_CHECK_TYPES([struct __kernel_timex],,,[#include <sys/timex.h>])
234AC_CHECK_TYPES([struct __kernel_timex_timeval],,,[#include <sys/timex.h>])
235
236AC_CHECK_TYPES([struct __kernel_old_timeval, struct __kernel_old_timespec, struct __kernel_timespec,
237                struct __kernel_old_itimerspec, struct __kernel_itimerspec,
238                struct __kernel_old_itimerval],,,[#include <sys/socket.h>])
239
240AC_CHECK_TYPES([struct futex_waitv],,,[#include <linux/futex.h>])
241AC_CHECK_TYPES([struct mount_attr],,,[
242#ifdef HAVE_MOUNT_SETATTR
243# include <sys/mount.h>
244#elif HAVE_LINUX_MOUNT_H
245# include <linux/mount.h>
246#endif
247])
248
249# Tools knobs
250
251# Bash
252AC_ARG_WITH([bash],
253  [AS_HELP_STRING([--with-bash],
254    [have the Bourne Again Shell interpreter])],
255  [with_bash=$withval],
256  [with_bash=no]
257)
258if test "x$with_bash" = xyes; then
259    AC_SUBST([WITH_BASH],["yes"])
260else
261    AC_SUBST([WITH_BASH],["no"])
262fi
263
264# metadata
265AC_ARG_ENABLE([metadata],
266  [AS_HELP_STRING([--disable-metadata],
267	[Disable metadata generation (both HTML and PDF, default no)])],
268  [], [enable_metadata=yes]
269)
270AC_ARG_ENABLE([metadata_html],
271  [AS_HELP_STRING([--disable-metadata-html],
272	[Disable metadata HTML generation (default no)])],
273  [], [enable_metadata_html=yes]
274)
275
276AC_ARG_ENABLE([metadata_pdf],
277  [AS_HELP_STRING([--enable-metadata-pdf],
278	[Enable metadata PDF generation (default no)])],
279  [], [enable_metadata_pdf=no]
280)
281
282AC_ARG_WITH([metadata_generator],
283  [AS_HELP_STRING([--with-metadata-generator=asciidoc|asciidoctor],
284	[Specify metadata generator to use (default autodetect)])],
285  [with_metadata_generator=$withval],
286  [with_metadata_generator=detect]
287)
288
289LTP_DOCPARSE
290
291# Expect
292AC_ARG_WITH([expect],
293  [AS_HELP_STRING([--with-expect],
294    [have the Tcl/expect library])],
295  [with_expect=$withval],
296  [with_expect=no]
297)
298if test "x$with_expect" = xyes; then
299    AC_SUBST([WITH_EXPECT],["yes"])
300else
301    AC_SUBST([WITH_EXPECT],["no"])
302fi
303
304# Numa
305AC_ARG_WITH([numa],
306  AS_HELP_STRING([--without-numa],
307    [without numa support]),
308  [with_numa=$withval],
309  [with_numa=yes]
310)
311
312# Perl
313AC_ARG_WITH([perl],
314  [AS_HELP_STRING([--with-perl],
315    [have a perl interpreter])],
316  [with_perl=$withval],
317  [with_perl=no]
318)
319if test "x$with_perl" = xyes; then
320    AC_SUBST([WITH_PERL],["yes"])
321else
322    AC_SUBST([WITH_PERL],["no"])
323fi
324
325# Python
326AC_ARG_WITH([python],
327  [AS_HELP_STRING([--with-python],
328    [have a python interpreter])],
329  [with_python=$withval],
330  [with_python=no]
331)
332if test "x$with_python" = xyes; then
333    AC_SUBST([WITH_PYTHON],["yes"])
334else
335    AC_SUBST([WITH_PYTHON],["no"])
336fi
337
338# TI RPC
339AC_ARG_WITH([tirpc],
340  AS_HELP_STRING([--without-tirpc],
341    [without libtirpc support]),
342  [with_tirpc=$withval],
343  [with_tirpc=yes]
344)
345# END tools knobs
346
347# Testsuites knobs
348
349AC_ARG_WITH([open-posix-testsuite],
350  [AS_HELP_STRING([--with-open-posix-testsuite],
351    [compile and install the open posix testsuite])],
352  [with_open_posix_testsuite=$withval],
353  [with_open_posix_testsuite=no]
354)
355
356# Allow setting the directoy, where the open posix testsuite is installed to.
357# If nothing is defined, we have to pass our default value to submake
358AC_ARG_WITH([open-posix-testdir],
359  [AS_HELP_STRING([--with-open-posix-testdir=<dir>],
360    [set the directory, where the open posix testsuite will be installed under prefix])],
361  [],
362  [ac_configure_args="$ac_configure_args --with-open-posix-testdir=testcases/open_posix_testsuite"]
363)
364
365if test "x$with_open_posix_testsuite" = xyes; then
366    AC_SUBST([WITH_OPEN_POSIX_TESTSUITE],["yes"])
367    AC_CONFIG_SUBDIRS([testcases/open_posix_testsuite])
368else
369    AC_SUBST([WITH_OPEN_POSIX_TESTSUITE],["no"])
370fi
371
372# TODO: testcases/realtime requires bash and python.
373AC_ARG_WITH([realtime-testsuite],
374  [AS_HELP_STRING([--with-realtime-testsuite],
375    [compile and install the realtime testsuite])],
376  [with_realtime_testsuite=$withval],
377  [with_realtime_testsuite=no]
378)
379
380if test "x$with_realtime_testsuite" = xyes; then
381    AC_SUBST([WITH_REALTIME_TESTSUITE],["yes"])
382    # Run configure on testcases/realtime as well.
383    AC_CONFIG_SUBDIRS([testcases/realtime])
384else
385    AC_SUBST([WITH_REALTIME_TESTSUITE],["no"])
386fi
387
388AC_CONFIG_COMMANDS([syscalls.h], [cd ${ac_top_srcdir}/include/lapi/syscalls; ./regen.sh])
389
390# custom functions
391# NOTE: don't create custom functions for simple checks, put them into this file
392LTP_CHECK_ACL_SUPPORT
393LTP_CHECK_ATOMIC_MEMORY_MODEL
394LTP_CHECK_BUILTIN_CLEAR_CACHE
395LTP_CHECK_CAPABILITY_SUPPORT
396LTP_CHECK_CC_WARN_OLDSTYLE
397LTP_CHECK_CRYPTO
398LTP_CHECK_FORTIFY_SOURCE
399LTP_CHECK_KERNEL_DEVEL
400LTP_CHECK_KEYUTILS_SUPPORT
401LTP_CHECK_LIBMNL
402LTP_CHECK_LINUXRANDOM
403LTP_CHECK_SELINUX
404LTP_CHECK_SYNC_ADD_AND_FETCH
405LTP_CHECK_SYSCALL_EVENTFD
406LTP_CHECK_SYSCALL_FCNTL
407LTP_CHECK_FSVERITY
408
409AX_CHECK_COMPILE_FLAG([-no-pie], [LTP_CFLAGS_NOPIE=1])
410AX_CHECK_COMPILE_FLAG([-ffixed-ebp], [LTP_CFLAGS_FFIXED_EBP=1])
411AC_SUBST([LTP_CFLAGS_NOPIE])
412AC_SUBST([LTP_CFLAGS_FFIXED_EBP])
413
414if test "x$with_numa" = xyes; then
415	LTP_CHECK_SYSCALL_NUMA
416	numa_error_msg="test requires libnuma development packages with LIBNUMA_API_VERSION >= 2"
417else
418	numa_error_msg="NUMA support was disabled during build"
419fi
420AC_DEFINE_UNQUOTED(NUMA_ERROR_MSG, ["$numa_error_msg"], [Error message when no NUMA support])
421
422
423LTP_CHECK_SYSCALL_SIGNALFD
424LTP_CHECK_SYSCALL_UTIMENSAT
425LTP_CHECK_TASKSTATS
426test "x$with_tirpc" = xyes && LTP_CHECK_TIRPC
427LTP_DETECT_HOST_CPU
428
429AC_MSG_CHECKING([whether linker can handle KVM payloads])
430ltp_backup_ldflags="$LDFLAGS"
431ltp_backup_flags="$[]_AC_LANG_PREFIX[]FLAGS"
432LDFLAGS="-T ${srcdir}/testcases/kernel/kvm/linker/${HOST_CPU}.lds"
433_AC_LANG_PREFIX[]FLAGS=
434AC_LINK_IFELSE([AC_LANG_PROGRAM()],
435  [
436    AC_MSG_RESULT([yes])
437    AC_SUBST([WITH_KVM_TESTSUITE],["yes"])
438  ],
439  [
440    AC_MSG_RESULT([no])
441    AC_SUBST([WITH_KVM_TESTSUITE],["no"])
442  ])
443_AC_LANG_PREFIX[]FLAGS="$ltp_backup_flags"
444LDFLAGS="$ltp_backup_ldflags"
445
446AC_OUTPUT
447
448cat << EOF
449
450TESTSUITES
451open posix testsuite: ${with_open_posix_testsuite:-no}
452realtime testsuite: ${with_realtime_testsuite:-no}
453
454LIBRARIES
455keyutils: ${have_keyutils:-yes}
456libacl: ${have_libacl:-no}
457libaio: ${have_libaio:-no} (aio: ${have_aio:-no})
458libcap: $cap_libs (newer: ${has_newer_libcap:-no})
459libcrypto: ${have_libcrypto:-no} (sha: ${have_sha:-no})
460libmnl: ${have_libmnl:-yes}
461libnuma: ${have_libnuma:-no} (headers: ${have_numa_headers:-yes}, v2 headers: ${have_numa_headers_v2:-no})
462libtirpc: ${have_libtirpc:-no}
463glibc SUN-RPC: ${have_rpc_glibc:-no}
464
465METADATA
466metadata generator: $with_metadata_generator
467HTML metadata: $with_metadata_html
468PDF metadata: $with_metadata_pdf
469EOF
470