Skip to content

Commit db35e13

Browse files
committed
build: added VERSIONINFO resource
1 parent 68d0197 commit db35e13

File tree

5 files changed

+118
-1
lines changed

5 files changed

+118
-1
lines changed

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
*.py text
3232
*.qrc text
3333
*.qss text
34+
*.rc text
35+
*.rc.in text
3436
*.S text
3537
*.sbt text
3638
*.scala text

cmake/OpenCVModule.cmake

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,11 +800,35 @@ macro(_ocv_create_module)
800800
endforeach()
801801
endif()
802802

803+
if(WIN32 AND BUILD_SHARED_LIBS AND NOT OPENCV_VS_VERSIONINFO_SKIP)
804+
if(DEFINED OPENCV_VS_VERSIONINFO_FILE)
805+
set(_VS_VERSION_FILE "${OPENCV_VS_VERSIONINFO_FILE}")
806+
elseif(DEFINED OPENCV_VS_VERSIONINFO_${the_module}_FILE)
807+
set(_VS_VERSION_FILE "${OPENCV_VS_VERSIONINFO_${the_module}_FILE")
808+
elseif(NOT OPENCV_VS_VERSIONINFO_SKIP_GENERATION)
809+
set(_VS_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/vs_version.rc")
810+
ocv_generate_vs_version_file("${_VS_VERSION_FILE}"
811+
NAME "${the_module}"
812+
FILEDESCRIPTION "OpenCV module: ${OPENCV_MODULE_${the_module}_DESCRIPTION}"
813+
INTERNALNAME "${the_module}${OPENCV_DLLVERSION}"
814+
ORIGINALFILENAME "${the_module}${OPENCV_DLLVERSION}.dll"
815+
)
816+
endif()
817+
if(_VS_VERSION_FILE)
818+
if(NOT EXISTS "${_VS_VERSION_FILE}")
819+
message(STATUS "${the_module}: Required .rc file is missing: ${_VS_VERSION_FILE}")
820+
endif()
821+
source_group("Src" FILES "${_VS_VERSION_FILE}")
822+
endif()
823+
endif()
824+
803825
source_group("Include" FILES "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp")
804826
source_group("Src" FILES "${${the_module}_pch}")
805827
ocv_add_library(${the_module} ${OPENCV_MODULE_TYPE} ${OPENCV_MODULE_${the_module}_HEADERS} ${OPENCV_MODULE_${the_module}_SOURCES}
806828
"${OPENCV_CONFIG_FILE_INCLUDE_DIR}/cvconfig.h" "${OPENCV_CONFIG_FILE_INCLUDE_DIR}/opencv2/opencv_modules.hpp"
807-
${${the_module}_pch} ${sub_objs})
829+
${${the_module}_pch} ${sub_objs}
830+
${_VS_VERSION_FILE}
831+
)
808832

809833
if (cuda_objs)
810834
target_link_libraries(${the_module} ${cuda_objs})

cmake/OpenCVUtils.cmake

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,3 +1128,49 @@ macro(ocv_add_testdata basedir dest_subdir)
11281128
endif()
11291129
endif()
11301130
endmacro()
1131+
1132+
macro(ocv_generate_vs_version_file DESTINATION)
1133+
cmake_parse_arguments(VS_VER "" "NAME;FILEDESCRIPTION;FILEVERSION;INTERNALNAME;COPYRIGHT;ORIGINALFILENAME;PRODUCTNAME;PRODUCTVERSION;COMMENTS;FILEVERSION_QUAD;PRODUCTVERSION_QUAD" "" ${ARGN})
1134+
1135+
macro(__vs_ver_update_variable name)
1136+
if(VS_VER_NAME AND DEFINED OPENCV_${VS_VER_NAME}_VS_VER_${name})
1137+
set(OPENCV_VS_VER_${name} "${OPENCV_${VS_VER_NAME}_VS_VER_${name}}")
1138+
elseif(VS_VER_${name})
1139+
set(OPENCV_VS_VER_${name} "${VS_VER_${name}}")
1140+
endif()
1141+
endmacro()
1142+
1143+
__vs_ver_update_variable(FILEVERSION_QUAD)
1144+
__vs_ver_update_variable(PRODUCTVERSION_QUAD)
1145+
1146+
macro(__vs_ver_update_str_variable name)
1147+
if(VS_VER_NAME AND DEFINED OPENCV_${VS_VER_NAME}_VS_VER_${name})
1148+
set(OPENCV_VS_VER_${name}_STR "${OPENCV_${VS_VER_NAME}_VS_VER_${name}}")
1149+
elseif(VS_VER_${name})
1150+
set(OPENCV_VS_VER_${name}_STR "${VS_VER_${name}}")
1151+
endif()
1152+
endmacro()
1153+
1154+
__vs_ver_update_str_variable(FILEDESCRIPTION)
1155+
__vs_ver_update_str_variable(FILEVERSION)
1156+
__vs_ver_update_str_variable(INTERNALNAME)
1157+
__vs_ver_update_str_variable(COPYRIGHT)
1158+
__vs_ver_update_str_variable(ORIGINALFILENAME)
1159+
__vs_ver_update_str_variable(PRODUCTNAME)
1160+
__vs_ver_update_str_variable(PRODUCTVERSION)
1161+
__vs_ver_update_str_variable(COMMENTS)
1162+
1163+
if(OPENCV_VS_VER_COPYRIGHT_STR)
1164+
set(OPENCV_VS_VER_HAVE_COPYRIGHT_STR 1)
1165+
else()
1166+
set(OPENCV_VS_VER_HAVE_COPYRIGHT_STR 0)
1167+
endif()
1168+
1169+
if(OPENCV_VS_VER_COMMENTS_STR)
1170+
set(OPENCV_VS_VER_HAVE_COMMENTS_STR 1)
1171+
else()
1172+
set(OPENCV_VS_VER_HAVE_COMMENTS_STR 0)
1173+
endif()
1174+
1175+
configure_file("${OpenCV_SOURCE_DIR}/cmake/templates/vs_version.rc.in" "${DESTINATION}" @ONLY)
1176+
endmacro()

