Keep cmake generated shared dbus-1 library file name in sync with autotools.
authorRalf Habacker <ralf.habacker@freenet.de>
Mon, 27 Jan 2014 07:54:27 +0000 (08:54 +0100)
committerRalf Habacker <ralf.habacker@freenet.de>
Thu, 30 Jan 2014 16:09:41 +0000 (17:09 +0100)
Autotools uses a versioned shared library name derived from libtool.
This patch adds a versioned shared library name to cmake builds for all
supported platforms. Binary compatibility for clients build against older
cmake generated binary packages of dbus is provided; on unix like os
with symbolic links and on Windows with a copy of the shared library.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=74117
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
cmake/CMakeLists.txt
cmake/dbus/CMakeLists.txt
cmake/modules/MacrosAutotools.cmake

index b7c2529..41882d7 100644 (file)
@@ -136,7 +136,6 @@ if(VCS)
 endif(VCS)
 
 if(WIN32)
-       set(CMAKE_DEBUG_POSTFIX "d")
        if(MSVC)
                # controll folders in msvc projects
                include(ProjectSourceGroup)
index a5481b7..4a15f8c 100644 (file)
@@ -261,13 +261,29 @@ add_library(dbus-1 SHARED
                        ${libdbus_SOURCES}
                        ${libdbus_HEADERS}
 )
+if(DBUS_LIBRARY_REVISION)
+    math(EXPR DBUS_LIBRARY_MAJOR "${DBUS_LIBRARY_CURRENT} - ${DBUS_LIBRARY_AGE}")
+endif()
+
 if(WIN32)
+    if(DBUS_LIBRARY_REVISION)
+        get_target_property(LEGACY_FILE_NAME dbus-1 LOCATION)
+        set_target_properties(dbus-1 PROPERTIES SUFFIX "-${DBUS_LIBRARY_MAJOR}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+        add_custom_command(TARGET dbus-1 POST_BUILD
+            COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:dbus-1>" "${LEGACY_FILE_NAME}"
+            COMMENT "Create non versioned dbus-1 library for legacy applications"
+        )
+        install(FILES ${LEGACY_FILE_NAME} DESTINATION bin)
+    endif()
     if(WINCE)
         target_link_libraries(dbus-1 ws2)
     else(WINCE)
         target_link_libraries(dbus-1 ws2_32 advapi32 netapi32 iphlpapi)
     endif(WINCE)
 else(WIN32)
+    if(DBUS_LIBRARY_REVISION)
+        set_target_properties(dbus-1 PROPERTIES VERSION ${DBUS_LIBRARY_MAJOR}.${DBUS_LIBRARY_AGE}.${DBUS_LIBRARY_REVISION} SOVERSION ${DBUS_LIBRARY_MAJOR})
+    endif()
     target_link_libraries(dbus-1 ${CMAKE_THREAD_LIBS_INIT} rt)
 endif(WIN32)
 
index 68e8ae5..2b1c59d 100644 (file)
@@ -10,6 +10,9 @@
 #   ${prefix}_MAJOR_VERSION
 #   ${prefix}_MINOR_VERSION
 #   ${prefix}_MICRO_VERSION
+#   ${prefix}_LIBRARY_AGE
+#   ${prefix}_LIBRARY_REVISION
+#   ${prefix}_LIBRARY_CURRENT
 # 
 macro(autoversion config prefix)
        file (READ ${config} _configure_ac)
@@ -19,7 +22,9 @@ macro(autoversion config prefix)
        string (REGEX REPLACE ".*${prefix}_micro_version], .([0-9]+).*" "\\1" ${prefix_upper}_MICRO_VERSION ${_configure_ac})
        set (${prefix_upper}_VERSION ${${prefix_upper}_MAJOR_VERSION}.${${prefix_upper}_MINOR_VERSION}.${${prefix_upper}_MICRO_VERSION})
        set (${prefix_upper}_VERSION_STRING "${${prefix_upper}_VERSION}")
-
+       string (REGEX REPLACE ".*LT_AGE=([0-9]+).*" "\\1" ${prefix_upper}_LIBRARY_AGE ${_configure_ac})
+       string (REGEX REPLACE ".*LT_CURRENT=([0-9]+).*" "\\1" ${prefix_upper}_LIBRARY_CURRENT ${_configure_ac})
+       string (REGEX REPLACE ".*LT_REVISION=([0-9]+).*" "\\1" ${prefix_upper}_LIBRARY_REVISION ${_configure_ac})
 endmacro()
 
 #