cmake/packaging.cmake (170 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. # # 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 ############################################################################## # # Packaging # ############################################################################## # The rest is mainly about CPack if(NOT EXTRA_NAME_SUFFIX) set(EXTRA_NAME_SUFFIX "") endif() if(NOT EXTRA_NAME_SUFFIX2) set(EXTRA_NAME_SUFFIX2 "") endif() set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "MySQL Shell ${MYSH_VERSION}, a command line shell and scripting environment for MySQL") set(CPACK_PACKAGE_NAME "mysql-shell${EXTRA_NAME_SUFFIX}") set(CPACK_PACKAGE_VENDOR "Oracle and/or its affiliates") set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README") if(WIN32) # WiX wants the license file to end in ".txt" configure_file(${CMAKE_SOURCE_DIR}/LICENSE ${CMAKE_BINARY_DIR}/LICENSE.txt COPYONLY) set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_BINARY_DIR}/LICENSE.txt") else() set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") endif() set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${MYSH_VERSION}-src") set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_NAME}-${MYSH_VERSION}${EXTRA_NAME_SUFFIX2}${PACKAGE_DRIVER_TYPE_SUFFIX}-${MYSH_PLATFORM}") IF(CMAKE_BUILD_TYPE STREQUAL "Debug") set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CPACK_PACKAGE_INSTALL_DIRECTORY}-debug") ENDIF() set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") set(CPACK_STRIP_FILES "bin/mysqlsh") if(WIN32) set(CPACK_PACKAGE_INSTALL_DIRECTORY "MySQL/MySQL Shell ${MYSH_BASE_VERSION}") IF(WITH_DEV) SET(CPACK_GENERATOR "ZIP") ELSE() set(CPACK_GENERATOR "ZIP;WIX") ENDIF() set(CPACK_PACKAGE_NAME "MySQL Shell ${MYSH_VERSION}") set(CPACK_WIX_UPGRADE_GUID "292FA6A2-8E70-4BC8-8C93-C1A374C8636C") set(CPACK_WIX_TEMPLATE "${CMAKE_SOURCE_DIR}/cmake/WIX.template.in") set(CPACK_WIX_PROGRAM_MENU_FOLDER "MySQL") if(NOT BUNDLE_RUNTIME_LIBRARIES) set(CPACK_WIX_VS_REDIST_CHECK "1") if(MSVC_VERSION GREATER_EQUAL 1940 AND MSVC_VERSION LESS_EQUAL 1949) set(CPACK_WIX_REDIST_YEAR "2022") set(CPACK_WIX_REDIST_VERSION "14.40.0") elseif(MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS_EQUAL 1939) set(CPACK_WIX_REDIST_YEAR "2022") set(CPACK_WIX_REDIST_VERSION "14.30.0") elseif(MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS_EQUAL 1929) set(CPACK_WIX_REDIST_YEAR "2019") set(CPACK_WIX_REDIST_VERSION "14.20.0") elseif(MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS_EQUAL 1919) set(CPACK_WIX_REDIST_YEAR "2017") set(CPACK_WIX_REDIST_VERSION "14.10.0") elseif(MSVC_VERSION EQUAL 1900) set(CPACK_WIX_REDIST_YEAR "2015") set(CPACK_WIX_REDIST_VERSION "14.0.0") else() message(FATAL_ERROR "Unknown Visual Studio version: ${MSVC_VERSION}") endif() endif() set(CPACK_PACKAGE_EXECUTABLES "mysqlsh;MySQL Shell") if(HAVE_PYTHON) set(CPACK_WIX_WITH_PYTHON "1") set(CPACK_WIX_PYTHON_DIR "Python${PYTHONLIBS_MAJOR_MINOR}") endif() set(CPACK_WIX_EXTENSIONS "WixUtilExtension.dll") set(CPACK_WIX_MYSQLSH_USE_CUSTOM_ACTION "1") set(CPACK_WIX_MYSQLSH_CUSTOM_ACTION_DLL "${CMAKE_BINARY_DIR}/packaging/wix4/custom_action/${CMAKE_BUILD_TYPE}/mysqlsh.ca.dll") else() set(CPACK_DEBIAN_PACKAGE_MAINTAINER "MySQL RE") FIND_PROGRAM(RPMBUILD_EXECUTABLE rpmbuild) if(NOT RPMBUILD_EXECUTABLE) set(CPACK_SET_DESTDIR "on") set(CPACK_GENERATOR "TGZ;DEB") else() set(CPACK_GENERATOR "TGZ;RPM") set(CPACK_RPM_PACKAGE_LICENSE "GPL") endif(NOT RPMBUILD_EXECUTABLE) endif() set(CPACK_SOURCE_IGNORE_FILES \\\\.git/ \\\\.gitignore CMakeCache\\\\.txt CPackSourceConfig\\\\.cmake CPackConfig\\\\.cmake VersionInfo\\\\.h$ postflight$ /cmake_install\\\\.cmake /CTestTestfile\\\\.cmake /CMakeFiles/ /_CPack_Packages/ Makefile$ cmake/sql.*\\\\.c$ ) #------------ Installation --------------------------- if(WIN32) # TODO: line-ending conversions unix->dos # install(FILES ChangeLog DESTINATION . RENAME ChangeLog.txt) install(FILES README DESTINATION . RENAME README.txt COMPONENT main) # install(FILES INSTALL DESTINATION . RENAME INSTALL.txt) install(FILES LICENSE DESTINATION . RENAME LICENSE.txt COMPONENT main) # Install all .pdb files to enable debugging. Note that what build # type and what sub directory the binaries ends up in, like # "Release" and "Debug", is not determined until we run "devenv" or # similar. So when running "cmake" we don't know the location. We # can't test for the location here, a if(EXISTS ...) is run at # "cmake" invocation time, not when we are to install. So we do a # bit of a hack here until finding a better solution. install(DIRECTORY ${PROJECT_BINARY_DIR}/bin/RelWithDebInfo/ ${PROJECT_BINARY_DIR}/bin/Debug/ DESTINATION bin COMPONENT dev FILES_MATCHING PATTERN *.pdb ) install(DIRECTORY ${PROJECT_BINARY_DIR}/lib/RelWithDebInfo/ ${PROJECT_BINARY_DIR}/lib/Debug/ DESTINATION lib COMPONENT dev FILES_MATCHING PATTERN *.pdb ) else() # install(FILES ChangeLog DESTINATION .) install(FILES README DESTINATION share/mysqlsh/ COMPONENT main) install(FILES README DESTINATION share/mysqlsh/ COMPONENT dev) # install(FILES INSTALL DESTINATION .) install(FILES LICENSE DESTINATION share/mysqlsh/ COMPONENT main) install(FILES LICENSE DESTINATION share/mysqlsh/ COMPONENT dev) endif() # Variable defined when the packages are generated (i.e. not in source builds) IF(MYSH_PLATFORM) IF(WITH_DEV) SET(CPACK_COMPONENTS_ALL main dev) ELSE() SET(CPACK_COMPONENTS_ALL main) ENDIF() set(CPACK_ARCHIVE_COMPONENT_INSTALL ON) set(CPACK_DEB_COMPONENT_INSTALL ON) set(CPACK_RPM_COMPONENT_INSTALL ON) set(CPACK_WIX_COMPONENT_INSTALL ON) ENDIF() include(CPack)