@@ -164,15 +164,34 @@ if(CMakePythonDistributions_SUPERBUILD)
164
164
#
165
165
if (NOT DEFINED CMakeProject_BINARY_DIR )
166
166
167
- # cache arguments common to LibUV and CMake
168
- set (_common_cache_args )
167
+ # glibc check
168
+ if (UNIX AND NOT APPLE )
169
+ # as of CMake 3.23.0, the minimum supported version of libuv is 1.28.0.
170
+ # this implies that the minimum supported glibc version is 2.12
171
+ # https://github.com/libuv/libuv/blob/v1.x/SUPPORTED_PLATFORMS.md
172
+ include (CheckSymbolExists )
173
+ check_symbol_exists (__GLIBC__ "stdlib.h" HAS_GLIBC_MAJOR )
174
+ check_symbol_exists (__GLIBC_MINOR__ "stdlib.h" HAS_GLIBC_MINOR )
175
+ if (HAS_GLIBC_MAJOR AND HAS_GLIBC_MINOR AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" ))
176
+ execute_process (COMMAND echo __GLIBC__ COMMAND "${CMAKE_CXX_COMPILER} " -E -P -imacros stdlib.h - OUTPUT_VARIABLE GLIBC_MAJOR_ )
177
+ string (STRIP "${GLIBC_MAJOR_} " GLIBC_MAJOR )
178
+ execute_process (COMMAND echo __GLIBC_MINOR__ COMMAND "${CMAKE_CXX_COMPILER} " -E -P -imacros stdlib.h - OUTPUT_VARIABLE GLIBC_MINOR_ )
179
+ string (STRIP "${GLIBC_MINOR_} " GLIBC_MINOR )
180
+ if ("${GLIBC_MAJOR} .${GLIBC_MINOR} " VERSION_LESS "2.12" )
181
+ message (FATAL_ERROR "GLIBC ${GLIBC_MAJOR} .${GLIBC_MINOR} not supported" )
182
+ endif ()
183
+ endif ()
184
+ endif ()
185
+
186
+ # cmake cache arguments
187
+ set (_cmake_cache_args )
169
188
if (DEFINED CMAKE_BUILD_TYPE )
170
- list (APPEND _common_cache_args
189
+ list (APPEND _cmake_cache_args
171
190
-DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
172
191
)
173
192
endif ()
174
193
if (DEFINED CMAKE_TOOLCHAIN_FILE )
175
- list (APPEND _common_cache_args
194
+ list (APPEND _cmake_cache_args
176
195
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
177
196
)
178
197
endif ()
@@ -183,81 +202,13 @@ if(CMakePythonDistributions_SUPERBUILD)
183
202
CMAKE_JOB_POOL_LINK
184
203
)
185
204
if (DEFINED ${var_name} )
186
- list (APPEND _common_cache_args
205
+ list (APPEND _cmake_cache_args
187
206
-D${var_name}:STRING=${${var_name}}
188
207
)
189
208
message (STATUS "SuperBuild - CMakeProject-build - ${var_name} : ${${var_name} }" )
190
209
endif ()
191
210
endforeach ()
192
211
193
- set (_common_args )
194
- if (UNIX AND (NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" ))
195
- # Since CMAKE_C_FLAGS and CMAKE_EXE_LINKER_FLAGS arguments contain spaces, we generate an initial
196
- # cache file.
197
- file (WRITE "${CMAKE_BINARY_DIR} /initial-cache.txt"
198
- "set(CMAKE_C_FLAGS \" -D_POSIX_C_SOURCE=199506L -D_POSIX_SOURCE=1 -D_SVID_SOURCE=1 -D_BSD_SOURCE=1\" CACHE STRING \" Initial cache\" FORCE)
199
- set(CMAKE_EXE_LINKER_FLAGS \" -lstdc++ -lgcc -lrt\" CACHE STRING \" Initial cache\" FORCE)
200
- " )
201
- set (_common_args
202
- CMAKE_ARGS -C "${CMAKE_BINARY_DIR} /initial-cache.txt"
203
- )
204
- endif ()
205
-
206
- # cache arguments for CMake
207
- set (_cmake_cache_args )
208
-
209
- # libuv
210
- set (UseCustomLibUV OFF )
211
- if (UNIX AND NOT APPLE )
212
- # libuv 1.23.0 is the last version to build on CentOS 5 (or glibc < 2.12)
213
- # Use libuv 1.23.0 instead of cmake embedded libuv when detecting glibc < 2.12
214
- # https://github.com/libuv/libuv/blob/v1.x/SUPPORTED_PLATFORMS.md
215
- include (CheckSymbolExists )
216
- check_symbol_exists (__GLIBC__ "stdlib.h" HAS_GLIBC_MAJOR )
217
- check_symbol_exists (__GLIBC_MINOR__ "stdlib.h" HAS_GLIBC_MINOR )
218
- if (HAS_GLIBC_MAJOR AND HAS_GLIBC_MINOR AND (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" ))
219
- execute_process (COMMAND echo __GLIBC__ COMMAND "${CMAKE_CXX_COMPILER} " -E -P -imacros stdlib.h - OUTPUT_VARIABLE GLIBC_MAJOR_ )
220
- string (STRIP "${GLIBC_MAJOR_} " GLIBC_MAJOR )
221
- execute_process (COMMAND echo __GLIBC_MINOR__ COMMAND "${CMAKE_CXX_COMPILER} " -E -P -imacros stdlib.h - OUTPUT_VARIABLE GLIBC_MINOR_ )
222
- string (STRIP "${GLIBC_MINOR_} " GLIBC_MINOR )
223
- if ("${GLIBC_MAJOR} .${GLIBC_MINOR} " VERSION_LESS "2.12" )
224
- set (UseCustomLibUV ON )
225
- endif ()
226
- endif ()
227
- endif ()
228
- if (UseCustomLibUV )
229
- set (LibUV_SOURCE_DIR ${CMAKE_BINARY_DIR} /LibUV-src )
230
- set (LibUV_BINARY_DIR ${CMAKE_BINARY_DIR} /LibUV-build )
231
- set (LibUV_INSTALL_DIR ${CMAKE_BINARY_DIR} /LibUV-install )
232
-
233
- ExternalProject_add (LibUV
234
- SOURCE_DIR ${LibUV_SOURCE_DIR}
235
- BINARY_DIR ${LibUV_BINARY_DIR}
236
- URL "https://dist.libuv.org/dist/v1.23.0/libuv-v1.23.0.tar.gz"
237
- URL_HASH "SHA256=d1746d324dea973d9f4c7ff40ba9cf60556c0bae9a92ad970568211b0e3bce27"
238
- DOWNLOAD_DIR ${CMakePythonDistributions_ARCHIVE_DOWNLOAD_DIR}
239
- ${_common_args}
240
- CMAKE_CACHE_ARGS
241
- ${_common_cache_args}
242
- -DCMAKE_INSTALL_PREFIX:PATH=${LibUV_INSTALL_DIR}
243
- -DCMAKE_INSTALL_LIBDIR:STRING=lib
244
- USES_TERMINAL_CONFIGURE 1
245
- USES_TERMINAL_BUILD 1
246
- ${ep_log_configure_build_args}
247
- INSTALL_DIR ${LibUV_INSTALL_DIR}
248
- )
249
- list (APPEND _cmake_cache_args
250
- -DCMAKE_USE_SYSTEM_LIBRARY_LIBUV:BOOL=ON
251
- -DLibUV_LIBRARY:FILEPATH=${LibUV_INSTALL_DIR}/lib/libuv_a.a
252
- -DLibUV_INCLUDE_DIR:PATH=${LibUV_INSTALL_DIR}/include
253
- )
254
- else ()
255
- cpd_ExternalProject_Add_Empty (LibUV "" )
256
- endif ()
257
-
258
- # cmake
259
- set (CMakeProject_BINARY_DIR ${CMAKE_BINARY_DIR} /CMakeProject-build )
260
-
261
212
if (DEFINED OPENSSL_ROOT_DIR )
262
213
list (APPEND _cmake_cache_args
263
214
-DOPENSSL_ROOT_DIR:PATH=${OPENSSL_ROOT_DIR}
@@ -272,28 +223,42 @@ set(CMAKE_EXE_LINKER_FLAGS \"-lstdc++ -lgcc -lrt\" CACHE STRING \"Initial cache\
272
223
message (STATUS "SuperBuild - CMakeProject-build - CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD} " )
273
224
endif ()
274
225
226
+ set (_cmake_args )
227
+ if (UNIX AND (NOT APPLE AND NOT CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" ))
228
+ # Since CMAKE_C_FLAGS and CMAKE_EXE_LINKER_FLAGS arguments contain spaces, we generate an initial
229
+ # cache file.
230
+ file (WRITE "${CMAKE_BINARY_DIR} /initial-cache.txt"
231
+ "set(CMAKE_C_FLAGS \" -D_POSIX_C_SOURCE=199506L -D_POSIX_SOURCE=1 -D_SVID_SOURCE=1 -D_BSD_SOURCE=1\" CACHE STRING \" Initial cache\" FORCE)
232
+ set(CMAKE_EXE_LINKER_FLAGS \" -lstdc++ -lgcc -lrt\" CACHE STRING \" Initial cache\" FORCE)
233
+ " )
234
+ set (_cmake_args
235
+ CMAKE_ARGS -C "${CMAKE_BINARY_DIR} /initial-cache.txt"
236
+ )
237
+ endif ()
238
+
239
+ # cmake
240
+ set (CMakeProject_BINARY_DIR ${CMAKE_BINARY_DIR} /CMakeProject-build )
241
+
275
242
ExternalProject_add (CMakeProject-build
276
243
SOURCE_DIR ${CMakeProject_SOURCE_DIR}
277
244
BINARY_DIR ${CMakeProject_BINARY_DIR}
278
245
DOWNLOAD_COMMAND ""
279
246
UPDATE_COMMAND ""
280
247
BUILD_ALWAYS 1
281
- ${_common_args }
248
+ ${_cmake_args }
282
249
CMAKE_CACHE_ARGS
283
250
-DBUILD_CursesDialog:BOOL=OFF
284
251
-DCMAKE_USE_OPENSSL:BOOL=ON
285
252
-DBUILD_TESTING:BOOL=ON
286
253
-DCMake_INSTALL_DEPENDENCIES:BOOL=ON
287
254
-DCMAKE_INSTALL_MESSAGE:STRING=NEVER
288
- ${_common_cache_args}
289
255
${_cmake_cache_args}
290
256
USES_TERMINAL_CONFIGURE 1
291
257
USES_TERMINAL_BUILD 1
292
258
${ep_log_configure_build_args}
293
259
INSTALL_COMMAND ""
294
260
DEPENDS
295
261
CMakeProject-src-download
296
- LibUV
297
262
)
298
263
299
264
set (CMAKEPROJECT_BUILD_LAST_STEP "build" )
0 commit comments