Commit | Line | Data |
---|---|---|
6ec2e0f5 SDJ |
1 | # fchdir.m4 serial 21 |
2 | dnl Copyright (C) 2006-2016 Free Software Foundation, Inc. | |
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], | |
29 | [AC_RUN_IFELSE([AC_LANG_PROGRAM([[#include <fcntl.h> | |
30 | ]], [return open(".", O_RDONLY) < 0;])], | |
31 | [gl_cv_func_open_directory_works=yes], | |
32 | [gl_cv_func_open_directory_works=no], | |
33 | [case "$host_os" in | |
34 | # Guess yes on glibc systems. | |
35 | *-gnu*) gl_cv_func_open_directory_works="guessing yes" ;; | |
36 | # If we don't know, assume the worst. | |
37 | *) gl_cv_func_open_directory_works="guessing no" ;; | |
38 | esac | |
39 | ])]) | |
40 | case "$gl_cv_func_open_directory_works" in | |
41 | *yes) ;; | |
42 | *) | |
43 | AC_DEFINE([REPLACE_OPEN_DIRECTORY], [1], [Define to 1 if open() should | |
44 | work around the inability to open a directory.]) | |
45 | ;; | |
46 | esac | |
47 | fi | |
48 | ]) | |
49 | ||
50 | # Determine whether to use the overrides in lib/fchdir.c. | |
51 | AC_DEFUN([gl_TEST_FCHDIR], | |
52 | [ | |
53 | AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) | |
54 | AC_CHECK_FUNCS_ONCE([fchdir]) | |
55 | if test $ac_cv_func_fchdir = no; then | |
56 | HAVE_FCHDIR=0 | |
57 | fi | |
58 | ]) | |
59 | ||
60 | # Prerequisites of lib/fchdir.c. | |
61 | AC_DEFUN([gl_PREREQ_FCHDIR], [:]) |