docs: Update 3 files
All checks were successful
dropshell-build multiarch / build (linux/amd64) (push) Successful in 4m45s
dropshell-build multiarch / build (linux/arm64) (push) Successful in 11m11s
dropshell-build multiarch / create-manifest (push) Successful in 14s

This commit is contained in:
Your Name
2025-06-29 18:41:45 +12:00
parent f7adf6ce6d
commit f20d9362ed
3 changed files with 81 additions and 34 deletions

View File

@ -49,20 +49,35 @@ Two HTTP client approaches are available:
```
To use CPR in your CMakeLists.txt with proper static linking:
**Simple approach (recommended for new base images):**
```cmake
find_package(nlohmann_json REQUIRED)
find_package(CPRStatic REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE
nlohmann_json::nlohmann_json
cpr::cpr_static)
```
**Backwards-compatible approach (works with all base image versions):**
```cmake
find_package(nlohmann_json REQUIRED)
# Find OpenSSL libraries (path varies by architecture)
find_library(OPENSSL_SSL_LIB NAMES ssl PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
find_library(OPENSSL_CRYPTO_LIB NAMES crypto PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
# CPR static linking setup
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"
INTERFACE_LINK_LIBRARIES "/usr/local/lib/libcurl.a;${OPENSSL_SSL_LIB};${OPENSSL_CRYPTO_LIB};/usr/lib/libz.a;/usr/lib/libzstd.a;lzma;dl"
)
# Try the new CPRStatic module first, fall back to manual setup
find_package(CPRStatic QUIET)
if(NOT CPRStatic_FOUND)
# Fallback for older base images
find_library(OPENSSL_SSL_LIB NAMES ssl PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
find_library(OPENSSL_CRYPTO_LIB NAMES crypto PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
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"
INTERFACE_LINK_LIBRARIES "/usr/local/lib/libcurl.a;${OPENSSL_SSL_LIB};${OPENSSL_CRYPTO_LIB};/usr/lib/libz.a;/usr/lib/libzstd.a;lzma;dl"
)
endif()
target_link_libraries(${PROJECT_NAME} PRIVATE
nlohmann_json::nlohmann_json

View File

@ -183,20 +183,49 @@ RUN curl -LO https://github.com/libcpr/cpr/archive/refs/tags/${CPR_VERSION}.tar.
make install && \
cd / && rm -rf /tmp/cpr-${CPR_VERSION} /tmp/${CPR_VERSION}.tar.gz
# Fix CPR CMake config to provide a static-only target
RUN cat > /usr/local/lib/cmake/cpr/cprConfig-static.cmake << 'EOF'
# Static-only CPR configuration that avoids CURL dependency issues
# Create a CMake module for easy CPR static linking
RUN mkdir -p /usr/local/share/cmake/Modules
RUN cat > /usr/local/share/cmake/Modules/FindCPRStatic.cmake << 'EOF'
# FindCPRStatic.cmake - Easy CPR static linking for dropshell-build projects
#
# This module provides cpr::cpr_static target with all dependencies handled automatically.
# It works across all architectures by dynamically finding OpenSSL library paths.
#
# Usage in CMakeLists.txt:
# find_package(CPRStatic REQUIRED)
# target_link_libraries(${PROJECT_NAME} PRIVATE cpr::cpr_static)
# Create the static CPR target
add_library(cpr::cpr_static STATIC IMPORTED)
set_target_properties(cpr::cpr_static PROPERTIES
IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/../../../lib/libcpr.a"
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/../../../include"
INTERFACE_LINK_LIBRARIES "/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"
)
# Find OpenSSL libraries (path varies by architecture)
find_library(OPENSSL_SSL_LIB NAMES ssl PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
find_library(OPENSSL_CRYPTO_LIB NAMES crypto PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
# Provide an alias for convenience
add_library(cpr::static ALIAS cpr::cpr_static)
if(NOT OPENSSL_SSL_LIB OR NOT OPENSSL_CRYPTO_LIB)
message(FATAL_ERROR "OpenSSL libraries not found. Expected in /usr/local/lib64 or /usr/local/lib")
endif()
# Create the CPR static target
if(NOT TARGET cpr::cpr_static)
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"
INTERFACE_LINK_LIBRARIES "/usr/local/lib/libcurl.a;${OPENSSL_SSL_LIB};${OPENSSL_CRYPTO_LIB};/usr/lib/libz.a;/usr/lib/libzstd.a;lzma;dl"
)
# Provide an alias for convenience
add_library(cpr::static ALIAS cpr::cpr_static)
endif()
# Mark as found
set(CPRStatic_FOUND TRUE)
# Provide some useful variables
set(CPRStatic_LIBRARY "/usr/local/lib/libcpr.a")
set(CPRStatic_INCLUDE_DIR "/usr/local/include")
set(CPRStatic_SSL_LIBRARY "${OPENSSL_SSL_LIB}")
set(CPRStatic_CRYPTO_LIBRARY "${OPENSSL_CRYPTO_LIB}")
mark_as_advanced(CPRStatic_LIBRARY CPRStatic_INCLUDE_DIR CPRStatic_SSL_LIBRARY CPRStatic_CRYPTO_LIBRARY)
EOF

View File

@ -37,17 +37,20 @@ target_include_directories(${PROJECT_NAME} PRIVATE
# Find packages
find_package(nlohmann_json REQUIRED)
# Find OpenSSL libraries (path varies by architecture)
find_library(OPENSSL_SSL_LIB NAMES ssl PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
find_library(OPENSSL_CRYPTO_LIB NAMES crypto PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
# CPR static linking setup
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"
INTERFACE_LINK_LIBRARIES "/usr/local/lib/libcurl.a;${OPENSSL_SSL_LIB};${OPENSSL_CRYPTO_LIB};/usr/lib/libz.a;/usr/lib/libzstd.a;lzma;dl"
)
# Try the new CPRStatic module first, fall back to manual setup
find_package(CPRStatic QUIET)
if(NOT CPRStatic_FOUND)
# Fallback for older base images
find_library(OPENSSL_SSL_LIB NAMES ssl PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
find_library(OPENSSL_CRYPTO_LIB NAMES crypto PATHS /usr/local/lib64 /usr/local/lib NO_DEFAULT_PATH)
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"
INTERFACE_LINK_LIBRARIES "/usr/local/lib/libcurl.a;${OPENSSL_SSL_LIB};${OPENSSL_CRYPTO_LIB};/usr/lib/libz.a;/usr/lib/libzstd.a;lzma;dl"
)
endif()
# Link libraries
target_link_libraries(${PROJECT_NAME} PRIVATE