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