cmake/version_info.cmake (96 lines of code) (raw):

# Copyright (c) 2024, Oracle and/or its affiliates. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2.0, as # published by the Free Software Foundation. # # This program is designed to work with certain software (including # but not limited to OpenSSL) that is licensed under separate terms, as # designated in a particular file or component or in included license # documentation. The authors of MySQL hereby grant you an additional # permission to link the program and your derivative works with the # separately licensed software that they have either included with # the program or referenced in the documentation. # # Without limiting anything contained in the foregoing, this file, # which is part of Connector/C++, is also subject to the # Universal FOSS Exception, version 1.0, a copy of which can be found at # https://oss.oracle.com/licenses/universal-foss-exception. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License, version 2.0, for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA if(NOT DEFINED SHOW_VERSION_INFO AND MAINTAINER_MODE) set(SHOW_VERSION_INFO 1) endif() get_filename_component(VERSION_INFO_HOME "${CMAKE_CURRENT_LIST_DIR}/version_info" ABSOLUTE CACHE) # # Add Windows version info resources to the library/executable file produced # by target TGT. # # This is ignored on non-Windows platforms. The second argument is a string # to use as `FileDescription` attribute. If another argument is given, it # is used for `Comments` attribute. # # Note: Version information is taken from version.cmake file included by # gen_version_info.cmake script that generates resource definitions. # # function(add_version_info TGT DESCR) if(NOT WIN32) return() endif() get_target_property(TYPE ${TGT} TYPE) # Currently setting version resources for static libraries does not work. # Possibly because of the machinery we use to merge static library from # several smaller ones. For now we can live without version info in static # libraries. if(TYPE STREQUAL "STATIC_LIBRARY") return() endif() set(out "${CMAKE_CURRENT_BINARY_DIR}/${TGT}_version_info.rc") # Command to generate .rc file with version information. This is done # by the gen_version_info.cmake script which uses version_info.rc.in template. add_custom_command(OUTPUT "${out}" COMMAND ${CMAKE_COMMAND} -D "RC=${out}" -D "OUTPUT=$<TARGET_FILE:${TGT}>" -D "TYPE=${TYPE}" -D "DESCRIPTION=${DESCR}" -D "COMMENTS=${ARGN}" -D "VERSION=${CMAKE_SOURCE_DIR}/version.cmake" -D "CONFIG=$<CONFIG>" -P "${VERSION_INFO_HOME}/gen_version_info.cmake" ) # Add the generated .rc file to the sources of the target. target_sources(${TGT} PRIVATE "${out}") if(SHOW_VERSION_INFO) show_version_info(${TGT}) endif() #add_custom_command(TARGET ${TGT} POST_BUILD # COMMAND ${CMAKE_COMMAND} -E rm -rf "${out}" #) message(STATUS "generated version info for target ${TGT} (${TYPE}): ${out}") endfunction() # # Arrange for a library/executable target TGT to show the version information # resources once its file is generated. # # This command is ignored on non-Windows platforms or if the target does not # exist. # function(show_version_info TGT) if(NOT WIN32 OR NOT TARGET ${TGT}) return() endif() add_custom_command(TARGET ${TGT} POST_BUILD COMMAND ${CMAKE_COMMAND} -D FILE=$<TARGET_FILE:${TGT}> -P "${VERSION_INFO_HOME}/show_version_info.cmake" ) endfunction()