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