Commit | Line | Data |
---|---|---|
ffdc270a PE |
1 | # acl.m4 - check for access control list (ACL) primitives |
2 | # serial 15 | |
3 | ||
4 | # Copyright (C) 2002, 2004-2013 Free Software Foundation, Inc. | |
5 | # This file is free software; the Free Software Foundation | |
6 | # gives unlimited permission to copy and/or distribute it, | |
7 | # with or without modifications, as long as this notice is preserved. | |
8 | ||
9 | # Written by Paul Eggert and Jim Meyering. | |
10 | ||
11 | AC_DEFUN([gl_FUNC_ACL], | |
12 | [ | |
13 | AC_ARG_ENABLE([acl], | |
14 | AS_HELP_STRING([--disable-acl], [do not support ACLs]), | |
15 | , [enable_acl=auto]) | |
16 | ||
17 | LIB_ACL= | |
18 | use_acl=0 | |
19 | if test "x$enable_acl" != "xno"; then | |
20 | dnl On all platforms, the ACL related API is declared in <sys/acl.h>. | |
21 | AC_CHECK_HEADERS([sys/acl.h]) | |
22 | if test $ac_cv_header_sys_acl_h = yes; then | |
23 | ac_save_LIBS=$LIBS | |
24 | ||
25 | dnl Test for POSIX-draft-like API (Linux, FreeBSD, Mac OS X, IRIX, Tru64). | |
26 | dnl -lacl is needed on Linux, -lpacl is needed on OSF/1. | |
27 | if test $use_acl = 0; then | |
28 | AC_SEARCH_LIBS([acl_get_file], [acl pacl], | |
29 | [if test "$ac_cv_search_acl_get_file" != "none required"; then | |
30 | LIB_ACL=$ac_cv_search_acl_get_file | |
31 | fi | |
32 | AC_CHECK_FUNCS( | |
33 | [acl_get_file acl_get_fd acl_set_file acl_set_fd \ | |
34 | acl_free acl_from_mode acl_from_text \ | |
35 | acl_delete_def_file acl_extended_file \ | |
36 | acl_delete_fd_np acl_delete_file_np \ | |
37 | acl_copy_ext_native acl_create_entry_np \ | |
38 | acl_to_short_text acl_free_text]) | |
39 | # If the acl_get_file bug is detected, don't enable the ACL support. | |
40 | gl_ACL_GET_FILE([use_acl=1], []) | |
41 | if test $use_acl = 1; then | |
42 | dnl On Linux, additional API is declared in <acl/libacl.h>. | |
43 | AC_CHECK_HEADERS([acl/libacl.h]) | |
44 | AC_REPLACE_FUNCS([acl_entries]) | |
45 | AC_CACHE_CHECK([for ACL_FIRST_ENTRY], | |
46 | [gl_cv_acl_ACL_FIRST_ENTRY], | |
47 | [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( | |
48 | [[#include <sys/types.h> | |
49 | #include <sys/acl.h> | |
50 | int type = ACL_FIRST_ENTRY;]])], | |
51 | [gl_cv_acl_ACL_FIRST_ENTRY=yes], | |
52 | [gl_cv_acl_ACL_FIRST_ENTRY=no])]) | |
53 | if test $gl_cv_acl_ACL_FIRST_ENTRY = yes; then | |
54 | AC_DEFINE([HAVE_ACL_FIRST_ENTRY], [1], | |
55 | [Define to 1 if the constant ACL_FIRST_ENTRY exists.]) | |
56 | fi | |
57 | dnl On Mac OS X, other types of ACLs are supported. | |
58 | AC_CACHE_CHECK([for ACL_TYPE_EXTENDED], | |
59 | [gl_cv_acl_ACL_TYPE_EXTENDED], | |
60 | [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( | |
61 | [[#include <sys/types.h> | |
62 | #include <sys/acl.h> | |
63 | int type = ACL_TYPE_EXTENDED;]])], | |
64 | [gl_cv_acl_ACL_TYPE_EXTENDED=yes], | |
65 | [gl_cv_acl_ACL_TYPE_EXTENDED=no])]) | |
66 | if test $gl_cv_acl_ACL_TYPE_EXTENDED = yes; then | |
67 | AC_DEFINE([HAVE_ACL_TYPE_EXTENDED], [1], | |
68 | [Define to 1 if the ACL type ACL_TYPE_EXTENDED exists.]) | |
69 | fi | |
70 | else | |
71 | LIB_ACL= | |
72 | fi | |
73 | ]) | |
74 | fi | |
75 | ||
76 | dnl Test for Solaris API (Solaris, Cygwin). | |
77 | if test $use_acl = 0; then | |
78 | AC_CHECK_FUNCS([facl]) | |
79 | if test $ac_cv_func_facl = yes; then | |
80 | AC_SEARCH_LIBS([acl_trivial], [sec], | |
81 | [if test "$ac_cv_search_acl_trivial" != "none required"; then | |
82 | LIB_ACL=$ac_cv_search_acl_trivial | |
83 | fi | |
84 | ]) | |
85 | AC_CHECK_FUNCS([acl_trivial]) | |
86 | use_acl=1 | |
87 | fi | |
88 | fi | |
89 | ||
90 | dnl Test for HP-UX API. | |
91 | if test $use_acl = 0; then | |
92 | AC_CHECK_FUNCS([getacl]) | |
93 | if test $ac_cv_func_getacl = yes; then | |
94 | use_acl=1 | |
95 | fi | |
96 | dnl Test for HP-UX 11.11 API. | |
97 | AC_CHECK_HEADERS([aclv.h], [], [], [#include <sys/types.h>]) | |
98 | fi | |
99 | ||
100 | dnl Test for AIX API (AIX 5.3 or newer). | |
101 | if test $use_acl = 0; then | |
102 | AC_CHECK_FUNCS([aclx_get]) | |
103 | if test $ac_cv_func_aclx_get = yes; then | |
104 | use_acl=1 | |
105 | fi | |
106 | fi | |
107 | ||
108 | dnl Test for older AIX API. | |
109 | if test $use_acl = 0 || test "$ac_cv_func_aclx_get" = yes; then | |
110 | AC_CHECK_FUNCS([statacl]) | |
111 | if test $ac_cv_func_statacl = yes; then | |
112 | use_acl=1 | |
113 | fi | |
114 | fi | |
115 | ||
116 | dnl Test for NonStop Kernel API. | |
117 | if test $use_acl = 0; then | |
118 | AC_CHECK_FUNCS([aclsort]) | |
119 | if test $ac_cv_func_aclsort = yes; then | |
120 | use_acl=1 | |
121 | fi | |
122 | fi | |
123 | ||
124 | LIBS=$ac_save_LIBS | |
125 | fi | |
126 | if test "x$enable_acl$use_acl" = "xyes0"; then | |
127 | AC_MSG_ERROR([ACLs enabled but support not detected]) | |
128 | elif test "x$enable_acl$use_acl" = "xauto0"; then | |
129 | AC_MSG_WARN([libacl development library was not found or not usable.]) | |
130 | AC_MSG_WARN([AC_PACKAGE_NAME will be built without ACL support.]) | |
131 | fi | |
132 | fi | |
133 | AC_SUBST([LIB_ACL]) | |
134 | AC_DEFINE_UNQUOTED([USE_ACL], [$use_acl], | |
135 | [Define to nonzero if you want access control list support.]) | |
136 | USE_ACL=$use_acl | |
137 | AC_SUBST([USE_ACL]) | |
138 | ]) | |
139 | ||
140 | # gl_ACL_GET_FILE(IF-WORKS, IF-NOT) | |
141 | # ------------------------------------- | |
142 | # If 'acl_get_file' works (does not have a particular bug), | |
143 | # run IF-WORKS, otherwise, IF-NOT. | |
144 | # This tests for a Darwin 8.7.0 bug, whereby acl_get_file returns NULL, | |
145 | # but sets errno = ENOENT for an existing file or directory. | |
146 | AC_DEFUN([gl_ACL_GET_FILE], | |
147 | [ | |
148 | AC_CACHE_CHECK([for working acl_get_file], [gl_cv_func_working_acl_get_file], | |
149 | [AC_RUN_IFELSE( | |
150 | [AC_LANG_PROGRAM( | |
151 | [[#include <sys/types.h> | |
152 | #include <sys/acl.h> | |
153 | #include <errno.h> | |
154 | ]], | |
155 | [[if (!acl_get_file (".", ACL_TYPE_ACCESS) && errno == ENOENT) | |
156 | return 1; | |
157 | return 0; | |
158 | ]])], | |
159 | [gl_cv_func_working_acl_get_file=yes], | |
160 | [gl_cv_func_working_acl_get_file=no], | |
161 | [gl_cv_func_working_acl_get_file=cross-compiling])]) | |
162 | ||
163 | AS_IF([test $gl_cv_func_working_acl_get_file = yes], [$1], [$2]) | |
164 | ]) |