| 1 | # serial 16 |
| 2 | |
| 3 | # Copyright (C) 2001, 2003-2004, 2006, 2008-2019 Free Software Foundation, Inc. |
| 4 | # This file is free software; the Free Software Foundation |
| 5 | # gives unlimited permission to copy and/or distribute it, |
| 6 | # with or without modifications, as long as this notice is preserved. |
| 7 | |
| 8 | # On some systems, mkdir ("foo/", 0700) fails because of the trailing slash. |
| 9 | # On others, mkdir ("foo/./", 0700) mistakenly succeeds. |
| 10 | # On such systems, arrange to use a wrapper function. |
| 11 | AC_DEFUN([gl_FUNC_MKDIR], |
| 12 | [dnl |
| 13 | AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) |
| 14 | AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles |
| 15 | AC_CHECK_HEADERS_ONCE([unistd.h]) |
| 16 | AC_CACHE_CHECK([whether mkdir handles trailing slash], |
| 17 | [gl_cv_func_mkdir_trailing_slash_works], |
| 18 | [rm -rf conftest.dir |
| 19 | AC_RUN_IFELSE([AC_LANG_PROGRAM([[ |
| 20 | # include <sys/types.h> |
| 21 | # include <sys/stat.h> |
| 22 | ]], [return mkdir ("conftest.dir/", 0700);])], |
| 23 | [gl_cv_func_mkdir_trailing_slash_works=yes], |
| 24 | [gl_cv_func_mkdir_trailing_slash_works=no], |
| 25 | [case "$host_os" in |
| 26 | # Guess yes on Linux systems. |
| 27 | linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; |
| 28 | # Guess yes on glibc systems. |
| 29 | *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; |
| 30 | # Guess yes on MSVC, no on mingw. |
| 31 | mingw*) AC_EGREP_CPP([Known], [ |
| 32 | #ifdef _MSC_VER |
| 33 | Known |
| 34 | #endif |
| 35 | ], |
| 36 | [gl_cv_func_mkdir_trailing_slash_works="guessing yes"], |
| 37 | [gl_cv_func_mkdir_trailing_slash_works="guessing no"]) |
| 38 | ;; |
| 39 | # If we don't know, obey --enable-cross-guesses. |
| 40 | *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;; |
| 41 | esac |
| 42 | ]) |
| 43 | rm -rf conftest.dir |
| 44 | ] |
| 45 | ) |
| 46 | case "$gl_cv_func_mkdir_trailing_slash_works" in |
| 47 | *yes) ;; |
| 48 | *) |
| 49 | REPLACE_MKDIR=1 |
| 50 | ;; |
| 51 | esac |
| 52 | |
| 53 | AC_CACHE_CHECK([whether mkdir handles trailing dot], |
| 54 | [gl_cv_func_mkdir_trailing_dot_works], |
| 55 | [rm -rf conftest.dir |
| 56 | AC_RUN_IFELSE([AC_LANG_PROGRAM([[ |
| 57 | # include <sys/types.h> |
| 58 | # include <sys/stat.h> |
| 59 | ]], [return !mkdir ("conftest.dir/./", 0700);])], |
| 60 | [gl_cv_func_mkdir_trailing_dot_works=yes], |
| 61 | [gl_cv_func_mkdir_trailing_dot_works=no], |
| 62 | [case "$host_os" in |
| 63 | # Guess yes on glibc systems. |
| 64 | *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; |
| 65 | # Guess yes on musl systems. |
| 66 | *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; |
| 67 | # Guess no on native Windows. |
| 68 | mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; |
| 69 | # If we don't know, obey --enable-cross-guesses. |
| 70 | *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;; |
| 71 | esac |
| 72 | ]) |
| 73 | rm -rf conftest.dir |
| 74 | ] |
| 75 | ) |
| 76 | case "$gl_cv_func_mkdir_trailing_dot_works" in |
| 77 | *yes) ;; |
| 78 | *) |
| 79 | REPLACE_MKDIR=1 |
| 80 | AC_DEFINE([FUNC_MKDIR_DOT_BUG], [1], [Define to 1 if mkdir mistakenly |
| 81 | creates a directory given with a trailing dot component.]) |
| 82 | ;; |
| 83 | esac |
| 84 | ]) |