comparison mupdf-source/thirdparty/curl/CMake/OtherTests.cmake @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 include(CheckCSourceCompiles)
2 # The begin of the sources (macros and includes)
3 set(_source_epilogue "#undef inline")
4
5 macro(add_header_include check header)
6 if(${check})
7 set(_source_epilogue "${_source_epilogue}\n#include <${header}>")
8 endif()
9 endmacro()
10
11 set(signature_call_conv)
12 if(HAVE_WINDOWS_H)
13 add_header_include(HAVE_WINSOCK2_H "winsock2.h")
14 add_header_include(HAVE_WINDOWS_H "windows.h")
15 add_header_include(HAVE_WINSOCK_H "winsock.h")
16 set(_source_epilogue
17 "${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif")
18 set(signature_call_conv "PASCAL")
19 if(HAVE_LIBWS2_32)
20 set(CMAKE_REQUIRED_LIBRARIES ws2_32)
21 endif()
22 else()
23 add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
24 add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h")
25 endif()
26
27 set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
28
29 check_c_source_compiles("${_source_epilogue}
30 int main(void) {
31 recv(0, 0, 0, 0);
32 return 0;
33 }" curl_cv_recv)
34 if(curl_cv_recv)
35 if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
36 foreach(recv_retv "int" "ssize_t" )
37 foreach(recv_arg1 "SOCKET" "int" )
38 foreach(recv_arg2 "char *" "void *" )
39 foreach(recv_arg3 "int" "size_t" "socklen_t" "unsigned int")
40 foreach(recv_arg4 "int" "unsigned int")
41 if(NOT curl_cv_func_recv_done)
42 unset(curl_cv_func_recv_test CACHE)
43 check_c_source_compiles("
44 ${_source_epilogue}
45 extern ${recv_retv} ${signature_call_conv}
46 recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4});
47 int main(void) {
48 ${recv_arg1} s=0;
49 ${recv_arg2} buf=0;
50 ${recv_arg3} len=0;
51 ${recv_arg4} flags=0;
52 ${recv_retv} res = recv(s, buf, len, flags);
53 (void) res;
54 return 0;
55 }"
56 curl_cv_func_recv_test)
57 message(STATUS
58 "Tested: ${recv_retv} recv(${recv_arg1}, ${recv_arg2}, ${recv_arg3}, ${recv_arg4})")
59 if(curl_cv_func_recv_test)
60 set(curl_cv_func_recv_args
61 "${recv_arg1},${recv_arg2},${recv_arg3},${recv_arg4},${recv_retv}")
62 set(RECV_TYPE_ARG1 "${recv_arg1}")
63 set(RECV_TYPE_ARG2 "${recv_arg2}")
64 set(RECV_TYPE_ARG3 "${recv_arg3}")
65 set(RECV_TYPE_ARG4 "${recv_arg4}")
66 set(RECV_TYPE_RETV "${recv_retv}")
67 set(HAVE_RECV 1)
68 set(curl_cv_func_recv_done 1)
69 endif()
70 endif()
71 endforeach()
72 endforeach()
73 endforeach()
74 endforeach()
75 endforeach()
76 else()
77 string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG1 "${curl_cv_func_recv_args}")
78 string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG2 "${curl_cv_func_recv_args}")
79 string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" RECV_TYPE_ARG3 "${curl_cv_func_recv_args}")
80 string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" RECV_TYPE_ARG4 "${curl_cv_func_recv_args}")
81 string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" RECV_TYPE_RETV "${curl_cv_func_recv_args}")
82 endif()
83
84 if("${curl_cv_func_recv_args}" STREQUAL "unknown")
85 message(FATAL_ERROR "Cannot find proper types to use for recv args")
86 endif()
87 else()
88 message(FATAL_ERROR "Unable to link function recv")
89 endif()
90 set(curl_cv_func_recv_args "${curl_cv_func_recv_args}" CACHE INTERNAL "Arguments for recv")
91 set(HAVE_RECV 1)
92
93 check_c_source_compiles("${_source_epilogue}
94 int main(void) {
95 send(0, 0, 0, 0);
96 return 0;
97 }" curl_cv_send)
98 if(curl_cv_send)
99 if(NOT DEFINED curl_cv_func_send_args OR "${curl_cv_func_send_args}" STREQUAL "unknown")
100 foreach(send_retv "int" "ssize_t" )
101 foreach(send_arg1 "SOCKET" "int" "ssize_t" )
102 foreach(send_arg2 "const char *" "const void *" "void *" "char *")
103 foreach(send_arg3 "int" "size_t" "socklen_t" "unsigned int")
104 foreach(send_arg4 "int" "unsigned int")
105 if(NOT curl_cv_func_send_done)
106 unset(curl_cv_func_send_test CACHE)
107 check_c_source_compiles("
108 ${_source_epilogue}
109 extern ${send_retv} ${signature_call_conv}
110 send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4});
111 int main(void) {
112 ${send_arg1} s=0;
113 ${send_arg2} buf=0;
114 ${send_arg3} len=0;
115 ${send_arg4} flags=0;
116 ${send_retv} res = send(s, buf, len, flags);
117 (void) res;
118 return 0;
119 }"
120 curl_cv_func_send_test)
121 message(STATUS
122 "Tested: ${send_retv} send(${send_arg1}, ${send_arg2}, ${send_arg3}, ${send_arg4})")
123 if(curl_cv_func_send_test)
124 string(REGEX REPLACE "(const) .*" "\\1" send_qual_arg2 "${send_arg2}")
125 string(REGEX REPLACE "const (.*)" "\\1" send_arg2 "${send_arg2}")
126 set(curl_cv_func_send_args
127 "${send_arg1},${send_arg2},${send_arg3},${send_arg4},${send_retv},${send_qual_arg2}")
128 set(SEND_TYPE_ARG1 "${send_arg1}")
129 set(SEND_TYPE_ARG2 "${send_arg2}")
130 set(SEND_TYPE_ARG3 "${send_arg3}")
131 set(SEND_TYPE_ARG4 "${send_arg4}")
132 set(SEND_TYPE_RETV "${send_retv}")
133 set(HAVE_SEND 1)
134 set(curl_cv_func_send_done 1)
135 endif()
136 endif()
137 endforeach()
138 endforeach()
139 endforeach()
140 endforeach()
141 endforeach()
142 else()
143 string(REGEX REPLACE "^([^,]*),[^,]*,[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG1 "${curl_cv_func_send_args}")
144 string(REGEX REPLACE "^[^,]*,([^,]*),[^,]*,[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG2 "${curl_cv_func_send_args}")
145 string(REGEX REPLACE "^[^,]*,[^,]*,([^,]*),[^,]*,[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG3 "${curl_cv_func_send_args}")
146 string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,([^,]*),[^,]*,[^,]*$" "\\1" SEND_TYPE_ARG4 "${curl_cv_func_send_args}")
147 string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,([^,]*),[^,]*$" "\\1" SEND_TYPE_RETV "${curl_cv_func_send_args}")
148 string(REGEX REPLACE "^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,([^,]*)$" "\\1" SEND_QUAL_ARG2 "${curl_cv_func_send_args}")
149 endif()
150
151 if("${curl_cv_func_send_args}" STREQUAL "unknown")
152 message(FATAL_ERROR "Cannot find proper types to use for send args")
153 endif()
154 set(SEND_QUAL_ARG2 "const")
155 else()
156 message(FATAL_ERROR "Unable to link function send")
157 endif()
158 set(curl_cv_func_send_args "${curl_cv_func_send_args}" CACHE INTERNAL "Arguments for send")
159 set(HAVE_SEND 1)
160
161 check_c_source_compiles("${_source_epilogue}
162 int main(void) {
163 int flag = MSG_NOSIGNAL;
164 (void)flag;
165 return 0;
166 }" HAVE_MSG_NOSIGNAL)
167
168 if(NOT HAVE_WINDOWS_H)
169 add_header_include(HAVE_SYS_TIME_H "sys/time.h")
170 add_header_include(TIME_WITH_SYS_TIME "time.h")
171 add_header_include(HAVE_TIME_H "time.h")
172 endif()
173 check_c_source_compiles("${_source_epilogue}
174 int main(void) {
175 struct timeval ts;
176 ts.tv_sec = 0;
177 ts.tv_usec = 0;
178 (void)ts;
179 return 0;
180 }" HAVE_STRUCT_TIMEVAL)
181
182 set(HAVE_SIG_ATOMIC_T 1)
183 set(CMAKE_REQUIRED_FLAGS)
184 if(HAVE_SIGNAL_H)
185 set(CMAKE_REQUIRED_FLAGS "-DHAVE_SIGNAL_H")
186 set(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
187 endif()
188 check_type_size("sig_atomic_t" SIZEOF_SIG_ATOMIC_T)
189 if(HAVE_SIZEOF_SIG_ATOMIC_T)
190 check_c_source_compiles("
191 #ifdef HAVE_SIGNAL_H
192 # include <signal.h>
193 #endif
194 int main(void) {
195 static volatile sig_atomic_t dummy = 0;
196 (void)dummy;
197 return 0;
198 }" HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
199 if(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
200 set(HAVE_SIG_ATOMIC_T_VOLATILE 1)
201 endif()
202 endif()
203
204 if(HAVE_WINDOWS_H)
205 set(CMAKE_EXTRA_INCLUDE_FILES winsock2.h)
206 else()
207 set(CMAKE_EXTRA_INCLUDE_FILES)
208 if(HAVE_SYS_SOCKET_H)
209 set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
210 endif()
211 endif()
212
213 check_type_size("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE)
214 if(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
215 set(HAVE_STRUCT_SOCKADDR_STORAGE 1)
216 endif()
217
218 unset(CMAKE_TRY_COMPILE_TARGET_TYPE)
219
220 if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
221 # if not cross-compilation...
222 include(CheckCSourceRuns)
223 set(CMAKE_REQUIRED_FLAGS "")
224 if(HAVE_SYS_POLL_H)
225 set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H")
226 elseif(HAVE_POLL_H)
227 set(CMAKE_REQUIRED_FLAGS "-DHAVE_POLL_H")
228 endif()
229 check_c_source_runs("
230 #include <stdlib.h>
231 #include <sys/time.h>
232
233 #ifdef HAVE_SYS_POLL_H
234 # include <sys/poll.h>
235 #elif HAVE_POLL_H
236 # include <poll.h>
237 #endif
238
239 int main(void)
240 {
241 if(0 != poll(0, 0, 10)) {
242 return 1; /* fail */
243 }
244 else {
245 /* detect the 10.12 poll() breakage */
246 struct timeval before, after;
247 int rc;
248 size_t us;
249
250 gettimeofday(&before, NULL);
251 rc = poll(NULL, 0, 500);
252 gettimeofday(&after, NULL);
253
254 us = (after.tv_sec - before.tv_sec) * 1000000 +
255 (after.tv_usec - before.tv_usec);
256
257 if(us < 400000) {
258 return 1;
259 }
260 }
261 return 0;
262 }" HAVE_POLL_FINE)
263 endif()
264