cmake/OpenCVVersion.cmake

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,10 @@ set(OPENCV_LIBVERSION "${OPENCV_VERSION_MAJOR}.${OPENCV_VERSION_MINOR}.${OPENCV_
1616
# create a dependency on version file
1717
# we never use output of the following command but cmake will rerun automatically if the version file changes
1818
configure_file("${OPENCV_VERSION_FILE}" "${CMAKE_BINARY_DIR}/junk/version.junk" COPYONLY)
19+
20+
ocv_update(OPENCV_VS_VER_FILEVERSION_QUAD "${OPENCV_VERSION_MAJOR},${OPENCV_VERSION_MINOR},${OPENCV_VERSION_PATCH},0")
21+
ocv_update(OPENCV_VS_VER_PRODUCTVERSION_QUAD "${OPENCV_VERSION_MAJOR},${OPENCV_VERSION_MINOR},${OPENCV_VERSION_PATCH},0")
22+
ocv_update(OPENCV_VS_VER_FILEVERSION_STR "${OPENCV_VERSION}")
23+
ocv_update(OPENCV_VS_VER_PRODUCTVERSION_STR "${OPENCV_VERSION}")
24+
ocv_update(OPENCV_VS_VER_PRODUCTNAME_STR "OpenCV library")
25+
ocv_update(OPENCV_VS_VER_COMMENTS_STR "http://opencv.org/")

cmake/templates/vs_version.rc.in

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <winver.h>
2+
3+
VS_VERSION_INFO VERSIONINFO
4+
FILEVERSION @OPENCV_VS_VER_FILEVERSION_QUAD@
5+
PRODUCTVERSION @OPENCV_VS_VER_PRODUCTVERSION_QUAD@
6+
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
7+
#ifdef _DEBUG
8+
FILEFLAGS 1
9+
#else
10+
FILEFLAGS 0
11+
#endif
12+
FILEOS VOS__WINDOWS32
13+
FILETYPE VFT_DLL
14+
FILESUBTYPE 0
15+
BEGIN
16+
BLOCK "StringFileInfo"
17+
BEGIN
18+
BLOCK "040904E4"
19+
BEGIN
20+
VALUE "FileDescription", "@OPENCV_VS_VER_FILEDESCRIPTION_STR@\0"
21+
VALUE "FileVersion", "@OPENCV_VS_VER_FILEVERSION_STR@\0"
22+
VALUE "InternalName", "@OPENCV_VS_VER_INTERNALNAME_STR@\0"
23+
#if @OPENCV_VS_VER_HAVE_COPYRIGHT_STR@
24+
VALUE "LegalCopyright", "@OPENCV_VS_VER_COPYRIGHT_STR@\0"
25+
#endif
26+
VALUE "OriginalFilename", "@OPENCV_VS_VER_ORIGINALFILENAME_STR@\0"
27+
VALUE "ProductName", "@OPENCV_VS_VER_PRODUCTNAME_STR@\0"
28+
VALUE "ProductVersion", "@OPENCV_VS_VER_PRODUCTVERSION_STR@\0"
29+
#if @OPENCV_VS_VER_HAVE_COMMENTS_STR@
30+
VALUE "Comments", "@OPENCV_VS_VER_COMMENTS_STR@\0"
31+
#endif
32+
END
33+
END
34+
BLOCK "VarFileInfo"
35+
BEGIN
36+
VALUE "Translation", 0x0409, 1252
37+
END
38+
END

0 commit comments

Comments
 (0)