install_layout.cmake (196 lines of code) (raw):
# Copyright (c) 2015, 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
#
# Install component groups used in this project
# ---------------------------------------------
#
# - main : Contents of the main package we publish - these are bits needed to
# run code that is linked against our connector and also to build such code
# + readmes and other information files.
#
# - debug : Debug libraries for development.
#
# - tests : Stand-alone unit tests (they still require connector libs to be run)
#
#
# Pick install location for the main library
# ------------------------------------------
#
# On Windows the install layout is as follows, where NN is the MSVC version
# used to build the connector:
#
# {lib,lib64}/mysqlcppconnX-vsNN.dll <-- shared library
# {lib,lib64}/vsNN/mysqlcppconnX-static.lib <-- static with /MD
# {lib,lib64}/vsNN/mysqlcppconnX-static-mt.lib <-- static with /MT
# {lib,lib64}/vsNN/mysqlcppconnX.lib <-- import library for DLL
#
# On Linux it is as follows, where A.B is the API version number
#
# {lib,lib64}/libmysqlcppconnX.so.A.B <-- shared library
# {lib,lib64}/libmysqlcppconnX.so.A <-- soname link
# {lib,lib64}/libmysqlcppconnX.so <-- development link
# {lib,lib64}/libmysqlcppconnX-static.a <-- static library
#
# Additionally, if connector is built in debug mode, the libraries are installed
# in debug/ subfolder of {lib,lib64}/ or {lib,lib64}/vsNN/.
#
# Note: We expect VS variable to hold the "vsNN" bit on Windows.
#
if(NOT DEFINED IS64BIT)
message(FATAL_ERROR "IS64BIT not defined!")
endif()
#
# Default locations, if not overridden with cmake options
#
if(NOT CMAKE_INSTALL_INCLUDEDIR)
set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE STRING
"Include Install location (Relative to CMAKE_INSTALL_PREFIX)")
endif()
if(NOT CMAKE_INSTALL_LIBDIR)
if(FREEBSD)
set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING
"Library Install location (Relative to CMAKE_INSTALL_PREFIX)")
elseif(IS64BIT OR SUNPRO)
set(CMAKE_INSTALL_LIBDIR "lib64" CACHE STRING
"Library Install location (Relative to CMAKE_INSTALL_PREFIX)")
else()
set(CMAKE_INSTALL_LIBDIR "lib" CACHE STRING
"Library Install location (Relative to CMAKE_INSTALL_PREFIX)")
endif()
endif()
if(NOT CMAKE_INSTALL_DOCDIR)
set(CMAKE_INSTALL_DOCDIR "." CACHE STRING
"Doc Install location (Relative to CMAKE_INSTALL_PREFIX)")
endif()
#
# These variables should be used in install specs.
#
if(NOT INSTALL_LIB_DIR)
set(INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR})
endif()
if(NOT INSTALL_LIB_DIR_DEBUG)
set(INSTALL_LIB_DIR_DEBUG "${INSTALL_LIB_DIR}/debug")
endif()
if(NOT INSTALL_LIB_DIR_STATIC)
set(INSTALL_LIB_DIR_STATIC "${INSTALL_LIB_DIR}")
if(VS)
set(INSTALL_LIB_DIR_STATIC "${INSTALL_LIB_DIR_STATIC}/${VS}")
endif()
endif()
if(NOT INSTALL_LIB_DIR_STATIC_DEBUG)
set(INSTALL_LIB_DIR_STATIC_DEBUG "${INSTALL_LIB_DIR_DEBUG}")
if(VS)
set(INSTALL_LIB_DIR_STATIC_DEBUG "${INSTALL_LIB_DIR_STATIC_DEBUG}/${VS}")
endif()
endif()
if(NOT INSTALL_INCLUDE_DIR)
set(INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR})
endif()
if(NOT INSTALL_DOC_DIR)
set(INSTALL_DOC_DIR ${CMAKE_INSTALL_DOCDIR})
endif()
#
# Store layout settings in the cache.
#
set(INSTALL_INCLUDE_DIR "${INSTALL_INCLUDE_DIR}"
CACHE INTERNAL "Install location for include headers"
)
set(INSTALL_DOC_DIR "${INSTALL_DOC_DIR}"
CACHE INTERNAL "Install location for documentation files"
)
set(INSTALL_LIB_DIR "${INSTALL_LIB_DIR}"
CACHE INTERNAL "Library install location (relative to install root)"
)
set(INSTALL_LIB_DIR_DEBUG "${INSTALL_LIB_DIR_DEBUG}"
CACHE INTERNAL
"Library install location for debug builds (relative to install root)"
)
set(INSTALL_LIB_DIR_STATIC "${INSTALL_LIB_DIR_STATIC}"
CACHE INTERNAL
"Install location for static libraries (relative to install root)"
)
set(INSTALL_LIB_DIR_STATIC_DEBUG "${INSTALL_LIB_DIR_STATIC_DEBUG}"
CACHE INTERNAL
"Install location for static libraries for debug builds (relative to install root)"
)
#
# Default install location
#
if(NOT CMAKE_INSTALL_PREFIX)
if(CONCPP_PACKAGE_BASE_VERSION)
set(version ${CONCPP_PACKAGE_BASE_VERSION})
else()
set(version ${CONCPP_VERSION})
endif()
if(WIN32)
if(DEFINED ENV{HOMEPATH})
file(TO_CMAKE_PATH "$ENV{HOMEDRIVE}$ENV{HOMEPATH}" install_home)
else()
set(install_home "C:/Program Files (x86)")
endif()
set(CMAKE_INSTALL_PREFIX "${install_home}/MySQL/MySQL Connector C++ ${version}")
else()
set(CMAKE_INSTALL_PREFIX "/usr/local/mysql/connector-c++-${version}")
endif()
endif()
#
# Library names
#
# The library name base is mysqlcppconnX where X is the major version
# of Connector/C++ product.
#
# Static library has -static suffix added to the base name.
#
# On Windows we add major ABI version to the shared library name, so that
# different ABI versions of the library can be installed next to each other.
# Also, on Windows we distinguish the MSVC version used to build the library
# (as this determines the runtime version). The shared libraries use
# -vsNN suffix, the import library does not have the suffix but is installed
# to a vsNN/ subfolder of the library install location (see install layout
# below). For static libraries, we add -mt suffix if it is linked with
# static runtime.
#
set(LIB_NAME_BASE "mysqlcppconnx")
set(LIB_NAME_STATIC "${LIB_NAME_BASE}-static")
if(WIN32 AND STATIC_MSVCRT)
set(LIB_NAME_STATIC "${LIB_NAME}-mt")
endif()
if(BUILD_STATIC)
set(LIB_NAME ${LIB_NAME_STATIC})
else()
set(LIB_NAME "${LIB_NAME_BASE}")
if(WIN32)
set(LIB_NAME "${LIB_NAME}-${ABI_VERSION_MAJOR}")
endif()
if(VS)
set(LIB_NAME "${LIB_NAME}-${VS}")
endif()
endif()
#set(LIB_NAME_BASE ${LIB_NAME_BASE} CACHE INTERNAL "")
#set(LIB_NAME ${LIB_NAME} CACHE INTERNAL "")
#set(LIB_NAME_STATIC ${LIB_NAME_STATIC} CACHE INTERNAL "")