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
parent
7c6c8801d9
commit
5ebbd50cff
|
@ -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)
|
||||
|
|
|
@ -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
|
23
configure.ac
23
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
|
||||
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)
|
||||
|
|
|
@ -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
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue