From kde-commits Wed Aug 31 23:50:43 2016 From: Jaroslaw Staniek Date: Wed, 31 Aug 2016 23:50:43 +0000 To: kde-commits Subject: [kdb] /: Make KDb co-installable with other incompatible versions Message-Id: X-MARC-Message: https://marc.info/?l=kde-commits&m=147268745420115 Git commit 6c423feac9ca1245c5a8746555105c1f551fc623 by Jaroslaw Staniek. Committed on 31/08/2016 at 23:38. Pushed by staniek into branch 'master'. Make KDb co-installable with other incompatible versions M +1 -1 KDb.pc.cmake M +27 -3 cmake/modules/KDbMacros.cmake M +18 -22 src/CMakeLists.txt M +1 -1 src/KDb.cpp M +9 -0 src/config-kdb.h.cmake M +1 -1 src/drivers/CMakeLists.txt http://commits.kde.org/kdb/6c423feac9ca1245c5a8746555105c1f551fc623 diff --git a/KDb.pc.cmake b/KDb.pc.cmake index b49cd28..b73cd5e 100644 --- a/KDb.pc.cmake +++ b/KDb.pc.cmake @@ -3,7 +3,7 @@ exec_prefix=3D${prefix} libdir=3D${exec_prefix}/lib includedir=3D${prefix}/include = -Name: KDb +Name: @PROJECT_NAME@@PROJECT_STABLE_VERSION_MAJOR@ Description: A database connectivity and creation library Version: @PROJECT_VERSION@ URL: http://community.kde.org/KDb diff --git a/cmake/modules/KDbMacros.cmake b/cmake/modules/KDbMacros.cmake index 0ca41ea..03c4009 100644 --- a/cmake/modules/KDbMacros.cmake +++ b/cmake/modules/KDbMacros.cmake @@ -1,6 +1,6 @@ # Additional CMake macros # -# Copyright (C) 2015 Jaros=C5=82aw Staniek +# Copyright (C) 2015-2016 Jaros=C5=82aw Staniek # # Redistribution and use is allowed according to the terms of the BSD lice= nse. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. @@ -8,6 +8,14 @@ include(FeatureSummary) include(GetGitRevisionDescription) = +# x.80.y or larger means test release, so the stable major version is x+1 +if(PROJECT_VERSION_MINOR GREATER 80) + set(PROJECT_UNSTABLE ON) + math(EXPR PROJECT_STABLE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR} + 1") +else() + set(PROJECT_STABLE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +endif() + # Adds a feature info using add_feature_info() with _NAME and _DESCRIPTION. # If _NAME is equal to _DEFAULT, shows this fact. macro(add_simple_feature_info _NAME _DESCRIPTION _DEFAULT) @@ -95,7 +103,23 @@ endmacro() # ${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.pc.cmake should exist. macro(add_pc_file) if (NOT WIN32) - configure_file(${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.pc.cmake ${CMAKE_BI= NARY_DIR}/${PROJECT_NAME}.pc @ONLY) - install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pc DESTINATION ${LIB= _INSTALL_DIR}/pkgconfig) + set(_name ${PROJECT_NAME}${PROJECT_STABLE_VERSION_MAJOR}) + configure_file(${CMAKE_SOURCE_DIR}/${PROJECT_NAME}.pc.cmake ${CMAKE_BI= NARY_DIR}/${_name}.pc @ONLY) + install(FILES ${CMAKE_BINARY_DIR}/${_name}.pc DESTINATION ${LIB_INSTAL= L_DIR}/pkgconfig) endif() endmacro() + +# Sets detailed version information for library co-installability. +# - adds PROJECT_VERSION_MAJOR to the lib name +# - sets VERSION and SOVERSION to PROJECT_VERSION_MAJOR.PROJECT_VERSION_MI= NOR +# Sets _var variable to final lib name +macro(set_coinstallable_lib_version _target _var) + set(_name ${_target}${PROJECT_STABLE_VERSION_MAJOR}) + set_target_properties(${_target} + PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINO= R} + SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MI= NOR} + EXPORT_NAME ${_target} + OUTPUT_NAME ${_name} + ) + set(${_var} ${_name}) +endmacro() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4380748..5e64315 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,9 +9,6 @@ simple_option(KDB_DEBUG_GUI "GUI for debugging" OFF) = include(CheckIncludeFile) check_include_file(unistd.h HAVE_UNISTD_H) -configure_file(config-kdb.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kdb.h) - -add_subdirectory(drivers) = #add_definitions( # TODO -DKDE_DEFAULT_DEBUG_AREA=3D44000 @@ -162,6 +159,9 @@ set(kdb_LIB_SRCS ecm_create_qm_loader(kdb_LIB_SRCS kdb_qt) = add_library(KDb SHARED ${kdb_LIB_SRCS}) +set_coinstallable_lib_version(KDb KDB_BASE_NAME) +string(TOLOWER ${KDB_BASE_NAME} KDB_BASE_NAME_LOWER) +set(KDB_INCLUDE_INSTALL_DIR ${INCLUDE_INSTALL_DIR}/${KDB_BASE_NAME}) = kdb_create_shared_data_classes( kdb_GENERATED_SHARED_DATA_CLASS_HEADERS # output variable with list of= headers @@ -196,7 +196,7 @@ set(kdb_INCLUDE_DIRS = target_include_directories(KDb PUBLIC "$" - INTERFACE "$" + INTERFACE "$" PRIVATE ${ICU_INCLUDE_DIRS} ) = @@ -218,17 +218,12 @@ if(BUILD_TEST_COVERAGE) ) endif() = -set_target_properties(KDb - PROPERTIES VERSION 1.0 - SOVERSION 1.0.0 - EXPORT_NAME KDb -) - # Create a Config.cmake and a ConfigVersion.cmake file and install them -set(CMAKECONFIG_INSTALL_DIR "${CMAKECONFIG_INSTALL_PREFIX}/KDb") +set(CMAKECONFIG_INSTALL_DIR "${CMAKECONFIG_INSTALL_PREFIX}/${KDB_BASE_NAME= }") = ecm_setup_version(${PROJECT_VERSION} VARIABLE_PREFIX KDB + SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kdb_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KDbConfigVersion.cma= ke" ) @@ -237,9 +232,6 @@ install(TARGETS KDb EXPORT KDbTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) = -# Create a Config.cmake and a ConfigVersion.cmake file and install them -set(CMAKECONFIG_INSTALL_DIR "${CMAKECONFIG_INSTALL_PREFIX}/KDb") - ecm_configure_package_config_file( "${CMAKE_CURRENT_SOURCE_DIR}/KDbConfig.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/KDbConfig.cmake" @@ -257,18 +249,18 @@ install(EXPORT KDbTargets FILE KDbTargets.cmake) = ecm_generate_pri_file( - BASE_NAME KDb - LIB_NAME KDb + BASE_NAME ${KDB_BASE_NAME} + LIB_NAME ${KDB_BASE_NAME} DEPS "widgets xml" FILENAME_VAR PRI_FILENAME - INCLUDE_INSTALL_DIR ${INCLUDE_INSTALL_DIR}/KDb + INCLUDE_INSTALL_DIR ${KDB_INCLUDE_INSTALL_DIR} ) = install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR}) = install(FILES "${CMAKE_CURRENT_BINARY_DIR}/kdb_version.h" - DESTINATION "${INCLUDE_INSTALL_DIR}" + DESTINATION "${KDB_INCLUDE_INSTALL_DIR}" COMPONENT Devel) = ecm_generate_headers(kdb_FORWARDING_HEADERS @@ -391,7 +383,7 @@ install( FILES ${kdb_HEADERS} ${kdb_HEADERS_FROM_BUILDDIR} - DESTINATION ${INCLUDE_INSTALL_DIR}/KDb + DESTINATION ${KDB_INCLUDE_INSTALL_DIR} COMPONENT Devel ) = @@ -401,7 +393,7 @@ install( ${kdb_FORWARDING_HEADERS_FROM_BUILDDIR} ${PROJECT_BINARY_DIR}/src/kdb_export.h ${PROJECT_BINARY_DIR}/src/config-kdb.h - DESTINATION ${INCLUDE_INSTALL_DIR}/KDb + DESTINATION ${KDB_INCLUDE_INSTALL_DIR} COMPONENT Devel ) = @@ -409,13 +401,17 @@ install( # install( FILES # Connection_p.h # Driver_p.h -# DESTINATION ${INCLUDE_INSTALL_DIR}/KDb/Private COMPONENT Devel +# DESTINATION ${KDB_INCLUDE_INSTALL_DIR}/Private COMPONENT Devel # ) = # KDb/Interfaces includes # install( FILES # Interfaces/KDbPreparedStatementInterface.h includes/KDb/Interfaces/KDb= PreparedStatementInterface -# DESTINATION ${INCLUDE_INSTALL_DIR}/KDb/Interfaces COMPONENT Devel +# DESTINATION ${KDB_INCLUDE_INSTALL_DIR}/Interfaces COMPONENT Devel # ) = +add_subdirectory(drivers) + enable_testing() + +configure_file(config-kdb.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kdb.h) diff --git a/src/KDb.cpp b/src/KDb.cpp index 8b0c3c8..4345a88 100644 --- a/src/KDb.cpp +++ b/src/KDb.cpp @@ -2008,7 +2008,7 @@ QStringList KDb::libraryPaths() { QStringList result; foreach (const QString& path, qApp->libraryPaths()) { - const QString dir(path + QLatin1String("/kdb")); + const QString dir(path + QLatin1Char('/') + QLatin1String(KDB_BASE= _NAME_LOWER)); if (QDir(dir).exists() && QDir(dir).isReadable()) { result +=3D dir; } diff --git a/src/config-kdb.h.cmake b/src/config-kdb.h.cmake index 4798d48..4edc04a 100644 --- a/src/config-kdb.h.cmake +++ b/src/config-kdb.h.cmake @@ -19,6 +19,15 @@ //! @brief The subdirectory relative to the install prefix for executables. #define BIN_INSTALL_DIR "${BIN_INSTALL_DIR}" = +//! @def KDB_BASE_NAME +//! @brief Base name for the framework, based on major stable version. +//! Useful for co-installability. +#define KDB_BASE_NAME "@KDB_BASE_NAME@" + +//! @def KDB_BASE_NAME_LOWER +//! @brief Like KDB_BASE_NAME but lowercase. +#define KDB_BASE_NAME_LOWER "@KDB_BASE_NAME_LOWER@" + //! @def KDB_TESTING_EXPORT //! @brief Export symbols for testing #ifdef BUILD_TESTING diff --git a/src/drivers/CMakeLists.txt b/src/drivers/CMakeLists.txt index cba84b2..9ee4790 100644 --- a/src/drivers/CMakeLists.txt +++ b/src/drivers/CMakeLists.txt @@ -5,7 +5,7 @@ endif() = #TODO add_definitions(-DKDE_DEFAULT_DEBUG_AREA=3D44001) = -set(KDB_PLUGIN_INSTALL_DIR ${PLUGIN_INSTALL_DIR}/kdb) +set(KDB_PLUGIN_INSTALL_DIR ${PLUGIN_INSTALL_DIR}/${KDB_BASE_NAME_LOWER}) = # ----------------------- macro(build_and_install_kdb_driver _name _srcs _extra_libs)