summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2017-03-26 12:06:48 +0200
committerSlávek Banko <slavek.banko@axis.cz>2017-03-26 12:06:59 +0200
commit2e6daa80e2d7bda8382b7d330549e1b3447ac536 (patch)
tree505f31455097d30929fa34e2640a84208269abdb
parentf5ec55650b8e38243ebacfa4fbfcca6e492c7a56 (diff)
downloadcmake-2e6daa80e2d7bda8382b7d330549e1b3447ac536.tar.gz
cmake-2e6daa80e2d7bda8382b7d330549e1b3447ac536.zip
Add support for libraries with release number in the name of the libraryr14.0.5
See https://www.gnu.org/software/libtool/manual/html_node/Release-numbers.html Signed-off-by: Slávek Banko <slavek.banko@axis.cz> (cherry picked from commit edad8a20b944d45f366acc15b2cd4d291ce3a5dd)
-rw-r--r--modules/TDEMacros.cmake60
1 files changed, 48 insertions, 12 deletions
diff --git a/modules/TDEMacros.cmake b/modules/TDEMacros.cmake
index 97c8b04..73739be 100644
--- a/modules/TDEMacros.cmake
+++ b/modules/TDEMacros.cmake
@@ -259,8 +259,14 @@ endmacro( )
macro( tde_install_la_file _target _destination )
get_target_property( _target_location ${_target} LOCATION )
+ get_target_property( _target_release ${_target} RELEASE )
get_filename_component( _soname ${_target_location} NAME )
- string( REGEX REPLACE "\\.so(\\.[0-9]+)*$" "" _laname "${_soname}" )
+ if( _target_release )
+ string( REPLACE "-${_target_release}" "" _soname_base "${_soname}" )
+ else( )
+ set( _soname_base ${_soname} )
+ endif( )
+ string( REGEX REPLACE "\\.so(\\.[0-9]+)*$" "" _laname "${_soname_base}" )
set( _laname ${CMAKE_CURRENT_BINARY_DIR}/${_laname}.la )
file( WRITE ${_laname}
@@ -268,7 +274,7 @@ macro( tde_install_la_file _target _destination )
# The name that we can dlopen(3).
dlname='${_soname}'
# Names of this library
-library_names='${_soname} ${_soname} ${_soname}'
+library_names='${_soname} ${_soname} ${_soname_base}'
# The name of the static archive
old_library=''
# Libraries that this one depends upon.
@@ -448,16 +454,19 @@ endmacro( __tde_internal_process_sources )
macro( tde_install_libtool_file _target _destination )
get_target_property( _target_location ${_target} LOCATION )
-
- # get name of target
- get_filename_component( _name ${_target_location} NAME )
- string( REGEX REPLACE "\\.so(\\.[0-9]+)*$" "" _name "${_name}" )
-
- # get .la name
- set( _laname ${_name}.la )
+ get_target_property( _target_release ${_target} RELEASE )
# get .so name
get_filename_component( _soname ${_target_location} NAME )
+ if( _target_release )
+ string( REPLACE "-${_target_release}" "" _soname_base "${_soname}" )
+ else( )
+ set( _soname_base ${_soname} )
+ endif( )
+
+ # get .la name
+ string( REGEX REPLACE "\\.so(\\.[0-9]+)*$" "" _laname "${_soname_base}" )
+ set( _laname ${_laname}.la )
# get version of target
get_target_property( _target_version ${_target} VERSION )
@@ -467,7 +476,7 @@ macro( tde_install_libtool_file _target _destination )
if( _target_version )
set( _library_name_1 "${_soname}.${_target_version}" )
set( _library_name_2 "${_soname}.${_target_soversion}" )
- set( _library_name_3 "${_soname}" )
+ set( _library_name_3 "${_soname_base}" )
string( REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$" _dummy "${_target_version}" )
set( _version_current "${CMAKE_MATCH_1}" )
@@ -478,7 +487,7 @@ macro( tde_install_libtool_file _target _destination )
else( _target_version )
set( _library_name_1 "${_soname}" )
set( _library_name_2 "${_soname}" )
- set( _library_name_3 "${_soname}" )
+ set( _library_name_3 "${_soname_base}" )
set( _version_current "0" )
set( _version_age "0" )
set( _version_revision "0" )
@@ -545,6 +554,7 @@ macro( tde_add_library _arg_target )
unset( _no_libtool_file )
unset( _no_export )
unset( _version )
+ unset( _release )
unset( _sources )
unset( _destination )
unset( _embed )
@@ -619,6 +629,12 @@ macro( tde_add_library _arg_target )
set( _storage "_version" )
endif( "+${_arg}" STREQUAL "+VERSION" )
+ # found directive "RELEASE"
+ if( "+${_arg}" STREQUAL "+RELEASE" )
+ set( _skip_store 1 )
+ set( _storage "_release" )
+ endif( "+${_arg}" STREQUAL "+RELEASE" )
+
# found directive "SOURCES"
if( "+${_arg}" STREQUAL "+SOURCES" )
set( _skip_store 1 )
@@ -747,7 +763,13 @@ macro( tde_add_library _arg_target )
endif( ${_type} STREQUAL "MODULE" )
# set real name of target
- set_target_properties( ${_target} PROPERTIES OUTPUT_NAME ${_arg_target} )
+ if( _release )
+ # add release number to output name
+ set_target_properties( ${_target} PROPERTIES RELEASE ${_release} )
+ set_target_properties( ${_target} PROPERTIES OUTPUT_NAME "${_arg_target}-${_release}" )
+ else( _release )
+ set_target_properties( ${_target} PROPERTIES OUTPUT_NAME ${_arg_target} )
+ endif( _release )
# set -fPIC flag for static libraries
if( _static_pic )
@@ -833,6 +855,20 @@ macro( tde_add_library _arg_target )
# install target
install( TARGETS ${_target} DESTINATION ${_destination} )
+ # install base soname
+ if( _release AND NOT "STATIC" STREQUAL ${_type} )
+ get_target_property( _output ${_target} LOCATION )
+ get_filename_component( _soname ${_output} NAME )
+ string( REPLACE "-${_release}" "" _soname_base "${_soname}" )
+ if( _version )
+ get_target_property( _soversion ${_target} SOVERSION )
+ set( _soname "${_soname}.${_soversion}" )
+ endif( )
+ add_custom_command( TARGET ${_target} POST_BUILD
+ COMMAND ln -s ${_soname} "${CMAKE_CURRENT_BINARY_DIR}/${_soname_base}" )
+ install( FILES "${CMAKE_CURRENT_BINARY_DIR}/${_soname_base}" DESTINATION ${_destination} )
+ endif( )
+
# install .la files for dynamic libraries
if( NOT "STATIC" STREQUAL ${_type} AND NOT _no_libtool_file )
tde_install_libtool_file( ${_target} ${_destination} )