Commit | Line | Data |
---|---|---|
9c9d63b1 PM |
1 | # fchdir.m4 serial 26 |
2 | dnl Copyright (C) 2006-2021 Free Software Foundation, Inc. | |
6ec2e0f5 SDJ |
3 | dnl This file is free software; the Free Software Foundation |
4 | dnl gives unlimited permission to copy and/or distribute it, | |
5 | dnl with or without modifications, as long as this notice is preserved. | |
6 | ||
7 | AC_DEFUN([gl_FUNC_FCHDIR], | |
8 | [ | |
9 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | |
10 | AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) | |
11 | AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles | |
12 | ||
13 | AC_CHECK_DECLS_ONCE([fchdir]) | |
14 | if test $ac_cv_have_decl_fchdir = no; then | |
15 | HAVE_DECL_FCHDIR=0 | |
16 | fi | |
17 | ||
18 | AC_REQUIRE([gl_TEST_FCHDIR]) | |
19 | if test $HAVE_FCHDIR = 0; then | |
20 | AC_LIBOBJ([fchdir]) | |
21 | gl_PREREQ_FCHDIR | |
22 | AC_DEFINE([REPLACE_FCHDIR], [1], | |
23 | [Define to 1 if gnulib's fchdir() replacement is used.]) | |
24 | dnl We must also replace anything that can manipulate a directory fd, | |
25 | dnl to keep our bookkeeping up-to-date. We don't have to replace | |
26 | dnl fstatat, since no platform has fstatat but lacks fchdir. | |
27 | AC_CACHE_CHECK([whether open can visit directories], | |
28 | [gl_cv_func_open_directory_works], | |
9c9d63b1 PM |
29 | [AC_RUN_IFELSE( |
30 | [AC_LANG_PROGRAM( | |
31 | [[#include <fcntl.h> | |
32 | ]GL_MDA_DEFINES], | |
33 | [[return open(".", O_RDONLY) < 0;]])], | |
34 | [gl_cv_func_open_directory_works=yes], | |
35 | [gl_cv_func_open_directory_works=no], | |
36 | [case "$host_os" in | |
37 | # Guess yes on Linux systems. | |
38 | linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; | |
39 | # Guess yes on glibc systems. | |
40 | *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; | |
41 | # Guess no on native Windows. | |
42 | mingw*) gl_cv_func_open_directory_works="guessing no" ;; | |
43 | # If we don't know, obey --enable-cross-guesses. | |
44 | *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; | |
45 | esac | |
46 | ])]) | |
6ec2e0f5 SDJ |
47 | case "$gl_cv_func_open_directory_works" in |
48 | *yes) ;; | |
49 | *) | |
50 | AC_DEFINE([REPLACE_OPEN_DIRECTORY], [1], [Define to 1 if open() should | |
51 | work around the inability to open a directory.]) | |
52 | ;; | |
53 | esac | |
54 | fi | |
55 | ]) | |
56 | ||
57 | # Determine whether to use the overrides in lib/fchdir.c. | |
58 | AC_DEFUN([gl_TEST_FCHDIR], | |
59 | [ | |
60 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | |
61 | AC_CHECK_FUNCS_ONCE([fchdir]) | |
62 | if test $ac_cv_func_fchdir = no; then | |
63 | HAVE_FCHDIR=0 | |
64 | fi | |
65 | ]) | |
66 | ||
67 | # Prerequisites of lib/fchdir.c. | |
68 | AC_DEFUN([gl_PREREQ_FCHDIR], [:]) |