X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=m4%2Frename.m4;h=41e706109afd6719b7c24cf9d5b3a096275e2707;hb=47e899ad11a04647942b39dd501bfc2381e9b2f0;hp=27c9944c6d73678058bea1e8be775464c9d08cfb;hpb=33790590664b279853404bd753849b71a382ea0a;p=gnulib.git diff --git a/m4/rename.m4 b/m4/rename.m4 index 27c9944c6..41e706109 100644 --- a/m4/rename.m4 +++ b/m4/rename.m4 @@ -1,6 +1,6 @@ -# serial 20 +# serial 21 -# Copyright (C) 2001, 2003, 2005, 2006, 2009 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005-2006, 2009-2010 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. @@ -17,28 +17,38 @@ AC_DEFUN([gl_FUNC_RENAME], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) + AC_CHECK_FUNCS_ONCE([lstat]) dnl Solaris 10 mistakenly allows rename("file","name/"). dnl NetBSD 1.6 mistakenly forbids rename("dir","name/"). + dnl FreeBSD 7.2 mistakenly allows rename("file","link-to-file/"). dnl The Solaris bug can be worked around without stripping dnl trailing slash, while the NetBSD bug requires stripping; dnl the two conditions can be distinguished by whether hard dnl links are also broken. AC_CACHE_CHECK([whether rename honors trailing slash on destination], [gl_cv_func_rename_slash_dst_works], - [rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 + [rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.lnk touch conftest.f && mkdir conftest.d1 || AC_MSG_ERROR([cannot create temporary files]) + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.f conftest.lnk + fi AC_RUN_IFELSE([AC_LANG_PROGRAM([[ # include # include ]], [if (rename ("conftest.f", "conftest.f1/") == 0) return 1; - if (rename ("conftest.d1", "conftest.d2/") != 0) return 2;])], + if (rename ("conftest.d1", "conftest.d2/") != 0) return 2; +#if HAVE_LSTAT + if (rename ("conftest.f", "conftest.lnk/") == 0) return 3; +#endif + ])], [gl_cv_func_rename_slash_dst_works=yes], [gl_cv_func_rename_slash_dst_works=no], dnl When crosscompiling, assume rename is broken. [gl_cv_func_rename_slash_dst_works="guessing no"]) - rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 + rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.lnk ]) if test "x$gl_cv_func_rename_slash_dst_works" != xyes; then AC_LIBOBJ([rename]) @@ -50,23 +60,32 @@ AC_DEFUN([gl_FUNC_RENAME], dnl SunOS 4.1.1_U1 mistakenly forbids rename("dir/","name"). dnl Solaris 9 mistakenly allows rename("file/","name"). + dnl FreeBSD 7.2 mistakenly allows rename("link-to-file/","name"). dnl These bugs require stripping trailing slash to avoid corrupting dnl symlinks with a trailing slash. AC_CACHE_CHECK([whether rename honors trailing slash on source], [gl_cv_func_rename_slash_src_works], - [rm -rf conftest.f conftest.d1 conftest.d2 + [rm -rf conftest.f conftest.d1 conftest.d2 conftest.lnk touch conftest.f && mkdir conftest.d1 || AC_MSG_ERROR([cannot create temporary files]) + # Assume that if we have lstat, we can also check symlinks. + if test $ac_cv_func_lstat = yes; then + ln -s conftest.f conftest.lnk + fi AC_RUN_IFELSE([AC_LANG_PROGRAM([[ # include # include ]], [if (rename ("conftest.f/", "conftest.d2") == 0) return 1; - if (rename ("conftest.d1/", "conftest.d2") != 0) return 2;])], + if (rename ("conftest.d1/", "conftest.d2") != 0) return 2; +#if HAVE_LSTAT + if (rename ("conftest.lnk/", "conftest.f") == 0) return 3; +#endif + ])], [gl_cv_func_rename_slash_src_works=yes], [gl_cv_func_rename_slash_src_works=no], dnl When crosscompiling, assume rename is broken. [gl_cv_func_rename_slash_src_works="guessing no"]) - rm -rf conftest.f conftest.d1 conftest.d2 + rm -rf conftest.f conftest.d1 conftest.d2 conftest.lnk ]) if test "x$gl_cv_func_rename_slash_src_works" != xyes; then AC_LIBOBJ([rename])