From 55c5758b38aaa9cd7bb847a3a492a1ca58e00fb1 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 15:17:49 +0200 Subject: [PATCH 1/9] add and link libcurl --- CMakeLists.txt | 3 ++ cmake/FindLibCURL.cmake | 62 ++++++++++++++++++++++++++++++++++++ include/vcpkg/base/curl.h | 11 +++++++ src/vcpkg/base/downloads.cpp | 2 ++ src/vcpkg/metrics.cpp | 2 ++ 5 files changed, 80 insertions(+) create mode 100644 cmake/FindLibCURL.cmake create mode 100644 include/vcpkg/base/curl.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f23f31bb7..f8d34aca71 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,6 +189,7 @@ set(TEST_SCRIPT_ASSET_CACHE_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/test-script find_package(fmt REQUIRED) find_package(CMakeRC REQUIRED) +find_package(LibCURL REQUIRED) # === Target: locale-resources === @@ -223,6 +224,8 @@ target_compile_definitions(vcpkglib PUBLIC _FILE_OFFSET_BITS=64 ) +target_link_libraries(vcpkglib PRIVATE CURL::libcurl) + if(VCPKG_STANDALONE_BUNDLE_SHA) target_compile_definitions(vcpkglib PUBLIC "VCPKG_STANDALONE_BUNDLE_SHA=${VCPKG_STANDALONE_BUNDLE_SHA}" diff --git a/cmake/FindLibCURL.cmake b/cmake/FindLibCURL.cmake new file mode 100644 index 0000000000..7d2bb85e89 --- /dev/null +++ b/cmake/FindLibCURL.cmake @@ -0,0 +1,62 @@ +option(VCPKG_DEPENDENCY_EXTERNAL_LIBCURL "Use an external version of the libcurl library" OFF) + +# This option exists to allow the URI to be replaced with a Microsoft-internal URI in official +# builds which have restricted internet access; see azure-pipelines/signing.yml +# Note that the SHA512 is the same, so vcpkg-tool contributors need not be concerned that we built +# with different content. +if(NOT VCPKG_LIBCURL_URL) + set(VCPKG_LIBCURL_URL "https://github.com/curl/curl/archive/refs/tags/curl-8_8_0.tar.gz") +endif() + +if(POLICY CMP0135) + cmake_policy(SET CMP0135 NEW) +endif() + +include(FetchContent) +FetchContent_Declare( + LibCURL + URL "${VCPKG_LIBCURL_URL}" + URL_HASH "SHA512=e66cbf9bd3ae7b9b031475210b80b883b6a133042fbbc7cf2413f399d1b38aa54ab7322626abd3c6f1af56e0d540221f618aa903bd6b463ac8324f2c4e92dfa8" +) + +if(NOT LibCURL_FIND_REQUIRED) + message(FATAL_ERROR "LibCURL must be REQUIRED") +endif() + +if(VCPKG_DEPENDENCY_EXTERNAL_FMT) + find_package(CURL REQUIRED) +else() + block() + set(BUILD_SHARED_LIBS OFF) + set(BUILD_STATIC_LIBS ON) + set(BUILD_CURL_EXE OFF) + set(CURL_DISABLE_INSTALL OFF) + #set(CURL_STATIC_CRT ON) + set(ENABLE_UNICODE ON) + set(CURL_ENABLE_EXPORT_TARGET OFF) + set(BUILD_LIBCURL_DOCS OFF) + set(BUILD_MISC_DOCS OFF) + set(ENABLE_CURL_MANUAL OFF) + set(CMAKE_DISABLE_FIND_PACKAGE_Perl ON) + set(CMAKE_DISABLE_FIND_PACKAGE_ZLIB ON) + set(CMAKE_DISABLE_FIND_PACKAGE_LibPSL ON) + set(CMAKE_DISABLE_FIND_PACKAGE_LibSSH2 ON) + if(MSVC) # This is in block() so no need to backup the variables + string(APPEND CMAKE_C_FLAGS " /wd6101") + string(APPEND CMAKE_C_FLAGS " /wd6011") + string(APPEND CMAKE_C_FLAGS " /wd6054") + string(APPEND CMAKE_C_FLAGS " /wd6240") + string(APPEND CMAKE_C_FLAGS " /wd6239") + string(APPEND CMAKE_C_FLAGS " /wd6323") + string(APPEND CMAKE_C_FLAGS " /wd6387") + string(APPEND CMAKE_C_FLAGS " /wd28182") + string(APPEND CMAKE_C_FLAGS " /wd28183") + string(APPEND CMAKE_C_FLAGS " /wd28251") + endif() + FetchContent_MakeAvailable(LibCURL) + endblock() + if(NOT TARGET CURL::libcurl) + add_library(CURL::libcurl INTERFACE) + target_link_libraries(CURL::libcurl PUBLIC libcurl_static) + endif() +endif() diff --git a/include/vcpkg/base/curl.h b/include/vcpkg/base/curl.h new file mode 100644 index 0000000000..d160c47b5a --- /dev/null +++ b/include/vcpkg/base/curl.h @@ -0,0 +1,11 @@ + +#ifdef _MSC_VER +#pragma warning(push) // Save current warning state +#pragma warning(disable : 6101) // Disable specific warning (e.g., warning 4996) +#endif + +#include + +#ifdef _MSC_VER +#pragma warning(pop) +#endif \ No newline at end of file diff --git a/src/vcpkg/base/downloads.cpp b/src/vcpkg/base/downloads.cpp index 572318a832..d6cfe0cac2 100644 --- a/src/vcpkg/base/downloads.cpp +++ b/src/vcpkg/base/downloads.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include @@ -379,6 +380,7 @@ namespace vcpkg { #define GUID_MARKER "5ec47b8e-6776-4d70-b9b3-ac2a57bc0a1c" static constexpr StringLiteral guid_marker = GUID_MARKER; + // TODO: Replace with libcurl code. Command prefix_cmd{"curl"}; if (!prefixArgs.empty()) { diff --git a/src/vcpkg/metrics.cpp b/src/vcpkg/metrics.cpp index 8f2b4453e9..fced85741b 100644 --- a/src/vcpkg/metrics.cpp +++ b/src/vcpkg/metrics.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -606,6 +607,7 @@ namespace vcpkg builder.string_arg(vcpkg_metrics_txt_path); cmd_execute_background(builder); #else + // TODO: replace with libcurl code cmd_execute_background(Command("curl") .string_arg("https://dc.services.visualstudio.com/v2/track") .string_arg("--max-time") From 3b2a4a54ce7d9cad68882d1aaa30e3e3346039b9 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 15:40:32 +0200 Subject: [PATCH 2/9] wrap in a function instead --- cmake/FindLibCURL.cmake | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/FindLibCURL.cmake b/cmake/FindLibCURL.cmake index 7d2bb85e89..093ce8f667 100644 --- a/cmake/FindLibCURL.cmake +++ b/cmake/FindLibCURL.cmake @@ -26,7 +26,7 @@ endif() if(VCPKG_DEPENDENCY_EXTERNAL_FMT) find_package(CURL REQUIRED) else() - block() + function(get_libcurl) set(BUILD_SHARED_LIBS OFF) set(BUILD_STATIC_LIBS ON) set(BUILD_CURL_EXE OFF) @@ -54,7 +54,8 @@ else() string(APPEND CMAKE_C_FLAGS " /wd28251") endif() FetchContent_MakeAvailable(LibCURL) - endblock() + endfunction() + get_libcurl() if(NOT TARGET CURL::libcurl) add_library(CURL::libcurl INTERFACE) target_link_libraries(CURL::libcurl PUBLIC libcurl_static) From 35a68647884b9780fff2c03323d3684d30118533 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:40:39 +0200 Subject: [PATCH 3/9] deactivate picky compiler options --- cmake/FindLibCURL.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/FindLibCURL.cmake b/cmake/FindLibCURL.cmake index 093ce8f667..4e4eb76e3e 100644 --- a/cmake/FindLibCURL.cmake +++ b/cmake/FindLibCURL.cmake @@ -37,6 +37,7 @@ else() set(BUILD_LIBCURL_DOCS OFF) set(BUILD_MISC_DOCS OFF) set(ENABLE_CURL_MANUAL OFF) + set(PICKY_COMPILER OFF) set(CMAKE_DISABLE_FIND_PACKAGE_Perl ON) set(CMAKE_DISABLE_FIND_PACKAGE_ZLIB ON) set(CMAKE_DISABLE_FIND_PACKAGE_LibPSL ON) @@ -58,6 +59,7 @@ else() get_libcurl() if(NOT TARGET CURL::libcurl) add_library(CURL::libcurl INTERFACE) - target_link_libraries(CURL::libcurl PUBLIC libcurl_static) + target_link_libraries(CURL::libcurl INTERFACE libcurl_static) + target_compile_options(CURL::libcurl INTERFACE CURL_STATICLIB) endif() endif() From 8b0ee07d5546e2e2e45e72e0fa8f2f1168738748 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:41:02 +0200 Subject: [PATCH 4/9] add CURL_STATICLIB to tests --- CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f8d34aca71..8b5f894a62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -498,6 +498,7 @@ if (BUILD_TESTING) "${CMAKE_CURRENT_SOURCE_DIR}/src/vcpkg.manifest" ) target_link_libraries(vcpkg-test PRIVATE vcpkglib) + set_property(TARGET vcpkg-test PROPERTY PDB_NAME "vcpkg-test${VCPKG_PDB_SUFFIX}") if(ANDROID) target_link_libraries(vcpkg-test PRIVATE log) @@ -507,7 +508,8 @@ if (BUILD_TESTING) if(CMAKE_VERSION GREATER_EQUAL "3.16") target_precompile_headers(vcpkg-test REUSE_FROM vcpkglib) - elseif(NOT MSVC) + target_compile_definitions(vcpkg-test PRIVATE CURL_STATICLIB) + elseif(NOT MSVC) target_compile_options(vcpkg-test PRIVATE -include "${CMAKE_CURRENT_SOURCE_DIR}/include/pch.h") endif() From eba270205814d4b72df38fe0cb2ac4f6d88f4a24 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 21:06:05 +0200 Subject: [PATCH 5/9] Fix VCPKG_DEPENDENCY_EXTERNAL_LIBCURL Co-authored-by: Osyotr --- cmake/FindLibCURL.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindLibCURL.cmake b/cmake/FindLibCURL.cmake index 4e4eb76e3e..972df04ed9 100644 --- a/cmake/FindLibCURL.cmake +++ b/cmake/FindLibCURL.cmake @@ -23,7 +23,7 @@ if(NOT LibCURL_FIND_REQUIRED) message(FATAL_ERROR "LibCURL must be REQUIRED") endif() -if(VCPKG_DEPENDENCY_EXTERNAL_FMT) +if(VCPKG_DEPENDENCY_EXTERNAL_LIBCURL) find_package(CURL REQUIRED) else() function(get_libcurl) From 5388d51abb325da21560a6b48cc34c58add17d86 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 22:23:12 +0200 Subject: [PATCH 6/9] Try getting cmake configure logs from workflow --- .github/workflows/build.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index fd78339f98..571d9afb4d 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -83,3 +83,13 @@ jobs: ${{ github.workspace }}/azure-pipelines/end-to-end-tests.ps1 -RunArtifactsTests env: VCPKG_ROOT: ${{ github.workspace }}/vcpkg-root + - name: Upload CMake logs on failure + if: failure() + uses: actions/upload-artifact@v4 + with: + name: cmake-logs + path: | + out/build/${{ matrix.preset }}/CMakeFiles/CMakeError.log + out/build/${{ matrix.preset }}/CMakeFiles/CMakeOutput.log + out/build/${{ matrix.preset }}/CMakeFiles/CMakeConfigureLog.yaml + From d9dacdbc1190b7312156d7fa85c05798c6bd07d9 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 22:33:59 +0200 Subject: [PATCH 7/9] try disabling werror for libcurl --- cmake/FindLibCURL.cmake | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/FindLibCURL.cmake b/cmake/FindLibCURL.cmake index 972df04ed9..bf02e6cf64 100644 --- a/cmake/FindLibCURL.cmake +++ b/cmake/FindLibCURL.cmake @@ -52,7 +52,9 @@ else() string(APPEND CMAKE_C_FLAGS " /wd6387") string(APPEND CMAKE_C_FLAGS " /wd28182") string(APPEND CMAKE_C_FLAGS " /wd28183") - string(APPEND CMAKE_C_FLAGS " /wd28251") + string(APPEND CMAKE_C_FLAGS " /wd28251") + else() + string(APPEND CMAKE_C_FLAGS " -Wno-error") endif() FetchContent_MakeAvailable(LibCURL) endfunction() From 247b52d1b4724113cfde0164974cde53709d0c13 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 22:53:57 +0200 Subject: [PATCH 8/9] adjust comment --- cmake/FindLibCURL.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/FindLibCURL.cmake b/cmake/FindLibCURL.cmake index bf02e6cf64..123be82c80 100644 --- a/cmake/FindLibCURL.cmake +++ b/cmake/FindLibCURL.cmake @@ -42,7 +42,7 @@ else() set(CMAKE_DISABLE_FIND_PACKAGE_ZLIB ON) set(CMAKE_DISABLE_FIND_PACKAGE_LibPSL ON) set(CMAKE_DISABLE_FIND_PACKAGE_LibSSH2 ON) - if(MSVC) # This is in block() so no need to backup the variables + if(MSVC) # This is in function() so no need to backup the variables string(APPEND CMAKE_C_FLAGS " /wd6101") string(APPEND CMAKE_C_FLAGS " /wd6011") string(APPEND CMAKE_C_FLAGS " /wd6054") From 38420387e1799406127fe129d68c34e0e158e0c2 Mon Sep 17 00:00:00 2001 From: Alexander Neumann <30894796+Neumann-A@users.noreply.github.com> Date: Mon, 10 Jun 2024 22:56:03 +0200 Subject: [PATCH 9/9] apply format --- src/vcpkg/base/downloads.cpp | 2 +- src/vcpkg/metrics.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vcpkg/base/downloads.cpp b/src/vcpkg/base/downloads.cpp index d6cfe0cac2..9bd463e1ec 100644 --- a/src/vcpkg/base/downloads.cpp +++ b/src/vcpkg/base/downloads.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -12,7 +13,6 @@ #include #include #include -#include #include diff --git a/src/vcpkg/metrics.cpp b/src/vcpkg/metrics.cpp index fced85741b..46a59f0c49 100644 --- a/src/vcpkg/metrics.cpp +++ b/src/vcpkg/metrics.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -8,7 +9,6 @@ #include #include #include -#include #include #include