Skip to content

Commit 523c8a9

Browse files
committed
Bug#36452427 add Windows versioninfo resource to Router binaries
On windows all shared libraries and executables are expected to contain - version-info - product-name - copyright notice For the server this is implemented via a resource-file which is added via ADD_VERSION_INFO() in cmake. As Router is its own product, it needs its own resource-file to be linked into all shared libraries, plugins and executables. Change ====== - added extra argument to ADD_VERSION_INFO() select resource-files per cmake-COMPONENT - added ROUTER_ADD_SHARED_LIBRARY() as wrapper around ADD_SHARED_LIBRARY() - added NAMELINK_SKIP to ADD_SHARED_LIBRARY() - refactored all router's shared libraries to use MYSQL_ADD_SHARED_LIBRARY() to simplify creating libraries and add version-info to all shared libs - renamed harness-library.ddl to mysqlharness.dll Change-Id: I8d700c22ec1522d9aaae80685eed3de3d490a12d
1 parent 544ada7 commit 523c8a9

File tree

16 files changed

+299
-417
lines changed

16 files changed

+299
-417
lines changed

cmake/component.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ MACRO(MYSQL_ADD_COMPONENT component_arg)
7373
MESSAGE(FATAL_ERROR "Unknown component type ${target}")
7474
ENDIF()
7575

76-
ADD_VERSION_INFO(${target} ${kind} SOURCES)
76+
ADD_VERSION_INFO(${target} ${kind} SOURCES "")
7777
ADD_LIBRARY(${target} ${kind} ${SOURCES})
7878

7979
TARGET_COMPILE_DEFINITIONS(${target} PUBLIC MYSQL_COMPONENT)

cmake/libutils.cmake

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ MACRO(MERGE_LIBRARIES_SHARED TARGET_ARG)
315315
ENDIF()
316316

317317
IF(NOT ARG_SKIP_INSTALL)
318-
ADD_VERSION_INFO(${TARGET} SHARED SRC)
318+
ADD_VERSION_INFO(${TARGET} SHARED SRC "")
319319
ENDIF()
320320
ADD_LIBRARY(${TARGET} SHARED ${SRC})
321321

@@ -582,6 +582,7 @@ FUNCTION(ADD_SHARED_LIBRARY TARGET_ARG)
582582
EXCLUDE_FROM_ALL
583583
NO_UNDEFINED
584584
SKIP_INSTALL
585+
NAMELINK_SKIP
585586
)
586587
SET(LIBRARY_ONE_VALUE_KW
587588
COMPONENT
@@ -610,6 +611,11 @@ FUNCTION(ADD_SHARED_LIBRARY TARGET_ARG)
610611
SET(TARGET ${TARGET_ARG})
611612
SET(SOURCES ${ARG_UNPARSED_ARGUMENTS})
612613

614+
IF(NOT ARG_SKIP_INSTALL AND ARG_COMPONENT STREQUAL "Router")
615+
# add the version-info resource file to SOURCES
616+
ADD_VERSION_INFO(${TARGET} SHARED SOURCES Router)
617+
ENDIF()
618+
613619
ADD_LIBRARY(${TARGET} SHARED ${SOURCES})
614620
TARGET_COMPILE_FEATURES(${TARGET} PUBLIC cxx_std_20)
615621

@@ -643,8 +649,11 @@ FUNCTION(ADD_SHARED_LIBRARY TARGET_ARG)
643649
ELSE()
644650
SET(COMP COMPONENT SharedLibraries)
645651
ENDIF()
646-
MYSQL_INSTALL_TARGET(
647-
${TARGET} DESTINATION "${DESTINATION}" ${COMP})
652+
IF(ARG_NAMELINK_SKIP)
653+
SET(INSTALL_ARGS NAMELINK_SKIP)
654+
ENDIF()
655+
MYSQL_INSTALL_TARGET(${TARGET} DESTINATION "${DESTINATION}" ${COMP}
656+
${INSTALL_ARGS})
648657
ENDIF()
649658

650659
IF(ARG_COMPILE_DEFINITIONS)

cmake/mysql_add_executable.cmake

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,11 @@ FUNCTION(MYSQL_ADD_EXECUTABLE target_arg)
123123
${CMAKE_BINARY_DIR}/runtime_output_directory)
124124
ENDIF()
125125

126-
ADD_VERSION_INFO(${target} EXECUTABLE sources)
126+
IF(ARG_COMPONENT)
127+
ADD_VERSION_INFO(${target} EXECUTABLE sources "${ARG_COMPONENT}")
128+
ELSE()
129+
ADD_VERSION_INFO(${target} EXECUTABLE sources "")
130+
ENDIF()
127131

128132
ADD_EXECUTABLE(${target} ${sources})
129133
TARGET_COMPILE_FEATURES(${target} PUBLIC cxx_std_20)

