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