From 8b9a3bbac6b6a614d8ee1a703766bf05ec71d892 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 1 May 2025 07:18:46 +0200 Subject: [PATCH 01/24] Updated to curl 8.13 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a2f21bf58..199745efe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -295,8 +295,8 @@ else() cmake_policy(SET CMP0135 NEW) endif() FetchContent_Declare(curl - URL https://github.com/curl/curl/releases/download/curl-8_10_1/curl-8.10.1.tar.xz - URL_HASH SHA256=73a4b0e99596a09fa5924a4fb7e4b995a85fda0d18a2c02ab9cf134bebce04ee # the file hash for curl-8.10.1.tar.xz + URL https://github.com/curl/curl/releases/download/curl-8_13_0/curl-8.13.0.tar.xz + URL_HASH SHA256=4a093979a3c2d02de2fbc00549a32771007f2e78032c6faa5ecd2f7a9e152025 # the file hash for curl-8.13.0.tar.xz USES_TERMINAL_DOWNLOAD TRUE) # <---- This is needed only for Ninja to show download progress FetchContent_MakeAvailable(curl) From 8e61e25215986cc7d9559153dd3f854a6a2fc284 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 1 May 2025 07:19:07 +0200 Subject: [PATCH 02/24] Fixed errno not being 0 before port parsing --- test/session_tests.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/session_tests.cpp b/test/session_tests.cpp index 781232b12..911d14cbb 100644 --- a/test/session_tests.cpp +++ b/test/session_tests.cpp @@ -1198,6 +1198,7 @@ TEST(LocalPortTests, SetLocalPortTest) { EXPECT_EQ(200, response.status_code); EXPECT_EQ(ErrorCode::OK, response.error.code); + errno = 0; // NOLINTNEXTLINE(google-runtime-int) unsigned long port_from_response = std::strtoul(response.text.c_str(), nullptr, 10); EXPECT_EQ(errno, 0); @@ -1233,6 +1234,7 @@ TEST(LocalPortTests, SetOptionTest) { EXPECT_EQ(200, response.status_code); EXPECT_EQ(ErrorCode::OK, response.error.code); + errno = 0; // NOLINTNEXTLINE(google-runtime-int) unsigned long port_from_response = std::strtoul(response.text.c_str(), nullptr, 10); EXPECT_EQ(errno, 0); From a69fabc2c9a758c5a156734185c00ce3f593bf40 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 1 May 2025 07:50:01 +0200 Subject: [PATCH 03/24] Getting a local unused port --- test/CMakeLists.txt | 4 ++- test/session_tests.cpp | 67 ++++++++++++++------------------------ test/testUtils.cpp | 70 ++++++++++++++++++++++++++++++++++++++++ test/testUtils.hpp | 37 +++++++++++++++++++++ test/testUtils_tests.cpp | 16 +++++++++ 5 files changed, 151 insertions(+), 43 deletions(-) create mode 100644 test/testUtils.cpp create mode 100644 test/testUtils.hpp create mode 100644 test/testUtils_tests.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d78ff8229..8d4972aa8 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,7 +6,8 @@ if (ENABLE_SSL_TESTS) add_library(test_server STATIC abstractServer.cpp httpServer.cpp - httpsServer.cpp) + httpsServer.cpp + testUtils.cpp) else () add_library(test_server STATIC abstractServer.cpp @@ -67,6 +68,7 @@ add_cpr_test(multiasync) add_cpr_test(file_upload) add_cpr_test(singleton) add_cpr_test(threadpool) +add_cpr_test(testUtils) if (ENABLE_SSL_TESTS) add_cpr_test(ssl) diff --git a/test/session_tests.cpp b/test/session_tests.cpp index 911d14cbb..8441df860 100644 --- a/test/session_tests.cpp +++ b/test/session_tests.cpp @@ -13,6 +13,7 @@ #include "cpr/accept_encoding.h" #include "httpServer.hpp" +#include "testUtils.hpp" using namespace cpr; using namespace std::chrono_literals; @@ -1173,28 +1174,19 @@ TEST(CurlHolderManipulateTests, CustomOptionTest) { TEST(LocalPortTests, SetLocalPortTest) { Url url{server->GetBaseUrl() + "/local_port.html"}; Session session; - uint16_t local_port{0}; - uint16_t local_port_range{0}; Response response; - - // Try up to 10 times to get a free local port - for (size_t i = 0; i < 10; i++) { - session.SetUrl(url); - local_port = 40252 + (i * 100); // beware of HttpServer::GetPort when changing - local_port_range = 7000; - session.SetLocalPort(local_port); - session.SetLocalPortRange(local_port_range); - // expected response: body contains port number in specified range - // NOTE: even when trying up to 7000 ports there is the chance that all of them are occupied. - // It would be possible to also check here for ErrorCode::UNKNOWN_ERROR but that somehow seems - // wrong as then this test would pass in case SetLocalPort does not work at all - // or in other words: we have to assume that at least one port in the specified range is free. - response = session.Get(); - - if (response.error.code != ErrorCode::UNKNOWN_ERROR) { - break; - } - } + session.SetUrl(url); + uint16_t local_port{0}; + ASSERT_NO_THROW(local_port = cpr::test::get_free_port()); + uint16_t local_port_range{7000}; + session.SetLocalPort(local_port); + session.SetLocalPortRange(local_port_range); + // expected response: body contains port number in specified range + // NOTE: even when trying up to 7000 ports there is the chance that all of them are occupied. + // It would be possible to also check here for ErrorCode::UNKNOWN_ERROR but that somehow seems + // wrong as then this test would pass in case SetLocalPort does not work at all + // or in other words: we have to assume that at least one port in the specified range is free. + response = session.Get(); EXPECT_EQ(200, response.status_code); EXPECT_EQ(ErrorCode::OK, response.error.code); @@ -1209,28 +1201,19 @@ TEST(LocalPortTests, SetLocalPortTest) { TEST(LocalPortTests, SetOptionTest) { Url url{server->GetBaseUrl() + "/local_port.html"}; Session session; - uint16_t local_port{0}; - uint16_t local_port_range{0}; Response response; - - // Try up to 10 times to get a free local port - for (size_t i = 0; i < 10; i++) { - session.SetUrl(url); - local_port = 30252 + (i * 100); // beware of HttpServer::GetPort when changing - local_port_range = 7000; - session.SetOption(LocalPort(local_port)); - session.SetOption(LocalPortRange(local_port_range)); - // expected response: body contains port number in specified range - // NOTE: even when trying up to 7000 ports there is the chance that all of them are occupied. - // It would be possible to also check here for ErrorCode::UNKNOWN_ERROR but that somehow seems - // wrong as then this test would pass in case SetLocalPort does not work at all - // or in other words: we have to assume that at least one port in the specified range is free. - response = session.Get(); - - if (response.error.code != ErrorCode::UNKNOWN_ERROR) { - break; - } - } + session.SetUrl(url); + uint16_t local_port{0}; + uint16_t local_port_range{7000}; + ASSERT_NO_THROW(local_port = cpr::test::get_free_port()); + session.SetOption(LocalPort(local_port)); + session.SetOption(LocalPortRange(local_port_range)); + // expected response: body contains port number in specified range + // NOTE: even when trying up to 7000 ports there is the chance that all of them are occupied. + // It would be possible to also check here for ErrorCode::UNKNOWN_ERROR but that somehow seems + // wrong as then this test would pass in case SetLocalPort does not work at all + // or in other words: we have to assume that at least one port in the specified range is free. + response = session.Get(); EXPECT_EQ(200, response.status_code); EXPECT_EQ(ErrorCode::OK, response.error.code); diff --git a/test/testUtils.cpp b/test/testUtils.cpp new file mode 100644 index 000000000..b7f37bb2d --- /dev/null +++ b/test/testUtils.cpp @@ -0,0 +1,70 @@ +#include "testUtils.hpp" + +#include +#include + +#ifdef _WIN32 +#define NOMINMAX +#include +#include +#else +#include +#include +#include +#include +#include +#endif + +namespace cpr::test { + +std::uint16_t get_free_port() { +#ifdef _WIN32 + static const WSAInit wsa_guard; // one-time Winsock init +#endif + + // 1. Create a TCP socket. + socket_t sock = ::socket(AF_INET, SOCK_STREAM, 0); + if (sock == INVALID_SOCKET_FD) { + throw std::runtime_error("socket() failed"); + } + + // 2. Bind to port 0 so the OS assigns an ephemeral port. + sockaddr_in addr{}; + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(INADDR_ANY); + addr.sin_port = htons(0); // 0 ⇒ “pick for me” + + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) + if (::bind(sock, reinterpret_cast(&addr), sizeof(addr)) != 0) { +#ifdef _WIN32 + ::closesocket(sock); +#else + ::close(sock); +#endif + throw std::runtime_error("bind() failed"); + } + + // 3. Ask what port we actually got. + socklen_t len = sizeof(addr); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) + if (::getsockname(sock, reinterpret_cast(&addr), &len) != 0) { +#ifdef _WIN32 + ::closesocket(sock); +#else + ::close(sock); +#endif + throw std::runtime_error("getsockname() failed"); + } + + std::uint16_t port = ntohs(addr.sin_port); + + // 4. Close the socket ‒ we only needed it to grab the port number. +#ifdef _WIN32 + ::closesocket(sock); +#else + ::close(sock); +#endif + + return port; +} +} // namespace cpr::test diff --git a/test/testUtils.hpp b/test/testUtils.hpp new file mode 100644 index 000000000..9d7557fb7 --- /dev/null +++ b/test/testUtils.hpp @@ -0,0 +1,37 @@ +#ifndef CPR_TEST_UTILS_H +#define CPR_TEST_UTILS_H +#include + +#ifdef _WIN32 +#define NOMINMAX +#include +#pragma comment(lib, "ws2_32.lib") +#endif + +namespace cpr::test { + +#ifdef _WIN32 +using socket_t = SOCKET; +constexpr socket_t INVALID_SOCKET_FD = INVALID_SOCKET; + +struct WSAInit { + WSAInit() { + WSADATA data; + if (WSAStartup(MAKEWORD(2, 2), &data) != 0) { + throw std::runtime_error("WSAStartup failed"); + } + } + ~WSAInit() { + WSACleanup(); + } +}; +#else +using socket_t = int; +constexpr socket_t INVALID_SOCKET_FD = -1; +#endif + +/// Return a currently unused TCP port. +/// \throws std::runtime_error on failure. +uint16_t get_free_port(); +} // namespace cpr::test +#endif \ No newline at end of file diff --git a/test/testUtils_tests.cpp b/test/testUtils_tests.cpp new file mode 100644 index 000000000..a082da51a --- /dev/null +++ b/test/testUtils_tests.cpp @@ -0,0 +1,16 @@ +#include +#include + +#include "testUtils.hpp" + +TEST(TestUtils, GetUnusedPort) { + uint16_t port{0}; + ASSERT_NO_THROW(port = cpr::test::get_free_port()); + EXPECT_NE(port, 0); +} + + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} From d28eb577cb48c5b2a28ad711108c521a329f66b7 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 1 May 2025 07:56:41 +0200 Subject: [PATCH 04/24] Installing libpsl in the CI since it is a curl requirement --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 09032b169..45bb444bf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: - name: Update package list run: apt update - name: Install Dependencies - run: apt install -y git libssl-dev cmake build-essential clang libcurl4-openssl-dev + run: apt install -y git libssl-dev cmake build-essential clang libcurl4-openssl-dev libpsl-dev env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -58,7 +58,7 @@ jobs: - name: Update package list run: apt update - name: Install Dependencies - run: apt install -y git libssl-dev cmake build-essential libcurl4-openssl-dev + run: apt install -y git libssl-dev cmake build-essential libcurl4-openssl-dev libpsl-dev env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -89,7 +89,7 @@ jobs: - name: Update package list run: sudo apt update - name: Install Dependencies - run: sudo apt install -y git libssl-dev libmbedtls-dev cmake build-essential + run: sudo apt install -y git libssl-dev libmbedtls-dev cmake build-essential libpsl-dev env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -123,7 +123,7 @@ jobs: - name: Update package list run: dnf update -y - name: Install Dependencies - run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake + run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake libpsl-devel - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -154,7 +154,7 @@ jobs: - name: Update package list run: dnf update -y - name: Install Dependencies - run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake + run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake libpsl-devel - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -183,7 +183,7 @@ jobs: - name: Update package list run: dnf update -y - name: Install Dependencies - run: dnf install -y gcc clang git gcc gdb make openssl-devel libasan libubsan liblsan libtsan cmake + run: dnf install -y gcc clang git gcc gdb make openssl-devel libasan libubsan liblsan libtsan cmake libpsl-devel - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" From a2724b2f5c2d8abb04ed6db7bad182417828cbf9 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 1 May 2025 08:03:52 +0200 Subject: [PATCH 05/24] Fixed usage of CPR_USE_SYSTEM_CURL in CI runs --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 45bb444bf..1997a8783 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,7 +35,7 @@ jobs: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: ON CPR_FORCE_OPENSSL_BACKEND: ON - USE_SYSTEM_CURL: ${{ matrix.systemCurl }} + CPR_USE_SYSTEM_CURL: ${{ matrix.systemCurl }} uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build @@ -72,7 +72,7 @@ jobs: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: ON CPR_FORCE_OPENSSL_BACKEND: ON - USE_SYSTEM_CURL: ${{ matrix.systemCurl }} + CPR_USE_SYSTEM_CURL: ${{ matrix.systemCurl }} uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build @@ -131,7 +131,7 @@ jobs: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: ON CPR_FORCE_OPENSSL_BACKEND: ON - USE_SYSTEM_CURL: OFF + CPR_USE_SYSTEM_CURL: OFF uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build @@ -162,7 +162,7 @@ jobs: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: ON CPR_FORCE_OPENSSL_BACKEND: ON - USE_SYSTEM_CURL: ${{ matrix.systemCurl }} + CPR_USE_SYSTEM_CURL: ${{ matrix.systemCurl }} uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build From 1ed12dcf240ddf3694f9becb3ef668168b2894b7 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 1 May 2025 08:09:41 +0200 Subject: [PATCH 06/24] Libpsl fixes for macOS and Windows --- .github/workflows/ci.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1997a8783..4af58c752 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -213,6 +213,7 @@ jobs: CMAKE_GENERATOR: "Visual Studio 17 2022" CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: OFF + CURL_USE_LIBPSL: OFF uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build @@ -234,6 +235,7 @@ jobs: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: ON CPR_FORCE_OPENSSL_BACKEND: ON + CURL_USE_LIBPSL: OFF uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build @@ -248,6 +250,8 @@ jobs: buildType: [Debug, Release] runs-on: macos-latest steps: + - name: Install libpsl + run: brew install libpsl - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -267,6 +271,8 @@ jobs: macos-clang-darwinssl: runs-on: macos-latest steps: + - name: Install libpsl + run: brew install libpsl - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -289,6 +295,8 @@ jobs: steps: - name: Install OpenSSL run: brew install openssl + - name: Install libpsl + run: brew install libpsl - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -318,6 +326,8 @@ jobs: run: brew install boost - name: Install OpenSSL run: brew install openssl + - name: Install libpsl + run: brew install libpsl - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" From 55b9e5ad50a30d5f3c35dc16ea8148e46f72ed54 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 1 May 2025 08:22:33 +0200 Subject: [PATCH 07/24] Added missing testUtils.cpp for SSL tests --- test/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8d4972aa8..fd5afe170 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -11,7 +11,8 @@ if (ENABLE_SSL_TESTS) else () add_library(test_server STATIC abstractServer.cpp - httpServer.cpp) + httpServer.cpp + testUtils.cpp) endif() if(WIN32) target_link_libraries(test_server PRIVATE Threads::Threads cpr::cpr GTest::GTest From ca73a971aa8b3f94e71982a00607832bceb2a63c Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sun, 4 May 2025 17:02:55 +0200 Subject: [PATCH 08/24] Switched over to "ubuntu:latest" and "ubuntu:rolling" instead of specific tags --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4af58c752..0c3a5c7d4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: ubuntu-clang-openssl: strategy: matrix: - container: ["ubuntu:20.04", "ubuntu:24.04", "ubuntu:latest"] + container: ["ubuntu:latest", "ubuntu:rolling"] systemCurl: [ON, OFF] buildType: [Debug, Release] runs-on: ubuntu-latest @@ -49,7 +49,7 @@ jobs: ubuntu-gcc-openssl: strategy: matrix: - container: ["ubuntu:20.04", "ubuntu:24.04", "ubuntu:latest"] + container: ["ubuntu:latest", "ubuntu:rolling"] systemCurl: [ON, OFF] buildType: [Debug, Release] runs-on: ubuntu-latest From 1caefb9f193d4799f74b6b19b0be618c7538ab82 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sun, 4 May 2025 17:08:10 +0200 Subject: [PATCH 09/24] Installing libpsl-devel for the clang-tidy run --- .github/workflows/clang-tidy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index 052465ef4..f9a9aa016 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -10,7 +10,7 @@ jobs: - name: Update package list run: sudo dnf update -y - name: Install dependencies - run: sudo dnf install -y openssl-devel cmake git gcc clang ninja-build + run: sudo dnf install -y openssl-devel cmake git gcc clang ninja-build libpsl-devel - name: Install clang-tidy run: sudo dnf install -y clang-tools-extra - name: Checkout From 0a2508216b418a5b39c1ad9f309be42876cda526 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sun, 4 May 2025 17:11:27 +0200 Subject: [PATCH 10/24] Switched cppcheck builds to fedora from ubuntu --- .github/workflows/cppcheck.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/cppcheck.yml b/.github/workflows/cppcheck.yml index d3d674fa7..fad7d759e 100644 --- a/.github/workflows/cppcheck.yml +++ b/.github/workflows/cppcheck.yml @@ -5,15 +5,14 @@ on: [push, workflow_dispatch, pull_request] # Trigger for every push as well as jobs: cppcheck: runs-on: ubuntu-latest + container: "fedora:latest" # Use fedora for an up to date version of cppcheck steps: - name: Checkout uses: actions/checkout@v3 - with: - submodules: true - name: Update package list - run: sudo apt update - - name: Install cppcheck - run: sudo apt install cppcheck + run: dnf update -y + - name: Install Dependencies + run: dnf install -y gcc clang git gcc gdb make openssl-devel cmake libpsl-devel cppcheck - name: "[Release g++] Build" env: CPR_ENABLE_CPPCHECK: ON From ca07b279f9a56e07c97f49a301a2ef0a1139ca4a Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sun, 4 May 2025 17:11:37 +0200 Subject: [PATCH 11/24] CI file cleanup --- .github/workflows/build-deb.yml | 4 ---- .github/workflows/build-nuget.yml | 2 -- .github/workflows/ci.yml | 7 ++----- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-deb.yml b/.github/workflows/build-deb.yml index cadc95b7d..9953797ec 100644 --- a/.github/workflows/build-deb.yml +++ b/.github/workflows/build-deb.yml @@ -14,10 +14,6 @@ jobs: steps: - name: "Checkout" uses: actions/checkout@v3 - with: - submodules: true - path: cpr - # Install packages necessary for building libcpr and package - name: "Update package list" run: sudo apt update diff --git a/.github/workflows/build-nuget.yml b/.github/workflows/build-nuget.yml index 72081b2f9..ed3f53276 100644 --- a/.github/workflows/build-nuget.yml +++ b/.github/workflows/build-nuget.yml @@ -26,8 +26,6 @@ jobs: run: echo "NuGet version will be '${{ env.RELEASE_VERSION }}'" - name: Checkout uses: actions/checkout@v3 - with: - submodules: true - name: Setup NuGet.exe uses: nuget/setup-nuget@v2 - name: "[Release_x86] Build & Install" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c3a5c7d4..0873e68ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -115,10 +115,8 @@ jobs: fedora-clang-openssl: strategy: - matrix: - container: ["fedora:latest"] runs-on: ubuntu-latest - container: ${{ matrix.container }} + container: "fedora:latest" steps: - name: Update package list run: dnf update -y @@ -145,11 +143,10 @@ jobs: fedora-gcc-openssl: strategy: matrix: - container: ["fedora:latest"] systemCurl: [ON, OFF] buildType: [Debug, Release] runs-on: ubuntu-latest - container: ${{ matrix.container }} + container: "fedora:latest" steps: - name: Update package list run: dnf update -y From 27cf0e43028c96f9e0c42ba77c5aa379c44046c5 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sun, 4 May 2025 17:13:48 +0200 Subject: [PATCH 12/24] Fixed missing libpsl-dev for deb builds --- .github/workflows/build-deb.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-deb.yml b/.github/workflows/build-deb.yml index 9953797ec..c5bb8a1f5 100644 --- a/.github/workflows/build-deb.yml +++ b/.github/workflows/build-deb.yml @@ -18,7 +18,7 @@ jobs: - name: "Update package list" run: sudo apt update - name: "Install cpr dependencies" - run: sudo apt install -y libssl-dev libcurl4-openssl-dev + run: sudo apt install -y libssl-dev libcurl4-openssl-dev libpsl-dev - name: "Install building tools" run: sudo apt install -y cmake debmake devscripts debhelper # Set version number From f6a73b66bf42d05c863f69ad2d8a1af4b09031e4 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sun, 4 May 2025 17:21:14 +0200 Subject: [PATCH 13/24] Fixed CI --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0873e68ca..e17939577 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -114,7 +114,6 @@ jobs: ctest-options: ${{ env.CTEST_OPTIONS }} fedora-clang-openssl: - strategy: runs-on: ubuntu-latest container: "fedora:latest" steps: From 1b7e401a24d078d8790224715d13ee5396e1ad53 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 15 May 2025 16:41:35 +0100 Subject: [PATCH 14/24] libpsl build support --- CMakeLists.txt | 13 +++++++--- cmake/libpsl.cmake | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 4 deletions(-) create mode 100644 cmake/libpsl.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 199745efe..d005d297f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,7 @@ cpr_option(CPR_CURL_NOSIGNAL "Set to ON to disable use of signals in libcurl." O cpr_option(CURL_VERBOSE_LOGGING "Curl verbose logging during building curl" OFF) cpr_option(CPR_USE_SYSTEM_GTEST "If ON, this project will look in the system paths for an installed gtest library. If none is found it will use the built-in one." OFF) cpr_option(CPR_USE_SYSTEM_CURL "If enabled we will use the curl lib already installed on this system." OFF) +cpr_option(CPR_USE_SYSTEM_LIB_PSL "Since curl 8.13 it depends on libpsl. If enabled we will use the psl lib already installed on this system. Else meson is required as build dependency." ${CPR_USE_SYSTEM_CURL}) cpr_option(CPR_ENABLE_CURL_HTTP_ONLY "If enabled we will only use the HTTP/HTTPS protocols from CURL. If disabled, all the CURL protocols are enabled. This is useful if your project uses libcurl and you need support for other CURL features e.g. sending emails." ON) cpr_option(CPR_ENABLE_SSL "Enables or disables the SSL backend. Required to perform HTTPS requests." ON) cpr_option(CPR_FORCE_OPENSSL_BACKEND "Force to use the OpenSSL backend. If CPR_FORCE_OPENSSL_BACKEND, CPR_FORCE_DARWINSSL_BACKEND, CPR_FORCE_MBEDTLS_BACKEND, and CPR_FORCE_WINSSL_BACKEND are set to to OFF, cpr will try to automatically detect the best available SSL backend (WinSSL - Windows, OpenSSL - Linux, DarwinSSL - Mac ...)." OFF) @@ -294,10 +295,14 @@ else() if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.24.0") cmake_policy(SET CMP0135 NEW) endif() - FetchContent_Declare(curl - URL https://github.com/curl/curl/releases/download/curl-8_13_0/curl-8.13.0.tar.xz - URL_HASH SHA256=4a093979a3c2d02de2fbc00549a32771007f2e78032c6faa5ecd2f7a9e152025 # the file hash for curl-8.13.0.tar.xz - USES_TERMINAL_DOWNLOAD TRUE) # <---- This is needed only for Ninja to show download progress + + # Since curl 8.13, curl depends on lib psl + if(NOT ${CPR_USE_SYSTEM_LIB_PSL}) + include(libpsl) + endif() + + FetchContent_Declare(curl URL https://github.com/curl/curl/releases/download/curl-8_13_0/curl-8.13.0.tar.xz + URL_HASH SHA256=4a093979a3c2d02de2fbc00549a32771007f2e78032c6faa5ecd2f7a9e152025) # the file hash for curl-8.13.0.tar.xz FetchContent_MakeAvailable(curl) restore_variable(DESTINATION CMAKE_CXX_CLANG_TIDY BACKUP CMAKE_CXX_CLANG_TIDY_BKP) diff --git a/cmake/libpsl.cmake b/cmake/libpsl.cmake new file mode 100644 index 000000000..feeb17b5a --- /dev/null +++ b/cmake/libpsl.cmake @@ -0,0 +1,63 @@ +# Builds libpsl which is especially necessary on Windows since there it is not available via e.g. a package manager. + +include(ExternalProject) +find_program(MESON_PATH meson) + +if(MESON_PATH STREQUAL "MESON_PATH-NOTFOUND") + message(FATAL_ERROR "meson not found. Please make sure you have meson installed on your system (https://mesonbuild.com/Getting-meson.html). Meson is required for building libpsl for curl on Windows.") + return() +endif() + +FetchContent_Declare(libpsl_src GIT_REPOSITORY https://github.com/rockdaboot/libpsl.git + GIT_TAG 0.21.5) +FetchContent_Populate(libpsl_src) # sets libpsl_src_SOURCE_DIR / _BINARY_DIR + +set(LIBPSL_SOURCE_DIR "${libpsl_src_SOURCE_DIR}") +set(LIBPSL_BUILD_DIR "${libpsl_src_BINARY_DIR}") +set(LIBPSL_INSTALL_DIR "${CMAKE_BINARY_DIR}/libpsl_src-install") +file(MAKE_DIRECTORY "${LIBPSL_BUILD_DIR}") + +# Meson configure +message(STATUS "Configuring libpsl...") +execute_process(COMMAND "${MESON_PATH}" setup + "${LIBPSL_BUILD_DIR}" + "${LIBPSL_SOURCE_DIR}" + -Dtests=false + -Ddocs=false + --buildtype=release + --prefix "${LIBPSL_INSTALL_DIR}" + --default-library=static + RESULT_VARIABLE MESON_SETUP_RC +) +if(MESON_SETUP_RC) + message(FATAL_ERROR "Meson setup for libpsl failed") +endif() + +# Meson build +message(STATUS "Building libpsl...") +execute_process( + COMMAND "${MESON_PATH}" compile -C "${LIBPSL_BUILD_DIR}" + RESULT_VARIABLE MESON_COMPILE_RC +) +if(MESON_COMPILE_RC) + message(FATAL_ERROR "Meson compile for libpsl failed") +endif() + +# Meson install +message(STATUS "Installing libpsl...") +execute_process(COMMAND "${MESON_PATH}" install -C "${LIBPSL_BUILD_DIR}" + RESULT_VARIABLE MESON_INSTALL_RC) +if(MESON_INSTALL_RC) + message(FATAL_ERROR "Meson install for libpsl failed") +endif() + +add_library(libpsl SHARED IMPORTED) +add_dependencies(libpsl libpsl_build) + +# We only care about static libraries of psl. In case you need a dynamic version, feel free to add support for it. +set(LIBPSL_LIBRARY "${LIBPSL_INSTALL_DIR}/lib/psl.${CMAKE_STATIC_LIBRARY_SUFFIX_CXX}") +set_target_properties(libpsl PROPERTIES IMPORTED_LOCATION ${LIBPSL_LIBRARY}) + +set(LIBPSL_INCLUDE_DIR "${LIBPSL_INSTALL_DIR}/include") +target_include_directories(libpsl INTERFACE "${LIBPSL_INCLUDE_DIR}") +include_directories(${LIBPSL_INCLUDE_DIR}) From a3743c36e1f452c6a75b7e14ce5291e0985cc63d Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 15 May 2025 16:41:44 +0100 Subject: [PATCH 15/24] Fixed get random port on Windows --- test/testUtils.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/test/testUtils.hpp b/test/testUtils.hpp index 9d7557fb7..3aaac7800 100644 --- a/test/testUtils.hpp +++ b/test/testUtils.hpp @@ -1,6 +1,7 @@ #ifndef CPR_TEST_UTILS_H #define CPR_TEST_UTILS_H #include +#include #ifdef _WIN32 #define NOMINMAX From 80caf611fb575020ea21cb0aa6721beddeacc29f Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 15 May 2025 17:54:23 +0200 Subject: [PATCH 16/24] libpsl CI fixes --- .github/workflows/ci.yml | 20 ++++++++++++++------ cmake/libpsl.cmake | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e17939577..12a07a495 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: - name: Update package list run: apt update - name: Install Dependencies - run: apt install -y git libssl-dev cmake build-essential clang libcurl4-openssl-dev libpsl-dev + run: apt install -y git libssl-dev cmake build-essential clang libcurl4-openssl-dev libpsl-dev meson env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -58,7 +58,7 @@ jobs: - name: Update package list run: apt update - name: Install Dependencies - run: apt install -y git libssl-dev cmake build-essential libcurl4-openssl-dev libpsl-dev + run: apt install -y git libssl-dev cmake build-essential libcurl4-openssl-dev libpsl-dev meson env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -89,7 +89,7 @@ jobs: - name: Update package list run: sudo apt update - name: Install Dependencies - run: sudo apt install -y git libssl-dev libmbedtls-dev cmake build-essential libpsl-dev + run: sudo apt install -y git libssl-dev libmbedtls-dev cmake build-essential libpsl-dev meson env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -120,7 +120,7 @@ jobs: - name: Update package list run: dnf update -y - name: Install Dependencies - run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake libpsl-devel + run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake libpsl-devel libunistring-devel meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -150,7 +150,7 @@ jobs: - name: Update package list run: dnf update -y - name: Install Dependencies - run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake libpsl-devel + run: dnf install -y gcc clang git gcc gdb make openssl-devel libcurl-devel cmake libpsl-devel libunistring-devel meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -179,7 +179,7 @@ jobs: - name: Update package list run: dnf update -y - name: Install Dependencies - run: dnf install -y gcc clang git gcc gdb make openssl-devel libasan libubsan liblsan libtsan cmake libpsl-devel + run: dnf install -y gcc clang git gcc gdb make openssl-devel libasan libubsan liblsan libtsan cmake libpsl-devel libunistring-devel meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -248,6 +248,8 @@ jobs: steps: - name: Install libpsl run: brew install libpsl + - name: Install meson + run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -269,6 +271,8 @@ jobs: steps: - name: Install libpsl run: brew install libpsl + - name: Install meson + run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -293,6 +297,8 @@ jobs: run: brew install openssl - name: Install libpsl run: brew install libpsl + - name: Install meson + run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -324,6 +330,8 @@ jobs: run: brew install openssl - name: Install libpsl run: brew install libpsl + - name: Install meson + run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" diff --git a/cmake/libpsl.cmake b/cmake/libpsl.cmake index feeb17b5a..6c8afec81 100644 --- a/cmake/libpsl.cmake +++ b/cmake/libpsl.cmake @@ -27,7 +27,7 @@ execute_process(COMMAND "${MESON_PATH}" setup --buildtype=release --prefix "${LIBPSL_INSTALL_DIR}" --default-library=static - RESULT_VARIABLE MESON_SETUP_RC + RESULT_VARIABLE MESON_SETUP_RC ) if(MESON_SETUP_RC) message(FATAL_ERROR "Meson setup for libpsl failed") From eadfca478c659eabe288b1dce21085ce53d4481c Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 15 May 2025 17:56:50 +0200 Subject: [PATCH 17/24] CI install libunistring-dev on ubuntu --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 12a07a495..61b0276b9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: - name: Update package list run: apt update - name: Install Dependencies - run: apt install -y git libssl-dev cmake build-essential clang libcurl4-openssl-dev libpsl-dev meson + run: apt install -y git libssl-dev cmake build-essential clang libcurl4-openssl-dev libpsl-dev meson libunistring-dev env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -58,7 +58,7 @@ jobs: - name: Update package list run: apt update - name: Install Dependencies - run: apt install -y git libssl-dev cmake build-essential libcurl4-openssl-dev libpsl-dev meson + run: apt install -y git libssl-dev cmake build-essential libcurl4-openssl-dev libpsl-dev meson libunistring-dev env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake @@ -89,7 +89,7 @@ jobs: - name: Update package list run: sudo apt update - name: Install Dependencies - run: sudo apt install -y git libssl-dev libmbedtls-dev cmake build-essential libpsl-dev meson + run: sudo apt install -y git libssl-dev libmbedtls-dev cmake build-essential libpsl-dev meson libunistring-dev env: DEBIAN_FRONTEND: noninteractive - name: Setup cmake From cf55eb756460f39c3d901ca8243eb1b7bc7786b9 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 15 May 2025 19:17:57 +0200 Subject: [PATCH 18/24] Fixed libpsl on non windows systems --- cmake/libpsl.cmake | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/cmake/libpsl.cmake b/cmake/libpsl.cmake index 6c8afec81..0e0555091 100644 --- a/cmake/libpsl.cmake +++ b/cmake/libpsl.cmake @@ -18,6 +18,7 @@ set(LIBPSL_INSTALL_DIR "${CMAKE_BINARY_DIR}/libpsl_src-install") file(MAKE_DIRECTORY "${LIBPSL_BUILD_DIR}") # Meson configure +# We only care about static libraries of psl. In case you need a dynamic version, feel free to add support for it. message(STATUS "Configuring libpsl...") execute_process(COMMAND "${MESON_PATH}" setup "${LIBPSL_BUILD_DIR}" @@ -27,20 +28,18 @@ execute_process(COMMAND "${MESON_PATH}" setup --buildtype=release --prefix "${LIBPSL_INSTALL_DIR}" --default-library=static - RESULT_VARIABLE MESON_SETUP_RC -) + RESULT_VARIABLE MESON_SETUP_RC) if(MESON_SETUP_RC) - message(FATAL_ERROR "Meson setup for libpsl failed") + message(FATAL_ERROR "Meson setup for libpsl failed!") endif() # Meson build message(STATUS "Building libpsl...") -execute_process( - COMMAND "${MESON_PATH}" compile -C "${LIBPSL_BUILD_DIR}" - RESULT_VARIABLE MESON_COMPILE_RC +execute_process(COMMAND "${MESON_PATH}" compile -C "${LIBPSL_BUILD_DIR}" + RESULT_VARIABLE MESON_COMPILE_RC ) if(MESON_COMPILE_RC) - message(FATAL_ERROR "Meson compile for libpsl failed") + message(FATAL_ERROR "Meson compile for libpsl failed!") endif() # Meson install @@ -48,16 +47,9 @@ message(STATUS "Installing libpsl...") execute_process(COMMAND "${MESON_PATH}" install -C "${LIBPSL_BUILD_DIR}" RESULT_VARIABLE MESON_INSTALL_RC) if(MESON_INSTALL_RC) - message(FATAL_ERROR "Meson install for libpsl failed") + message(FATAL_ERROR "Meson install for libpsl failed!") endif() -add_library(libpsl SHARED IMPORTED) -add_dependencies(libpsl libpsl_build) - -# We only care about static libraries of psl. In case you need a dynamic version, feel free to add support for it. -set(LIBPSL_LIBRARY "${LIBPSL_INSTALL_DIR}/lib/psl.${CMAKE_STATIC_LIBRARY_SUFFIX_CXX}") -set_target_properties(libpsl PROPERTIES IMPORTED_LOCATION ${LIBPSL_LIBRARY}) - -set(LIBPSL_INCLUDE_DIR "${LIBPSL_INSTALL_DIR}/include") -target_include_directories(libpsl INTERFACE "${LIBPSL_INCLUDE_DIR}") -include_directories(${LIBPSL_INCLUDE_DIR}) +list(APPEND CMAKE_LIBRARY_PATH "${LIBPSL_INSTALL_DIR}/lib64") +list(APPEND CMAKE_LIBRARY_PATH "${LIBPSL_INSTALL_DIR}/lib") +list(APPEND CMAKE_INCLUDE_PATH "${LIBPSL_INSTALL_DIR}/include") From d419f1d4306090c1c1ff05eaaccd60a420921988 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 15 May 2025 19:31:26 +0200 Subject: [PATCH 19/24] Installing meson in the windows CI --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61b0276b9..0d301bd96 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -202,6 +202,9 @@ jobs: buildType: [Debug, Release] runs-on: windows-latest steps: + - uses: actions/setup-python@v1 + - name: Install meson + run: pip install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -221,6 +224,9 @@ jobs: windows-msvc-openssl: runs-on: windows-latest steps: + - uses: actions/setup-python@v1 + - name: Install meson + run: pip install meson - name: Install OpenSSL run: choco install openssl -y - name: Checkout From 0caf98f728e61819d3e847a147ddffdfeb147247 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 29 May 2025 07:28:03 +0200 Subject: [PATCH 20/24] Added missing meson CI runs --- .github/workflows/build-deb.yml | 2 +- .github/workflows/build-nuget.yml | 2 ++ .github/workflows/clang-tidy.yml | 2 +- .github/workflows/cppcheck.yml | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-deb.yml b/.github/workflows/build-deb.yml index c5bb8a1f5..3a574df65 100644 --- a/.github/workflows/build-deb.yml +++ b/.github/workflows/build-deb.yml @@ -18,7 +18,7 @@ jobs: - name: "Update package list" run: sudo apt update - name: "Install cpr dependencies" - run: sudo apt install -y libssl-dev libcurl4-openssl-dev libpsl-dev + run: sudo apt install -y libssl-dev libcurl4-openssl-dev libpsl-dev meson - name: "Install building tools" run: sudo apt install -y cmake debmake devscripts debhelper # Set version number diff --git a/.github/workflows/build-nuget.yml b/.github/workflows/build-nuget.yml index ed3f53276..2b001c3b2 100644 --- a/.github/workflows/build-nuget.yml +++ b/.github/workflows/build-nuget.yml @@ -28,6 +28,8 @@ jobs: uses: actions/checkout@v3 - name: Setup NuGet.exe uses: nuget/setup-nuget@v2 + - name: Install meson + run: pip install meson - name: "[Release_x86] Build & Install" env: CMAKE_GENERATOR: "Visual Studio 16 2019" diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index f9a9aa016..260c9c3ee 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -10,7 +10,7 @@ jobs: - name: Update package list run: sudo dnf update -y - name: Install dependencies - run: sudo dnf install -y openssl-devel cmake git gcc clang ninja-build libpsl-devel + run: sudo dnf install -y openssl-devel cmake git gcc clang ninja-build libpsl-devel meson - name: Install clang-tidy run: sudo dnf install -y clang-tools-extra - name: Checkout diff --git a/.github/workflows/cppcheck.yml b/.github/workflows/cppcheck.yml index fad7d759e..16127bbaf 100644 --- a/.github/workflows/cppcheck.yml +++ b/.github/workflows/cppcheck.yml @@ -12,7 +12,7 @@ jobs: - name: Update package list run: dnf update -y - name: Install Dependencies - run: dnf install -y gcc clang git gcc gdb make openssl-devel cmake libpsl-devel cppcheck + run: dnf install -y gcc clang git gcc gdb make openssl-devel cmake libpsl-devel cppcheck meson - name: "[Release g++] Build" env: CPR_ENABLE_CPPCHECK: ON From c7d1864ef8140865cf1e0ce4fbaea6a42634e093 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 29 May 2025 07:37:04 +0200 Subject: [PATCH 21/24] Replaced deprecated FetchContent_Populate with FetchContent_MakeAvailable --- CMakeLists.txt | 2 +- cmake/libpsl.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d005d297f..547235d95 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -382,7 +382,7 @@ if(CPR_BUILD_TESTS) USES_TERMINAL_DOWNLOAD TRUE) # <---- This is needed only for Ninja to show download progress # We can not use FetchContent_MakeAvailable, since we need to patch mongoose to use CMake if (NOT mongoose_POPULATED) - FetchContent_POPULATE(mongoose) + FetchContent_MakeAvailable(mongoose) file(INSTALL cmake/mongoose.CMakeLists.txt DESTINATION ${mongoose_SOURCE_DIR}) file(RENAME ${mongoose_SOURCE_DIR}/mongoose.CMakeLists.txt ${mongoose_SOURCE_DIR}/CMakeLists.txt) diff --git a/cmake/libpsl.cmake b/cmake/libpsl.cmake index 0e0555091..d46e063c2 100644 --- a/cmake/libpsl.cmake +++ b/cmake/libpsl.cmake @@ -10,7 +10,7 @@ endif() FetchContent_Declare(libpsl_src GIT_REPOSITORY https://github.com/rockdaboot/libpsl.git GIT_TAG 0.21.5) -FetchContent_Populate(libpsl_src) # sets libpsl_src_SOURCE_DIR / _BINARY_DIR +FetchContent_MakeAvailable(libpsl_src) # sets libpsl_src_SOURCE_DIR / _BINARY_DIR set(LIBPSL_SOURCE_DIR "${libpsl_src_SOURCE_DIR}") set(LIBPSL_BUILD_DIR "${libpsl_src_BINARY_DIR}") From 5910caddad0b4293283b2720b7d20d694466d9ab Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 29 May 2025 07:44:48 +0200 Subject: [PATCH 22/24] Using system libpsl on macOS inside the CI --- .github/workflows/ci.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0d301bd96..5fd57ce2a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -254,14 +254,13 @@ jobs: steps: - name: Install libpsl run: brew install libpsl - - name: Install meson - run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" env: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: OFF + CPR_USE_SYSTEM_LIB_PSL: ON uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build @@ -277,8 +276,6 @@ jobs: steps: - name: Install libpsl run: brew install libpsl - - name: Install meson - run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -286,6 +283,7 @@ jobs: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: OFF CPR_FORCE_DARWINSSL_BACKEND: ON + CPR_USE_SYSTEM_LIB_PSL: ON uses: ashutoshvarma/action-cmake-build@master with: build-dir: ${{ github.workspace }}/build @@ -303,8 +301,6 @@ jobs: run: brew install openssl - name: Install libpsl run: brew install libpsl - - name: Install meson - run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -312,6 +308,7 @@ jobs: CPR_BUILD_TESTS: ON CPR_BUILD_TESTS_SSL: ON CPR_FORCE_OPENSSL_BACKEND: ON + CPR_USE_SYSTEM_LIB_PSL: ON OPENSSL_ROOT_DIR: "${{ env.MACOS_OPENSSL_ROOT_DIR }}" OPENSSL_LIBRARIES: "${{ env.MACOS_OPENSSL_ROOT_DIR }}/lib" LDFLAGS: "-L${{ env.MACOS_OPENSSL_ROOT_DIR }}/lib" @@ -336,8 +333,6 @@ jobs: run: brew install openssl - name: Install libpsl run: brew install libpsl - - name: Install meson - run: brew install meson - name: Checkout uses: actions/checkout@v3 - name: "Build & Test" @@ -346,6 +341,7 @@ jobs: CPR_BUILD_TESTS_SSL: ON CPR_FORCE_OPENSSL_BACKEND: ON CPR_USE_BOOST_FILESYSTEM: ON + CPR_USE_SYSTEM_LIB_PSL: ON OPENSSL_ROOT_DIR: "${{ env.MACOS_OPENSSL_ROOT_DIR }}" OPENSSL_LIBRARIES: "${{ env.MACOS_OPENSSL_ROOT_DIR }}/lib" LDFLAGS: "-L${{ env.MACOS_OPENSSL_ROOT_DIR }}/lib" From ebeb2d581b8e528e037c7d81f46c21a154ff65e2 Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Thu, 29 May 2025 07:52:11 +0200 Subject: [PATCH 23/24] Using system curl and psl for deb builds --- .github/workflows/build-deb.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-deb.yml b/.github/workflows/build-deb.yml index 3a574df65..53b7084a9 100644 --- a/.github/workflows/build-deb.yml +++ b/.github/workflows/build-deb.yml @@ -18,7 +18,7 @@ jobs: - name: "Update package list" run: sudo apt update - name: "Install cpr dependencies" - run: sudo apt install -y libssl-dev libcurl4-openssl-dev libpsl-dev meson + run: sudo apt install -y libssl-dev libcurl4-openssl-dev libpsl-dev - name: "Install building tools" run: sudo apt install -y cmake debmake devscripts debhelper # Set version number @@ -30,7 +30,7 @@ jobs: run: | mkdir -p cpr/build pushd cpr/build - cmake .. -DCPR_BUILD_VERSION_OUTPUT_ONLY=ON + cmake .. -DCPR_BUILD_VERSION_OUTPUT_ONLY=ON -DCPR_USE_SYSTEM_LIB_PSL=ON -DCPR_USE_SYSTEM_CURL=ON echo "RELEASE_VERSION=$(cat version.txt)" >> $GITHUB_ENV popd rm -rf cpr/build From 2b5798394603b1958e3ffc5c56a3187aa0854dfd Mon Sep 17 00:00:00 2001 From: Fabian Sauter Date: Sat, 14 Jun 2025 14:19:30 +0200 Subject: [PATCH 24/24] Potential Windows compilation fix --- cmake/libpsl.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/libpsl.cmake b/cmake/libpsl.cmake index d46e063c2..380bcb586 100644 --- a/cmake/libpsl.cmake +++ b/cmake/libpsl.cmake @@ -53,3 +53,7 @@ endif() list(APPEND CMAKE_LIBRARY_PATH "${LIBPSL_INSTALL_DIR}/lib64") list(APPEND CMAKE_LIBRARY_PATH "${LIBPSL_INSTALL_DIR}/lib") list(APPEND CMAKE_INCLUDE_PATH "${LIBPSL_INSTALL_DIR}/include") + +# Workaround for Windows compilation. +# Ref: https://github.com/microsoft/vcpkg/pull/38847/files#diff-922fe829582a7e5acf5b0c35181daa63064fc12a2c889c5d89a19e5e02113f1bL44 +add_compile_definitions(PSL_STATIC=1)