+AC_HEADER_REQUIRE(acl/libacl.h)
+AC_HEADER_REQUIRE(fcntl.h)
+AC_HEADER_REQUIRE(getopt.h)
+AC_HEADER_REQUIRE(libgen.h)
+AC_HEADER_REQUIRE(linux/xattr.h)
+AC_HEADER_REQUIRE(sys/acl.h)
+AC_HEADER_REQUIRE(unistd.h)
+
+# We need openat() with O_NOFOLLOW from POSIX-2008. Without them, we
+# can't operate securely; I would rather refuse to be built.
+AC_CHECK_FUNC(openat,
+ [],
+ AC_MSG_ERROR(missing required openat function))
+AC_CHECK_DECLS([O_DIRECTORY],
+ [],
+ [AC_MSG_ERROR(missing required O_DIRECTORY flag in fcntl.h)],
+ [[#include <fcntl.h>]])
+AC_CHECK_DECLS([O_NOFOLLOW],
+ [],
+ [AC_MSG_ERROR(missing required O_NOFOLLOW flag in fcntl.h)],
+ [[#include <fcntl.h>]])
+AC_CHECK_DECLS([O_PATH],
+ [],
+ [AC_MSG_ERROR(missing required O_PATH flag in fcntl.h)],
+ [[#define _GNU_SOURCE
+ #include <fcntl.h>]])
+
+# And check for the GNU/BSD extension asprintf(), which lets us avoid
+# praying to the PATH_MAX gods while constructing long paths.
+AC_CHECK_FUNC(asprintf,
+ [],
+ AC_MSG_ERROR(missing required asprintf function))