libgd: Backport SOVERSION and pkgconfig changes
[feed/packages.git] / libs / libgd / patches / 200-cmake-add-soname-info-to-libgd.so.patch
diff --git a/libs/libgd/patches/200-cmake-add-soname-info-to-libgd.so.patch b/libs/libgd/patches/200-cmake-add-soname-info-to-libgd.so.patch
new file mode 100644 (file)
index 0000000..f4af744
--- /dev/null
@@ -0,0 +1,135 @@
+From 5ebbd50cffc013a7dd0f3b1eaaa83d199e8e47fd Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Sun, 24 Jul 2016 00:14:20 +0530
+Subject: [PATCH] cmake: add soname info to libgd.so
+
+Pull out the library versioning info out of configure and into a common
+script that both cmake & autotools can run.  This way we have a single
+source of truth for the versioning info.
+---
+ CMakeLists.txt     | 11 +++++++++++
+ config/getlib.sh   | 42 ++++++++++++++++++++++++++++++++++++++++++
+ configure.ac       | 25 +++++++++++--------------
+ src/CMakeLists.txt |  2 ++
+ 4 files changed, 66 insertions(+), 14 deletions(-)
+ create mode 100755 config/getlib.sh
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 7c8ad34b..9fe2eb4e 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -78,6 +78,17 @@ else (USE_EXT_GD)
+       SET(GD_VERSION_INT "2020555")
++      MACRO(GV_LT VER VAR)
++              execute_process(
++                      COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/config/getlib.sh ${VER}
++                      OUTPUT_VARIABLE ${VAR}
++              )
++      ENDMACRO(GV_LT)
++
++      GV_LT(SONAME GDLIB_LIB_SOVERSION)
++      GV_LT(VERSION GDLIB_LIB_VERSION)
++      MESSAGE(STATUS "gd shared lib version ${GDLIB_LIB_SOVERSION} (${GDLIB_LIB_VERSION})")
++
+       SET(CMAKE_REQUIRED_INCLUDES "/usr/include" "/usr/local/include")
+       include(CheckIncludeFiles)
+diff --git a/config/getlib.sh b/config/getlib.sh
+new file mode 100755
+index 00000000..4835cf6c
+--- /dev/null
++++ b/config/getlib.sh
+@@ -0,0 +1,42 @@
++#!/bin/sh
++
++GETVER="${0%/*}/getver.pl"
++GDLIB_MAJOR=$("${GETVER}" MAJOR)
++GDLIB_MINOR=$("${GETVER}" MINOR)
++GDLIB_REVISION=$("${GETVER}" RELEASE)
++
++# Dynamic library version information
++# See http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
++
++GDLIB_LT_CURRENT=3
++# This is the version where the soname (current above) changes.  We use it
++# to reset the revision base back to zero.  It's a bit of a pain, but some
++# systems restrict the revision range below to [0..255] (like OS X).
++GDLIB_PREV_MAJOR=2
++GDLIB_PREV_MINOR=2
++# This isn't 100% correct, but it tends to be a close enough approximation
++# for how we manage the codebase.  It's rare to do a release that doesn't
++# modify the library since this project is centered around the library.
++GDLIB_LT_REVISION=$(( ((GDLIB_MAJOR - GDLIB_PREV_MAJOR) << 6) | ((GDLIB_MINOR - GDLIB_PREV_MINOR) << 3) | GDLIB_REVISION ))
++GDLIB_LT_AGE=0
++
++# The first three fields we feed into libtool and the OS target determines how
++# they get used.  The last two fields we feed into cmake.  We use the same rules
++# as Linux SONAME versioning in libtool, but cmake should handle it for us.
++case $1 in
++CURRENT)
++      printf '%s' "${GDLIB_LT_CURRENT}"
++      ;;
++REVISION)
++      printf '%s' "${GDLIB_LT_REVISION}"
++      ;;
++AGE)
++      printf '%s' "${GDLIB_LT_AGE}"
++      ;;
++VERSION)
++      printf '%s' "$(( GDLIB_LT_CURRENT - GDLIB_LT_AGE )).${GDLIB_LT_AGE}.${GDLIB_LT_REVISION}"
++      ;;
++SONAME)
++      printf '%s' "$(( GDLIB_LT_CURRENT - GDLIB_LT_AGE ))"
++      ;;
++esac
+diff --git a/configure.ac b/configure.ac
+index 91643bd6..c3fb034e 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -34,20 +34,17 @@ AC_SUBST(GDLIB_REVISION)
+ AC_SUBST(GDLIB_EXTRA)
+ AC_SUBST(GDLIB_VERSION)
+-# Dynamic library version information
+-# See http://www.gnu.org/software/libtool/manual/libtool.html#Updating-version-info
+-
+-GDLIB_LT_CURRENT=3
+-dnl This is the version where the soname (current above) changes.  We use it
+-dnl to reset the revision base back to zero.  It's a bit of a pain, but some
+-dnl systems restrict the revision range below to [0..255] (like OS X).
+-GDLIB_PREV_MAJOR=2
+-GDLIB_PREV_MINOR=2
+-dnl This isn't 100% correct, but it tends to be a close enough approximation
+-dnl for how we manage the codebase.  It's rare to do a release that doesn't
+-dnl modify the library since this project is centered around the library.
+-GDLIB_LT_REVISION=$(( ((GDLIB_MAJOR - GDLIB_PREV_MAJOR) << 6) | ((GDLIB_MINOR - GDLIB_PREV_MINOR) << 3) | GDLIB_REVISION ))
+-GDLIB_LT_AGE=0
++dnl Keep the libtool version details in an external script so cmake can
++dnl access the values too.
++define([lt_gv], [config/getlib.sh ]$1)
++m4_define([gd_LT_CURRENT], esyscmd(lt_gv(CURRENT)))
++m4_define([gd_LT_REVISION], esyscmd(lt_gv(REVISION)))
++m4_define([gd_LT_AGE], esyscmd(lt_gv(AGE)))
++
++GDLIB_LT_CURRENT=gd_LT_CURRENT
++GDLIB_LT_REVISION=gd_LT_REVISION
++GDLIB_LT_AGE=gd_LT_AGE
++
+ AC_SUBST(GDLIB_LT_CURRENT)
+ AC_SUBST(GDLIB_LT_REVISION)
+ AC_SUBST(GDLIB_LT_AGE)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 08fd6991..a621fe1e 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -76,6 +76,8 @@ include(GNUInstallDirs)
+ if (BUILD_SHARED_LIBS)
+       add_library(${GD_LIB} ${LIBGD_SRC_FILES})
+       set_target_properties(${GD_LIB} PROPERTIES
++              SOVERSION ${GDLIB_LIB_SOVERSION}
++              VERSION ${GDLIB_LIB_VERSION}
+               C_VISIBILITY_PRESET hidden
+               CXX_VISIBILITY_PRESET hidden
+       )