| # acl.m4 - check for access control list (ACL) primitives |
| # serial 9 |
| |
| # Copyright (C) 2002, 2004-2009 Free Software Foundation, Inc. |
| # This file is free software; the Free Software Foundation |
| # gives unlimited permission to copy and/or distribute it, |
| # with or without modifications, as long as this notice is preserved. |
| |
| # Written by Paul Eggert and Jim Meyering. |
| |
| AC_DEFUN([gl_FUNC_ACL], |
| [ |
| AC_ARG_ENABLE([acl], |
| AS_HELP_STRING([--disable-acl], [do not support ACLs]), |
| , [enable_acl=auto]) |
| |
| LIB_ACL= |
| use_acl=0 |
| AC_REQUIRE([AC_C_INLINE]) |
| if test "x$enable_acl" != "xno"; then |
| dnl On all platforms, the ACL related API is declared in <sys/acl.h>. |
| AC_CHECK_HEADERS([sys/acl.h]) |
| if test $ac_cv_header_sys_acl_h = yes; then |
| ac_save_LIBS=$LIBS |
| |
| dnl Test for POSIX-draft-like API (Linux, FreeBSD, MacOS X, IRIX, Tru64). |
| dnl -lacl is needed on Linux, -lpacl is needed on OSF/1. |
| if test $use_acl = 0; then |
| AC_SEARCH_LIBS([acl_get_file], [acl pacl], |
| [if test "$ac_cv_search_acl_get_file" != "none required"; then |
| LIB_ACL=$ac_cv_search_acl_get_file |
| fi |
| AC_CHECK_FUNCS( |
| [acl_get_file acl_get_fd acl_set_file acl_set_fd \ |
| acl_free acl_from_mode acl_from_text \ |
| acl_delete_def_file acl_extended_file \ |
| acl_delete_fd_np acl_delete_file_np \ |
| acl_copy_ext_native acl_create_entry_np \ |
| acl_to_short_text acl_free_text]) |
| # If the acl_get_file bug is detected, don't enable the ACL support. |
| gl_ACL_GET_FILE([use_acl=1], []) |
| if test $use_acl = 1; then |
| dnl On Linux, additional API is declared in <acl/libacl.h>. |
| AC_CHECK_HEADERS([acl/libacl.h]) |
| AC_REPLACE_FUNCS([acl_entries]) |
| AC_CACHE_CHECK([for ACL_FIRST_ENTRY], |
| [gl_cv_acl_ACL_FIRST_ENTRY], |
| [AC_COMPILE_IFELSE( |
| [[#include <sys/types.h> |
| #include <sys/acl.h> |
| int type = ACL_FIRST_ENTRY;]], |
| [gl_cv_acl_ACL_FIRST_ENTRY=yes], |
| [gl_cv_acl_ACL_FIRST_ENTRY=no])]) |
| if test $gl_cv_acl_ACL_FIRST_ENTRY = yes; then |
| AC_DEFINE([HAVE_ACL_FIRST_ENTRY], [1], |
| [Define to 1 if the constant ACL_FIRST_ENTRY exists.]) |
| fi |
| dnl On MacOS X, other types of ACLs are supported. |
| AC_CACHE_CHECK([for ACL_TYPE_EXTENDED], |
| [gl_cv_acl_ACL_TYPE_EXTENDED], |
| [AC_COMPILE_IFELSE( |
| [[#include <sys/types.h> |
| #include <sys/acl.h> |
| int type = ACL_TYPE_EXTENDED;]], |
| [gl_cv_acl_ACL_TYPE_EXTENDED=yes], |
| [gl_cv_acl_ACL_TYPE_EXTENDED=no])]) |
| if test $gl_cv_acl_ACL_TYPE_EXTENDED = yes; then |
| AC_DEFINE([HAVE_ACL_TYPE_EXTENDED], [1], |
| [Define to 1 if the ACL type ACL_TYPE_EXTENDED exists.]) |
| fi |
| else |
| LIB_ACL= |
| fi |
| ]) |
| fi |
| |
| dnl Test for Solaris API (Solaris, Cygwin). |
| if test $use_acl = 0; then |
| AC_CHECK_FUNCS([acl]) |
| if test $ac_cv_func_acl = yes; then |
| AC_SEARCH_LIBS([acl_trivial], [sec], |
| [if test "$ac_cv_search_acl_trivial" != "none required"; then |
| LIB_ACL=$ac_cv_search_acl_trivial |
| fi |
| ]) |
| AC_CHECK_FUNCS([acl_trivial]) |
| use_acl=1 |
| fi |
| fi |
| |
| dnl Test for HP-UX API. |
| if test $use_acl = 0 || test "$ac_cv_func_acl" = yes; then |
| AC_CHECK_FUNCS([getacl]) |
| if test $ac_cv_func_getacl = yes; then |
| use_acl=1 |
| fi |
| fi |
| |
| dnl Test for AIX API (AIX 5.3 or newer). |
| if test $use_acl = 0; then |
| AC_CHECK_FUNCS([aclx_get]) |
| if test $ac_cv_func_aclx_get = yes; then |
| use_acl=1 |
| fi |
| fi |
| |
| dnl Test for older AIX API. |
| if test $use_acl = 0 || test "$ac_cv_func_aclx_get" = yes; then |
| AC_CHECK_FUNCS([statacl]) |
| if test $ac_cv_func_statacl = yes; then |
| use_acl=1 |
| fi |
| fi |
| |
| LIBS=$ac_save_LIBS |
| fi |
| if test "x$enable_acl$use_acl" = "xyes0"; then |
| AC_MSG_ERROR([ACLs enabled but support not detected]) |
| fi |
| fi |
| AC_SUBST([LIB_ACL]) |
| AC_DEFINE_UNQUOTED([USE_ACL], [$use_acl], |
| [Define to nonzero if you want access control list support.]) |
| USE_ACL=$use_acl |
| AC_SUBST([USE_ACL]) |
| ]) |
| |
| # gl_ACL_GET_FILE(IF-WORKS, IF-NOT) |
| # ------------------------------------- |
| # If `acl_get_file' works (does not have a particular bug), |
| # run IF-WORKS, otherwise, IF-NOT. |
| # This tests for a Darwin 8.7.0 bug, whereby acl_get_file returns NULL, |
| # but sets errno = ENOENT for an existing file or directory. |
| AC_DEFUN([gl_ACL_GET_FILE], |
| [ |
| AC_CACHE_CHECK([for working acl_get_file], [gl_cv_func_working_acl_get_file], |
| [AC_RUN_IFELSE( |
| [AC_LANG_PROGRAM( |
| [[#include <sys/types.h> |
| #include <sys/acl.h> |
| #include <errno.h> |
| ]], |
| [[return !! (!acl_get_file (".", ACL_TYPE_ACCESS) |
| && errno == ENOENT);]])], |
| [gl_cv_func_working_acl_get_file=yes], |
| [gl_cv_func_working_acl_get_file=no], |
| [gl_cv_func_working_acl_get_file=cross-compiling])]) |
| |
| AS_IF([test $gl_cv_func_working_acl_get_file = yes], [$1], [$2]) |
| ]) |