← Commit list

6ad50dc285

Viktor Szakats
Viktor Szakats
2026-02-23
SUCCESS Duration: 627s

Subject

cmake: add C++ integration test

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

.github/workflows/distcheck.yml+3 -0
@@ -316,6 +316,9 @@ jobs:
run: ./tests/cmake/test.sh add_subdirectory ${TESTOPTS} -DCURL_USE_OPENSSL=ON
- name: 'via find_package'
run: ./tests/cmake/test.sh find_package ${TESTOPTS} -DCURL_USE_OPENSSL=ON
+ - name: 'via find_package (C++)'
+ if: ${{ contains(matrix.image, 'ubuntu') }}
+ run: TEST_CMAKE_FLAGS=-DTEST_CPP=ON ./tests/cmake/test.sh find_package ${TESTOPTS} -DCURL_USE_OPENSSL=ON
- name: 'via ExternalProject (old cmake)'
if: ${{ contains(matrix.image, 'ubuntu') }}
Makefile.am+1 -0
@@ -62,6 +62,7 @@ CMAKE_DIST = \
CMakeLists.txt \
tests/cmake/CMakeLists.txt \
tests/cmake/test.c \
+ tests/cmake/test.cpp \
tests/cmake/test.sh
EXTRA_DIST = CHANGES.md COPYING RELEASE-NOTES Dockerfile .clang-tidy.yml .editorconfig $(CMAKE_DIST)
include/curl/curl.h+2 -2
@@ -3329,8 +3329,8 @@ CURL_EXTERN CURLcode curl_easy_ssls_export(CURL *handle,
#if defined(__STDC__) && (__STDC__ >= 1)
/* This preprocessor magic that replaces a call with the exact same call is
only done to make sure application authors pass exactly three arguments
- to these functions. Use recursive macros to allow reusing these symbols
- as C++ method names. */
+ to these functions. Use recursive macros to allow using these symbols via
+ the C++ global namespace '::' or reuse them as method names. */
#define curl_easy_setopt(handle, opt, param) \
curl_easy_setopt(handle, opt, param)
#define curl_easy_getinfo(handle, info, arg) \
tests/cmake/CMakeLists.txt+16 -8
@@ -25,7 +25,15 @@
cmake_minimum_required(VERSION 3.7...3.16 FATAL_ERROR)
message(STATUS "Using CMake version ${CMAKE_VERSION}")
-project(test-consumer C)
+option(TEST_CPP "Test C++" OFF)
+
+if(TEST_CPP)
+ project(test-CPP-consumer CXX)
+ set(_source "test.cpp")
+else()
+ project(test-C-consumer C)
+ set(_source "test.c")
+endif()
option(TEST_INTEGRATION_MODE "Integration mode" "find_package")
@@ -93,7 +101,7 @@ elseif(TEST_INTEGRATION_MODE STREQUAL "ExternalProject")
${CURL_TEST_OPTS}
BUILD_BYPRODUCTS "${_curl_static_lib}")
- add_executable(test-consumer-static-fetch "test.c")
+ add_executable(test-consumer-static-fetch "${_source}")
add_dependencies(test-consumer-static-fetch curl-external)
if(WIN32)
target_compile_definitions(test-consumer-static-fetch PRIVATE "CURL_STATICLIB")
@@ -107,26 +115,26 @@ if(TEST_INTEGRATION_MODE STREQUAL "find_package" OR
TEST_INTEGRATION_MODE STREQUAL "add_subdirectory" OR
TEST_INTEGRATION_MODE STREQUAL "FetchContent")
- add_executable(test-consumer-static-ns "test.c")
+ add_executable(test-consumer-static-ns "${_source}")
target_link_libraries(test-consumer-static-ns PRIVATE "CURL::libcurl_static")
- add_executable(test-consumer-shared-ns "test.c")
+ add_executable(test-consumer-shared-ns "${_source}")
target_link_libraries(test-consumer-shared-ns PRIVATE "CURL::libcurl_shared")
# Alias for either shared or static library
- add_executable(test-consumer-selected-ns "test.c")
+ add_executable(test-consumer-selected-ns "${_source}")
target_link_libraries(test-consumer-selected-ns PRIVATE "CURL::libcurl")
endif()
if(TEST_INTEGRATION_MODE STREQUAL "add_subdirectory" OR
TEST_INTEGRATION_MODE STREQUAL "FetchContent")
- add_executable(test-consumer-static-bare "test.c")
+ add_executable(test-consumer-static-bare "${_source}")
target_link_libraries(test-consumer-static-bare PRIVATE "libcurl_static")
- add_executable(test-consumer-shared-bare "test.c")
+ add_executable(test-consumer-shared-bare "${_source}")
target_link_libraries(test-consumer-shared-bare PRIVATE "libcurl_shared")
- add_executable(test-consumer-selected-bare "test.c")
+ add_executable(test-consumer-selected-bare "${_source}")
target_link_libraries(test-consumer-selected-bare PRIVATE "libcurl")
endif()
tests/cmake/test.c+1 -1
@@ -27,7 +27,7 @@
int main(int argc, const char **argv)
{
(void)argc;
- puts("libcurl test:");
+ puts("libcurl C test:");
puts(argv[0]);
puts(curl_version());
puts("---");
tests/cmake/test.cpp+44 -0
@@ -0,0 +1,44 @@
+/***************************************************************************
+ * _ _ ____ _
+ * Project ___| | | | _ \| |
+ * / __| | | | |_) | |
+ * | (__| |_| | _ <| |___
+ * \___|\___/|_| \_\_____|
+ *
+ * Copyright (C) Daniel Stenberg, <[email protected]>, 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.
+ *
+ * SPDX-License-Identifier: curl
+ *
+ ***************************************************************************/
+#include <curl/curl.h>
+#include <iostream>
+
+class CurlClass {
+public:
+ void curl_multi_setopt(void *a, int b, long c) {
+ std::cout << curl_version() << std::endl;
+ }
+};
+
+int main(int argc, const char **argv)
+{
+ (void)argc;
+ std::cout << "libcurl C++ test:" << std::endl;
+ std::cout << argv[0] << std::endl;
+ CurlClass mycurl;
+ mycurl.curl_multi_setopt(nullptr, 0, 0);
+ ::curl_easy_setopt(nullptr, CURLOPT_URL, "https://example.com/");
+ std::cout << "---" << std::endl;
+ return 0;
+}