mirror of
https://github.com/yhirose/cpp-httplib
synced 2024-11-21 14:29:10 -07:00
Minor cmake fix & cleanup (#1754)
* Reorder cmake docs a bit Just wanted to group the more related build options together. Also removed a pointless reference to the old reasoning for the required min ver since it's 3.14 now anyways. * Fix outdated cmake comment We don't use Git to find the version string anymore. Just updated to match what it's actually used for now. * Group options and build-tree vars in Cmake Doesn't really change anything, I just wanted to clean these up a bit. * Fix how we set HTTPLIB_IS_USING_XXX vars in Cmake Prevents us acidentally using libs when the user didn't want them actually used. This could happen if they set the option to OFF but their own project itself is using the lib, thus we'd find and use it anyways. Ref #1602 to see an example of this already happening before. This is merely apply that kind of fix to all 3 of our deps, instead of just OpenSSL. * Minor formatting/comment change to Cmake Pointless, but these things were bothering me..
This commit is contained in:
parent
65218ce222
commit
d948e38820
1 changed files with 30 additions and 37 deletions
|
@ -3,11 +3,11 @@
|
||||||
* BUILD_SHARED_LIBS (default off) builds as a shared library (if HTTPLIB_COMPILE is ON)
|
* BUILD_SHARED_LIBS (default off) builds as a shared library (if HTTPLIB_COMPILE is ON)
|
||||||
* HTTPLIB_USE_OPENSSL_IF_AVAILABLE (default on)
|
* HTTPLIB_USE_OPENSSL_IF_AVAILABLE (default on)
|
||||||
* HTTPLIB_USE_ZLIB_IF_AVAILABLE (default on)
|
* HTTPLIB_USE_ZLIB_IF_AVAILABLE (default on)
|
||||||
|
* HTTPLIB_USE_BROTLI_IF_AVAILABLE (default on)
|
||||||
* HTTPLIB_REQUIRE_OPENSSL (default off)
|
* HTTPLIB_REQUIRE_OPENSSL (default off)
|
||||||
* HTTPLIB_REQUIRE_ZLIB (default off)
|
* HTTPLIB_REQUIRE_ZLIB (default off)
|
||||||
* HTTPLIB_USE_BROTLI_IF_AVAILABLE (default on)
|
|
||||||
* HTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN (default on)
|
|
||||||
* HTTPLIB_REQUIRE_BROTLI (default off)
|
* HTTPLIB_REQUIRE_BROTLI (default off)
|
||||||
|
* HTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN (default on)
|
||||||
* HTTPLIB_COMPILE (default off)
|
* HTTPLIB_COMPILE (default off)
|
||||||
* HTTPLIB_INSTALL (default on)
|
* HTTPLIB_INSTALL (default on)
|
||||||
* HTTPLIB_TEST (default off)
|
* HTTPLIB_TEST (default off)
|
||||||
|
@ -59,7 +59,6 @@
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
FindPython3 requires Cmake v3.12
|
|
||||||
ARCH_INDEPENDENT option of write_basic_package_version_file() requires Cmake v3.14
|
ARCH_INDEPENDENT option of write_basic_package_version_file() requires Cmake v3.14
|
||||||
]]
|
]]
|
||||||
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
|
||||||
|
@ -69,20 +68,19 @@ cmake_minimum_required(VERSION 3.14.0 FATAL_ERROR)
|
||||||
# This is so the maintainer doesn't actually need to update this manually.
|
# This is so the maintainer doesn't actually need to update this manually.
|
||||||
file(STRINGS httplib.h _raw_version_string REGEX "CPPHTTPLIB_VERSION \"([0-9]+\\.[0-9]+\\.[0-9]+)\"")
|
file(STRINGS httplib.h _raw_version_string REGEX "CPPHTTPLIB_VERSION \"([0-9]+\\.[0-9]+\\.[0-9]+)\"")
|
||||||
|
|
||||||
# Needed since git tags have "v" prefixing them.
|
# Extracts just the version string itself from the whole string contained in _raw_version_string
|
||||||
# Also used if the fallback to user agent string is being used.
|
# since _raw_version_string would contain the entire line of code where it found the version string
|
||||||
string(REGEX MATCH "([0-9]+\\.?)+" _httplib_version "${_raw_version_string}")
|
string(REGEX MATCH "([0-9]+\\.?)+" _httplib_version "${_raw_version_string}")
|
||||||
|
|
||||||
project(httplib VERSION ${_httplib_version} LANGUAGES CXX)
|
project(httplib VERSION ${_httplib_version} LANGUAGES CXX)
|
||||||
|
|
||||||
# Lets you disable C++ exception during CMake configure time.
|
|
||||||
# The value is used in the install CMake config file.
|
|
||||||
option(HTTPLIB_NO_EXCEPTIONS "Disable the use of C++ exceptions" OFF)
|
|
||||||
|
|
||||||
# Change as needed to set an OpenSSL minimum version.
|
# Change as needed to set an OpenSSL minimum version.
|
||||||
# This is used in the installed Cmake config file.
|
# This is used in the installed Cmake config file.
|
||||||
set(_HTTPLIB_OPENSSL_MIN_VER "3.0.0")
|
set(_HTTPLIB_OPENSSL_MIN_VER "3.0.0")
|
||||||
|
|
||||||
|
# Lets you disable C++ exception during CMake configure time.
|
||||||
|
# The value is used in the install CMake config file.
|
||||||
|
option(HTTPLIB_NO_EXCEPTIONS "Disable the use of C++ exceptions" OFF)
|
||||||
# Allow for a build to require OpenSSL to pass, instead of just being optional
|
# Allow for a build to require OpenSSL to pass, instead of just being optional
|
||||||
option(HTTPLIB_REQUIRE_OPENSSL "Requires OpenSSL to be found & linked, or fails build." OFF)
|
option(HTTPLIB_REQUIRE_OPENSSL "Requires OpenSSL to be found & linked, or fails build." OFF)
|
||||||
option(HTTPLIB_REQUIRE_ZLIB "Requires ZLIB to be found & linked, or fails build." OFF)
|
option(HTTPLIB_REQUIRE_ZLIB "Requires ZLIB to be found & linked, or fails build." OFF)
|
||||||
|
@ -94,10 +92,6 @@ option(HTTPLIB_USE_ZLIB_IF_AVAILABLE "Uses ZLIB (if available) to enable Zlib co
|
||||||
option(HTTPLIB_COMPILE "If ON, uses a Python script to split the header into a compilable header & source file (requires Python v3)." OFF)
|
option(HTTPLIB_COMPILE "If ON, uses a Python script to split the header into a compilable header & source file (requires Python v3)." OFF)
|
||||||
# Lets you disable the installation (useful when fetched from another CMake project)
|
# Lets you disable the installation (useful when fetched from another CMake project)
|
||||||
option(HTTPLIB_INSTALL "Enables the installation target" ON)
|
option(HTTPLIB_INSTALL "Enables the installation target" ON)
|
||||||
# Just setting this variable here for people building in-tree
|
|
||||||
if(HTTPLIB_COMPILE)
|
|
||||||
set(HTTPLIB_IS_COMPILED TRUE)
|
|
||||||
endif()
|
|
||||||
option(HTTPLIB_TEST "Enables testing and builds tests" OFF)
|
option(HTTPLIB_TEST "Enables testing and builds tests" OFF)
|
||||||
option(HTTPLIB_REQUIRE_BROTLI "Requires Brotli to be found & linked, or fails build." OFF)
|
option(HTTPLIB_REQUIRE_BROTLI "Requires Brotli to be found & linked, or fails build." OFF)
|
||||||
option(HTTPLIB_USE_BROTLI_IF_AVAILABLE "Uses Brotli (if available) to enable Brotli decompression support." ON)
|
option(HTTPLIB_USE_BROTLI_IF_AVAILABLE "Uses Brotli (if available) to enable Brotli decompression support." ON)
|
||||||
|
@ -110,45 +104,48 @@ if (BUILD_SHARED_LIBS AND WIN32 AND HTTPLIB_COMPILE)
|
||||||
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Set some variables that are used in-tree and while building based on our options
|
||||||
|
set(HTTPLIB_IS_COMPILED ${HTTPLIB_COMPILE})
|
||||||
|
set(HTTPLIB_IS_USING_CERTS_FROM_MACOSX_KEYCHAIN ${HTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN})
|
||||||
|
|
||||||
# Threads needed for <thread> on some systems, and for <pthread.h> on Linux
|
# Threads needed for <thread> on some systems, and for <pthread.h> on Linux
|
||||||
set(THREADS_PREFER_PTHREAD_FLAG true)
|
set(THREADS_PREFER_PTHREAD_FLAG TRUE)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
# Since Cmake v3.11, Crypto & SSL became optional when not specified as COMPONENTS.
|
# Since Cmake v3.11, Crypto & SSL became optional when not specified as COMPONENTS.
|
||||||
if(HTTPLIB_REQUIRE_OPENSSL)
|
if(HTTPLIB_REQUIRE_OPENSSL)
|
||||||
find_package(OpenSSL ${_HTTPLIB_OPENSSL_MIN_VER} COMPONENTS Crypto SSL REQUIRED)
|
find_package(OpenSSL ${_HTTPLIB_OPENSSL_MIN_VER} COMPONENTS Crypto SSL REQUIRED)
|
||||||
|
set(HTTPLIB_IS_USING_OPENSSL TRUE)
|
||||||
elseif(HTTPLIB_USE_OPENSSL_IF_AVAILABLE)
|
elseif(HTTPLIB_USE_OPENSSL_IF_AVAILABLE)
|
||||||
find_package(OpenSSL ${_HTTPLIB_OPENSSL_MIN_VER} COMPONENTS Crypto SSL QUIET)
|
find_package(OpenSSL ${_HTTPLIB_OPENSSL_MIN_VER} COMPONENTS Crypto SSL QUIET)
|
||||||
endif()
|
# Avoid a rare circumstance of not finding all components but the end-user did their
|
||||||
# Just setting this variable here for people building in-tree
|
# own call for OpenSSL, which might trick us into thinking we'd otherwise have what we wanted
|
||||||
if(OPENSSL_FOUND AND NOT DEFINED HTTPLIB_IS_USING_OPENSSL)
|
if (TARGET OpenSSL::SSL AND TARGET OpenSSL::Crypto)
|
||||||
set(HTTPLIB_IS_USING_OPENSSL TRUE)
|
set(HTTPLIB_IS_USING_OPENSSL ${OPENSSL_FOUND})
|
||||||
|
else()
|
||||||
|
set(HTTPLIB_IS_USING_OPENSSL FALSE)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HTTPLIB_REQUIRE_ZLIB)
|
if(HTTPLIB_REQUIRE_ZLIB)
|
||||||
find_package(ZLIB REQUIRED)
|
find_package(ZLIB REQUIRED)
|
||||||
|
set(HTTPLIB_IS_USING_ZLIB TRUE)
|
||||||
elseif(HTTPLIB_USE_ZLIB_IF_AVAILABLE)
|
elseif(HTTPLIB_USE_ZLIB_IF_AVAILABLE)
|
||||||
find_package(ZLIB QUIET)
|
find_package(ZLIB QUIET)
|
||||||
endif()
|
# FindZLIB doesn't have a ZLIB_FOUND variable, so check the target.
|
||||||
# Just setting this variable here for people building in-tree
|
if(TARGET ZLIB::ZLIB)
|
||||||
# FindZLIB doesn't have a ZLIB_FOUND variable, so check the target.
|
set(HTTPLIB_IS_USING_ZLIB TRUE)
|
||||||
if(TARGET ZLIB::ZLIB)
|
endif()
|
||||||
set(HTTPLIB_IS_USING_ZLIB TRUE)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Adds our cmake folder to the search path for find_package
|
# Adds our cmake folder to the search path for find_package
|
||||||
|
# This is so we can use our custom FindBrotli.cmake
|
||||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
if(HTTPLIB_REQUIRE_BROTLI)
|
if(HTTPLIB_REQUIRE_BROTLI)
|
||||||
find_package(Brotli COMPONENTS encoder decoder common REQUIRED)
|
find_package(Brotli COMPONENTS encoder decoder common REQUIRED)
|
||||||
|
set(HTTPLIB_IS_USING_BROTLI TRUE)
|
||||||
elseif(HTTPLIB_USE_BROTLI_IF_AVAILABLE)
|
elseif(HTTPLIB_USE_BROTLI_IF_AVAILABLE)
|
||||||
find_package(Brotli COMPONENTS encoder decoder common QUIET)
|
find_package(Brotli COMPONENTS encoder decoder common QUIET)
|
||||||
endif()
|
set(HTTPLIB_IS_USING_BROTLI ${Brotli_FOUND})
|
||||||
# Just setting this variable here for people building in-tree
|
|
||||||
if(Brotli_FOUND)
|
|
||||||
set(HTTPLIB_IS_USING_BROTLI TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(HTTPLIB_USE_CERTS_FROM_MACOSX_KEYCHAIN)
|
|
||||||
set(HTTPLIB_IS_USING_CERTS_FROM_MACOSX_KEYCHAIN TRUE)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Used for default, common dirs that the end-user can change (if needed)
|
# Used for default, common dirs that the end-user can change (if needed)
|
||||||
|
@ -204,9 +201,7 @@ endif()
|
||||||
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
|
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
|
||||||
|
|
||||||
# Require C++11
|
# Require C++11
|
||||||
target_compile_features(${PROJECT_NAME} ${_INTERFACE_OR_PUBLIC}
|
target_compile_features(${PROJECT_NAME} ${_INTERFACE_OR_PUBLIC} cxx_std_11)
|
||||||
cxx_std_11
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME} SYSTEM ${_INTERFACE_OR_PUBLIC}
|
target_include_directories(${PROJECT_NAME} SYSTEM ${_INTERFACE_OR_PUBLIC}
|
||||||
$<BUILD_INTERFACE:${_httplib_build_includedir}>
|
$<BUILD_INTERFACE:${_httplib_build_includedir}>
|
||||||
|
@ -273,9 +268,7 @@ if(HTTPLIB_INSTALL)
|
||||||
# Creates the export httplibTargets.cmake
|
# Creates the export httplibTargets.cmake
|
||||||
# This is strictly what holds compilation requirements
|
# This is strictly what holds compilation requirements
|
||||||
# and linkage information (doesn't find deps though).
|
# and linkage information (doesn't find deps though).
|
||||||
install(TARGETS ${PROJECT_NAME}
|
install(TARGETS ${PROJECT_NAME} EXPORT httplibTargets)
|
||||||
EXPORT httplibTargets
|
|
||||||
)
|
|
||||||
|
|
||||||
install(FILES "${_httplib_build_includedir}/httplib.h" TYPE INCLUDE)
|
install(FILES "${_httplib_build_includedir}/httplib.h" TYPE INCLUDE)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue