From b83f4474dae7dd00b43d9ecf0b16a16374f08de5 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 29 Jun 2025 18:06:22 +1200 Subject: [PATCH] docs: Update 3 files --- README.md | 2 +- build-base/Dockerfile.dropshell-build-base | 27 +++++++++++++++-- tests/cprdemo/CMakeLists.txt | 34 ++++++++++------------ 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index c432065..d9f9027 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ cd build-base - **ipdemo**: Demonstrates Drogon HTTP utilities and JSON processing - **test_libs**: Tests all available libraries (fmt, spdlog, SQLite3, etc.) -- **cprdemo**: Example using CPR library for HTTP requests (work in progress) +- **cprdemo**: Example using CPR library for HTTP requests ### Environment Variables diff --git a/build-base/Dockerfile.dropshell-build-base b/build-base/Dockerfile.dropshell-build-base index 10d2d03..4d46e31 100644 --- a/build-base/Dockerfile.dropshell-build-base +++ b/build-base/Dockerfile.dropshell-build-base @@ -134,8 +134,26 @@ WORKDIR /tmp RUN curl -LO https://curl.se/download/curl-${CURL_VERSION}.tar.gz && \ tar xzf curl-${CURL_VERSION}.tar.gz && \ cd curl-${CURL_VERSION} && \ - ./configure --disable-shared --enable-static --with-ssl=/usr/local --prefix=/usr/local \ - --with-zlib --with-zstd && \ + mkdir build && cd build && \ + cmake .. \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=OFF \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCURL_STATICLIB=ON \ + -DCURL_USE_OPENSSL=ON \ + -DOPENSSL_ROOT_DIR=/usr/local \ + -DOPENSSL_USE_STATIC_LIBS=TRUE \ + -DCURL_ZLIB=ON \ + -DCURL_ZSTD=ON \ + -DZLIB_LIBRARY=/usr/lib/libz.a \ + -DZLIB_INCLUDE_DIR=/usr/include \ + -Dzstd_LIBRARY=/usr/lib/libzstd.a \ + -Dzstd_INCLUDE_DIR=/usr/include \ + -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \ + -DBUILD_CURL_EXE=OFF \ + -DBUILD_TESTING=OFF \ + -DCURL_ENABLE_EXPORT_TARGET=ON && \ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/curl-${CURL_VERSION} /tmp/curl-${CURL_VERSION}.tar.gz @@ -157,7 +175,10 @@ RUN curl -LO https://github.com/libcpr/cpr/archive/refs/tags/${CPR_VERSION}.tar. -DCURL_INCLUDE_DIR=/usr/local/include \ -DCURL_LIBRARY=/usr/local/lib/libcurl.a \ -DOPENSSL_ROOT_DIR=/usr/local \ - -DOPENSSL_USE_STATIC_LIBS=TRUE && \ + -DOPENSSL_USE_STATIC_LIBS=TRUE \ + -DCMAKE_FIND_LIBRARY_SUFFIXES=".a" \ + -DZLIB_LIBRARY=/usr/lib/libz.a \ + -Dzstd_LIBRARY=/usr/lib/libzstd.a && \ make -j$(nproc) && \ make install && \ cd / && rm -rf /tmp/cpr-${CPR_VERSION} /tmp/${CPR_VERSION}.tar.gz diff --git a/tests/cprdemo/CMakeLists.txt b/tests/cprdemo/CMakeLists.txt index a10c1ae..1f20648 100644 --- a/tests/cprdemo/CMakeLists.txt +++ b/tests/cprdemo/CMakeLists.txt @@ -36,28 +36,26 @@ target_include_directories(${PROJECT_NAME} PRIVATE # Find packages find_package(OpenSSL REQUIRED) -find_package(PkgConfig REQUIRED) find_package(nlohmann_json REQUIRED) +find_package(PkgConfig REQUIRED) -# Find CURL manually since we built it without CMake targets -find_library(CURL_LIBRARY NAMES curl libcurl PATHS /usr/local/lib NO_DEFAULT_PATH) -find_path(CURL_INCLUDE_DIR NAMES curl/curl.h PATHS /usr/local/include NO_DEFAULT_PATH) +# Use pkg-config for libcurl since CMake config isn't available +pkg_check_modules(CURL REQUIRED libcurl) -# Create CURL target if not found -if(NOT TARGET CURL::libcurl) - add_library(CURL::libcurl STATIC IMPORTED) - set_target_properties(CURL::libcurl PROPERTIES - IMPORTED_LOCATION ${CURL_LIBRARY} - INTERFACE_INCLUDE_DIRECTORIES ${CURL_INCLUDE_DIR} - INTERFACE_LINK_LIBRARIES "/usr/lib/libz.a;/usr/lib/libzstd.a" - ) -endif() +# Create a static-only CPR target to avoid dynamic linking issues +add_library(cpr::cpr_static STATIC IMPORTED) +set_target_properties(cpr::cpr_static PROPERTIES + IMPORTED_LOCATION "/usr/local/lib/libcpr.a" + INTERFACE_INCLUDE_DIRECTORIES "/usr/local/include" +) -# Find CPR after CURL target is available -find_package(cpr REQUIRED) - -# Link libraries +# Link libraries with explicit static linking target_link_libraries(${PROJECT_NAME} PRIVATE nlohmann_json::nlohmann_json - cpr::cpr + cpr::cpr_static + /usr/local/lib/libcurl.a + /usr/local/lib64/libssl.a + /usr/local/lib64/libcrypto.a + /usr/lib/libz.a + /usr/lib/libzstd.a lzma dl) \ No newline at end of file