cmake/package_name.cmake

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,15 +181,39 @@ IF(MSVC)
181181
CONFIGURE_FILE(${MYSQL_CMAKE_SCRIPT_DIR}/versioninfo.rc.in
182182
${CMAKE_BINARY_DIR}/versioninfo_dll.rc)
183183

184-
FUNCTION(ADD_VERSION_INFO target target_type sources_var)
184+
SET(VINFO_PRODUCT_NAME "MySQL Router")
185+
186+
SET(FILETYPE VFT_APP)
187+
CONFIGURE_FILE(${MYSQL_CMAKE_SCRIPT_DIR}/versioninfo.rc.in
188+
${CMAKE_BINARY_DIR}/router_versioninfo_exe.rc)
189+
190+
SET(FILETYPE VFT_DLL)
191+
CONFIGURE_FILE(${MYSQL_CMAKE_SCRIPT_DIR}/versioninfo.rc.in
192+
${CMAKE_BINARY_DIR}/router_versioninfo_dll.rc)
193+
194+
# ADD_VERSION_INFO: add version info the executables/shared libraries on windows
195+
#
196+
# @param target targetname [ignored]
197+
# @param target_type type of the target: SHARED|MODULE|EXE
198+
# @param sources_var caller's variable name to append the rc-files to
199+
# @param component component name
200+
#
201+
FUNCTION(ADD_VERSION_INFO target target_type sources_var component)
202+
IF(component STREQUAL "Router")
203+
SET(exe_rc_file ${CMAKE_BINARY_DIR}/router_versioninfo_exe.rc)
204+
SET(dll_rc_file ${CMAKE_BINARY_DIR}/router_versioninfo_dll.rc)
205+
ELSE()
206+
SET(exe_rc_file ${CMAKE_BINARY_DIR}/versioninfo_exe.rc)
207+
SET(dll_rc_file ${CMAKE_BINARY_DIR}/versioninfo_dll.rc)
208+
ENDIF()
209+
185210
IF("${target_type}" MATCHES "SHARED" OR "${target_type}" MATCHES "MODULE")
186-
SET(rcfile ${CMAKE_BINARY_DIR}/versioninfo_dll.rc)
211+
SET(rcfile ${dll_rc_file})
187212
ELSEIF("${target_type}" MATCHES "EXE")
188-
SET(rcfile ${CMAKE_BINARY_DIR}/versioninfo_exe.rc)
213+
SET(rcfile ${exe_rc_file})
189214
ENDIF()
190215
SET(${sources_var} ${${sources_var}} ${rcfile} PARENT_SCOPE)
191216
ENDFUNCTION()
192-
193217
ELSE()
194218
FUNCTION(ADD_VERSION_INFO)
195219
ENDFUNCTION()

cmake/plugin.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ MACRO(MYSQL_ADD_PLUGIN plugin_arg)
191191
ENDIF()
192192
ENDIF()
193193

