X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fcanonicalize.m4;h=c08a786e164cdc6b0aff64758e948874e0bf08d5;hb=279067b9021cfd0935711cae3f3297ae4b3808af;hp=47c5c01aded0c0a205eaf08b65d57d5e4d8f405e;hpb=4e793c35b62f5ea945b7d33ce36c78fc4d645b3a;p=gnulib.git diff --git a/m4/canonicalize.m4 b/m4/canonicalize.m4 index 47c5c01ad..c08a786e1 100644 --- a/m4/canonicalize.m4 +++ b/m4/canonicalize.m4 @@ -1,6 +1,6 @@ -# canonicalize.m4 serial 15 +# canonicalize.m4 serial 21 -dnl Copyright (C) 2003-2007, 2009 Free Software Foundation, Inc. +dnl Copyright (C) 2003-2007, 2009-2011 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -14,10 +14,11 @@ AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE], AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([canonicalize_file_name]) + AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 - elif test $gl_cv_func_realpath_works != yes; then + elif test "$gl_cv_func_realpath_works" != yes; then REPLACE_CANONICALIZE_FILE_NAME=1 fi ]) @@ -25,16 +26,17 @@ AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE], # Provides canonicalize_file_name and realpath. AC_DEFUN([gl_CANONICALIZE_LGPL], [ + AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE]) if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 AC_LIBOBJ([canonicalize-lgpl]) if test $ac_cv_func_realpath = no; then HAVE_REALPATH=0 - elif test $gl_cv_func_realpath_works != yes; then + elif test "$gl_cv_func_realpath_works" != yes; then REPLACE_REALPATH=1 fi - elif test $gl_cv_func_realpath_works != yes; then + elif test "$gl_cv_func_realpath_works" != yes; then AC_LIBOBJ([canonicalize-lgpl]) REPLACE_REALPATH=1 REPLACE_CANONICALIZE_FILE_NAME=1 @@ -42,11 +44,12 @@ AC_DEFUN([gl_CANONICALIZE_LGPL], ]) # Like gl_CANONICALIZE_LGPL, except prepare for separate compilation -# (no AC_LIBOBJ). +# (no REPLACE_CANONICALIZE_FILE_NAME, no REPLACE_REALPATH, no AC_LIBOBJ). AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([canonicalize_file_name getcwd readlink]) + AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) @@ -59,19 +62,42 @@ AC_DEFUN([gl_FUNC_REALPATH_WORKS], AC_CHECK_FUNCS_ONCE([realpath]) AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [ touch conftest.a + mkdir conftest.d AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ + ]GL_NOCRASH[ #include + #include ]], [[ - char *name1 = realpath ("conftest.a", NULL); - char *name2 = realpath ("conftest.b/../conftest.a", NULL); - char *name3 = realpath ("conftest.a/", NULL); - return !(name1 && *name1 == '/' && !name2 && !name3); + int result = 0; + { + char *name = realpath ("conftest.a", NULL); + if (!(name && *name == '/')) + result |= 1; + } + { + char *name = realpath ("conftest.b/../conftest.a", NULL); + if (name != NULL) + result |= 2; + } + { + char *name = realpath ("conftest.a/", NULL); + if (name != NULL) + result |= 4; + } + { + char *name1 = realpath (".", NULL); + char *name2 = realpath ("conftest.d//./..", NULL); + if (strcmp (name1, name2) != 0) + result |= 8; + } + return result; ]]) ], [gl_cv_func_realpath_works=yes], [gl_cv_func_realpath_works=no], [gl_cv_func_realpath_works="guessing no"]) + rm -rf conftest.a conftest.d ]) - if test $gl_cv_func_realpath_works = yes; then + if test "$gl_cv_func_realpath_works" = yes; then AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles trailing slash correctly.])