1
1
#[=============================================================================[
2
- # CheckTtynameR
2
+ Check ttyname_r().
3
3
4
- Check `ttyname_r()`.
5
-
6
- On Solaris/illumos `ttyname_r()` works only with larger buffers (>= 128),
7
- unlike, for example, on Linux and other systems, where buffer size can be any
8
- `size_t` size, also < 128. PHP code uses `ttyname_r()` with large buffers, so it
4
+ On Solaris/illumos ttyname_r() works only with larger buffers (>= 128), unlike,
5
+ for example, on Linux and other systems, where buffer size can be any
6
+ 'size_t' size, also < 128. PHP code uses ttyname_r() with large buffers, so it
9
7
wouldn't be necessary to check small buffers but the run check below is kept for
10
8
brevity.
11
9
12
10
On modern systems a simpler check is sufficient in the future:
13
11
14
- ```cmake
15
- check_symbol_exists(ttyname_r unistd.h HAVE_TTYNAME_R)
16
- ```
17
-
18
- ## Cache variables
19
-
20
- * `HAVE_TTYNAME_R`
21
-
22
- Whether `ttyname_r()` works as expected.
12
+ check_symbol_exists(ttyname_r unistd.h HAVE_TTYNAME_R)
23
13
24
- ## Usage
14
+ Result variables:
25
15
26
- ```cmake
27
- # CMakeLists.txt
28
- include(cmake/CheckTtynameR.cmake)
29
- ```
16
+ * HAVE_TTYNAME_R - Whether ttyname_r() works as expected.
30
17
#]=============================================================================]
31
18
32
19
include_guard (GLOBAL )
@@ -36,6 +23,20 @@ include(CheckSourceRuns)
36
23
include (CMakePushCheckState )
37
24
include (PHP/SystemExtensions )
38
25
26
+ set (HAVE_TTYNAME_R FALSE )
27
+
28
+ # Skip in consecutive configuration phases.
29
+ if (
30
+ DEFINED PHP_EXT_POSIX_HAS_TTYNAME_R_PROTOTYPE
31
+ OR DEFINED PHP_EXT_POSIX_HAS_TTYNAME_R
32
+ )
33
+ if (PHP_EXT_POSIX_HAS_TTYNAME_R )
34
+ set (HAVE_TTYNAME_R TRUE )
35
+ endif ()
36
+
37
+ return ()
38
+ endif ()
39
+
39
40
message (CHECK_START "Checking for working ttyname_r()" )
40
41
41
42
cmake_push_check_state (RESET )
@@ -54,21 +55,21 @@ cmake_push_check_state(RESET)
54
55
"int ttyname_r(int fd, char *buf, size_t buflen)"
55
56
"0"
56
57
"unistd.h"
57
- PHP_HAS_TTYNAME_R_PROTOTYPE
58
+ PHP_EXT_POSIX_HAS_TTYNAME_R_PROTOTYPE
58
59
)
59
60
60
- if (NOT PHP_HAS_TTYNAME_R_PROTOTYPE )
61
+ if (NOT PHP_EXT_POSIX_HAS_TTYNAME_R_PROTOTYPE )
61
62
message (CHECK_FAIL "no (non-standard declaration)" )
62
63
cmake_pop_check_state ()
63
64
return ()
64
65
endif ()
65
66
66
67
if (
67
- NOT DEFINED HAVE_TTYNAME_R_EXITCODE
68
- AND CMAKE_CROSSCOMPILING
68
+ CMAKE_CROSSCOMPILING
69
69
AND NOT CMAKE_CROSSCOMPILING_EMULATOR
70
+ AND NOT DEFINED PHP_EXT_POSIX_HAS_TTYNAME_R_EXITCODE
70
71
)
71
- set (HAVE_TTYNAME_R_EXITCODE 0 )
72
+ set (PHP_EXT_POSIX_HAS_TTYNAME_R_EXITCODE 0 )
72
73
endif ()
73
74
74
75
# PHP Autotools-based build system check uses a different return below due
@@ -92,8 +93,9 @@ cmake_push_check_state(RESET)
92
93
93
94
return ttyname_r(0, buf, buflen) ? 1 : 0;
94
95
}
95
- ]] HAVE_TTYNAME_R )
96
- if (HAVE_TTYNAME_R )
96
+ ]] PHP_EXT_POSIX_HAS_TTYNAME_R )
97
+ if (PHP_EXT_POSIX_HAS_TTYNAME_R )
98
+ set (HAVE_TTYNAME_R TRUE )
97
99
message (CHECK_PASS "yes" )
98
100
else ()
99
101
message (CHECK_FAIL "no (posix_ttyname() will be thread-unsafe)" )
0 commit comments