194-
ADD_VERSION_INFO(${target} MODULE SOURCES)
194+
ADD_VERSION_INFO(${target} MODULE SOURCES "")
195195
ADD_LIBRARY(${target} MODULE ${SOURCES})
196196
IF(COMPRESS_DEBUG_SECTIONS)
197197
MY_TARGET_LINK_OPTIONS(${target}

router/cmake/Plugin.cmake

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ FUNCTION(add_harness_plugin NAME)
7878
SET(_option_LOG_DOMAIN "\"${NAME}\"")
7979
ENDIF()
8080

81+
IF(NOT _option_NO_INSTALL)
82+
ADD_VERSION_INFO(${NAME} SHARED _option_SOURCES Router)
83+
ENDIF()
84+
8185
# Add the library and ensure that the name is good for the plugin
8286
# system (no "lib" before). We are using SHARED libraries since we
8387
# intend to link against it, which is something that MODULE does not
@@ -169,3 +173,115 @@ FUNCTION(add_harness_plugin NAME)
169173
ENDIF()
170174
ENDIF()
171175
ENDFUNCTION(add_harness_plugin)
176+
177+
#
178+
# ROUTER_ADD_SHARED_LIBRARY(target sources [opts])
179+
#
180+
# @param target targetname of the created shared library.
181+
# @param sources source files of the shared library target.
182+
# @param opts extra options
183+
#
184+
# - creates a shared library "target"
185+
# - with OUTPUT_NAME (default target-name)
186+
# - installs into $ROUTER_INSTALL_LIBDIR (if SKIP_INSTALL is not specified)
187+
# - generates a export-header in bindir/../include/mysqlrouter/{target}_export.h
188+
#
189+
# Options
190+
# =======
191+
#
192+
# All options of ADD_SHARED_LIBRARY() are supported.
193+
#
194+
# Additionally,
195+
#
196+
# NO_EXPORT_HEADER
197+
# : do not generate a export-headers for the shared library.
198+
# default: generate a export-header
199+
#
200+
# PREFIX
201+
# : PREFIX of the shared library name (cmake property)
202+
#
203+
# OUTPUT_NAME
204+
# : OUTPUT_NAME of the shared library (cmake property)
205+
# default: targetname
206+
#
207+
# SOVERSION
208+
# : SOVERSION of the shared library (cmake property)
209+
# default: 1
210+
#
211+
# DESTINATION
212+
# : DESTINATION of the shared library (see MYSQL_INSTALL_TARGET)
213+
# default: $ROUTER_INSTALL_BINDIR on windows, $ROUTER_INSTALL_LIBDIR otherwise
214+
215+
216+
FUNCTION(ROUTER_ADD_SHARED_LIBRARY TARGET)
217+
SET(_options
218+
NO_EXPORT_HEADER
219+
)
220+
SET(_single_value
221+
COMPONENT
222+
DESTINATION
223+
PREFIX
224+
SOVERSION
225+
)
226+
SET(_multi_value
227+
INCLUDE_DIRECTORIES
228+
)
229+
CMAKE_PARSE_ARGUMENTS(_option
230+
"${_options}" "${_single_value}" "${_multi_value}" ${ARGN})
231+
232+
SET(ARGS ${_option_UNPARSED_ARGUMENTS})
233+
IF(NOT DEFINED _option_SOVERSION)
234+
LIST(APPEND ARGS SOVERSION 1)
235+
ELSE()
236+
LIST(APPEND ARGS SOVERSION ${_option_SOVERSION})
237+
ENDIF()
238+
IF(NOT DEFINED _option_COMPONENT)
239+
LIST(APPEND ARGS COMPONENT Router)
240+
ELSE()
241+
LIST(APPEND ARGS COMPONENT ${_option_COMPONENT})
242+
ENDIF()
243+
IF(NOT DEFINED _option_INCLUDE_DIRECTORIES)
244+
LIST(APPEND ARGS INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR})
245+
ELSE()
246+
LIST(APPEND ARGS INCLUDE_DIRECTORIES ${_option_INCLUDE_DIRECTORIES})
247+
ENDIF()
248+
IF(NOT DEFINED _option_DESTINATION)
249+
# ADD_SHARED_LIBRARY calls MYSQL_INSTALL_TARGET which only knows
250+
# about a single DESTINATIONS, but we want
251+
# - .dll's in the BINDIR and
252+
# - .so in the LIBDIR.
253+
IF(WIN32)
254+
LIST(APPEND ARGS DESTINATION ${ROUTER_INSTALL_BINDIR})
255+
ELSE()
256+
LIST(APPEND ARGS DESTINATION ${ROUTER_INSTALL_LIBDIR})
257+
ENDIF()
258+
ELSE()
259+
LIST(APPEND ARGS DESTINATION ${_option_DESTINATION})
260+
ENDIF()
261+
262+
ADD_SHARED_LIBRARY(${TARGET} ${ARGS}
263+
NAMELINK_SKIP
264+
)
265+
266+
ADD_INSTALL_RPATH_FOR_OPENSSL(${TARGET})
267+
SET_PATH_TO_CUSTOM_SSL_FOR_APPLE(${TARGET})
268+
269+
IF(_option_PREFIX)
270+
SET_TARGET_PROPERTIES(${TARGET} PROPERTIES
271+
PREFIX "${_option_PREFIX}"
272+
)
273+
ENDIF()
274+
275+
IF(NOT _option_NO_EXPORT_HEADER)
276+
TARGET_INCLUDE_DIRECTORIES(${TARGET}
277+
PUBLIC
278+
${CMAKE_CURRENT_SOURCE_DIR}/../include/
279+
${CMAKE_CURRENT_BINARY_DIR}/../include/
280+
)
281+
GENERATE_EXPORT_HEADER(${TARGET}
282+
EXPORT_FILE_NAME
283+
${CMAKE_CURRENT_BINARY_DIR}/../include/mysqlrouter/${TARGET}_export.h
284+
)
285+
ENDIF()
286+
287+
ENDFUNCTION()

router/cmake/testing.cmake

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ FUNCTION(_ADD_TEST_FILE FILE)
119119
SET(test_name "${test_target}")
120120
MYSQL_ADD_EXECUTABLE(${test_target}
121121
${FILE} ${TEST_EXTRA_SOURCES}
122+
COMPONENT Router
122123
ADD_TEST ${test_name})
123124

124125
ADD_DEPENDENCIES(mysqlrouter_all ${test_target})
@@ -261,7 +262,9 @@ FUNCTION(STATICLIB_FROM_TARGET TO FROM)
261262

