chown: work around OpenBSD bug
[pspp] / m4 / lchown.m4
index f64dd08202652bd67d9830046350e21733546f52..f0d67fe806cc6bc9e516d44d00550a3c4f789f67 100644 (file)
@@ -1,6 +1,7 @@
-#serial 10
+# serial 15
+# Determine whether we need the lchown wrapper.
 
 
-dnl Copyright (C) 1998, 2001, 2003, 2004, 2005, 2006 Free Software
+dnl Copyright (C) 1998, 2001, 2003-2007, 2009 Free Software
 dnl Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
@@ -8,13 +9,21 @@ dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Jim Meyering.
 dnl with or without modifications, as long as this notice is preserved.
 
 dnl From Jim Meyering.
-dnl Provide lchown on systems that lack it.
+dnl Provide lchown on systems that lack it, and work around bugs
+dnl on systems that have it.
 
 AC_DEFUN([gl_FUNC_LCHOWN],
 [
 
 AC_DEFUN([gl_FUNC_LCHOWN],
 [
-  AC_REQUIRE([AC_TYPE_UID_T])
+  AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   AC_REQUIRE([gl_FUNC_CHOWN])
   AC_REQUIRE([gl_FUNC_CHOWN])
-  AC_REQUIRE([gl_STAT_MACROS])
-  AC_CHECK_DECLS_ONCE([lchown])
-  AC_REPLACE_FUNCS(lchown)
+  AC_CHECK_FUNCS_ONCE([lchmod])
+  AC_REPLACE_FUNCS([lchown])
+  if test $ac_cv_func_lchown = no; then
+    HAVE_LCHOWN=0
+  elif test "$gl_cv_func_chown_slash_works" != yes \
+      || test "$gl_cv_func_chown_ctime_works" != yes; then
+    dnl Trailing slash and ctime bugs in chown also occur in lchown.
+    AC_LIBOBJ([lchown])
+    REPLACE_LCHOWN=1
+  fi
 ])
 ])