From ee52bead4d1508165b39e5a23b6d7d16cd1ba00a Mon Sep 17 00:00:00 2001 From: Vincent Torri Date: Thu, 19 May 2022 15:29:54 +0200 Subject: [PATCH] cmake: add libpsl support Fixes #8865 Closes #8867 --- CMake/FindLibPSL.cmake | 43 +++++++++++++++++++++++++++++++++++++++++ CMakeLists.txt | 25 ++++++++++++++++++++++++ Makefile.am | 1 + lib/curl_config.h.cmake | 9 +++++++++ 4 files changed, 78 insertions(+) create mode 100644 CMake/FindLibPSL.cmake diff --git a/CMake/FindLibPSL.cmake b/CMake/FindLibPSL.cmake new file mode 100644 index 0000000000..c84ef93508 --- /dev/null +++ b/CMake/FindLibPSL.cmake @@ -0,0 +1,43 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) 1998 - 2022, Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +########################################################################### +# - Try to find the libpsl library +# Once done this will define +# +# LIBPSL_FOUND - system has the libpsl library +# LIBPSL_INCLUDE_DIR - the libpsl include directory +# LIBPSL_LIBRARY - the libpsl library name + +find_path(LIBPSL_INCLUDE_DIR libpsl.h) + +find_library(LIBPSL_LIBRARY NAMES psl libpsl) + +if(LIBPSL_INCLUDE_DIR) + file(STRINGS "${LIBPSL_INCLUDE_DIR}/libpsl.h" libpsl_version_str REGEX "^#define[\t ]+PSL_VERSION[\t ]+\"(.*)\"") + string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" LIBPSL_VERSION "${libpsl_version_str}") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibPSL + REQUIRED_VARS LIBPSL_LIBRARY LIBPSL_INCLUDE_DIR + VERSION_VAR LIBPSL_VERSION) + +mark_as_advanced(LIBPSL_INCLUDE_DIR LIBPSL_LIBRARY) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6957f619db..621ae19d82 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -742,6 +742,31 @@ if(CURL_ZSTD) endif() endif() +#libpsl +option(CURL_USE_LIBPSL "Use libPSL" ON) +mark_as_advanced(CURL_USE_LIBPSL) +set(USE_LIBPSL OFF) +set(HAVE_LIBPSL OFF) +set(HAVE_LIBSPSL_H OFF) + +if(CURL_USE_LIBPSL) + find_package(LibPSL) + if(LIBPSL_FOUND) + list(APPEND CURL_LIBS ${LIBPSL_LIBRARY}) + set(CMAKE_REQUIRED_LIBRARIES ${LIBPSL_LIBRARY}) + list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBPSL_INCLUDE_DIR}") + include_directories("${LIBPSL_INCLUDE_DIR}") + set(HAVE_LIBPSL ON) + set(USE_LIBPSL ON) + + # find_package has already found the headers + set(HAVE_LIBPSL_H ON) + set(CURL_INCLUDES ${CURL_INCLUDES} "${LIBPSL_INCLUDE_DIR}/libpsl.h") + set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DHAVE_LIBPSL_H") + unset(CMAKE_REQUIRED_LIBRARIES) + endif() +endif() + #libSSH2 option(CURL_USE_LIBSSH2 "Use libSSH2" ON) mark_as_advanced(CURL_USE_LIBSSH2) diff --git a/Makefile.am b/Makefile.am index 42a8d9dd5b..f91c706fea 100644 --- a/Makefile.am +++ b/Makefile.am @@ -34,6 +34,7 @@ CMAKE_DIST = \ CMake/FindBrotli.cmake \ CMake/FindCARES.cmake \ CMake/FindGSS.cmake \ + CMake/FindLibPSL.cmake \ CMake/FindLibSSH2.cmake \ CMake/FindMbedTLS.cmake \ CMake/FindMSH3.cmake \ diff --git a/lib/curl_config.h.cmake b/lib/curl_config.h.cmake index 6b55a3c551..bd5dd5483a 100644 --- a/lib/curl_config.h.cmake +++ b/lib/curl_config.h.cmake @@ -383,6 +383,12 @@ /* Define to 1 if you have the `socket' library (-lsocket). */ #cmakedefine HAVE_LIBSOCKET 1 +/* Define to 1 if you have the `psl' library (-lpsl). */ +#cmakedefine HAVE_LIBPSL 1 + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_LIBPSL_H 1 + /* Define to 1 if you have the `ssh2' library (-lssh2). */ #cmakedefine HAVE_LIBSSH2 1 @@ -915,6 +921,9 @@ ${SIZEOF_TIME_T_CODE} /* if libSSH2 is in use */ #cmakedefine USE_LIBSSH2 1 +/* if libPSL is in use */ +#cmakedefine USE_LIBPSL 1 + /* If you want to build curl with the built-in manual */ #cmakedefine USE_MANUAL 1 -- 2.47.3