summaryrefslogtreecommitdiffstats
path: root/m4/ax_check_capsicum.m4
diff options
context:
space:
mode:
Diffstat (limited to 'm4/ax_check_capsicum.m4')
-rw-r--r--m4/ax_check_capsicum.m485
1 files changed, 85 insertions, 0 deletions
diff --git a/m4/ax_check_capsicum.m4 b/m4/ax_check_capsicum.m4
new file mode 100644
index 0000000..f79dc5c
--- /dev/null
+++ b/m4/ax_check_capsicum.m4
@@ -0,0 +1,85 @@
+# -*- Autoconf -*-
+
+# SYNOPSIS
+#
+# AX_CHECK_CAPSICUM([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
+#
+# DESCRIPTION
+#
+# This macro searches for an installed Capsicum header and library,
+# and if found:
+# - AC_DEFINE([HAVE_CAPSICUM]) is called.
+# - AC_DEFINE([HAVE_SYS_CAPSICUM_H]) is called if <sys/capsicum.h>
+# is present (otherwise <sys/capability.h> must be used).
+# - CAPSICUM_LIB is set to the -l option needed to link Capsicum support,
+# and AC_SUBST([CAPSICUM_LIB]) is called.
+# - The shell commands in ACTION-IF-FOUND are run. The default
+# ACTION-IF-FOUND prepends ${CAPSICUM_LIB} into LIBS. If you don't
+# want to modify LIBS and don't need to run any other commands either,
+# use a colon as ACTION-IF-FOUND.
+#
+# If Capsicum support isn't found:
+# - The shell commands in ACTION-IF-NOT-FOUND are run. The default
+# ACTION-IF-NOT-FOUND calls AC_MSG_WARN to print a warning that
+# Capsicum support wasn't found.
+#
+# You should use autoheader to include a definition for the symbols above
+# in a config.h file.
+#
+# Sample usage in a C/C++ source is as follows:
+#
+# #ifdef HAVE_CAPSICUM
+# # ifdef HAVE_SYS_CAPSICUM_H
+# # include <sys/capsicum.h>
+# # else
+# # include <sys/capability.h>
+# # endif
+# #endif /* HAVE_CAPSICUM */
+#
+# LICENSE
+#
+# Copyright (c) 2014 Google Inc.
+# Copyright (c) 2015 Lasse Collin <lasse.collin@tukaani.org>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved. This file is offered as-is,
+# without any warranty.
+
+#serial 2
+
+AC_DEFUN([AX_CHECK_CAPSICUM], [
+# On FreeBSD >= 11.x and Linux, Capsicum is uses <sys/capsicum.h>.
+# If this header is found, it is assumed to be the right one.
+capsicum_header_found=no
+AC_CHECK_HEADERS([sys/capsicum.h], [capsicum_header_found=yes])
+if test "$capsicum_header_found" = no ; then
+ # On FreeBSD 10.x Capsicum uses <sys/capability.h>. Such a header exists
+ # on Linux too but it describes POSIX.1e capabilities. Look for the
+ # declaration of cap_rights_limit to check if <sys/capability.h> is
+ # a Capsicum header.
+ AC_CHECK_DECL([cap_rights_limit], [capsicum_header_found=yes], [],
+ [#include <sys/capability.h>])
+fi
+
+capsicum_lib_found=no
+CAPSICUM_LIB=
+if test "$capsicum_header_found" = yes ; then
+ AC_LANG_PUSH([C])
+ # FreeBSD >= 10.x has Capsicum functions in libc.
+ AC_LINK_IFELSE([AC_LANG_CALL([], [cap_rights_limit])],
+ [capsicum_lib_found=yes], [])
+ # Linux has Capsicum functions in libcaprights.
+ AC_CHECK_LIB([caprights], [cap_rights_limit],
+ [CAPSICUM_LIB=-lcaprights
+ capsicum_lib_found=yes], [])
+ AC_LANG_POP([C])
+fi
+AC_SUBST([CAPSICUM_LIB])
+
+if test "$capsicum_lib_found" = yes ; then
+ AC_DEFINE([HAVE_CAPSICUM], [1], [Define to 1 if Capsicum is available.])
+ m4_default([$1], [LIBS="${CAPSICUM_LIB} $LIBS"])
+else
+ m4_default([$2], [AC_MSG_WARN([Capsicum support not found])])
+fi])