blob: f987aa4ab7b5b8de475bc7cc237a915f9cf15902 [file] [log] [blame]
#
# Check if we have a working fadvise system call
#
AC_DEFUN([AC_HAVE_FADVISE],
[ AC_MSG_CHECKING([for fadvise ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <fcntl.h>
]], [[
posix_fadvise(0, 1, 0, POSIX_FADV_NORMAL);
]])
], have_fadvise=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_fadvise)
])
#
# Check if we have a working madvise system call
#
AC_DEFUN([AC_HAVE_MADVISE],
[ AC_MSG_CHECKING([for madvise ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <sys/mman.h>
]], [[
posix_madvise(0, 0, MADV_NORMAL);
]])
], have_madvise=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_madvise)
])
#
# Check if we have a working mincore system call
#
AC_DEFUN([AC_HAVE_MINCORE],
[ AC_MSG_CHECKING([for mincore ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <sys/mman.h>
]], [[
mincore(0, 0, 0);
]])
], have_mincore=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_mincore)
])
#
# Check if we have a working sendfile system call
#
AC_DEFUN([AC_HAVE_SENDFILE],
[ AC_MSG_CHECKING([for sendfile ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <sys/sendfile.h>
]], [[
sendfile(0, 0, 0, 0);
]])
], have_sendfile=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_sendfile)
])
#
# Check if we have a getmntent libc call (Linux)
#
AC_DEFUN([AC_HAVE_GETMNTENT],
[ AC_MSG_CHECKING([for getmntent ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#include <stdio.h>
#include <mntent.h>
]], [[
getmntent(0);
]])
], have_getmntent=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_getmntent)
])
#
# Check if we have a fallocate libc call (Linux)
#
AC_DEFUN([AC_HAVE_FALLOCATE],
[ AC_MSG_CHECKING([for fallocate])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <fcntl.h>
#include <linux/falloc.h>
]], [[
fallocate(0, 0, 0, 0);
]])
], have_fallocate=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_fallocate)
])
#
# Check if we have the fiemap ioctl (Linux)
#
AC_DEFUN([AC_HAVE_FIEMAP],
[ AC_MSG_CHECKING([for fiemap])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <linux/fs.h>
#include <linux/fiemap.h>
#include <sys/ioctl.h>
]], [[
struct fiemap *fiemap;
ioctl(0, FS_IOC_FIEMAP, (unsigned long)fiemap);
]])
], have_fiemap=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_fiemap)
])
#
# Check if we have a preadv libc call (Linux)
#
AC_DEFUN([AC_HAVE_PREADV],
[ AC_MSG_CHECKING([for preadv])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _BSD_SOURCE
#define _DEFAULT_SOURCE
#include <sys/uio.h>
]], [[
preadv(0, 0, 0, 0);
]])
], have_preadv=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_preadv)
])
#
# Check if we have a pwritev2 libc call (Linux)
#
AC_DEFUN([AC_HAVE_PWRITEV2],
[ AC_MSG_CHECKING([for pwritev2])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <sys/uio.h>
]], [[
pwritev2(0, 0, 0, 0, 0);
]])
], have_pwritev2=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_pwritev2)
])
#
# Check if we have a copy_file_range system call (Linux)
#
AC_DEFUN([AC_HAVE_COPY_FILE_RANGE],
[ AC_MSG_CHECKING([for copy_file_range])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <sys/syscall.h>
#include <unistd.h>
]], [[
syscall(__NR_copy_file_range, 0, 0, 0, 0, 0, 0);
]])
], have_copy_file_range=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_copy_file_range)
])
#
# Check if we have a sync_file_range libc call (Linux)
#
AC_DEFUN([AC_HAVE_SYNC_FILE_RANGE],
[ AC_MSG_CHECKING([for sync_file_range])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <fcntl.h>
]], [[
sync_file_range(0, 0, 0, 0);
]])
], have_sync_file_range=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_sync_file_range)
])
#
# Check if we have a syncfs libc call (Linux)
#
AC_DEFUN([AC_HAVE_SYNCFS],
[ AC_MSG_CHECKING([for syncfs])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <unistd.h>
]], [[
syncfs(0);
]])
], have_syncfs=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_syncfs)
])
#
# Check if we have a readdir libc call
#
AC_DEFUN([AC_HAVE_READDIR],
[ AC_MSG_CHECKING([for readdir])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#include <dirent.h>
]], [[
readdir(0);
]])
], have_readdir=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_readdir)
])
#
# Check if we have a flc call (Mac OS X)
#
AC_DEFUN([AC_HAVE_FLS],
[ AC_CHECK_DECL([fls],
have_fls=yes,
[],
[#include <string.h>]
)
AC_SUBST(have_fls)
])
#
# Check if we have a fsetxattr call
#
AC_DEFUN([AC_HAVE_FSETXATTR],
[ AC_CHECK_DECL([fsetxattr],
have_fsetxattr=yes,
[],
[#include <sys/types.h>
#include <sys/xattr.h>]
)
AC_SUBST(have_fsetxattr)
])
#
# Check if there is mntent.h
#
AC_DEFUN([AC_HAVE_MNTENT],
[ AC_CHECK_HEADERS(mntent.h,
have_mntent=yes)
AC_SUBST(have_mntent)
])
#
# Check if we have a mremap call (not on Mac OS X)
#
AC_DEFUN([AC_HAVE_MREMAP],
[ AC_CHECK_DECL([mremap],
have_mremap=yes,
[],
[#define _GNU_SOURCE
#include <sys/mman.h>]
)
AC_SUBST(have_mremap)
])
#
# Check if we need to override the system struct fsxattr with
# the internal definition. This /only/ happens if the system
# actually defines struct fsxattr /and/ the system definition
# is missing certain fields.
#
AC_DEFUN([AC_NEED_INTERNAL_FSXATTR],
[
AC_CHECK_TYPE(struct fsxattr,
[
AC_CHECK_MEMBER(struct fsxattr.fsx_cowextsize,
,
need_internal_fsxattr=yes,
[#include <linux/fs.h>]
)
],,
[#include <linux/fs.h>]
)
AC_SUBST(need_internal_fsxattr)
])
#
# Check if we need to override the system struct fscrypt_add_key_arg
# with the internal definition. This /only/ happens if the system
# actually defines struct fscrypt_add_key_arg /and/ the system
# definition is missing certain fields.
#
AC_DEFUN([AC_NEED_INTERNAL_FSCRYPT_ADD_KEY_ARG],
[
AC_CHECK_TYPE(struct fscrypt_add_key_arg,
[
AC_CHECK_MEMBER(struct fscrypt_add_key_arg.key_id,
,
need_internal_fscrypt_add_key_arg=yes,
[#include <linux/fs.h>]
)
],,
[#include <linux/fs.h>]
)
AC_SUBST(need_internal_fscrypt_add_key_arg)
])
#
# Check if we have a FS_IOC_GETFSMAP ioctl (Linux)
#
AC_DEFUN([AC_HAVE_GETFSMAP],
[ AC_MSG_CHECKING([for GETFSMAP])
AC_LINK_IFELSE(
[ AC_LANG_PROGRAM([[
#define _GNU_SOURCE
#include <sys/syscall.h>
#include <unistd.h>
#include <linux/fs.h>
#include <linux/fsmap.h>
]], [[
unsigned long x = FS_IOC_GETFSMAP;
struct fsmap_head fh;
]])
], have_getfsmap=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_getfsmap)
])
AC_DEFUN([AC_HAVE_STATFS_FLAGS],
[
AC_CHECK_TYPE(struct statfs,
[
AC_CHECK_MEMBER(struct statfs.f_flags,
have_statfs_flags=yes,,
[#include <sys/vfs.h>]
)
],,
[#include <sys/vfs.h>]
)
AC_SUBST(have_statfs_flags)
])
#
# Check if we have MAP_SYNC defines (Linux)
#
AC_DEFUN([AC_HAVE_MAP_SYNC],
[ AC_MSG_CHECKING([for MAP_SYNC])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#include <sys/mman.h>
]], [[
int flags = MAP_SYNC | MAP_SHARED_VALIDATE;
]])
], have_map_sync=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_map_sync)
])
#
# Check if we have a mallinfo libc call
#
AC_DEFUN([AC_HAVE_MALLINFO],
[ AC_MSG_CHECKING([for mallinfo ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#include <malloc.h>
]], [[
struct mallinfo test;
test.arena = 0; test.hblkhd = 0; test.uordblks = 0; test.fordblks = 0;
test = mallinfo();
]])
], have_mallinfo=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_mallinfo)
])
#
# Check if we have a mallinfo2 libc call
#
AC_DEFUN([AC_HAVE_MALLINFO2],
[ AC_MSG_CHECKING([for mallinfo2 ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#include <malloc.h>
]], [[
struct mallinfo2 test;
test.arena = 0; test.hblkhd = 0; test.uordblks = 0; test.fordblks = 0;
test = mallinfo2();
]])
], have_mallinfo2=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_mallinfo2)
])
#
# Check if we have a openat call
#
AC_DEFUN([AC_HAVE_OPENAT],
[ AC_CHECK_DECL([openat],
have_openat=yes,
[],
[#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>]
)
AC_SUBST(have_openat)
])
#
# Check if we have a fstatat call
#
AC_DEFUN([AC_HAVE_FSTATAT],
[ AC_CHECK_DECL([fstatat],
have_fstatat=yes,
[],
[#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>])
AC_SUBST(have_fstatat)
])
#
# Check if we have the SG_IO ioctl
#
AC_DEFUN([AC_HAVE_SG_IO],
[ AC_MSG_CHECKING([for struct sg_io_hdr ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#include <scsi/sg.h>
#include <sys/ioctl.h>
]], [[
struct sg_io_hdr hdr;
ioctl(0, SG_IO, &hdr);
]])
], have_sg_io=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_sg_io)
])
#
# Check if we have the HDIO_GETGEO ioctl
#
AC_DEFUN([AC_HAVE_HDIO_GETGEO],
[ AC_MSG_CHECKING([for struct hd_geometry ])
AC_COMPILE_IFELSE(
[ AC_LANG_PROGRAM([[
#include <linux/hdreg.h>
#include <sys/ioctl.h>
]], [[
struct hd_geometry hdr;
ioctl(0, HDIO_GETGEO, &hdr);
]])
], have_hdio_getgeo=yes
AC_MSG_RESULT(yes),
AC_MSG_RESULT(no))
AC_SUBST(have_hdio_getgeo)
])
AC_DEFUN([AC_PACKAGE_CHECK_LTO],
[ AC_MSG_CHECKING([if C compiler supports LTO])
OLD_CFLAGS="$CFLAGS"
OLD_LDFLAGS="$LDFLAGS"
LTO_FLAGS="-flto -ffat-lto-objects"
CFLAGS="$CFLAGS $LTO_FLAGS"
LDFLAGS="$LDFLAGS $LTO_FLAGS"
AC_LINK_IFELSE([AC_LANG_PROGRAM([])],
[AC_MSG_RESULT([yes])]
[lto_cflags=$LTO_FLAGS]
[lto_ldflags=$LTO_FLAGS]
[AC_PATH_PROG(gcc_ar, gcc-ar,,)]
[AC_PATH_PROG(gcc_ranlib, gcc-ranlib,,)],
[AC_MSG_RESULT([no])])
if test -x "$gcc_ar" && test -x "$gcc_ranlib"; then
have_lto=yes
fi
CFLAGS="${OLD_CFLAGS}"
LDFLAGS="${OLD_LDFLAGS}"
AC_SUBST(gcc_ar)
AC_SUBST(gcc_ranlib)
AC_SUBST(have_lto)
AC_SUBST(lto_cflags)
AC_SUBST(lto_ldflags)
])