262263
SET(_LIB_SOURCES)
263264
FOREACH(F ${_SOURCES})
264-
LIST(APPEND _LIB_SOURCES ${_SOURCE_DIR}/${F})
265+
IF(NOT ${F} MATCHES ".*\\.rc")
266+
LIST(APPEND _LIB_SOURCES ${_SOURCE_DIR}/${F})
267+
ENDIF()
265268
ENDFOREACH()
266269

267270
ADD_LIBRARY(${TO}

router/src/connection_pool/src/CMakeLists.txt

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,45 +25,22 @@ INCLUDE(GenerateExportHeader)
2525

2626
# connection pool library
2727

28-
ADD_LIBRARY(connection_pool SHARED
28+
ROUTER_ADD_SHARED_LIBRARY(connection_pool
2929
connection_pool.cc
3030
connection_pool_component.cc
31-
)
32-
TARGET_LINK_LIBRARIES(connection_pool
31+
32+
OUTPUT_NAME "mysqlrouter_connection_pool"
33+
34+
LINK_LIBRARIES
3335
PUBLIC
3436
harness_stdx
3537
harness_net_ts
3638
mysql_protocol
3739
routing_connections
40+
3841
PRIVATE
3942
OpenSSL::SSL OpenSSL::Crypto
4043
)
41-
TARGET_INCLUDE_DIRECTORIES(connection_pool PRIVATE
42-
${CMAKE_CURRENT_SOURCE_DIR}
43-
PUBLIC
44-
${CMAKE_CURRENT_SOURCE_DIR}/../include/
45-
${CMAKE_CURRENT_BINARY_DIR}/../include/
46-
)
47-
GENERATE_EXPORT_HEADER(connection_pool
48-
EXPORT_FILE_NAME
49-
${CMAKE_CURRENT_BINARY_DIR}/../include/mysqlrouter/connection_pool_export.h
50-
)
51-
52-
SET_TARGET_PROPERTIES(connection_pool PROPERTIES
53-
OUTPUT_NAME "mysqlrouter_connection_pool"
54-
SOVERSION 1
55-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/runtime_output_directory
56-
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/library_output_directory)
57-
58-
ADD_INSTALL_RPATH_FOR_OPENSSL(connection_pool)
59-
SET_PATH_TO_CUSTOM_SSL_FOR_APPLE(connection_pool)
60-
61-
INSTALL(TARGETS connection_pool
62-
RUNTIME DESTINATION ${ROUTER_INSTALL_BINDIR} COMPONENT Router
63-
ARCHIVE DESTINATION ${ROUTER_INSTALL_LIBDIR} COMPONENT Router
64-
LIBRARY DESTINATION ${ROUTER_INSTALL_LIBDIR} COMPONENT Router
65-
NAMELINK_SKIP
66-
)
6744

6845
# connection pool plugin
6946

router/src/destination_status/src/CMakeLists.txt

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -25,41 +25,16 @@ INCLUDE(GenerateExportHeader)
2525

2626
# destination status library
2727

28-
ADD_LIBRARY(destination_status SHARED
28+
ROUTER_ADD_SHARED_LIBRARY(destination_status
2929
unreachable_destinations_quarantine.cc
3030
destination_status_component.cc
31-
)
32-
TARGET_LINK_LIBRARIES(destination_status
31+
32+
LINK_LIBRARIES
3333
PUBLIC
3434
harness_stdx
3535
router_lib
36-
)
3736

38-
TARGET_INCLUDE_DIRECTORIES(destination_status PRIVATE
39-
${CMAKE_CURRENT_SOURCE_DIR}
40-
PUBLIC
41-
${CMAKE_CURRENT_SOURCE_DIR}/../include/
42-
${CMAKE_CURRENT_BINARY_DIR}/../include/
43-
)
44-
GENERATE_EXPORT_HEADER(destination_status
45-
EXPORT_FILE_NAME
46-
${CMAKE_CURRENT_BINARY_DIR}/../include/mysqlrouter/destination_status_export.h
47-
)
48-
49-
SET_TARGET_PROPERTIES(destination_status PROPERTIES
5037
OUTPUT_NAME "mysqlrouter_destination_status"
51-
SOVERSION 1
52-
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/runtime_output_directory
53-
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/library_output_directory)
54-
55-
#ADD_INSTALL_RPATH_FOR_OPENSSL(destination_status)
56-
#SET_PATH_TO_CUSTOM_SSL_FOR_APPLE(destination_status)
57-
58-
INSTALL(TARGETS destination_status
59-
RUNTIME DESTINATION ${ROUTER_INSTALL_BINDIR} COMPONENT Router
60-
ARCHIVE DESTINATION ${ROUTER_INSTALL_LIBDIR} COMPONENT Router
61-
LIBRARY DESTINATION ${ROUTER_INSTALL_LIBDIR} COMPONENT Router
62-
NAMELINK_SKIP
6338
)
6439

6540
# destination status plugin

0 commit comments

Comments
 (0)