File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srcm4 / canonicalize.m4
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 13:38:46 2021 UTC (3 years, 9 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_16p0, HEAD
libiconv 1.16

    1: # canonicalize.m4 serial 30
    2: 
    3: dnl Copyright (C) 2003-2007, 2009-2019 Free Software Foundation, Inc.
    4: 
    5: dnl This file is free software; the Free Software Foundation
    6: dnl gives unlimited permission to copy and/or distribute it,
    7: dnl with or without modifications, as long as this notice is preserved.
    8: 
    9: # Provides canonicalize_file_name and canonicalize_filename_mode, but does
   10: # not provide or fix realpath.
   11: AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE],
   12: [
   13:   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   14:   AC_CHECK_FUNCS_ONCE([canonicalize_file_name])
   15:   AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
   16:   AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
   17:   if test $ac_cv_func_canonicalize_file_name = no; then
   18:     HAVE_CANONICALIZE_FILE_NAME=0
   19:   else
   20:     case "$gl_cv_func_realpath_works" in
   21:       *yes) ;;
   22:       *)    REPLACE_CANONICALIZE_FILE_NAME=1 ;;
   23:     esac
   24:   fi
   25: ])
   26: 
   27: # Provides canonicalize_file_name and realpath.
   28: AC_DEFUN([gl_CANONICALIZE_LGPL],
   29: [
   30:   AC_REQUIRE([gl_STDLIB_H_DEFAULTS])
   31:   AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE])
   32:   if test $ac_cv_func_canonicalize_file_name = no; then
   33:     HAVE_CANONICALIZE_FILE_NAME=0
   34:     if test $ac_cv_func_realpath = no; then
   35:       HAVE_REALPATH=0
   36:     else
   37:       case "$gl_cv_func_realpath_works" in
   38:         *yes) ;;
   39:         *)    REPLACE_REALPATH=1 ;;
   40:       esac
   41:     fi
   42:   else
   43:     case "$gl_cv_func_realpath_works" in
   44:       *yes)
   45:         ;;
   46:       *)
   47:         REPLACE_CANONICALIZE_FILE_NAME=1
   48:         REPLACE_REALPATH=1
   49:         ;;
   50:     esac
   51:   fi
   52: ])
   53: 
   54: # Like gl_CANONICALIZE_LGPL, except prepare for separate compilation
   55: # (no REPLACE_CANONICALIZE_FILE_NAME, no REPLACE_REALPATH, no AC_LIBOBJ).
   56: AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE],
   57: [
   58:   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   59:   AC_CHECK_FUNCS_ONCE([canonicalize_file_name getcwd readlink])
   60:   AC_REQUIRE([gl_DOUBLE_SLASH_ROOT])
   61:   AC_REQUIRE([gl_FUNC_REALPATH_WORKS])
   62:   AC_CHECK_HEADERS_ONCE([sys/param.h])
   63: ])
   64: 
   65: # Check whether realpath works.  Assume that if a platform has both
   66: # realpath and canonicalize_file_name, but the former is broken, then
   67: # so is the latter.
   68: AC_DEFUN([gl_FUNC_REALPATH_WORKS],
   69: [
   70:   AC_CHECK_FUNCS_ONCE([realpath])
   71:   AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
   72:   AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [
   73:     touch conftest.a
   74:     mkdir conftest.d
   75:     AC_RUN_IFELSE([
   76:       AC_LANG_PROGRAM([[
   77:         ]GL_NOCRASH[
   78:         #include <stdlib.h>
   79:         #include <string.h>
   80:       ]], [[
   81:         int result = 0;
   82:         {
   83:           char *name = realpath ("conftest.a", NULL);
   84:           if (!(name && *name == '/'))
   85:             result |= 1;
   86:           free (name);
   87:         }
   88:         {
   89:           char *name = realpath ("conftest.b/../conftest.a", NULL);
   90:           if (name != NULL)
   91:             result |= 2;
   92:           free (name);
   93:         }
   94:         {
   95:           char *name = realpath ("conftest.a/", NULL);
   96:           if (name != NULL)
   97:             result |= 4;
   98:           free (name);
   99:         }
  100:         {
  101:           char *name1 = realpath (".", NULL);
  102:           char *name2 = realpath ("conftest.d//./..", NULL);
  103:           if (! name1 || ! name2 || strcmp (name1, name2))
  104:             result |= 8;
  105:           free (name1);
  106:           free (name2);
  107:         }
  108:         return result;
  109:       ]])
  110:      ],
  111:      [gl_cv_func_realpath_works=yes],
  112:      [gl_cv_func_realpath_works=no],
  113:      [case "$host_os" in
  114:                        # Guess yes on glibc systems.
  115:         *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;;
  116:                        # Guess yes on musl systems.
  117:         *-musl*)       gl_cv_func_realpath_works="guessing yes" ;;
  118:                        # Guess no on native Windows.
  119:         mingw*)        gl_cv_func_realpath_works="guessing no" ;;
  120:                        # If we don't know, assume the worst.
  121:         *)             gl_cv_func_realpath_works="guessing no" ;;
  122:       esac
  123:      ])
  124:     rm -rf conftest.a conftest.d
  125:   ])
  126:   case "$gl_cv_func_realpath_works" in
  127:     *yes)
  128:       AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath()
  129:         can malloc memory, always gives an absolute path, and handles
  130:         trailing slash correctly.])
  131:       ;;
  132:   esac
  133: ])

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>