1 # ttyname_r.m4 serial 7
2 dnl Copyright (C) 2010-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.
7 AC_DEFUN([gl_FUNC_TTYNAME_R],
9 AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
11 dnl Persuade Solaris <unistd.h> to provide the POSIX compliant declaration of
13 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
15 AC_CHECK_DECLS_ONCE([ttyname_r])
16 if test $ac_cv_have_decl_ttyname_r = no; then
20 AC_CHECK_FUNCS([ttyname_r])
21 if test $ac_cv_func_ttyname_r = no; then
25 dnl On MacOS X 10.4 (and Solaris 10 without gl_USE_SYSTEM_EXTENSIONS)
26 dnl the return type is 'char *', not 'int'.
27 AC_CACHE_CHECK([whether ttyname_r is compatible with its POSIX signature],
28 [gl_cv_func_ttyname_r_posix],
32 #include <unistd.h>]],
33 [[*ttyname_r (0, NULL, 0);]])
35 [gl_cv_func_ttyname_r_posix=no],
36 [gl_cv_func_ttyname_r_posix=yes])
38 if test $gl_cv_func_ttyname_r_posix = no; then
41 AC_DEFINE([HAVE_POSIXDECL_TTYNAME_R], [1],
42 [Define if the ttyname_r function has a POSIX compliant declaration.])
43 dnl On Solaris 10, both ttyname_r functions (the one with the non-POSIX
44 dnl declaration and the one with the POSIX declaration) refuse to do
45 dnl anything when the output buffer is less than 128 bytes large.
46 dnl On OSF/1 5.1, ttyname_r ignores the buffer size and assumes the
47 dnl buffer is large enough.
48 AC_REQUIRE([AC_CANONICAL_HOST])
49 AC_CACHE_CHECK([whether ttyname_r works with small buffers],
50 [gl_cv_func_ttyname_r_works],
52 dnl Initial guess, used when cross-compiling or when /dev/tty cannot
56 # Guess no on Solaris.
57 solaris*) gl_cv_func_ttyname_r_works="guessing no" ;;
59 osf*) gl_cv_func_ttyname_r_works="guessing no" ;;
60 # Guess yes otherwise.
61 *) gl_cv_func_ttyname_r_works="guessing yes" ;;
73 char buf[31]; /* use any size < 128 here */
75 fd = open ("/dev/tty", O_RDONLY);
78 else if (ttyname_r (fd, buf, sizeof (buf)) != 0)
80 else if (ttyname_r (fd, buf, 1) == 0)
84 [gl_cv_func_ttyname_r_works=yes],
86 17 | 18) gl_cv_func_ttyname_r_works=no ;;
90 case "$gl_cv_func_ttyname_r_works" in
92 *) REPLACE_TTYNAME_R=1 ;;
96 if test $HAVE_TTYNAME_R = 0 || test $REPLACE_TTYNAME_R = 1; then
97 AC_LIBOBJ([ttyname_r])
102 # Prerequisites of lib/ttyname_r.c.
103 AC_DEFUN([gl_PREREQ_TTYNAME_R], [
104 AC_CHECK_FUNCS([ttyname])