Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| bafe712020 | |||
| 063800df12 | |||
| df74c8a1af |
@ -70,6 +70,7 @@ install(FILES ${HEADERS} DESTINATION include/privatebinapi)
|
|||||||
include(CTest)
|
include(CTest)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
|
add_subdirectory(example)
|
||||||
|
|
||||||
# ===================== LLVM/clang-cl Coverage (optional) =====================
|
# ===================== LLVM/clang-cl Coverage (optional) =====================
|
||||||
option(ENABLE_LLVM_COVERAGE "Enable LLVM/clang-cl coverage instrumentation" OFF)
|
option(ENABLE_LLVM_COVERAGE "Enable LLVM/clang-cl coverage instrumentation" OFF)
|
||||||
|
|||||||
54
README.md
54
README.md
@ -70,6 +70,60 @@ cmake -S example -B example/build -DCMAKE_BUILD_TYPE=Release
|
|||||||
cmake --build example/build --config Release
|
cmake --build example/build --config Release
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Linux (WSL/Ubuntu) – Quick start
|
||||||
|
|
||||||
|
Prerequisites (Ubuntu/Debian):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update -y && sudo apt-get install -y \
|
||||||
|
build-essential cmake git pkg-config libcurl4-openssl-dev \
|
||||||
|
curl zip unzip tar ninja-build ca-certificates
|
||||||
|
```
|
||||||
|
|
||||||
|
Bootstrap vcpkg (once):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/microsoft/vcpkg.git "$HOME/vcpkg"
|
||||||
|
"$HOME/vcpkg/bootstrap-vcpkg.sh" -disableMetrics
|
||||||
|
```
|
||||||
|
|
||||||
|
Build (library, tests, example):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export VCPKG_ROOT="$HOME/vcpkg"
|
||||||
|
cmake -S . -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"
|
||||||
|
cmake --build build --config Release
|
||||||
|
```
|
||||||
|
|
||||||
|
Or simply use the helper script:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash ./build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Run the example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./build/example/example
|
||||||
|
```
|
||||||
|
|
||||||
|
Run tests:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ctest --test-dir build --output-on-failure
|
||||||
|
```
|
||||||
|
|
||||||
|
Artifacts:
|
||||||
|
|
||||||
|
- Library: `build/libprivatebinapi.so`
|
||||||
|
- Example binary: `build/example/example`
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
|
||||||
|
- vcpkg dependencies (`cryptopp`, `nlohmann-json`) are installed automatically during CMake configure when the toolchain file is provided.
|
||||||
|
- On Linux the example links directly against the in-tree target `privatebinapi`. On Windows it additionally copies the DLL next to the example executable after build.
|
||||||
|
- PrivateBin delete operation is performed via HTTP POST (per API), not HTTP DELETE.
|
||||||
|
|
||||||
### Windows (PowerShell) – Build via build_thinkpad.bat
|
### Windows (PowerShell) – Build via build_thinkpad.bat
|
||||||
|
|
||||||
For systems with Visual Studio 2022 Build Tools (C++ workload) and vcpkg in the user profile, there is a robust build script:
|
For systems with Visual Studio 2022 Build Tools (C++ workload) and vcpkg in the user profile, there is a robust build script:
|
||||||
|
|||||||
27
build.sh
27
build.sh
@ -1,15 +1,22 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
echo "Building PrivateBin API C++ DLL..."
|
set -euo pipefail
|
||||||
|
echo "Building PrivateBin API C++ (library + example)"
|
||||||
|
|
||||||
# Create build directory
|
# Ensure vcpkg exists
|
||||||
mkdir -p build
|
VCPKG_ROOT="${VCPKG_ROOT:-$HOME/vcpkg}"
|
||||||
cd build
|
if [ ! -d "$VCPKG_ROOT" ]; then
|
||||||
|
echo "vcpkg not found under $VCPKG_ROOT, cloning..."
|
||||||
|
git clone https://github.com/microsoft/vcpkg.git "$VCPKG_ROOT"
|
||||||
|
"$VCPKG_ROOT/bootstrap-vcpkg.sh" -disableMetrics
|
||||||
|
fi
|
||||||
|
|
||||||
# Generate build files with CMake
|
# Clean and configure
|
||||||
cmake ..
|
rm -rf build
|
||||||
|
cmake -S . -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"
|
||||||
|
|
||||||
# Build the project
|
# Build all targets
|
||||||
make
|
cmake --build build --config Release
|
||||||
|
|
||||||
echo "Build completed!"
|
echo "Build completed. Artifacts:"
|
||||||
cd ..
|
echo " - Library: build/libprivatebinapi.so"
|
||||||
|
echo " - Example: build/example/example"
|
||||||
@ -3,25 +3,15 @@ project(PrivateBinAPIExample)
|
|||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
# Use the prebuilt library from the parent build directory
|
# Build example and link against the in-tree target
|
||||||
set(PRIVATEBINAPI_BUILD_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../build")
|
|
||||||
set(PRIVATEBINAPI_RELEASE_LIB "${PRIVATEBINAPI_BUILD_DIR}/Release/privatebinapi.lib")
|
|
||||||
|
|
||||||
if(EXISTS "${PRIVATEBINAPI_RELEASE_LIB}")
|
|
||||||
set(PRIVATEBINAPI_LIB "${PRIVATEBINAPI_RELEASE_LIB}")
|
|
||||||
else()
|
|
||||||
# Fallback: try the build root (multi-config generators may place libs differently)
|
|
||||||
find_library(PRIVATEBINAPI_LIB privatebinapi PATHS "${PRIVATEBINAPI_BUILD_DIR}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(NOT PRIVATEBINAPI_LIB)
|
|
||||||
message(FATAL_ERROR "privatebinapi library not found. Please run build.bat in the project root first.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_executable(example example.cpp)
|
add_executable(example example.cpp)
|
||||||
|
target_link_libraries(example PRIVATE privatebinapi)
|
||||||
|
|
||||||
target_link_libraries(example PRIVATE ${PRIVATEBINAPI_LIB} winhttp)
|
# On Windows, copy the DLL next to the example for easy execution
|
||||||
|
if(WIN32)
|
||||||
target_include_directories(example PRIVATE
|
add_custom_command(TARGET example POST_BUILD
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/../include
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
||||||
)
|
$<TARGET_FILE:privatebinapi>
|
||||||
|
$<TARGET_FILE_DIR:example>
|
||||||
|
)
|
||||||
|
endif()
|
||||||
@ -585,7 +585,7 @@ bool HttpClient::delete_req(const std::string& url, const std::string& data, std
|
|||||||
}
|
}
|
||||||
|
|
||||||
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
||||||
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
|
// PrivateBin API erwartet POST für delete
|
||||||
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
|
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
|
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
|
||||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
|
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
|
||||||
|
|||||||
@ -25,4 +25,13 @@ target_include_directories(test_basic PRIVATE
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Register the test with CTest
|
# Register the test with CTest
|
||||||
add_test(NAME test_basic COMMAND test_basic)
|
add_test(NAME test_basic COMMAND test_basic)
|
||||||
|
|
||||||
|
# Optional example run as a test (requires network and live server)
|
||||||
|
# Example-Test nur aktiv, wenn PRIVATEBIN_IT=1 gesetzt ist
|
||||||
|
add_test(NAME example_run COMMAND $<TARGET_FILE:example>)
|
||||||
|
if(DEFINED ENV{PRIVATEBIN_IT} AND NOT "$ENV{PRIVATEBIN_IT}" STREQUAL "0")
|
||||||
|
set_tests_properties(example_run PROPERTIES DISABLED FALSE)
|
||||||
|
else()
|
||||||
|
set_tests_properties(example_run PROPERTIES DISABLED TRUE)
|
||||||
|
endif()
|
||||||
Reference in New Issue
Block a user