@@ -164,15 +164,34 @@ if(CMakePythonDistributions_SUPERBUILD)
164164 #
165165 if (NOT DEFINED CMakeProject_BINARY_DIR )
166166
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)
169188 if (DEFINED CMAKE_BUILD_TYPE )
170- list (APPEND _common_cache_args
189+ list (APPEND _cmake_cache_args
171190 -DCMAKE_BUILD_TYPE:STRING =${CMAKE_BUILD_TYPE}
172191 )
173192 endif ()
174193 if (DEFINED CMAKE_TOOLCHAIN_FILE)
175- list (APPEND _common_cache_args
194+ list (APPEND _cmake_cache_args
176195 -DCMAKE_TOOLCHAIN_FILE:STRING =${CMAKE_TOOLCHAIN_FILE}
177196 )
178197 endif ()
@@ -183,81 +202,13 @@ if(CMakePythonDistributions_SUPERBUILD)
183202 CMAKE_JOB_POOL_LINK
184203 )
185204 if (DEFINED ${var_name} )
186- list (APPEND _common_cache_args
205+ list (APPEND _cmake_cache_args
187206 -D${var_name} :STRING =${${var_name} }
188207 )
189208 message (STATUS "SuperBuild - CMakeProject-build - ${var_name} : ${${var_name} }" )
190209 endif ()
191210 endforeach ()
192211
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-
261212 if (DEFINED OPENSSL_ROOT_DIR)
262213 list (APPEND _cmake_cache_args
263214 -DOPENSSL_ROOT_DIR:PATH =${OPENSSL_ROOT_DIR}
@@ -272,28 +223,42 @@ set(CMAKE_EXE_LINKER_FLAGS \"-lstdc++ -lgcc -lrt\" CACHE STRING \"Initial cache\
272223 message (STATUS "SuperBuild - CMakeProject-build - CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD} " )
273224 endif ()
274225
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+
275242 ExternalProject_add(CMakeProject-build
276243 SOURCE_DIR ${CMakeProject_SOURCE_DIR}
277244 BINARY_DIR ${CMakeProject_BINARY_DIR}
278245 DOWNLOAD_COMMAND ""
279246 UPDATE_COMMAND ""
280247 BUILD_ALWAYS 1
281- ${_common_args }
248+ ${_cmake_args }
282249 CMAKE_CACHE_ARGS
283250 -DBUILD_CursesDialog:BOOL =OFF
284251 -DCMAKE_USE_OPENSSL:BOOL =ON
285252 -DBUILD_TESTING:BOOL =ON
286253 -DCMake_INSTALL_DEPENDENCIES:BOOL =ON
287254 -DCMAKE_INSTALL_MESSAGE:STRING =NEVER
288- ${_common_cache_args}
289255 ${_cmake_cache_args}
290256 USES_TERMINAL_CONFIGURE 1
291257 USES_TERMINAL_BUILD 1
292258 ${ep_log_configure_build_args}
293259 INSTALL_COMMAND ""
294260 DEPENDS
295261 CMakeProject-src-download
296- LibUV
297262 )
298263
299264 set (CMAKEPROJECT_BUILD_LAST_STEP "build" )
0 commit comments