mirror of
https://github.com/mariadb-corporation/mariadb-connector-cpp.git
synced 2025-07-20 16:35:25 +00:00
CONCPP-117 Adding build and packaging of the static library
Added new target for comiling objects that then used by both shared and static libraries targets. Static library on Windows named mariadbcpp-static.lib static_test is now linked against static library, as we need to test it (static library) somehow, and the name of test kinda suggested to use it. It's been added to msi and other packages. MSI target depends on static lib target. Renamed package components the way it's done in C/C. Static lib and headers are in Development, library is in SharedLibraries. Small error mistake in one class(not related to the commit, just not to be lost)
This commit is contained in:
@ -19,9 +19,9 @@
|
||||
|
||||
IF(APPLE)
|
||||
# productbuild packaging stuff
|
||||
cmake_minimum_required(VERSION 3.23)
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.23)
|
||||
ELSE()
|
||||
cmake_minimum_required(VERSION 3.1)
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
|
||||
ENDIF()
|
||||
CMAKE_POLICY(SET CMP0048 NEW)
|
||||
|
||||
@ -57,6 +57,7 @@ LIST(REMOVE_ITEM MAODBC_LANGUAGES "RC")
|
||||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
|
||||
|
||||
SET(LIBRARY_NAME "mariadbcpp")
|
||||
SET(STATIC_LIBRARY_NAME "${LIBRARY_NAME}-static")
|
||||
|
||||
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/src/Version.h.in
|
||||
${CMAKE_SOURCE_DIR}/src/Version.h)
|
||||
@ -416,8 +417,6 @@ IF(WIN32)
|
||||
MESSAGE(STATUS "Sign MSI package: ${WITH_SIGNCODE}")
|
||||
ENDIF()
|
||||
|
||||
OPTION(BUILD_SHARED_LIBS "Build as a shared library" ON)
|
||||
|
||||
# By now we have everything needed by tests. If we need to build them only - firing config now and exit
|
||||
# There is "normal" tests config below
|
||||
IF(BUILD_TESTS_ONLY)
|
||||
@ -539,19 +538,27 @@ ELSE()
|
||||
MESSAGE(STATUS "Linking Connector/C library statically(${MARIADB_CLIENT_TARGET_NAME})")
|
||||
ENDIF()
|
||||
|
||||
IF(BUILD_SHARED_LIBS)
|
||||
SET(LIBRARY_TYPE SHARED)
|
||||
MESSAGE(STATUS "Building as a shared library")
|
||||
ELSE()
|
||||
SET(LIBRARY_TYPE STATIC)
|
||||
MESSAGE(STATUS "Building as a static library")
|
||||
|
||||
ADD_LIBRARY(${LIBRARY_NAME}_obj OBJECT ${MACPP_SOURCES})
|
||||
IF(UNIX)
|
||||
SET_TARGET_PROPERTIES(${LIBRARY_NAME}_obj PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS}")
|
||||
ENDIF()
|
||||
SET(${LIBRARY_NAME}_OBJECTS $<TARGET_OBJECTS:${LIBRARY_NAME}_obj>)
|
||||
|
||||
IF(WIN32)
|
||||
ADD_LIBRARY(${LIBRARY_NAME} ${LIBRARY_TYPE} ${MACPP_SOURCES} ${CMAKE_SOURCE_DIR}/src/maconncpp.def ${CMAKE_SOURCE_DIR}/src/maconncpp.rc)
|
||||
ADD_LIBRARY(${LIBRARY_NAME} SHARED ${CMAKE_SOURCE_DIR}/src/maconncpp.rc ${${LIBRARY_NAME}_OBJECTS} ${CMAKE_SOURCE_DIR}/src/maconncpp.def)
|
||||
ADD_LIBRARY(${STATIC_LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_OBJECTS} ${CMAKE_SOURCE_DIR}/src/maconncpp.rc)
|
||||
ELSE()
|
||||
# Xcode doesn't support targets that have only object files,
|
||||
# so let's add an empty file to keep Xcode happy
|
||||
IF(CMAKE_GENERATOR MATCHES Xcode)
|
||||
FILE(WRITE ${CMAKE_BINARY_DIR}/empty.cpp "")
|
||||
SET(EMPTY_FILE ${CMAKE_BINARY_DIR}/empty.cpp)
|
||||
ENDIF()
|
||||
# MESSAGE(STATUS "Version script: ${CMAKE_SOURCE_DIR}/src/maconncpp.def")
|
||||
ADD_LIBRARY(${LIBRARY_NAME} ${LIBRARY_TYPE} ${MACPP_SOURCES})
|
||||
ADD_LIBRARY(${LIBRARY_NAME} SHARED ${${LIBRARY_NAME}_OBJECTS} ${EMPTY_FILE})
|
||||
ADD_LIBRARY(${STATIC_LIBRARY_NAME} STATIC ${${LIBRARY_NAME}_OBJECTS} ${EMPTY_FILE})
|
||||
|
||||
IF(APPLE)
|
||||
SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES LINK_FLAGS "-Wl"
|
||||
INSTALL_RPATH_USE_LINK_PATH 0
|
||||
@ -559,10 +566,18 @@ ELSE()
|
||||
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES
|
||||
XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "--timestamp -f"
|
||||
INSTALL_RPATH "${MAODBC_INSTALL_RPATH}")
|
||||
SET_TARGET_PROPERTIES(${STATIC_LIBRARY_NAME} PROPERTIES
|
||||
INSTALL_RPATH_USE_LINK_PATH 0
|
||||
BUILD_WITH_INSTALL_RPATH 1
|
||||
XCODE_ATTRIBUTE_ENABLE_HARDENED_RUNTIME YES
|
||||
XCODE_ATTRIBUTE_OTHER_CODE_SIGN_FLAGS "--timestamp -f"
|
||||
INSTALL_RPATH "${MAODBC_INSTALL_RPATH}")
|
||||
IF(WITH_SIGNCODE)
|
||||
SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Developer ID Application: ${DEVELOPER_ID}")
|
||||
SET_TARGET_PROPERTIES(${STATIC_LIBRARY_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "Developer ID Application: ${DEVELOPER_ID}")
|
||||
ELSE()
|
||||
SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
|
||||
SET_TARGET_PROPERTIES(${STATIC_LIBRARY_NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "")
|
||||
ENDIF()
|
||||
ELSE()
|
||||
# SET_TARGET_PROPERTIES(${LIBRARY_NAME} PROPERTIES LINK_FLAGS "-Wl,--version-script=${CMAKE_SOURCE_DIR}/src/maconncpp.def")
|
||||
@ -570,6 +585,11 @@ ELSE()
|
||||
ENDIF()
|
||||
|
||||
TARGET_LINK_LIBRARIES(${LIBRARY_NAME} ${MARIADB_CLIENT_TARGET_NAME} ${PLATFORM_DEPENDENCIES})
|
||||
TARGET_LINK_LIBRARIES(${STATIC_LIBRARY_NAME} mariadbclient)
|
||||
|
||||
INCLUDE(symlink)
|
||||
CREATE_SYMLINK(lib${LIBRARY_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX} ${STATIC_LIBRARY_NAME} ${INSTALL_LIBDIR})
|
||||
|
||||
ADD_DEPENDENCIES(${LIBRARY_NAME} DEPENDENCIES_FOR_PACKAGE)
|
||||
|
||||
########## Packaging ##########
|
||||
@ -595,7 +615,11 @@ ELSE()
|
||||
INSTALL(TARGETS
|
||||
${LIBRARY_NAME}
|
||||
LIBRARY DESTINATION ${INSTALL_LIBDIR}
|
||||
COMPONENT CppLibs)
|
||||
COMPONENT SharedLibraries)
|
||||
INSTALL(TARGETS
|
||||
${STATIC_LIBRARY_NAME}
|
||||
ARCHIVE DESTINATION ${INSTALL_LIBDIR}
|
||||
COMPONENT Development)
|
||||
|
||||
MESSAGE(STATUS "Documentation installed to ${INSTALL_DOCDIR}")
|
||||
MESSAGE(STATUS "License file installed to ${INSTALL_LICENSEDIR}")
|
||||
@ -616,7 +640,7 @@ ENDIF()
|
||||
IF(WITH_UNIT_TESTS AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
|
||||
ADD_SUBDIRECTORY(test)
|
||||
ADD_CUSTOM_COMMAND(TARGET ${LIBRARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy $<TARGET_FILE:${LIBRARY_NAME}> test)
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy $<TARGET_FILE:${LIBRARY_NAME}> test)
|
||||
IF(NOT USE_SYSTEM_INSTALLED_LIB)
|
||||
ADD_CUSTOM_COMMAND(TARGET ${LIBRARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E copy $<TARGET_FILE:libmariadb> test)
|
||||
|
@ -14,9 +14,9 @@ SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
|
||||
SET(CPACK_PACKAGE_API_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/include/")
|
||||
|
||||
IF(INSTALL_LAYOUT STREQUAL "DEFAULT")
|
||||
SET(CPACK_COMPONENTS_ALL ClientPlugins CppLibs ConCLib Documentation PublicAPI)
|
||||
SET(CPACK_COMPONENTS_ALL ClientPlugins SharedLibraries ConCLib Documentation Development)
|
||||
ELSE()
|
||||
SET(CPACK_COMPONENTS_ALL CppLibs Documentation PublicAPI)
|
||||
SET(CPACK_COMPONENTS_ALL SharedLibraries Documentation Development)
|
||||
ENDIF()
|
||||
|
||||
IF(NOT SYSTEM_NAME)
|
||||
|
35
cmake/symlink.cmake
Normal file
35
cmake/symlink.cmake
Normal file
@ -0,0 +1,35 @@
|
||||
#
|
||||
# Copyright (C) 2013-2016 MariaDB Corporation AB
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New
|
||||
# BSD license.
|
||||
# For details see the COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
MACRO(create_symlink symlink_name target install_path)
|
||||
# According to cmake documentation symlinks work on unix systems only
|
||||
IF(UNIX)
|
||||
# Get target components
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${symlink_name}
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E remove -f ${symlink_name}
|
||||
COMMAND ${CMAKE_COMMAND} ARGS -E create_symlink $<TARGET_FILE_NAME:${target}> ${symlink_name}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
DEPENDS ${target}
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(SYM_${symlink_name}
|
||||
ALL
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${symlink_name})
|
||||
SET_TARGET_PROPERTIES(SYM_${symlink_name} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
|
||||
|
||||
IF(CMAKE_GENERATOR MATCHES "Xcode")
|
||||
# For Xcode, replace project config with install config
|
||||
STRING(REPLACE "${CMAKE_CFG_INTDIR}"
|
||||
"\${CMAKE_INSTALL_CONFIG_NAME}" output ${CMAKE_CURRENT_BINARY_DIR}/${symlink_name})
|
||||
ENDIF()
|
||||
|
||||
# presumably this will be used for libmysql*.so symlinks
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${symlink_name} DESTINATION ${install_path}
|
||||
COMPONENT Development)
|
||||
ENDIF()
|
||||
ENDMACRO()
|
@ -33,13 +33,13 @@ ENDIF()
|
||||
INSTALL(FILES
|
||||
${MARIADBCPP_PUBLIC_API}
|
||||
DESTINATION ${INSTALL_INCLUDEDIR}
|
||||
COMPONENT PublicAPI)
|
||||
COMPONENT Development)
|
||||
INSTALL(FILES
|
||||
${MARIADBCPP_PUBLIC_CLASSES}
|
||||
DESTINATION ${INSTALL_INCLUDEDIR}/conncpp
|
||||
COMPONENT PublicAPI)
|
||||
COMPONENT Development)
|
||||
INSTALL(FILES
|
||||
${MARIADBCPP_COMPAT_STUBS}
|
||||
DESTINATION ${INSTALL_INCLUDEDIR}/conncpp/compat
|
||||
COMPONENT PublicAPI)
|
||||
COMPONENT Development)
|
||||
|
||||
|
Submodule libmariadb updated: 458a4396b4...c2b322d2ca
@ -59,7 +59,7 @@ namespace mariadb
|
||||
void CallableParameterMetaData::setIndex(uint32_t index)
|
||||
{
|
||||
if (index < 1 || index > parameterCount) {
|
||||
throw SQLException("invalid parameter index " + index);
|
||||
throw SQLException("invalid parameter index " + std::to_string(index));
|
||||
}
|
||||
rs->absolute(index);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Copyright (c) 2008, 2018, Oracle and/or its affiliates. All rights reserved.
|
||||
# 2020, 2022 MariaDB Corporation AB
|
||||
# 2020, 2023 MariaDB Corporation AB
|
||||
#
|
||||
# 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
|
||||
@ -29,8 +29,8 @@
|
||||
|
||||
#default test server params configured in options_defaults.cmake
|
||||
|
||||
configure_file(tests_config.h.in
|
||||
${CMAKE_BINARY_DIR}/test/tests_config.h)
|
||||
CONFIGURE_FILE(tests_config.h.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/tests_config.h)
|
||||
|
||||
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/test")
|
||||
|
||||
@ -45,10 +45,24 @@ IF(WIN32)
|
||||
ADD_DEFINITIONS("-D_CRT_SECURE_NO_WARNINGS")
|
||||
ADD_DEFINITIONS("-DMARIADB_EXPORTED=__declspec(dllimport)")
|
||||
|
||||
ELSEIF(NOT WIN32)
|
||||
#ADD_DEFINITIONS("-DMARIADB_EXPORTED")
|
||||
|
||||
ENDIF(WIN32)
|
||||
ELSE()
|
||||
IF(USE_SYSTEM_INSTALLED_LIB)
|
||||
IF(CMAKE_VERSION VERSION_GREATER 3.22.0)
|
||||
CMAKE_HOST_SYSTEM_INFORMATION(RESULT DISTR QUERY DISTRIB_INFO)
|
||||
ELSE()
|
||||
EXECUTE_PROCESS(COMMAND cat /etc/os-release
|
||||
COMMAND grep "^ID="
|
||||
COMMAND sed -e "s/ID=//g"
|
||||
COMMAND sed -e "s/\"//g"
|
||||
COMMAND xargs echo
|
||||
OUTPUT_VARIABLE DISTR_ID)
|
||||
STRING(STRIP "${DISTR_ID}" DISTR_ID)
|
||||
ENDIF()
|
||||
IF(DISTR_ID STREQUAL "centos" OR DISTR_ID STREQUAL "rhel")
|
||||
SET(STATLIB_DEPS dl ssl crypto z)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
ENABLE_TESTING()
|
||||
|
||||
@ -56,8 +70,9 @@ IF(CMAKE_COMPILER_IS_GNUCC AND MYSQLCPPCONN_GCOV_ENABLE)
|
||||
SET(MY_GCOV_LINK_LIBRARIES gcov)
|
||||
ENDIF(CMAKE_COMPILER_IS_GNUCC AND MYSQLCPPCONN_GCOV_ENABLE)
|
||||
|
||||
# static_test is now linked against static driver library
|
||||
ADD_EXECUTABLE(static_test static_test.cpp)
|
||||
TARGET_LINK_LIBRARIES(static_test ${LIBRARY_NAME} ${PLATFORM_DEPENDENCIES} ${MY_GCOV_LINK_LIBRARIES})
|
||||
TARGET_LINK_LIBRARIES(static_test ${STATIC_LIBRARY_NAME} ${PLATFORM_DEPENDENCIES} ${STATLIB_DEPS} ${MY_GCOV_LINK_LIBRARIES})
|
||||
|
||||
ADD_TEST(static_test ${EXECUTABLE_OUTPUT_PATH}/static_test)
|
||||
SET_TESTS_PROPERTIES(static_test PROPERTIES TIMEOUT 120)
|
||||
|
@ -89,7 +89,7 @@ ADD_CUSTOM_TARGET(
|
||||
COMMAND ${WIX_DIR}candle.exe -ext WixUIExtension -ext WixUtilExtension mariadb_conncpp.xml -o mariadb_conncpp.wixobj)
|
||||
|
||||
ADD_DEPENDENCIES(${MSI_PACKAGE} CPP_WIX)
|
||||
ADD_DEPENDENCIES(CPP_WIX ${LIBRARY_NAME})
|
||||
ADD_DEPENDENCIES(CPP_WIX ${LIBRARY_NAME} ${STATIC_LIBRARY_NAME})
|
||||
IF(NOT USE_SYSTEM_INSTALLED_LIB)
|
||||
ADD_DEPENDENCIES(CPP_WIX ${LIBRARY_NAME} dialog caching_sha2_password sha256_password mysql_clear_password)
|
||||
ENDIF()
|
||||
|
@ -57,6 +57,7 @@
|
||||
<File Id="mariadb_conncpp_dll" Name="mariadbcpp.dll" KeyPath="yes" DiskId="1" Source="$(var.binaries_dir)/mariadbcpp.dll">
|
||||
</File>
|
||||
<File Id="mariadb_conncpp_lib" Name="mariadbcpp.lib" DiskId="1" Source="$(var.binaries_dir)/mariadbcpp.lib" />
|
||||
<File Id="mariadb_conncpp_static_lib" Name="mariadbcpp-static.lib" DiskId="1" Source="$(var.binaries_dir)/mariadbcpp-static.lib" />
|
||||
</Component>
|
||||
<Component Id="Debug" Guid="@GUID_DEBUG@" Directory="INSTALLFOLDER" DiskId="1" Win64="@IS_WIN64@">
|
||||
<File Id="mariadb_conncpp_dll_pdb" Name="mariadbcpp.pdb" KeyPath="yes" DiskId="1" Source="$(var.binaries_dir)/mariadbcpp.pdb" />
|
||||
|
Reference in New Issue
Block a user