From 9623247375d385a500f3755112f58afaa7632acb Mon Sep 17 00:00:00 2001 From: Raul Metsma Date: Sat, 8 Feb 2025 16:24:56 +0200 Subject: [PATCH] Add version info to Windows artifacts Signed-off-by: Raul Metsma --- .github/workflows/build.yml | 45 +++++++++++++++++++++++++- cdoc/CMakeLists.txt | 64 ++++++++++++++++++++----------------- cdoc/Utils.h | 6 ++-- cdoc/cdoc-tool.cpp | 1 + cdoc/libcdoc.rc | 43 +++++++++++++++++++++++++ test/CMakeLists.txt | 3 -- 6 files changed, 127 insertions(+), 35 deletions(-) create mode 100644 cdoc/libcdoc.rc diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 77e4c7e..db5f910 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -85,4 +85,47 @@ jobs: uses: actions/upload-artifact@v4 with: name: ${{ matrix.target }} - path: ${{ env.DEST }}/** + path: ${{ env.DEST }} + windows: + name: Build on Windows + runs-on: ${{ matrix.image }} + strategy: + matrix: + image: [windows-2022] + platform: [x64, arm64] + env: + CXXFLAGS: '/D_DISABLE_CONSTEXPR_MUTEX_CONSTRUCTOR' # https://github.com/actions/runner-images/issues/10004 + DEST: ${{ github.workspace }}/${{ matrix.image }}_${{ matrix.platform }} + VCPKG_DEFAULT_TRIPLET: ${{ matrix.platform }}-windows-static-md + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Prepare vcpkg + uses: lukka/run-vcpkg@v11 + with: + vcpkgGitCommitId: e4644bd15436d406bba71928d086c809e5c9ca45 + vcpkgJsonGlob: ./vcpkg.json + runVcpkgInstall: true + runVcpkgFormatString: "[`install`, `--recurse`, `--clean-after-build`, `--x-install-root`, `$[env.VCPKG_INSTALLED_DIR]`, `--triplet`, `$[env.VCPKG_DEFAULT_TRIPLET]`, `--x-feature`, `tests`]" + env: + VCPKG_INSTALLED_DIR: ${{ github.workspace }}/build/vcpkg_installed + - name: Install dependencies + run: | + choco install doxygen.install -y > $null + Invoke-WebRequest -UserAgent "Wget" "https://sourceforge.net/projects/swig/files/swigwin/swigwin-4.3.0/swigwin-4.3.0.zip/download" -OutFile swig.zip + tar xf swig.zip + - name: Build + run: | + cmake -A ${{ matrix.platform }} -S . -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo ` + "-DCMAKE_TOOLCHAIN_FILE=${{ env.VCPKG_ROOT }}/scripts/buildsystems/vcpkg.cmake" ` + "-DSWIG_EXECUTABLE=${{ github.workspace }}/swigwin-4.3.0/swig.exe" ` + -DVCPKG_TARGET_TRIPLET=${{ env.VCPKG_DEFAULT_TRIPLET }} ` + -DVCPKG_MANIFEST_FEATURES=tests ` + -DCMAKE_INSTALL_LIBDIR=bin + cmake --build build --config RelWithDebInfo + cmake --install build --config RelWithDebInfo --prefix ${{ env.DEST }} + - name: Archive artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.image }}_${{ matrix.platform }} + path: ${{ env.DEST }} \ No newline at end of file diff --git a/cdoc/CMakeLists.txt b/cdoc/CMakeLists.txt index 07b44eb..1528d42 100644 --- a/cdoc/CMakeLists.txt +++ b/cdoc/CMakeLists.txt @@ -17,9 +17,22 @@ set(PUBLIC_HEADERS PKCS11Backend.h ILogger.h ConsoleLogger.h - $<$:WinBackend.h> ) +if(WIN32) + list(APPEND PUBLIC_HEADERS WinBackend.h) + add_compile_definitions(UNICODE WIN32_LEAN_AND_MEAN) +endif() + +add_library(cdoc_ver INTERFACE) +target_compile_definitions(cdoc_ver INTERFACE + VERSION_STR="${VERSION}" + $<$:VERSION=${PROJECT_VERSION_MAJOR},${PROJECT_VERSION_MINOR},${PROJECT_VERSION_PATCH},${BUILD_NUMBER}> + $<$:TARGET_NAME="$"> + $<$:$<$,EXECUTABLE>:APP>> +) +target_sources(cdoc_ver INTERFACE libcdoc.rc) + add_library(cdoc_obj OBJECT CDoc.cpp Io.cpp @@ -31,11 +44,6 @@ add_library(cdoc_obj OBJECT LogEngine.cpp $<$:WinBackend.cpp> ) - -if(WIN32) - add_compile_definitions(UNICODE WIN32_LEAN_AND_MEAN) -endif() - set_target_properties(cdoc_obj PROPERTIES POSITION_INDEPENDENT_CODE YES) target_compile_definitions(cdoc_obj PRIVATE cdoc_EXPORTS) target_include_directories(cdoc_obj PUBLIC ${PROJECT_SOURCE_DIR}) @@ -44,18 +52,18 @@ target_link_libraries(cdoc_obj OpenSSL::SSL) add_library(cdoc_priv OBJECT Certificate.cpp Certificate.h Crypto.cpp Crypto.h - Tar.cpp - ZStream.cpp + Tar.cpp Tar.h + ZStream.cpp ZStream.h Utils.cpp Utils.h - CDoc1Reader.cpp - CDoc1Writer.cpp - CDoc2Reader.cpp - CDoc2Writer.cpp - DDocReader.cpp - DDocWriter.cpp + CDoc1Reader.cpp CDoc1Reader.h + CDoc1Writer.cpp CDoc1Writer.h + CDoc2Reader.cpp CDoc2Reader.h + CDoc2Writer.cpp CDoc2Writer.h + DDocReader.cpp DDocReader.h + DDocWriter.cpp DDocWriter.h XmlReader.cpp XmlReader.h XmlWriter.cpp XmlWriter.h - CDocChipher.h CDocChipher.cpp + CDocChipher.cpp CDocChipher.h RcptInfo.h ToolConf.h CDoc2.h @@ -64,8 +72,8 @@ add_library(cdoc_priv OBJECT set_property(TARGET cdoc_priv PROPERTY POSITION_INDEPENDENT_CODE ON) target_include_directories(cdoc_priv - PUBLIC ${PROJECT_SOURCE_DIR} - PRIVATE ${CMAKE_CURRENT_BINARY_DIR} + PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) target_link_libraries(cdoc_priv $ @@ -87,9 +95,9 @@ set_target_properties(cdoc PROPERTIES MACOSX_RPATH YES COMPILE_DEFINITIONS TARGET_NAME="$" ) -target_link_libraries(cdoc PRIVATE ${CMAKE_DL_LIBS} cdoc_priv cdoc_obj) +target_link_libraries(cdoc PRIVATE cdoc_ver ${CMAKE_DL_LIBS} cdoc_priv cdoc_obj) target_include_directories(cdoc PUBLIC - $ + $ $ ) add_library(cdoc_static STATIC ${PUBLIC_HEADERS}) @@ -106,7 +114,7 @@ set_target_properties(cdoc_static PROPERTIES target_link_libraries(cdoc_static cdoc_priv cdoc_obj) add_executable(cdoc-tool cdoc-tool.cpp) -target_link_libraries(cdoc-tool $,cdoc_static,cdoc> cdoc_priv) +target_link_libraries(cdoc-tool cdoc_ver $,cdoc_static,cdoc> cdoc_priv) foreach(SCHEMA ${SCHEMAS}) get_filename_component(stem ${SCHEMA} NAME_WE) @@ -129,17 +137,16 @@ endforeach() if(SWIG_FOUND) include(${SWIG_USE_FILE}) - include_directories(${CMAKE_PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}) set_property(SOURCE ../libcdoc.i PROPERTY CPLUSPLUS ON) if(JAVA_INCLUDE_PATH) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/CDocException.java DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/java) - file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/IStreamSource.java DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/java) + file(COPY CDocException.java DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/java) + file(COPY IStreamSource.java DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/java) set(CMAKE_SWIG_FLAGS -package ee.ria.cdoc) set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/java) swig_add_library(cdoc_java LANGUAGE java SOURCES ../libcdoc.i) target_include_directories(cdoc_java PRIVATE ${JAVA_INCLUDE_PATH} $<$:${JAVA_INCLUDE_PATH2}>) - target_compile_definitions(cdoc_java PRIVATE TARGET_NAME="$") - target_link_libraries(cdoc_java cdoc) + target_link_libraries(cdoc_java cdoc_ver cdoc) set_target_properties(cdoc_java PROPERTIES INSTALL_RPATH $<$:/Library/Frameworks> SWIG_COMPILE_DEFINITIONS $<$:SWIGWIN> @@ -155,11 +162,10 @@ if(SWIG_FOUND) # TODO: Fix Python wrapping endif() - set(CMAKE_SWIG_FLAGS -dllimport cdoc_csharp -namespace cdoc) + set(CMAKE_SWIG_FLAGS -namespace cdoc) set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR}/csharp) swig_add_library(cdoc_csharp LANGUAGE csharp SOURCES ../libcdoc.i) - target_compile_definitions(cdoc_csharp PRIVATE TARGET_NAME="$") - target_link_libraries(cdoc_csharp cdoc) + target_link_libraries(cdoc_csharp cdoc_ver cdoc) set_target_properties(cdoc_csharp PROPERTIES SWIG_COMPILE_DEFINITIONS $<$:SWIGWIN> INSTALL_RPATH $<$:/Library/Frameworks> @@ -224,6 +230,6 @@ if(NOT ANDROID) ) endif() -install( TARGETS cdoc-tool DESTINATION ${CMAKE_INSTALL_BINDIR} ) +install(TARGETS cdoc-tool DESTINATION ${CMAKE_INSTALL_BINDIR}) #install( FILES ${CMAKE_CURRENT_BINARY_DIR}/cdoc-tool.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 ) #install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libcdoc.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig ) diff --git a/cdoc/Utils.h b/cdoc/Utils.h index 15dbf3a..a4d7fe1 100644 --- a/cdoc/Utils.h +++ b/cdoc/Utils.h @@ -6,7 +6,10 @@ #include #include #include -#include + +#ifdef _WIN32 +#include +#endif namespace libcdoc { @@ -84,7 +87,6 @@ std::string urlEncode(const std::string_view &src); std::string urlDecode(std::string &src); #ifdef _WIN32 -#include static std::wstring toWide(UINT codePage, const std::string &in) { diff --git a/cdoc/cdoc-tool.cpp b/cdoc/cdoc-tool.cpp index d90f155..a52aeb8 100644 --- a/cdoc/cdoc-tool.cpp +++ b/cdoc/cdoc-tool.cpp @@ -12,6 +12,7 @@ using namespace libcdoc; static void print_usage(ostream& ofs) { + ofs << "cdoc-tool version: " << VERSION_STR << endl; ofs << "cdoc-tool encrypt [--library PKCS11LIBRARY] --rcpt RECIPIENT [--rcpt...] [-v1] [--genlabel] --out OUTPUTFILE FILE [FILE...]" << endl; ofs << " Encrypt files for one or more recipients" << endl; ofs << " RECIPIENT has to be one of the following:" << endl; diff --git a/cdoc/libcdoc.rc b/cdoc/libcdoc.rc new file mode 100644 index 0000000..c5b12b7 --- /dev/null +++ b/cdoc/libcdoc.rc @@ -0,0 +1,43 @@ +#include + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION + PRODUCTVERSION VERSION + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS_NT_WINDOWS32 +#ifdef APP + FILETYPE VFT_APP +#else + FILETYPE VFT_DLL +#endif + FILESUBTYPE VFT_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "RIA" + VALUE "FileDescription", TARGET_NAME + VALUE "FileVersion", VERSION_STR + VALUE "InternalName", TARGET_NAME + VALUE "LegalCopyright", "(C) 2025 Estonian Information System Authority" +#ifdef APP + VALUE "OriginalFilename", TARGET_NAME ".exe" +#else + VALUE "OriginalFilename", TARGET_NAME ".dll" +#endif + VALUE "ProductName", TARGET_NAME + VALUE "ProductVersion", VERSION_STR + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END +/* End of Version info */ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ea4c172..45ab461 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,6 +1,3 @@ -set(CMAKE_CXX_STANDARD 20) -set(CMAKE_CXX_STANDARD_REQUIRED YES) - add_executable(unittests libcdoc_boost.cpp) target_compile_definitions(unittests PRIVATE DATA_DIR="${CMAKE_CURRENT_SOURCE_DIR}/data") target_link_libraries(unittests cdoc cdoc_priv Boost::unit_test_framework)