Fixes #526 Use the ldconfig version-naming scheme for all shared library files under Linux (modules included)

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@4340 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 36cb688e1cad589f272d9275c95000bc7db1df22
Former-commit-id: a98f30734937c971a72b3b9e31f41873aae91e0a
This commit is contained in:
pouillot 2012-01-02 22:41:22 +00:00
parent b132517b0b
commit 619f843837
22 changed files with 94 additions and 23 deletions

View file

@ -195,14 +195,25 @@ ENDMACRO(GENERATE_ROBOT_DEF_FILE ROBOTNAME DEF_FILE)
# Robot project definition (module build and install, without associated data)
# Args:
# NAME : Name of the robot
# NAME : Name of the robot
# INTERFACE : Robot Windows DLL Interface description (tells about exported symbols)
# See GENERATE_ROBOT_DEF_FILE macro.
# If not specified, defaults to "LEGACY_MIN" ; not used if MODULE used
# SOURCES : List of files to use as build sources if any ; not needed if MODULE used
# CLONENAMES : The names of the clones to generate
# SOURCES : List of files to use as build sources if any ; not needed if MODULE used
# CLONENAMES : The names of the clones to generate
# VERSION : The VERSION of the libraries to produce (robot and its clones) (def: $VERSION).
# SOVERSION : The SOVERSION of the libraries to produce (in the ldconfig meaning) (def: 0.0.0).
#
# Example:
# ROBOT_MODULE(NAME simplix VERSION 3.0.5 SOVERSION 0.0.0
# INTERFACE LEGACY WELCOME simplix_trb1 simplix_ls1 simplix_36GP
# SOURCES simplix.cpp ...
# CLONENAMES simplix_trb1 simplix_ls1 simplix_36GP)
MACRO(ROBOT_MODULE)
SET(RBM_SYNTAX "NAME,1,1,RBM_HAS_NAME,RBM_NAME")
SET(RBM_SYNTAX ${RBM_SYNTAX} "VERSION,0,1,RBM_HAS_VERSION,RBM_VERSION")
SET(RBM_SYNTAX ${RBM_SYNTAX} "SOVERSION,0,1,RBM_HAS_SOVERSION,RBM_SOVERSION")
SET(RBM_SYNTAX ${RBM_SYNTAX} "INTERFACE,0,-1,RBM_HAS_INTERFACE,RBM_INTERFACE")
SET(RBM_SYNTAX ${RBM_SYNTAX} "SOURCES,0,-1,RBM_HAS_SOURCES,RBM_SOURCES")
SET(RBM_SYNTAX ${RBM_SYNTAX} "CLONENAMES,0,-1,RBM_HAS_CLONENAMES,RBM_CLONENAMES")
@ -215,6 +226,16 @@ MACRO(ROBOT_MODULE)
IF(NOT RBM_HAS_SOURCES OR NOT RBM_SOURCES)
MESSAGE(FATAL_ERROR "Cannot build a robot module without sources / module to copy")
ENDIF()
IF(NOT RBM_HAS_VERSION OR NOT RBM_VERSION)
SET(RBM_VERSION ${VERSION})
MESSAGE(STATUS "No version specified for robot module ${RBM_NAME} ; using ${RBM_VERSION}")
ENDIF()
IF(NOT RBM_HAS_SOVERSION OR NOT RBM_SOVERSION)
IF(UNIX)
SET(RBM_SOVERSION 0.0.0)
MESSAGE(STATUS "No so-version specified for robot module ${RBM_NAME} ; using ${RBM_SOVERSION}")
ENDIF()
ENDIF()
PROJECT("robot_${RBM_NAME}")
@ -233,34 +254,51 @@ MACRO(ROBOT_MODULE)
ENDIF(WIN32)
# Disable developer warning
if (COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
endIF(COMMAND cmake_policy)
IF (COMMAND cmake_policy)
CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND cmake_policy)
# Ignore some run-time libs to avoid MSVC link-time warnings and sometimes even crashes.
IF(MSVC)
# Ignore some run-time libs to avoid link time warnings and sometimes even crashes.
SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /NODEFAULTLIB:msvcrt.lib")
ENDIF(MSVC)
# The robot module is actually a shared library.
ADD_LIBRARY(${RBM_NAME} SHARED ${RBM_SOURCES})
IF(UNIX)
# Customize shared library versions and file prefix.
SET_TARGET_PROPERTIES(${RBM_NAME} PROPERTIES VERSION ${RBM_VERSION})
IF(UNIX) # Use ldconfig version naming scheme + no "lib" prefix under Linux
SET_TARGET_PROPERTIES(${RBM_NAME} PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(${RBM_NAME} PROPERTIES SOVERSION ${RBM_SOVERSION})
ENDIF(UNIX)
# Link/Run-time dependencies
ADD_PLIB_LIBRARY(${RBM_NAME} sg)
ADD_SDLIB_LIBRARY(${RBM_NAME} robottools)
# Install target robot module shared library
SD_INSTALL_FILES(LIB drivers/${RBM_NAME} TARGETS ${RBM_NAME})
# Install clone robot modules shared libraries (use ldconfig version naming scheme under Linux)
IF(RBM_HAS_CLONENAMES AND RBM_CLONENAMES)
GET_TARGET_PROPERTY(MODNAME ${RBM_NAME} LOCATION)
SET(MODPREFIX "")
SET(MODSUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
GET_TARGET_PROPERTY(MODLOC ${RBM_NAME} LOCATION)
FOREACH(CLONENAME ${RBM_CLONENAMES})
SET(CLONE_MODNAME ${MODPREFIX}${CLONENAME}${MODSUFFIX})
ADD_CUSTOM_COMMAND(TARGET ${RBM_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${MODNAME} ${CLONE_MODNAME})
SD_INSTALL_FILES(LIB drivers/${CLONENAME} FILES ${CLONE_MODNAME} PREFIX ${CMAKE_CURRENT_BINARY_DIR})
SET(CLONE_MODLOC ${CLONENAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
IF(UNIX)
ADD_CUSTOM_COMMAND(TARGET ${RBM_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${MODLOC} ${CLONE_MODLOC}.${RBM_VERSION})
ADD_CUSTOM_COMMAND(TARGET ${RBM_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CLONE_MODLOC}.${RBM_VERSION} ${CLONE_MODLOC}.${RBM_SOVERSION}
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CLONE_MODLOC}.${RBM_SOVERSION} ${CLONE_MODLOC})
SD_INSTALL_FILES(LIB drivers/${CLONENAME} PREFIX ${CMAKE_CURRENT_BINARY_DIR}
FILES ${CLONE_MODLOC} ${CLONE_MODLOC}.${RBM_SOVERSION} ${CLONE_MODLOC}.${RBM_VERSION} )
ELSE()
ADD_CUSTOM_COMMAND(TARGET ${RBM_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${MODLOC} ${CLONE_MODLOC})
SD_INSTALL_FILES(LIB drivers/${CLONENAME} PREFIX ${CMAKE_CURRENT_BINARY_DIR}
FILES ${CLONE_MODLOC})
ENDIF()
ENDFOREACH(CLONENAME ${RBM_CLONENAMES})
ENDIF()

View file

@ -6,7 +6,7 @@ SET(ROBOT_SOURCES ${ROBOT_NAME}.cpp pref.cpp human.h pref.h)
ADD_SDLIB_INCLUDEDIR(tgfclient)
ROBOT_MODULE(NAME ${ROBOT_NAME}
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION ${VERSION} SOVERSION 1.0.0
INTERFACE WELCOME
SOURCES ${ROBOT_SOURCES})

View file

@ -17,7 +17,7 @@ SET(ROBOT_SUBDIRS
ls1-vulture-v6r
mpa1-hartbill-2002)
ROBOT_MODULE(NAME ${ROBOT_NAME}
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 2.0.0 SOVERSION 1.0.0
SOURCES ${ROBOT_SOURCES})
ROBOT_DATA(NAME ${ROBOT_NAME}

View file

@ -6,7 +6,7 @@ SET(ROBOT_SOURCES ${ROBOT_NAME}.cpp pref.cpp networkhuman.h pref.h)
ADD_SDLIB_INCLUDEDIR(tgfclient networking)
ROBOT_MODULE(NAME ${ROBOT_NAME}
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION ${VERSION} SOVERSION 0.0.0
INTERFACE WELCOME
SOURCES ${ROBOT_SOURCES})

View file

@ -93,10 +93,10 @@ IF(NOT OPTION_OFFICIAL_ONLY)
ENDIF()
# The ubiquitous robot module and its clones.
ROBOT_MODULE(NAME ${ROBOT_NAME}
INTERFACE ${ROBOT_INTERFACE}
SOURCES ${ROBOT_SOURCES}
CLONENAMES ${ROBOT_CLONES})
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 3.3.0 SOVERSION 1.0.0
INTERFACE ${ROBOT_INTERFACE}
SOURCES ${ROBOT_SOURCES}
CLONENAMES ${ROBOT_CLONES})
# The data associated to the ubiquitous robot module and its clones.
# simplix

View file

@ -38,7 +38,7 @@ SET(ROBOT_SOURCES
# Official-only USR instances.
SET(ROBOT_CLONES usr_trb1 usr_sc usr_ls1 usr_ls2 usr_36GP usr_rs)
ROBOT_MODULE(NAME ${ROBOT_NAME}
ROBOT_MODULE(NAME ${ROBOT_NAME} VERSION 3.0.0 SOVERSION 1.0.0
INTERFACE ${ROBOT_INTERFACE}
SOURCES ${ROBOT_SOURCES}
CLONENAMES ${ROBOT_CLONES})

View file

@ -22,6 +22,8 @@ ENDIF(WIN32)
ADD_LIBRARY(learning SHARED ${LEARNING_SOURCES})
SET_TARGET_PROPERTIES(learning PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(WIN32)
SD_INSTALL_FILES(BIN TARGETS learning)
ELSE(WIN32)

View file

@ -37,6 +37,8 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_LIBRARY(raceengine SHARED ${RACEENGINE_SOURCES})
SET_TARGET_PROPERTIES(raceengine PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_SDLIB_LIBRARY(raceengine
tgf tgfdata robottools
networking)

View file

@ -25,6 +25,8 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_LIBRARY(robottools SHARED ${ROBOTTOOLS_SOURCES})
SET_TARGET_PROPERTIES(robottools PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_PLIB_LIBRARY(robottools sg ul)
ADD_SDLIB_LIBRARY(robottools tgf)

View file

@ -31,6 +31,8 @@ ENDIF(WIN32)
ADD_LIBRARY(tgf SHARED ${TGF_HEADERS} ${TGF_SOURCES})
SET_TARGET_PROPERTIES(tgf PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)
ADD_LIBRARY(tgf_static STATIC ${TGF_HEADERS} ${TGF_SOURCES})
ENDIF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)

View file

@ -35,6 +35,8 @@ ENDIF(WIN32)
ADD_LIBRARY(tgfclient SHARED ${TGFCLIENT_SOURCES})
SET_TARGET_PROPERTIES(tgfclient PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_PLIB_LIBRARY(tgfclient ul sg sl)
ADD_SDLIB_LIBRARY(tgfclient tgf networking)

View file

@ -26,6 +26,8 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_LIBRARY(tgfdata SHARED ${TGFDATA_SOURCES})
SET_TARGET_PROPERTIES(tgfdata PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)
ADD_LIBRARY(tgfdata_static STATIC ${TGFDATA_SOURCES})
ENDIF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)

View file

@ -40,6 +40,8 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_LIBRARY(txml SHARED ${TXML_SOURCES})
SET_TARGET_PROPERTIES(txml PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)
ADD_LIBRARY(txml_static STATIC ${TXML_SOURCES})
ENDIF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)

View file

@ -40,6 +40,8 @@ ENDIF(WIN32)
ADD_LIBRARY(ssggraph SHARED ${SSGGRAPH_SOURCES})
SET_TARGET_PROPERTIES(ssggraph PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(UNIX)
SET_TARGET_PROPERTIES(ssggraph PROPERTIES PREFIX "")
ENDIF(UNIX)

View file

@ -11,6 +11,8 @@ endif(COMMAND cmake_policy)
ADD_LIBRARY(networking SHARED ${SD_NETWORK_SOURCES})
SET_TARGET_PROPERTIES(networking PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_INTERFACE_INCLUDEDIR()
ADD_SDL_INCLUDEDIR()
ADD_SDLIB_INCLUDEDIR(networking portability tgf math)

View file

@ -45,6 +45,8 @@ INCLUDE_DIRECTORIES(SOLID-2.0/include)
ADD_LIBRARY(simuv2.1 SHARED ${SIMU_SOURCES})
SET_TARGET_PROPERTIES(simuv2.1 PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_SDLIB_LIBRARY(simuv2.1 tgf robottools solid)
IF(UNIX)

View file

@ -24,6 +24,8 @@ ENDIF(WIN32)
ADD_LIBRARY(simuv2 SHARED ${_SOURCES})
SET_TARGET_PROPERTIES(simuv2 PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_SDLIB_LIBRARY(simuv2 tgf robottools solid)
IF(UNIX)

View file

@ -24,6 +24,8 @@ ENDIF(WIN32)
ADD_LIBRARY(simuv3 SHARED ${_SOURCES})
SET_TARGET_PROPERTIES(simuv3 PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_SDLIB_LIBRARY(simuv3 tgf robottools solid)
IF(UNIX)

View file

@ -6,6 +6,9 @@ ADD_INTERFACE_INCLUDEDIR()
ADD_SDLIB_INCLUDEDIR(tgf portability)
ADD_LIBRARY(telemetry SHARED ${TELEMETRY_SOURCES})
SET_TARGET_PROPERTIES(telemetry PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(UNIX)
SET_TARGET_PROPERTIES(telemetry PROPERTIES PREFIX "")
ENDIF(UNIX)

View file

@ -17,6 +17,8 @@ ENDIF(WIN32)
ADD_LIBRARY(track SHARED ${TRACK_SOURCES})
SET_TARGET_PROPERTIES(track PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(UNIX)
SET_TARGET_PROPERTIES(track PROPERTIES PREFIX "")
ENDIF(UNIX)

View file

@ -65,6 +65,8 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_LIBRARY(legacymenu SHARED ${LEGACYMENU_SOURCES})
SET_TARGET_PROPERTIES(legacymenu PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(UNIX)
SET_TARGET_PROPERTIES(legacymenu PROPERTIES PREFIX "")
ENDIF(UNIX)

View file

@ -24,6 +24,8 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_LIBRARY(textonly SHARED ${_SOURCES})
SET_TARGET_PROPERTIES(textonly PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(UNIX)
SET_TARGET_PROPERTIES(textonly PROPERTIES PREFIX "")
ENDIF(UNIX)