From 8c08a0662fa06e1a11a5720065801e8d88129e57 Mon Sep 17 00:00:00 2001 From: Kevin Albertson Date: Thu, 19 Oct 2023 15:13:03 +0100 Subject: [PATCH 1/4] CDRIVER-3091 add VERSIONINFO to dlls --- src/libbson/CMakeLists.txt | 3 +++ src/libbson/libbson.rc | 43 ++++++++++++++++++++++++++++++++++++ src/libmongoc/CMakeLists.txt | 3 +++ src/libmongoc/libmongoc.rc | 41 ++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 src/libbson/libbson.rc create mode 100644 src/libmongoc/libmongoc.rc diff --git a/src/libbson/CMakeLists.txt b/src/libbson/CMakeLists.txt index 3dcbdacf48f..dd1ef2f251c 100644 --- a/src/libbson/CMakeLists.txt +++ b/src/libbson/CMakeLists.txt @@ -230,6 +230,9 @@ endif() if(ENABLE_SHARED) add_library(bson_shared SHARED) target_link_libraries(bson_shared PRIVATE $) + if (WIN32) + set_property(TARGET bson_shared APPEND PROPERTY SOURCES libbson.rc) + endif() list(APPEND bson_libs bson_shared) endif() diff --git a/src/libbson/libbson.rc b/src/libbson/libbson.rc new file mode 100644 index 00000000000..a46e7e20a3e --- /dev/null +++ b/src/libbson/libbson.rc @@ -0,0 +1,43 @@ +// Defines Version Information to include in DLL on Windows. +// Refer: https://learn.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource +#include // Defines VS_VERSION_INFO +#define BSON_COMPILATION // Tell bson-version.h it is part of compilation. +#include // Defines BSON_MAJOR_VERSION and other version macros. +#undef BSON_COMPILATION + +VS_VERSION_INFO VERSIONINFO + FILEVERSION BSON_MAJOR_VERSION,BSON_MINOR_VERSION,BSON_MICRO_VERSION,0 + PRODUCTVERSION BSON_MAJOR_VERSION,BSON_MINOR_VERSION,BSON_MICRO_VERSION,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0L +#endif + // Set FILEOS to VOS_UNKNOWN. There is no documented value for 64-bit builds. + FILEOS VOS_UNKNOWN + FILETYPE VFT_DLL + // Set FILESUBTYPE to VFT2_UNKNOWN. There is no applicable value. + FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + // Use langID `0409` for "US English". Use charsetID `04b0` for "Unicode" + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "MongoDB, Inc" + VALUE "FileDescription", "A BSON Library for C" + VALUE "FileVersion", BSON_VERSION_S "\0" + VALUE "InternalName", "bson-1.0" + VALUE "OriginalFilename", "bson-1.0.dll" + VALUE "ProductName", "MongoDB C Driver" + VALUE "ProductVersion", BSON_VERSION_S "\0" + VALUE "LegalCopyright", "Copyright (C) 2023-present MongoDB, Inc.\0" + END + END + BLOCK "VarFileInfo" + BEGIN + // Use langID `0x0409` for "U.S. English". Use charsetID `1200` for "Unicode". + VALUE "Translation", 0x409, 1200 + END +END diff --git a/src/libmongoc/CMakeLists.txt b/src/libmongoc/CMakeLists.txt index 63222e38a4b..11f9c22adc7 100644 --- a/src/libmongoc/CMakeLists.txt +++ b/src/libmongoc/CMakeLists.txt @@ -813,6 +813,9 @@ if (MONGOC_ENABLE_STATIC_BUILD) endif () add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} ${HEADERS_FORWARDING}) +if (WIN32) + set_property(TARGET mongoc_shared APPEND PROPERTY SOURCES libmongoc.rc) +endif() set_target_properties (mongoc_shared PROPERTIES CMAKE_CXX_VISIBILITY_PRESET hidden) target_link_libraries (mongoc_shared PRIVATE ${LIBRARIES} PUBLIC ${BSON_LIBRARIES} mongo::detail::c_dependencies) target_include_directories (mongoc_shared PRIVATE ${ZLIB_INCLUDE_DIRS}) diff --git a/src/libmongoc/libmongoc.rc b/src/libmongoc/libmongoc.rc new file mode 100644 index 00000000000..5d2374898fd --- /dev/null +++ b/src/libmongoc/libmongoc.rc @@ -0,0 +1,41 @@ +// Defines Version Information to include in DLL on Windows. +// Refer: https://learn.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource +#include // Defines VS_VERSION_INFO +#include // Defines MONGOC_MAJOR_VERSION and other version macros. + +VS_VERSION_INFO VERSIONINFO + FILEVERSION MONGOC_MAJOR_VERSION,MONGOC_MINOR_VERSION,MONGOC_MICRO_VERSION,0 + PRODUCTVERSION MONGOC_MAJOR_VERSION,MONGOC_MINOR_VERSION,MONGOC_MICRO_VERSION,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0L +#endif + // Set FILEOS to VOS_UNKNOWN. There is no documented value for 64-bit builds. + FILEOS VOS_UNKNOWN + FILETYPE VFT_DLL + // Set FILESUBTYPE to VFT2_UNKNOWN. There is no applicable value. + FILESUBTYPE VFT2_UNKNOWN +BEGIN + BLOCK "StringFileInfo" + BEGIN + // Use langID `0409` for "US English". Use charsetID `04b0` for "Unicode" + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "MongoDB, Inc" + VALUE "FileDescription", "MongoDB Client Library for C" + VALUE "FileVersion", MONGOC_VERSION_S "\0" + VALUE "InternalName", "mongoc-1.0" + VALUE "OriginalFilename", "mongoc-1.0.dll" + VALUE "ProductName", "MongoDB C Driver" + VALUE "ProductVersion", MONGOC_VERSION_S "\0" + VALUE "LegalCopyright", "Copyright (C) 2023-present MongoDB, Inc.\0" + END + END + BLOCK "VarFileInfo" + BEGIN + // Use langID `0x0409` for "U.S. English". Use charsetID `1200` for "Unicode". + VALUE "Translation", 0x409, 1200 + END +END From ef939c3a9dbeaea34625845b6a400dc3ee390934 Mon Sep 17 00:00:00 2001 From: Kevin Albertson Date: Fri, 20 Oct 2023 13:29:57 -0400 Subject: [PATCH 2/4] remove spaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Roberto C. Sánchez --- src/libbson/CMakeLists.txt | 2 +- src/libmongoc/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libbson/CMakeLists.txt b/src/libbson/CMakeLists.txt index dd1ef2f251c..cfcb6af51b0 100644 --- a/src/libbson/CMakeLists.txt +++ b/src/libbson/CMakeLists.txt @@ -230,7 +230,7 @@ endif() if(ENABLE_SHARED) add_library(bson_shared SHARED) target_link_libraries(bson_shared PRIVATE $) - if (WIN32) + if(WIN32) set_property(TARGET bson_shared APPEND PROPERTY SOURCES libbson.rc) endif() list(APPEND bson_libs bson_shared) diff --git a/src/libmongoc/CMakeLists.txt b/src/libmongoc/CMakeLists.txt index 11f9c22adc7..eca1ed55038 100644 --- a/src/libmongoc/CMakeLists.txt +++ b/src/libmongoc/CMakeLists.txt @@ -813,7 +813,7 @@ if (MONGOC_ENABLE_STATIC_BUILD) endif () add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} ${HEADERS_FORWARDING}) -if (WIN32) +if(WIN32) set_property(TARGET mongoc_shared APPEND PROPERTY SOURCES libmongoc.rc) endif() set_target_properties (mongoc_shared PROPERTIES CMAKE_CXX_VISIBILITY_PRESET hidden) From 45e6d42a4571d681a611a66049d9b724dfb17672 Mon Sep 17 00:00:00 2001 From: Kevin Albertson Date: Fri, 20 Oct 2023 21:20:40 +0100 Subject: [PATCH 3/4] remove unnecessary null terminators It results in equivalent output when comparing before/after using: `dumpbin /RAWDATA /SECTION:.rsrc` --- src/libbson/libbson.rc | 6 +++--- src/libmongoc/libmongoc.rc | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/libbson/libbson.rc b/src/libbson/libbson.rc index a46e7e20a3e..e0b4c87a5ae 100644 --- a/src/libbson/libbson.rc +++ b/src/libbson/libbson.rc @@ -27,12 +27,12 @@ BEGIN BEGIN VALUE "CompanyName", "MongoDB, Inc" VALUE "FileDescription", "A BSON Library for C" - VALUE "FileVersion", BSON_VERSION_S "\0" + VALUE "FileVersion", BSON_VERSION_S VALUE "InternalName", "bson-1.0" VALUE "OriginalFilename", "bson-1.0.dll" VALUE "ProductName", "MongoDB C Driver" - VALUE "ProductVersion", BSON_VERSION_S "\0" - VALUE "LegalCopyright", "Copyright (C) 2023-present MongoDB, Inc.\0" + VALUE "ProductVersion", BSON_VERSION_S + VALUE "LegalCopyright", "Copyright (C) 2023-present MongoDB, Inc." END END BLOCK "VarFileInfo" diff --git a/src/libmongoc/libmongoc.rc b/src/libmongoc/libmongoc.rc index 5d2374898fd..d4d0d03750c 100644 --- a/src/libmongoc/libmongoc.rc +++ b/src/libmongoc/libmongoc.rc @@ -25,12 +25,12 @@ BEGIN BEGIN VALUE "CompanyName", "MongoDB, Inc" VALUE "FileDescription", "MongoDB Client Library for C" - VALUE "FileVersion", MONGOC_VERSION_S "\0" + VALUE "FileVersion", MONGOC_VERSION_S VALUE "InternalName", "mongoc-1.0" VALUE "OriginalFilename", "mongoc-1.0.dll" VALUE "ProductName", "MongoDB C Driver" - VALUE "ProductVersion", MONGOC_VERSION_S "\0" - VALUE "LegalCopyright", "Copyright (C) 2023-present MongoDB, Inc.\0" + VALUE "ProductVersion", MONGOC_VERSION_S + VALUE "LegalCopyright", "Copyright (C) 2023-present MongoDB, Inc." END END BLOCK "VarFileInfo" From 0ec7987b133566a36deabd5097c23b9329fe41e6 Mon Sep 17 00:00:00 2001 From: Kevin Albertson Date: Tue, 24 Oct 2023 15:44:26 +0100 Subject: [PATCH 4/4] use genex to simplify include of .rc files --- src/libbson/CMakeLists.txt | 5 +---- src/libmongoc/CMakeLists.txt | 5 +---- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/libbson/CMakeLists.txt b/src/libbson/CMakeLists.txt index cfcb6af51b0..12d4173c3ed 100644 --- a/src/libbson/CMakeLists.txt +++ b/src/libbson/CMakeLists.txt @@ -228,11 +228,8 @@ if(ENABLE_STATIC) endif() if(ENABLE_SHARED) - add_library(bson_shared SHARED) + add_library(bson_shared SHARED $<$:libbson.rc>) target_link_libraries(bson_shared PRIVATE $) - if(WIN32) - set_property(TARGET bson_shared APPEND PROPERTY SOURCES libbson.rc) - endif() list(APPEND bson_libs bson_shared) endif() diff --git a/src/libmongoc/CMakeLists.txt b/src/libmongoc/CMakeLists.txt index eca1ed55038..7a81ecb7731 100644 --- a/src/libmongoc/CMakeLists.txt +++ b/src/libmongoc/CMakeLists.txt @@ -812,10 +812,7 @@ if (MONGOC_ENABLE_STATIC_BUILD) set_target_properties (mcd_rpc PROPERTIES OUTPUT_NAME "mcd-rpc") endif () -add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} ${HEADERS_FORWARDING}) -if(WIN32) - set_property(TARGET mongoc_shared APPEND PROPERTY SOURCES libmongoc.rc) -endif() +add_library (mongoc_shared SHARED ${SOURCES} ${HEADERS} ${HEADERS_FORWARDING} $<$:libmongoc.rc>) set_target_properties (mongoc_shared PROPERTIES CMAKE_CXX_VISIBILITY_PRESET hidden) target_link_libraries (mongoc_shared PRIVATE ${LIBRARIES} PUBLIC ${BSON_LIBRARIES} mongo::detail::c_dependencies) target_include_directories (mongoc_shared PRIVATE ${ZLIB_INCLUDE_DIRS})