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.
master
Mike Frysinger 2016-07-24 00:14:20 +05:30 committed by Mike Frysinger
parent 7c6c8801d9
commit 5ebbd50cff
4 changed files with 65 additions and 13 deletions

View File

@ -83,6 +83,17 @@ else (USE_EXT_GD)
SET(GDLIB_VERSION "${GDLIB_MAJOR}.${GDLIB_MINOR}.${GDLIB_REVISION}${GDLIB_EXTRA}")
MESSAGE(STATUS "gd version ${GDLIB_VERSION}")
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)

42
config/getlib.sh Executable file
View File

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

View File

@ -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
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
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
AC_SUBST(GDLIB_LT_CURRENT)
AC_SUBST(GDLIB_LT_REVISION)
AC_SUBST(GDLIB_LT_AGE)

View File

@ -80,6 +80,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
)