Skip to content

Commit 3cc9320

Browse files
malexzxajdavis
authored andcommitted
CDRIVER-2080 cmake checks socket API params
Necessary for HP-UX and other legacy platforms.
1 parent bfc9afb commit 3cc9320

File tree

1 file changed

+48
-3
lines changed

1 file changed

+48
-3
lines changed

CMakeLists.txt

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,6 @@ if (MINGW)
167167
set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_CRT_RAND_S")
168168
endif ()
169169

170-
# Reasonable default. CheckCompiler.m4 checks thoroughly for HP-UX's sake.
171-
set (MONGOC_SOCKET_ARG2 "struct sockaddr")
172-
173170
include(CheckTypeSize)
174171
if (MSVC)
175172
SET(CMAKE_EXTRA_INCLUDE_FILES "ws2tcpip.h")
@@ -187,6 +184,54 @@ else()
187184
set (MONGOC_SOCKET_ARG3 "int")
188185
endif()
189186

187+
function (mongoc_get_accept_args ARG2 ARG3)
188+
SET (VAR 0)
189+
foreach (ARG2_VAL "struct sockaddr" "void")
190+
foreach (ARG3_VAL "socklen_t" "size_t" "int")
191+
192+
MATH (EXPR VAR "${VAR}+1")
193+
194+
FILE (WRITE ${CMAKE_CURRENT_BINARY_DIR}/accept_test${VAR}.cxx
195+
"#include <sys/types.h>
196+
#include <sys/socket.h>
197+
198+
int main ()
199+
{
200+
int a = 0;
201+
${ARG2_VAL} *b = 0;
202+
${ARG3_VAL} *c = 0;
203+
accept (a, b, c);
204+
return 0;
205+
}
206+
")
207+
208+
TRY_COMPILE (RES ${CMAKE_CURRENT_BINARY_DIR}
209+
${CMAKE_CURRENT_BINARY_DIR}/accept_test${VAR}.cxx CMAKE_FLAGS
210+
"-Werror -DCMAKE_CXX_LINK_EXECUTABLE='echo not linking now...'" OUTPUT_VARIABLE LOG2)
211+
212+
if (RES)
213+
message (
214+
STATUS
215+
"Detected parameters: accept (int, ${ARG2_VAL} *, ${ARG3_VAL} *)")
216+
217+
set (${ARG2} ${ARG2_VAL} PARENT_SCOPE)
218+
set (${ARG3} ${ARG3_VAL} PARENT_SCOPE)
219+
return ()
220+
endif ()
221+
222+
endforeach ()
223+
endforeach ()
224+
225+
endfunction ()
226+
227+
# Reasonable defaults.
228+
set (MONGOC_SOCKET_ARG2 "struct sockaddr")
229+
set (MONGOC_SOCKET_ARG3 "socklen_t")
230+
231+
if (NOT MSVC)
232+
mongoc_get_accept_args (MONGOC_SOCKET_ARG2 MONGOC_SOCKET_ARG3)
233+
endif ()
234+
190235
set (SOURCE_DIR "${PROJECT_SOURCE_DIR}/")
191236

192237
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/build/cmake)

0 commit comments

Comments
 (0)