[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdb] /: Make KDb co-installable with other incompatible versions
From:       Jaroslaw Staniek <staniek () kde ! org>
Date:       2016-08-31 23:50:43
Message-ID: E1bfFHH-0006fT-5x () code ! kde ! org
[Download RAW message or body]

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=${prefix}
 libdir=${exec_prefix}/lib
 includedir=${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ław Staniek <staniek@kde.org>
+# Copyright (C) 2015-2016 Jarosław Staniek <staniek@kde.org>
 #
 # Redistribution and use is allowed according to the terms of the BSD license.
 # 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_BINARY_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_BINARY_DIR}/${_name}.pc @ONLY) +    install(FILES \
${CMAKE_BINARY_DIR}/${_name}.pc DESTINATION ${LIB_INSTALL_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_MINOR
+# 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_MINOR}
+                   SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
+                   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=44000
@@ -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 "$<BUILD_INTERFACE:${kdb_INCLUDE_DIRS}>"
-    INTERFACE "$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}/KDb>"
+    INTERFACE "$<INSTALL_INTERFACE:${KDB_INCLUDE_INSTALL_DIR}>"
     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.cmake"
 )
@@ -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/KDbPreparedStatementInterface
-#   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 += 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=44001)
 
-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)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic