simplify by not trying to use fetchcontent but do all steps manually
as it turns out, fetchcontent is calling external_project internally at some point which to avoid is why this function was started in the first place
This commit is contained in:
@ -7,40 +7,27 @@ function(ExternalCMakeProject target url hash basedir cmakedir cmakefile)
|
|||||||
set(BUILD_SHARED_LIBS OFF)
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.14)
|
get_filename_component(archive ${url} NAME)
|
||||||
get_filename_component(archive ${url} NAME)
|
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src)
|
||||||
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src)
|
message(STATUS "Downloading ${url}")
|
||||||
message(STATUS "Downloading ${url}")
|
file(DOWNLOAD ${url} ${CMAKE_BINARY_DIR}/_deps/${archive} EXPECTED_HASH MD5=${hash} SHOW_PROGRESS)
|
||||||
file(DOWNLOAD ${url} ${CMAKE_BINARY_DIR}/_deps/${archive} EXPECTED_HASH MD5=${hash} SHOW_PROGRESS)
|
message(STATUS "Unpacking and configuring ${archive}")
|
||||||
message(STATUS "Unpacking and configuring ${archive}")
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/${archive}
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xzf ${CMAKE_BINARY_DIR}/_deps/${archive}
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src)
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/_deps/src)
|
file(GLOB TARGET_SOURCE "${CMAKE_BINARY_DIR}/_deps/src/${basedir}*")
|
||||||
file(GLOB TARGET_SOURCE "${CMAKE_BINARY_DIR}/_deps/src/${basedir}*")
|
list(LENGTH TARGET_SOURCE _num)
|
||||||
list(LENGTH TARGET_SOURCE _num)
|
if(_num GREATER 1)
|
||||||
if(_num GREATER 1)
|
message(FATAL_ERROR "Inconsistent ${target} library sources. "
|
||||||
message(FATAL_ERROR "Inconsistent ${target} library sources. "
|
"Please delete ${CMAKE_BINARY_DIR}/_deps/src and re-run cmake")
|
||||||
"Please delete ${CMAKE_BINARY_DIR}/_deps/src and re-run cmake")
|
|
||||||
endif()
|
|
||||||
file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${target}-src)
|
|
||||||
file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src)
|
|
||||||
if(NOT (cmakefile STREQUAL ""))
|
|
||||||
file(COPY ${cmakefile} ${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt)
|
|
||||||
endif()
|
|
||||||
add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}"
|
|
||||||
"${CMAKE_BINARY_DIR}/_deps/${target}-build")
|
|
||||||
else()
|
|
||||||
include(FetchContent)
|
|
||||||
message(STATUS "Downloading ${url}")
|
|
||||||
FetchContent_Declare(${target} URL ${url} URL_HASH MD5=${hash} SOURCE_SUBDIR ${cmakedir})
|
|
||||||
message(STATUS "Unpacking and configuring ${archive}")
|
|
||||||
FetchContent_GetProperties(${target})
|
|
||||||
FetchContent_Populate(${target})
|
|
||||||
if(NOT (cmakefile STREQUAL ""))
|
|
||||||
file(COPY "${cmakefile}" DESTINATION "${${target}_SOURCE_DIR}/${cmakedir}/")
|
|
||||||
get_filename_component(_cmakefile "${cmakefile}" NAME)
|
|
||||||
file(RENAME "${${target}_SOURCE_DIR}/${cmakedir}/${_cmakefile}"
|
|
||||||
"${${target}_SOURCE_DIR}/${cmakedir}/CMakeLists.txt")
|
|
||||||
endif()
|
|
||||||
add_subdirectory("${${target}_SOURCE_DIR}/${cmakedir}" "${${target}_BINARY_DIR}")
|
|
||||||
endif()
|
endif()
|
||||||
|
file(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/_deps/${target}-src)
|
||||||
|
file(RENAME ${TARGET_SOURCE} ${CMAKE_BINARY_DIR}/_deps/${target}-src)
|
||||||
|
if(NOT (cmakefile STREQUAL ""))
|
||||||
|
file(COPY ${cmakefile} DESTINATION ${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/)
|
||||||
|
get_filename_component(_cmakefile ${cmakefile} NAME)
|
||||||
|
file(RENAME "${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/${_cmakefile}"
|
||||||
|
"${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}/CMakeLists.txt")
|
||||||
|
endif()
|
||||||
|
add_subdirectory("${CMAKE_BINARY_DIR}/_deps/${target}-src/${cmakedir}"
|
||||||
|
"${CMAKE_BINARY_DIR}/_deps/${target}-build")
|
||||||
endfunction(ExternalCMakeProject)
|
endfunction(ExternalCMakeProject)
|
||||||
|
|||||||
Reference in New Issue
Block a user