xref: /netbsd-src/external/gpl3/gdb/dist/gnulib/import/m4/mkdir.m4 (revision 924795e69c8bb3f17afd8fcbb799710cc1719dc4)
1# serial 17
2
3# Copyright (C) 2001, 2003-2004, 2006, 2008-2022 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.
11AC_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(
20       [AC_LANG_PROGRAM([[
21          #include <sys/types.h>
22          #include <sys/stat.h>
23          ]GL_MDA_DEFINES],
24          [[return mkdir ("conftest.dir/", 0700);]])],
25       [gl_cv_func_mkdir_trailing_slash_works=yes],
26       [gl_cv_func_mkdir_trailing_slash_works=no],
27       [case "$host_os" in
28                           # Guess yes on Linux systems.
29          linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
30                           # Guess yes on glibc systems.
31          *-gnu* | gnu*)   gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;;
32                           # Guess yes on MSVC, no on mingw.
33          mingw*)          AC_EGREP_CPP([Known], [
34#ifdef _MSC_VER
35 Known
36#endif
37                             ],
38                             [gl_cv_func_mkdir_trailing_slash_works="guessing yes"],
39                             [gl_cv_func_mkdir_trailing_slash_works="guessing no"])
40                           ;;
41                           # If we don't know, obey --enable-cross-guesses.
42          *)               gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;;
43        esac
44       ])
45     rm -rf conftest.dir
46    ])
47  case "$gl_cv_func_mkdir_trailing_slash_works" in
48    *yes) ;;
49    *)
50      REPLACE_MKDIR=1
51      ;;
52  esac
53
54  AC_CACHE_CHECK([whether mkdir handles trailing dot],
55    [gl_cv_func_mkdir_trailing_dot_works],
56    [rm -rf conftest.dir
57     AC_RUN_IFELSE(
58       [AC_LANG_PROGRAM([[
59          #include <sys/types.h>
60          #include <sys/stat.h>
61          ]GL_MDA_DEFINES],
62          [[return !mkdir ("conftest.dir/./", 0700);]])],
63       [gl_cv_func_mkdir_trailing_dot_works=yes],
64       [gl_cv_func_mkdir_trailing_dot_works=no],
65       [case "$host_os" in
66                         # Guess yes on glibc systems.
67          *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
68                         # Guess yes on musl systems.
69          *-musl*)       gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;;
70                         # Guess no on native Windows.
71          mingw*)        gl_cv_func_mkdir_trailing_dot_works="guessing no" ;;
72                         # If we don't know, obey --enable-cross-guesses.
73          *)             gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;;
74        esac
75       ])
76     rm -rf conftest.dir
77    ]
78  )
79  case "$gl_cv_func_mkdir_trailing_dot_works" in
80    *yes) ;;
81    *)
82      REPLACE_MKDIR=1
83      AC_DEFINE([FUNC_MKDIR_DOT_BUG], [1], [Define to 1 if mkdir mistakenly
84        creates a directory given with a trailing dot component.])
85      ;;
86  esac
87])
88