New module 'dup'.
[gnulib.git] / m4 / dup.m4
1 # dup.m4 serial 1
2 dnl Copyright (C) 2011 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_DUP],
8 [
9   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
10   AC_REQUIRE([AC_CANONICAL_HOST])
11   AC_CHECK_HEADERS_ONCE([unistd.h])
12   AC_CACHE_CHECK([whether dup supports bad arguments], [gl_cv_func_dup_works],
13     [AC_RUN_IFELSE(
14        [AC_LANG_PROGRAM([[
15 #if HAVE_UNISTD_H
16 # include <unistd.h>
17 #else
18 # include <io.h>
19 #endif
20 #include <errno.h>
21 ]],
22           [[if (dup (-1) != -1)
23               return 1;
24             if (errno != EBADF)
25               return 2;
26             return 0;
27           ]])],
28        [gl_cv_func_dup_works=yes],
29        [gl_cv_func_dup_works=no],
30        [case "$host_os" in
31           mingw*) gl_cv_func_dup_works="guessing no" ;;
32           *)      gl_cv_func_dup_works="guessing yes" ;;
33         esac
34        ])
35     ])
36   case "$gl_cv_func_dup_works" in
37     *no) REPLACE_DUP=1 ;;
38   esac
39   dnl Replace dup() for supporting the gnulib-defined fchdir() function,
40   dnl to keep fchdir's bookkeeping up-to-date.
41   m4_ifdef([gl_FUNC_FCHDIR], [
42     gl_TEST_FCHDIR
43     if test $HAVE_FCHDIR = 0; then
44       REPLACE_DUP=1
45     fi
46   ])
47 ])
48
49 # Prerequisites of lib/dup.c.
50 AC_DEFUN([gl_PREREQ_DUP], [
51   AC_REQUIRE([AC_C_INLINE])
52 ])