| AC_PREREQ(2.64) |
| AC_INIT([ltp], [LTP_VERSION], [ltp@lists.linux.it]) |
| AC_CONFIG_AUX_DIR([.]) |
| AM_INIT_AUTOMAKE |
| AC_CONFIG_HEADERS([include/config.h]) |
| AC_CONFIG_MACRO_DIR([m4]) |
| AC_CONFIG_FILES([ \ |
| include/mk/config.mk \ |
| include/mk/config-openposix.mk \ |
| include/mk/features.mk \ |
| lib/ltp.pc \ |
| m4/Makefile \ |
| ]) |
| |
| AC_ARG_VAR(HOSTCC, [The C compiler on the host]) |
| |
| AM_MAINTAINER_MODE([enable]) |
| |
| AC_CANONICAL_HOST |
| |
| AC_PROG_CC |
| # <= autoconf 2.61 doesn't have AC_PROG_AR, but 2.63 has it. Not sure about |
| # 2.62. |
| AC_DEFUN([AC_PROG_AR], [AC_CHECK_TOOL(AR, ar, :)]) |
| AC_PROG_AR |
| AC_PROG_RANLIB |
| AC_DEFUN([AC_PROG_STRIP], [AC_CHECK_TOOL(STRIP, strip, :)]) |
| AC_PROG_STRIP |
| AC_PROG_YACC |
| |
| m4_ifndef([PKG_CHECK_EXISTS], |
| [m4_fatal([must install pkg-config or pkgconfig and pkg.m4 macro (usual dependency), see INSTALL])]) |
| |
| AC_PREFIX_DEFAULT(/opt/ltp) |
| |
| AC_CHECK_DECLS([IFLA_NET_NS_PID],,,[#include <linux/if_link.h>]) |
| AC_CHECK_DECLS([MADV_MERGEABLE],,,[#include <sys/mman.h>]) |
| AC_CHECK_DECLS([NFTA_CHAIN_ID, NFTA_VERDICT_CHAIN_ID],,,[#include <linux/netfilter/nf_tables.h>]) |
| AC_CHECK_DECLS([PR_CAPBSET_DROP, PR_CAPBSET_READ],,,[#include <sys/prctl.h>]) |
| AC_CHECK_DECLS([SEM_STAT_ANY],,,[#include <sys/sem.h>]) |
| |
| AC_CHECK_HEADERS_ONCE([ \ |
| asm/ldt.h \ |
| asm/prctl.h \ |
| cpuid.h \ |
| emmintrin.h \ |
| ifaddrs.h \ |
| keyutils.h \ |
| linux/can.h \ |
| linux/cgroupstats.h \ |
| linux/cryptouser.h \ |
| linux/close_range.h \ |
| linux/dccp.h \ |
| linux/futex.h \ |
| linux/genetlink.h \ |
| linux/if_alg.h \ |
| linux/if_ether.h \ |
| linux/if_packet.h \ |
| linux/io_uring.h \ |
| linux/ioprio.h \ |
| linux/keyctl.h \ |
| linux/landlock.h \ |
| linux/mempolicy.h \ |
| linux/module.h \ |
| linux/mount.h \ |
| linux/netlink.h \ |
| linux/openat2.h \ |
| linux/seccomp.h \ |
| linux/securebits.h \ |
| linux/tls.h \ |
| linux/tty.h \ |
| linux/types.h \ |
| linux/userfaultfd.h \ |
| netinet/sctp.h \ |
| pthread.h \ |
| sys/epoll.h \ |
| sys/fanotify.h \ |
| sys/inotify.h \ |
| sys/pidfd.h |
| sys/prctl.h \ |
| sys/random.h \ |
| sys/shm.h \ |
| sys/timerfd.h \ |
| sys/ustat.h \ |
| sys/utsname.h \ |
| sys/xattr.h \ |
| xfs/xqm.h \ |
| ]) |
| AC_CHECK_HEADERS(fts.h, [have_fts=1]) |
| AC_SUBST(HAVE_FTS_H, $have_fts) |
| AC_CHECK_HEADERS(linux/vm_sockets.h, [], [], [#include <sys/socket.h>]) |
| |
| AC_CHECK_FUNCS_ONCE([ \ |
| cachestat \ |
| clone3 \ |
| close_range \ |
| copy_file_range \ |
| epoll_pwait \ |
| epoll_pwait2 \ |
| execveat \ |
| faccessat2 \ |
| fallocate \ |
| fsconfig \ |
| fsmount \ |
| fsopen \ |
| fspick \ |
| fstatat \ |
| getauxval \ |
| getcontext \ |
| getcpu \ |
| getdents \ |
| getdents64 \ |
| io_pgetevents \ |
| io_uring_setup \ |
| io_uring_register \ |
| io_uring_enter \ |
| kcmp \ |
| mallinfo \ |
| mallinfo2 \ |
| mallopt \ |
| modify_ldt \ |
| mount_setattr \ |
| move_mount \ |
| name_to_handle_at \ |
| open_tree \ |
| openat \ |
| openat2 \ |
| pidfd_getfd \ |
| pidfd_open \ |
| pidfd_send_signal \ |
| pkey_mprotect \ |
| preadv \ |
| preadv2 \ |
| profil \ |
| pwritev \ |
| pwritev2 \ |
| quotactl_fd \ |
| rand_r \ |
| recvmmsg \ |
| renameat2 \ |
| sched_getcpu \ |
| sendmmsg \ |
| sethostid \ |
| setns \ |
| sigpending \ |
| splice \ |
| statx \ |
| stime \ |
| sync_file_range \ |
| syncfs \ |
| tee \ |
| timerfd_create \ |
| timerfd_gettime \ |
| timerfd_settime \ |
| unshare \ |
| ustat \ |
| vmsplice \ |
| ]) |
| AC_CHECK_FUNCS(mkdtemp,[],AC_MSG_ERROR(mkdtemp() not found!)) |
| |
| AC_CHECK_MEMBERS([struct fanotify_event_info_fid.fsid.__val],,,[#include <sys/fanotify.h>]) |
| AC_CHECK_MEMBERS([struct landlock_ruleset_attr.handled_access_net],,,[#include <linux/landlock.h>]) |
| AC_CHECK_MEMBERS([struct perf_event_mmap_page.aux_head],,,[#include <linux/perf_event.h>]) |
| AC_CHECK_MEMBERS([struct sigaction.sa_sigaction],[],[],[#include <signal.h>]) |
| AC_CHECK_MEMBERS([struct statx.stx_mnt_id, struct statx.stx_dio_mem_align],,,[ |
| #define _GNU_SOURCE |
| #include <sys/stat.h> |
| ]) |
| |
| AC_CHECK_MEMBERS([struct utsname.domainname],,,[ |
| #define _GNU_SOURCE |
| #include <sys/utsname.h> |
| ]) |
| |
| AC_CHECK_TYPES([enum kcmp_type],,,[#include <linux/kcmp.h>]) |
| AC_CHECK_TYPES([enum landlock_rule_type],,,[#include <linux/landlock.h>]) |
| AC_CHECK_TYPES([struct acct_v3],,,[#include <sys/acct.h>]) |
| AC_CHECK_TYPES([struct af_alg_iv, struct sockaddr_alg],,,[# include <linux/if_alg.h>]) |
| AC_CHECK_TYPES([struct clone_args],,,[#include <sched.h>]) |
| AC_CHECK_TYPES([struct fanotify_event_info_fid, struct fanotify_event_info_error, |
| struct fanotify_event_info_header, struct fanotify_event_info_pidfd],,,[#include <sys/fanotify.h>]) |
| AC_CHECK_TYPES([struct file_clone_range],,,[#include <linux/fs.h>]) |
| AC_CHECK_TYPES([struct file_dedupe_range],,,[#include <linux/fs.h>]) |
| |
| AC_CHECK_TYPES([struct file_handle],,,[ |
| #define _GNU_SOURCE |
| #include <fcntl.h> |
| ]) |
| |
| AC_CHECK_TYPES([struct fs_quota_statv],,,[ |
| #define _GNU_SOURCE |
| #include <xfs/xqm.h> |
| ]) |
| |
| AC_CHECK_TYPES([struct if_nextdqblk],,,[#include <linux/quota.h>]) |
| AC_CHECK_TYPES([struct iovec],,,[#include <sys/uio.h>]) |
| AC_CHECK_TYPES([struct ipc64_perm],,,[#include <sys/ipcbuf.h>]) |
| AC_CHECK_TYPES([struct loop_config],,,[#include <linux/loop.h>]) |
| AC_CHECK_TYPES([struct landlock_ruleset_attr],,,[#include <linux/landlock.h>]) |
| AC_CHECK_TYPES([struct landlock_path_beneath_attr],,,[#include <linux/landlock.h>]) |
| AC_CHECK_TYPES([struct landlock_net_port_attr],,,[#include <linux/landlock.h>]) |
| |
| AC_CHECK_TYPES([struct mmsghdr],,,[ |
| #define _GNU_SOURCE |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| ]) |
| |
| AC_CHECK_TYPES([struct msqid64_ds],,,[#include <sys/msgbuf.h>]) |
| |
| AC_CHECK_TYPES([struct rlimit64],,,[ |
| #define _LARGEFILE64_SOURCE |
| #include <sys/resource.h> |
| ]) |
| |
| AC_CHECK_TYPES([struct semun],,,[#include <sys/sem.h>]) |
| AC_CHECK_TYPES([struct semid64_ds],,,[#include <sys/sem.h>]) |
| AC_CHECK_TYPES([struct shmid64_ds],,,[#include <sys/shmbuf.h>]) |
| |
| AC_CHECK_TYPES([struct statx, struct statx_timestamp],,,[ |
| #define _GNU_SOURCE |
| #include <sys/stat.h> |
| ]) |
| |
| AC_CHECK_TYPES([struct termio],,,[#include <sys/ioctl.h>]) |
| AC_CHECK_TYPES([struct tpacket_req3],,,[# include <linux/if_packet.h>]) |
| AC_CHECK_TYPES([struct user_desc, struct modify_ldt_ldt_s],[],[],[#include <asm/ldt.h>]) |
| |
| AC_CHECK_TYPES([struct xt_entry_match, struct xt_entry_target],,,[ |
| #include <sys/types.h> |
| #include <netinet/in.h> |
| #include <net/if.h> |
| #include <limits.h> |
| #include <linux/netfilter_ipv4/ip_tables.h> |
| ]) |
| |
| AC_CHECK_TYPES([struct __kernel_itimerspec],,,[#include <linux/time_types.h>]) |
| AC_CHECK_TYPES([struct __kernel_old_timespec],,,[#include <linux/time_types.h>]) |
| AC_CHECK_TYPES([struct __kernel_old_timeval],,,[#include <linux/time_types.h>]) |
| AC_CHECK_TYPES([struct __kernel_old_itimerval],,,[#include <linux/time_types.h>]) |
| AC_CHECK_TYPES([struct __kernel_old_itimerspec],,,[#include <linux/time_types.h>]) |
| AC_CHECK_TYPES([struct __kernel_timespec],,,[#include <linux/time_types.h>]) |
| |
| AC_CHECK_TYPES([struct __kernel_timex],,,[#include <sys/timex.h>]) |
| AC_CHECK_TYPES([struct __kernel_timex_timeval],,,[#include <sys/timex.h>]) |
| |
| AC_CHECK_TYPES([struct __kernel_old_timeval, struct __kernel_old_timespec, struct __kernel_timespec, |
| struct __kernel_old_itimerspec, struct __kernel_itimerspec, |
| struct __kernel_old_itimerval],,,[#include <sys/socket.h>]) |
| |
| AC_CHECK_TYPES([struct futex_waitv],,,[#include <linux/futex.h>]) |
| AC_CHECK_TYPES([struct mount_attr],,,[ |
| #ifdef HAVE_MOUNT_SETATTR |
| # include <sys/mount.h> |
| #elif HAVE_LINUX_MOUNT_H |
| # include <linux/mount.h> |
| #endif |
| ]) |
| |
| AC_CHECK_TYPES([struct cachestat_range],,,[#include <sys/mman.h>]) |
| AC_CHECK_TYPES([struct cachestat],,,[#include <sys/mman.h>]) |
| |
| # Tools knobs |
| |
| # Bash |
| AC_ARG_WITH([bash], |
| [AS_HELP_STRING([--with-bash], |
| [have the Bourne Again Shell interpreter])], |
| [with_bash=$withval], |
| [with_bash=no] |
| ) |
| if test "x$with_bash" = xyes; then |
| AC_SUBST([WITH_BASH],["yes"]) |
| else |
| AC_SUBST([WITH_BASH],["no"]) |
| fi |
| |
| # metadata |
| AC_ARG_ENABLE([metadata], |
| [AS_HELP_STRING([--disable-metadata], |
| [Disable metadata generation (both HTML and PDF, default no)])], |
| [], [enable_metadata=yes] |
| ) |
| AC_ARG_ENABLE([metadata_html], |
| [AS_HELP_STRING([--disable-metadata-html], |
| [Disable metadata HTML generation (default no)])], |
| [], [enable_metadata_html=yes] |
| ) |
| |
| AC_ARG_ENABLE([metadata_pdf], |
| [AS_HELP_STRING([--enable-metadata-pdf], |
| [Enable metadata PDF generation (default no)])], |
| [], [enable_metadata_pdf=no] |
| ) |
| |
| AC_ARG_WITH([metadata_generator], |
| [AS_HELP_STRING([--with-metadata-generator=asciidoc|asciidoctor], |
| [Specify metadata generator to use (default autodetect)])], |
| [with_metadata_generator=$withval], |
| [with_metadata_generator=detect] |
| ) |
| |
| LTP_DOCPARSE |
| |
| # Expect |
| AC_ARG_WITH([expect], |
| [AS_HELP_STRING([--with-expect], |
| [have the Tcl/expect library])], |
| [with_expect=$withval], |
| [with_expect=no] |
| ) |
| if test "x$with_expect" = xyes; then |
| AC_SUBST([WITH_EXPECT],["yes"]) |
| else |
| AC_SUBST([WITH_EXPECT],["no"]) |
| fi |
| |
| # Numa |
| AC_ARG_WITH([numa], |
| AS_HELP_STRING([--without-numa], |
| [without numa support]), |
| [with_numa=$withval], |
| [with_numa=yes] |
| ) |
| |
| # Perl |
| AC_ARG_WITH([perl], |
| [AS_HELP_STRING([--with-perl], |
| [have a perl interpreter])], |
| [with_perl=$withval], |
| [with_perl=no] |
| ) |
| if test "x$with_perl" = xyes; then |
| AC_SUBST([WITH_PERL],["yes"]) |
| else |
| AC_SUBST([WITH_PERL],["no"]) |
| fi |
| |
| # Python |
| AC_ARG_WITH([python], |
| [AS_HELP_STRING([--with-python], |
| [have a python interpreter])], |
| [with_python=$withval], |
| [with_python=no] |
| ) |
| if test "x$with_python" = xyes; then |
| AC_SUBST([WITH_PYTHON],["yes"]) |
| else |
| AC_SUBST([WITH_PYTHON],["no"]) |
| fi |
| |
| # TI RPC |
| AC_ARG_WITH([tirpc], |
| AS_HELP_STRING([--without-tirpc], |
| [without libtirpc support]), |
| [with_tirpc=$withval], |
| [with_tirpc=yes] |
| ) |
| # END tools knobs |
| |
| # Testsuites knobs |
| |
| AC_ARG_WITH([open-posix-testsuite], |
| [AS_HELP_STRING([--with-open-posix-testsuite], |
| [compile and install the open posix testsuite])], |
| [with_open_posix_testsuite=$withval], |
| [with_open_posix_testsuite=no] |
| ) |
| |
| # Allow setting the directoy, where the open posix testsuite is installed to. |
| # If nothing is defined, we have to pass our default value to submake |
| AC_ARG_WITH([open-posix-testdir], |
| [AS_HELP_STRING([--with-open-posix-testdir=<dir>], |
| [set the directory, where the open posix testsuite will be installed under prefix])], |
| [], |
| [ac_configure_args="$ac_configure_args --with-open-posix-testdir=testcases/open_posix_testsuite"] |
| ) |
| |
| if test "x$with_open_posix_testsuite" = xyes; then |
| AC_SUBST([WITH_OPEN_POSIX_TESTSUITE],["yes"]) |
| AC_CONFIG_SUBDIRS([testcases/open_posix_testsuite]) |
| else |
| AC_SUBST([WITH_OPEN_POSIX_TESTSUITE],["no"]) |
| fi |
| |
| # TODO: testcases/realtime requires bash and python. |
| AC_ARG_WITH([realtime-testsuite], |
| [AS_HELP_STRING([--with-realtime-testsuite], |
| [unused, kept for compatibility reason])], |
| [with_realtime_testsuite=$withval], |
| [with_realtime_testsuite=no] |
| ) |
| |
| if test "x$with_realtime_testsuite" = xyes; then |
| AC_SUBST([WITH_REALTIME_TESTSUITE],["yes"]) |
| else |
| AC_SUBST([WITH_REALTIME_TESTSUITE],["no"]) |
| fi |
| |
| AC_CONFIG_COMMANDS([syscalls.h], [cd ${ac_top_srcdir}/include/lapi/syscalls; ./regen.sh]) |
| |
| # custom functions |
| # NOTE: don't create custom functions for simple checks, put them into this file |
| LTP_CHECK_ACL_SUPPORT |
| LTP_CHECK_ATOMIC_MEMORY_MODEL |
| LTP_CHECK_BUILTIN_CLEAR_CACHE |
| LTP_CHECK_CAPABILITY_SUPPORT |
| LTP_CHECK_CC_WARN_OLDSTYLE |
| LTP_CHECK_CRYPTO |
| LTP_CHECK_FORTIFY_SOURCE |
| LTP_CHECK_KERNEL_DEVEL |
| LTP_CHECK_KEYUTILS_SUPPORT |
| LTP_CHECK_LIBMNL |
| LTP_CHECK_LINUXRANDOM |
| LTP_CHECK_SELINUX |
| LTP_CHECK_SYNC_ADD_AND_FETCH |
| LTP_CHECK_SYSCALL_EVENTFD |
| LTP_CHECK_SYSCALL_FCNTL |
| LTP_CHECK_FSVERITY |
| |
| AX_CHECK_COMPILE_FLAG([-no-pie], [LTP_CFLAGS_NOPIE=1]) |
| AX_CHECK_COMPILE_FLAG([-ffixed-ebp], [LTP_CFLAGS_FFIXED_EBP=1]) |
| AC_SUBST([LTP_CFLAGS_NOPIE]) |
| AC_SUBST([LTP_CFLAGS_FFIXED_EBP]) |
| |
| if test "x$with_numa" = xyes; then |
| LTP_CHECK_SYSCALL_NUMA |
| numa_error_msg="test requires libnuma development packages with LIBNUMA_API_VERSION >= 2" |
| else |
| numa_error_msg="NUMA support was disabled during build" |
| fi |
| AC_DEFINE_UNQUOTED(NUMA_ERROR_MSG, ["$numa_error_msg"], [Error message when no NUMA support]) |
| |
| |
| LTP_CHECK_SYSCALL_SIGNALFD |
| LTP_CHECK_SYSCALL_UTIMENSAT |
| LTP_CHECK_TASKSTATS |
| test "x$with_tirpc" = xyes && LTP_CHECK_TIRPC |
| LTP_DETECT_HOST_CPU |
| |
| AC_MSG_CHECKING([whether linker can handle KVM payloads]) |
| ltp_backup_ldflags="$LDFLAGS" |
| ltp_backup_flags="$[]_AC_LANG_PREFIX[]FLAGS" |
| LDFLAGS="-T ${srcdir}/testcases/kernel/kvm/linker/${HOST_CPU}.lds" |
| _AC_LANG_PREFIX[]FLAGS= |
| AC_LINK_IFELSE([AC_LANG_PROGRAM()], |
| [ |
| AC_MSG_RESULT([yes]) |
| AC_SUBST([WITH_KVM_TESTSUITE],["yes"]) |
| have_kvm=yes |
| ], |
| [ |
| AC_MSG_RESULT([no]) |
| AC_SUBST([WITH_KVM_TESTSUITE],["no"]) |
| have_kvm=no |
| ]) |
| _AC_LANG_PREFIX[]FLAGS="$ltp_backup_flags" |
| LDFLAGS="$ltp_backup_ldflags" |
| |
| AC_OUTPUT |
| |
| cat << EOF |
| |
| TESTSUITES |
| KVM testsuite: $have_kvm |
| open posix testsuite: ${with_open_posix_testsuite:-no} |
| TI-RPC testsuite: ${with_tirpc:-yes} |
| |
| LIBRARIES |
| keyutils: ${have_keyutils:-yes} |
| libacl: ${have_libacl:-no} |
| libaio: ${have_libaio:-no} (aio: ${have_aio:-no}) |
| libcap: $cap_libs (newer: ${has_newer_libcap:-no}) |
| libcrypto: ${have_libcrypto:-no} (sha: ${have_sha:-no}) |
| libmnl: ${have_libmnl:-yes} |
| libnuma: ${have_libnuma:-no} (headers: ${have_numa_headers:-yes}, v2 headers: ${have_numa_headers_v2:-no}) |
| libtirpc: ${have_libtirpc:-no} |
| glibc SUN-RPC: ${have_rpc_glibc:-no} |
| |
| METADATA |
| metadata generator: $with_metadata_generator |
| HTML metadata: $with_metadata_html |
| PDF metadata: $with_metadata_pdf |
| EOF |
| |
| if test "x$with_realtime_testsuite" = xyes; then |
| AC_MSG_WARN([--with-realtime-testsuite has no effect and is kept for compatibilty reason. It will be removed in the future.]) |
| fi |