From aaaadfc105d391e5917f6658b91e50f2fa6f2047 Mon Sep 17 00:00:00 2001 From: Eelke Klein Date: Mon, 19 Oct 2026 15:07:29 +0200 Subject: [PATCH] Make builds on windows work. --- README.md | 18 ++++++++++++++++++ pglab/CMakeLists.txt | 1 + pglablib/CMakeLists.txt | 5 +++-- pglablib/utils/PasswordManager.cpp | 6 +++++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7c2eb7e..5cd7a00 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,24 @@ cmake --build build To skip the test executables, add `-DBUILD_TESTS=OFF` to the configure command. +### Building on Windows + +Tested with Visual Studio 2022 (Professional) and Qt 6.8.2 (MSVC 2022, 64-bit). Run these commands from a "x64 Native Tools Command Prompt for VS 2022", with `VCPKG_ROOT` set and Qt installed in `C:\Qt\6.8.2\msvc2022_64`: + +``` +cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake -DCMAKE_PREFIX_PATH=C:/Qt/6.8.2/msvc2022_64 +cmake --build build --config Release +ctest --test-dir build -C Release --output-on-failure +``` + +The executables are placed in `build\pglab\Release\pglab.exe` and `build\tests\*\Release\`. They need the Qt and vcpkg DLLs next to them. Run `windeployqt` on `pglab.exe` and on each test executable, and copy the vcpkg runtime DLLs from `build\vcpkg_installed\x64-windows\bin` into the same folders. For the app: + +``` +C:\Qt\6.8.2\msvc2022_64\bin\windeployqt.exe --release build\pglab\Release\pglab.exe +``` + +If another Qt installation (for example one shipped with another program) is on your `PATH`, its `Qt6Core.dll` may be loaded instead, which causes "entry point not found" errors at startup. Deploying the DLLs next to the executables avoids this. + ## Running the tests From the build directory, run: diff --git a/pglab/CMakeLists.txt b/pglab/CMakeLists.txt index fb3d3f2..bf2f110 100644 --- a/pglab/CMakeLists.txt +++ b/pglab/CMakeLists.txt @@ -92,6 +92,7 @@ add_executable(pglab if(WIN32) set_target_properties(pglab PROPERTIES WIN32_EXECUTABLE ON) + target_link_libraries(pglab PRIVATE ws2_32) endif() target_link_libraries(pglab PRIVATE diff --git a/pglablib/CMakeLists.txt b/pglablib/CMakeLists.txt index 249e59c..0542f05 100644 --- a/pglablib/CMakeLists.txt +++ b/pglablib/CMakeLists.txt @@ -158,9 +158,10 @@ add_library(pglablib STATIC find_package(Boost REQUIRED COMPONENTS container timer chrono assert) -find_path(BOTAN_INCLUDE_DIR botan/hash.h REQUIRED) -find_library(BOTAN_LIBRARY NAMES botan-3 botan REQUIRED) +find_package(botan CONFIG QUIET) if(NOT TARGET Botan::Botan) + find_path(BOTAN_INCLUDE_DIR botan/hash.h REQUIRED) + find_library(BOTAN_LIBRARY NAMES botan-3 botan REQUIRED) add_library(Botan::Botan STATIC IMPORTED) set_target_properties(Botan::Botan PROPERTIES IMPORTED_LOCATION "${BOTAN_LIBRARY}" diff --git a/pglablib/utils/PasswordManager.cpp b/pglablib/utils/PasswordManager.cpp index dfa0476..bc553cb 100644 --- a/pglablib/utils/PasswordManager.cpp +++ b/pglablib/utils/PasswordManager.cpp @@ -267,7 +267,11 @@ KeyStrengthener PasswordManager::createKeyStrengthener() const std::string algo = "Scrypt"; auto pwh_fam = Botan::PasswordHashFamily::create(algo); return KeyStrengthener( - pwh_fam->tune(key_size, std::chrono::seconds(2), 130), + #ifdef _WIN32 + pwh_fam->tune_params(key_size, 2000, 130), + #else + pwh_fam->tune(key_size, std::chrono::seconds(2), 130), + #endif salt, key_size ); -- 2.47.2