69 lines
2.7 KiB
CMake
69 lines
2.7 KiB
CMake
include(Utils)
|
|
include(FetchContent)
|
|
|
|
set(CURL_REPO https://github.com/curl/curl.git)
|
|
set(CURL_GIT_TAG curl-8_8_0)
|
|
|
|
set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl)
|
|
find_package(CURL QUIET)
|
|
if (NOT ${CURL_FOUND})
|
|
if (NOT WIN32)
|
|
execute_process(
|
|
COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} -DTOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/ext -DCURL_REPO=${CURL_REPO} -DCURL_GIT_TAG=${CURL_GIT_TAG} -DOPENSSL_REPO=${OPENSSL_REPO} -DPLATFORM=${PLATFORM}
|
|
WORKING_DIRECTORY ${CURL_DEPS_INSTALL}
|
|
)
|
|
execute_process(
|
|
COMMAND ${CMAKE_COMMAND} --build ${CURL_DEPS_INSTALL} --config Release
|
|
RESULT_VARIABLE build_result
|
|
)
|
|
if (NOT ${build_result} EQUAL "0")
|
|
message(FATAL_ERROR "Failed to build curl!")
|
|
endif()
|
|
|
|
list(APPEND CMAKE_PREFIX_PATH ${CURL_DEPS_INSTALL}/INSTALL)
|
|
endif ()
|
|
else ()
|
|
message("Using system curl")
|
|
set(USING_SYSTEM_CURL ON PARENT_SCOPE)
|
|
endif ()
|
|
|
|
function(LinkCurl TARGET)
|
|
find_package(CURL QUIET)
|
|
if (NOT ${CURL_FOUND})
|
|
set(CURL_DEPS_INSTALL ${CMAKE_BINARY_DIR}/deps_curl)
|
|
target_include_directories(${TARGET} PUBLIC ${CURL_DEPS_INSTALL}/INSTALL/include)
|
|
target_link_directories(${TARGET} PUBLIC ${CURL_DEPS_INSTALL}/INSTALL/lib)
|
|
message("Using CURL install dir: ${CURL_DEPS_INSTALL}/INSTALL/include")
|
|
|
|
if (APPLE)
|
|
target_link_libraries(${TARGET} PUBLIC curl)
|
|
elseif (WIN32)
|
|
set(CURL_USE_SCHANNEL ON CACHE BOOL "USE SCHANNEL")
|
|
FetchContent_Declare(
|
|
curl
|
|
# In function you cannot access the variables defined outside, so hardcoding for now.
|
|
GIT_REPOSITORY https://github.com/curl/curl.git
|
|
GIT_TAG curl-8_8_0
|
|
GIT_SHALLOW TRUE
|
|
CMAKE_ARGS
|
|
-DCMAKE_BUILD_TYPE=Release
|
|
-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_BINARY_DIR}/INSTALL
|
|
-DUSE_NGHTTP2=OFF
|
|
-DBUILD_STATIC_LIBS=ON
|
|
-DBUILD_SHARED_LIBS=OFF
|
|
OVERRIDE_FIND_PACKAGE
|
|
)
|
|
FetchContent_MakeAvailable(curl)
|
|
find_package(curl REQUIRED)
|
|
target_link_libraries(${TARGET} PUBLIC CURL::libcurl)
|
|
else ()
|
|
target_link_libraries(${TARGET} PUBLIC crypto ssl curl)
|
|
endif ()
|
|
else ()
|
|
if (CURL_INCLUDE_DIR)
|
|
target_include_directories(${TARGET} PUBLIC ${CURL_INCLUDE_DIR})
|
|
endif ()
|
|
target_link_libraries(${TARGET} PUBLIC CURL::libcurl)
|
|
endif ()
|
|
target_compile_definitions(${TARGET} PRIVATE HAS_CURL)
|
|
endfunction() |