(gl_PREREQ_EUIDACCESS): Don't bother checking for
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 6 Aug 2004 23:44:59 +0000 (23:44 +0000)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 6 Aug 2004 23:44:59 +0000 (23:44 +0000)
unistd.h, as autoconf does this for us.  Check for libgen.h.
Also look for eaccess within -lgen, which is where it is in
Solaris.  Set LIB_EACCESS accordingly.
(gl_FUNC_NONREENTRANT_EUIDACCESS): New macro.
(gl_FUNC_EUIDACCESS): Use AC_CHECK_DECLS_ONCE, not AC_CHECK_DECLS.
(gl_PREREQ_EUIDACCESS): Check for eaccess and setregid decls.
Require AC_HEADER_STAT.

m4/euidaccess.m4

index 18ce475..c14fb8f 100644 (file)
@@ -1,17 +1,28 @@
-# euidaccess.m4 serial 2
-dnl Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+# euidaccess.m4 serial 4
+dnl Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
 dnl This file is free software, distributed under the terms of the GNU
 dnl General Public License.  As a special exception to the GNU General
 dnl Public License, this file may be distributed as part of a program
 dnl that contains a configuration script generated by Autoconf, under
 dnl the same distribution terms as the rest of that program.
 
+AC_DEFUN([gl_FUNC_NONREENTRANT_EUIDACCESS],
+[
+  AC_REQUIRE([gl_FUNC_EUIDACCESS])
+  AC_DEFINE([PREFER_NONREENTRANT_EUIDACCESS], 1,
+    [Define this if you prefer euidaccess to return the correct result
+     even if this would make it nonreentrant.  Define this only if your
+     entire application is safe even if the uid or gid might temporarily
+     change.  If your application uses signal handlers or threads it
+     is probably not safe.])
+])
+
 AC_DEFUN([gl_FUNC_EUIDACCESS],
 [
   dnl Persuade glibc <unistd.h> to declare euidaccess().
   AC_REQUIRE([AC_GNU_SOURCE])
 
-  AC_CHECK_DECLS([euidaccess])
+  AC_CHECK_DECLS_ONCE([euidaccess])
   AC_REPLACE_FUNCS(euidaccess)
   if test $ac_cv_func_euidaccess = no; then
     gl_PREREQ_EUIDACCESS
@@ -20,7 +31,21 @@ AC_DEFUN([gl_FUNC_EUIDACCESS],
 
 # Prerequisites of lib/euidaccess.c.
 AC_DEFUN([gl_PREREQ_EUIDACCESS], [
-  AC_CHECK_HEADERS_ONCE(unistd.h)
+  AC_CHECK_HEADERS_ONCE(libgen.h)
+  AC_CHECK_DECLS_ONCE(setregid)
   AC_REQUIRE([AC_FUNC_GETGROUPS])
+  AC_REQUIRE([AC_HEADER_STAT])
+
+  # Solaris 9 needs -lgen to get the eaccess function.
+  # Save and restore LIBS so -lgen isn't added to it.  Otherwise, *all*
+  # programs in the package would end up linked with that potentially-shared
+  # library, inducing unnecessary run-time overhead.
+  gl_saved_libs=$LIBS
+    AC_SEARCH_LIBS(eaccess, [gen],
+                   [test "$ac_cv_search_eaccess" = "none required" ||
+                    LIB_EACCESS=$ac_cv_search_eaccess])
+    AC_SUBST(LIB_EACCESS)
+    AC_CHECK_FUNCS(eaccess)
+  LIBS=$gl_saved_libs
 ])