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:
Lawrin Novitsky
2023-12-13 17:54:24 +01:00
parent 6d2ed83801
commit f931b8ef76
9 changed files with 105 additions and 30 deletions

View File

@ -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)

View File

@ -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
View 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()

View File

@ -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)

View File

@ -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);
}

View File

@ -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)

View File

@ -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()

View File

@ -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" />