blob: 4aa2f715130d8a9e8bd2da18d7d86e29f693a52c [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# This file provides library support for MSVC builds.
# * Allows for detailed specification of file/product versions.
# * Installs PDB files.
#
# If the compiler is Visual Studio set up installation of .pdb files
#
# Sample: install_pdb (qpidcommon ${QPID_COMPONENT_COMMON})
#
MACRO (install_pdb theLibrary theComponent)
if (MSVC)
install (FILES
$<TARGET_PDB_FILE:${theLibrary}>
DESTINATION ${QPID_INSTALL_LIBDIR}/ReleasePDB
COMPONENT ${theComponent}
OPTIONAL
CONFIGURATIONS Release MinSizeRel RelWithDebInfo)
install (FILES
$<TARGET_PDB_FILE:${theLibrary}>
DESTINATION ${QPID_INSTALL_LIBDIR}/DebugPDB
COMPONENT ${theComponent}
CONFIGURATIONS Debug)
endif (MSVC)
ENDMACRO (install_pdb)
#
# inherit_value - if the symbol is undefined then set it to the given value.
# Set flag to indicate this symbol was defined here.
#
MACRO (inherit_value theSymbol theValue)
if (NOT DEFINED ${theSymbol})
set (${theSymbol} ${theValue})
# message ("Set symbol '${theSymbol}' to value '${theValue}'")
set (${theSymbol}_inherited = "true")
endif (NOT DEFINED ${theSymbol})
ENDMACRO (inherit_value)
#
# If compiler is Visual Studio then create a "version resource" for the project.
# Use this call to override CPACK and file global settings but not file per-project settings.
# Two groups of four version numbers specify "file" and "product" versions separately.
#
# Sample: add_msvc_version_full (qmfengine library dll 1 0 0 1 1 0 0 1)
#
MACRO (add_msvc_version_full verProject verProjectType verProjectFileExt verFN1 verFN2 verFN3 verFN4 verPN1 verPN2 verPN3 verPN4)
if (MSVC)
# Create project-specific version strings
inherit_value ("winver_${verProject}_FileVersionBinary" "${verFN1},${verFN2},${verFN3},${verFN4}")
inherit_value ("winver_${verProject}_ProductVersionBinary" "${verPN1},${verPN2},${verPN3},${verPN4}")
inherit_value ("winver_${verProject}_FileVersionString" "${verFN1}, ${verFN2}, ${verFN3}, ${verFN4}")
inherit_value ("winver_${verProject}_ProductVersionString" "${verPN1}, ${verPN2}, ${verPN3}, ${verPN4}")
inherit_value ("winver_${verProject}_FileDescription" "${winver_PACKAGE_NAME}-${verProject} ${verProjectType}")
inherit_value ("winver_${verProject}_LegalCopyright" "${winver_LEGAL_COPYRIGHT}")
inherit_value ("winver_${verProject}_InternalName" "${verProject}")
inherit_value ("winver_${verProject}_OriginalFilename" "${verProject}.${verProjectFileExt}")
inherit_value ("winver_${verProject}_ProductName" "${winver_DESCRIPTION_SUMMARY}")
# Create strings to be substituted into the template file
set ("winverFileVersionBinary" "${winver_${verProject}_FileVersionBinary}")
set ("winverProductVersionBinary" "${winver_${verProject}_ProductVersionBinary}")
set ("winverFileVersionString" "${winver_${verProject}_FileVersionString}")
set ("winverProductVersionString" "${winver_${verProject}_ProductVersionString}")
set ("winverFileDescription" "${winver_${verProject}_FileDescription}")
set ("winverLegalCopyright" "${winver_${verProject}_LegalCopyright}")
set ("winverInternalName" "${winver_${verProject}_InternalName}")
set ("winverOriginalFilename" "${winver_${verProject}_OriginalFilename}")
set ("winverProductName" "${winver_${verProject}_ProductName}")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/windows/resources/template-resource.rc
${CMAKE_CURRENT_BINARY_DIR}/windows/resources/${verProject}-resource.rc)
set (${verProject}_SOURCES
${${verProject}_SOURCES}
${CMAKE_CURRENT_BINARY_DIR}/windows/resources/${verProject}-resource.rc
)
endif (MSVC)
ENDMACRO (add_msvc_version_full)
#
# If compiler is Visual Studio then create a "version resource" for the project.
# Use this call to accept file override version settings or
# inherited CPACK_PACKAGE_VERSION version settings.
#
# Sample: add_msvc_version (qpidcommon library dll)
#
MACRO (add_msvc_version verProject verProjectType verProjectFileExt)
if (MSVC)
add_msvc_version_full (${verProject}
${verProjectType}
${verProjectFileExt}
${winver_FILE_VERSION_N1}
${winver_FILE_VERSION_N2}
${winver_FILE_VERSION_N3}
${winver_FILE_VERSION_N4}
${winver_PRODUCT_VERSION_N1}
${winver_PRODUCT_VERSION_N2}
${winver_PRODUCT_VERSION_N3}
${winver_PRODUCT_VERSION_N4})
endif (MSVC)
ENDMACRO (add_msvc_version)
#
# Install optional windows version settings. Override variables are specified in a file.
#
include (./CMakeWinVersions.cmake OPTIONAL)
#
# Inherit global windows version settings from CPACK settings.
#
inherit_value ("winver_PACKAGE_NAME" "${CPACK_PACKAGE_NAME}")
inherit_value ("winver_DESCRIPTION_SUMMARY" "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
inherit_value ("winver_FILE_VERSION_N1" "${CPACK_PACKAGE_VERSION_MAJOR}")
inherit_value ("winver_FILE_VERSION_N2" "${CPACK_PACKAGE_VERSION_MINOR}")
inherit_value ("winver_FILE_VERSION_N3" "${CPACK_PACKAGE_VERSION_PATCH}")
inherit_value ("winver_FILE_VERSION_N4" "1")
inherit_value ("winver_PRODUCT_VERSION_N1" "${winver_FILE_VERSION_N1}")
inherit_value ("winver_PRODUCT_VERSION_N2" "${winver_FILE_VERSION_N2}")
inherit_value ("winver_PRODUCT_VERSION_N3" "${winver_FILE_VERSION_N3}")
inherit_value ("winver_PRODUCT_VERSION_N4" "${winver_FILE_VERSION_N4}")
inherit_value ("winver_LEGAL_COPYRIGHT" "")