Fixes #738 Make portability a real (shared) library in order to implement missing functions as needed (like strndup, strtok_r, ...)

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

Former-commit-id: 9f24b755d5fd592821fd966ab75bf3ab6f35c25e
Former-commit-id: a6d98e8806d508ebdae781980b33c4a95706db96
This commit is contained in:
pouillot 2012-08-30 18:35:40 +00:00
parent 9861448370
commit 860674a37e
28 changed files with 107 additions and 65 deletions

View file

@ -155,7 +155,7 @@ SET(SD_LOCALDIR ${SD_LOCALDIR_TMP})
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CURRENT_LIST_FILE_PATH})
SET(CMAKE_INSTALL_RPATH "${SD_LIBDIR_ABS}/lib")
# Robot .def file generation for Windows
# Robot .def file generation for Windows builds with MSVC compilers
# ROBOTNAME : Name of the robot
# DEF_FILE : Target .def file path-name
# Other args : Robot DLL Interface description, as a list of names of exported symbols,
@ -298,7 +298,8 @@ MACRO(ROBOT_MODULE)
# Link/Run-time dependencies
ADD_PLIB_LIBRARY(${RBM_NAME} sg)
ADD_SDLIB_LIBRARY(${RBM_NAME} robottools)
ADD_SDLIB_LIBRARY(${RBM_NAME} portability robottools)
# Install target robot module shared library
SD_INSTALL_FILES(LIB drivers/${RBM_NAME} TARGETS ${RBM_NAME})
@ -310,7 +311,7 @@ MACRO(ROBOT_MODULE)
SET(CLONE_MODLOC ${CLONENAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
IF(FALSE)
#IF(UNIX)
# Might not work with GCC 4.5 or + (see above)
# Might not work with GCC 4.5 or + (see above)
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
@ -452,13 +453,17 @@ ENDMACRO(ADD_INTERFACE_INCLUDEDIR)
MACRO(ADD_SDLIB_INCLUDEDIR)
SET(SDLIB_OPTIONAL FALSE)
FOREACH(SDLIB_LIB ${ARGN})
IF(${SDLIB_LIB} STREQUAL "OPTIONAL")
SET(SDLIB_OPTIONAL TRUE)
ENDIF(${SDLIB_LIB} STREQUAL "OPTIONAL")
ENDFOREACH(SDLIB_LIB ${ARGN})
FOREACH(SDLIB_LIB ${ARGN})
SET(SDLIB_FOUND_LIB TRUE)
SET(SDLIB_EXTRA_INCLUDEDIR "")
IF(SDLIB_LIB STREQUAL "portability")
@ -581,6 +586,7 @@ MACRO(ADD_SDLIB_INCLUDEDIR)
ENDIF(NOT SDLIB_OPTIONAL AND NOT SDLIB_LIB STREQUAL "OPTIONAL")
ENDIF(${SDLIB_EXTRA_INCLUDEDIR})
ENDIF(SDLIB_FOUND_LIB)
ENDFOREACH(SDLIB_LIB ${SDLIB_LIBS})
INCLUDE_DIRECTORIES(${SDLIB_INCLUDE_DIRS})
@ -592,6 +598,7 @@ MACRO(ADD_SDLIB_LIBRARY TARGET)
SET(SDLIB_OPTIONAL FALSE)
SET(SDLIB_STATIC FALSE)
SET(SDLIB_TARGET_SUFFIX "")
FOREACH(SDLIB_LIB ${ARGN})
IF(${SDLIB_LIB} STREQUAL "OPTIONAL")
SET(SDLIB_OPTIONAL TRUE)
@ -603,6 +610,7 @@ MACRO(ADD_SDLIB_LIBRARY TARGET)
ENDFOREACH(SDLIB_LIB ${ARGN})
FOREACH(SDLIB_LIB ${ARGN})
SET(SDLIB_IGNORE TRUE)
IF(NOT UNIX)
SET(SDLIB_IGNORE FALSE)
@ -622,15 +630,26 @@ MACRO(ADD_SDLIB_LIBRARY TARGET)
ENDIF(SDLIB_LIB STREQUAL "solid" AND OPTION_3RDPARTY_SOLID)
IF(NOT SDLIB_IGNORE)
SET(SDLIB_FOUND_LIB TRUE)
SET(SDLIB_EXTRA_LIBRARY "")
#Use IF(TARGET ${SDLIB_LIB}) from CMake 2.6
GET_TARGET_PROPERTY(SDLIB_TARGET_LOCATION ${SDLIB_LIB}${SDLIB_TARGET_SUFFIX} LOCATION)
IF(NOT SDLIB_TARGET_LOCATION STREQUAL "NOTFOUND")
SET(SDLIB_LIBRARIES ${SDLIB_LIBRARIES} ${SDLIB_LIB}${SDLIB_TARGET_SUFFIX})
ELSE(NOT SDLIB_TARGET_LOCATION STREQUAL "NOTFOUND")
MESSAGE(WARNING "Warning: didn't found target ${SDLIB_LIB}")
IF(SDLIB_LIB STREQUAL "tgf")
IF(SDLIB_LIB STREQUAL "portability")
IF(IN_SOURCETREE)
SET(LIBRARY_CANDIDATE ${SOURCE_DIR}/src/libs/portability)
ELSE(IN_SOURCETREE)
SET(LIBRARY_CANDIDATE ${SD_LIBDIR_ABS})
ENDIF(IN_SOURCETREE)
FIND_LIBRARY(SDLIB_PORTABILITY_LIBRARY portability${SDLIB_TARGET_SUFFIX} PATHS ${LIBRARY_CANDIDATE} /usr/lib /usr/local/lib
PATH_SUFFIXES "" lib)
SET(SDLIB_EXTRA_LIBRARY SDLIB_PORTABILITY_LIBRARY)
ELSEIF(SDLIB_LIB STREQUAL "tgf")
IF(IN_SOURCETREE)
SET(LIBRARY_CANDIDATE ${SOURCE_DIR}/src/libs/tgf)
ELSE(IN_SOURCETREE)
@ -725,7 +744,8 @@ MACRO(ADD_SDLIB_LIBRARY TARGET)
IF(NOT SDLIB_LIB STREQUAL "OPTIONAL" AND NOT SDLIB_LIB STREQUAL "STATIC")
MESSAGE(WARNING ": ${SDLIB_LIB} is not a Speed Dreams library")
ENDIF(NOT SDLIB_LIB STREQUAL "OPTIONAL" AND NOT SDLIB_LIB STREQUAL "STATIC")
ENDIF(SDLIB_LIB STREQUAL "tgf")
ENDIF(SDLIB_LIB STREQUAL "portability")
IF(SDLIB_FOUND_LIB)
IF(${SDLIB_EXTRA_LIBRARY})
SET(SDLIB_LIBRARIES ${SDLIB_LIBRARIES} ${${SDLIB_EXTRA_LIBRARY}})
@ -735,8 +755,11 @@ MACRO(ADD_SDLIB_LIBRARY TARGET)
ENDIF(NOT SDLIB_OPTIONAL AND NOT SDLIB_LIB STREQUAL "OPTIONAL" AND NOT SDLIB_LIB STREQUAL "STATIC")
ENDIF(${SDLIB_EXTRA_LIBRARY})
ENDIF(SDLIB_FOUND_LIB)
ENDIF(NOT SDLIB_TARGET_LOCATION STREQUAL "NOTFOUND")
ENDIF(NOT SDLIB_IGNORE)
ENDFOREACH(SDLIB_LIB ${SDLIB_LIBS})
#MESSAGE(STATUS "TARGET_LINK_LIBRARIES(${TARGET} ${SDLIB_LIBRARIES})")

View file

@ -40,6 +40,8 @@ ADD_LIBRARY(ephemeris SHARED ${EPHEMERIS_SOURCES})
ADD_PLIB_LIBRARY(ephemeris ul sg)
ADD_SDLIB_LIBRARY(ephemeris portability)
IF(WIN32)
SD_INSTALL_FILES(BIN TARGETS ephemeris)
ELSE(WIN32)

View file

@ -25,6 +25,8 @@ ADD_LIBRARY(learning SHARED ${LEARNING_SOURCES})
# Might not work with GCC 4.5 or + (non-robot modules crash at 1st reload = after 1 dlclose)
#SET_TARGET_PROPERTIES(learning PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_SDLIB_LIBRARY(learning portability)
IF(WIN32)
SD_INSTALL_FILES(BIN TARGETS learning)
ELSE(WIN32)

View file

@ -26,6 +26,8 @@ ADD_LIBRARY(metar SHARED ${METAR_SOURCES})
# This line does nothing : what it really intended ?
#ADD_PLIB_LIBRARY(metar)
ADD_SDLIB_LIBRARY(metar portability)
IF(WIN32)
SD_INSTALL_FILES(BIN TARGETS metar)
ELSE(WIN32)

View file

@ -1,4 +1,30 @@
INCLUDE(../../../cmake/macros.cmake)
SD_INSTALL_FILES(INCLUDE FILES portability.h)
#PROJECT(portability)
SET(PORTABILITY_HEADERS portability.h)
SET(PORTABILITY_SOURCES portability.cpp ${PORTABILITY_HEADERS})
# Disable developer warning
IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0003 NEW)
ENDIF(COMMAND CMAKE_POLICY)
IF(WIN32)
# DLL export stuff under Windows (to avoid .def file)
ADD_DEFINITIONS(-DPORTABILITY_DLL)
ENDIF(WIN32)
ADD_LIBRARY(portability SHARED ${PORTABILITY_SOURCES})
# Might not work with GCC 4.5 or + (non-robot modules crash at 1st reload = after 1 dlclose)
#SET_TARGET_PROPERTIES(portability PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
IF(WIN32)
SD_INSTALL_FILES(BIN TARGETS portability)
ELSE(WIN32)
SD_INSTALL_FILES(LIB lib TARGETS portability)
ENDIF(WIN32)
SD_INSTALL_FILES(INCLUDE FILES ${PORTABILITY_HEADERS})

View file

@ -53,48 +53,29 @@
#endif
// Missing strndup, define it here (for FreeBSD).
// TODO: Move it into a library !
// Code provided by Thierry Thomas.
// DLL exported symbols declarator for Windows.
#ifdef WIN32
# ifdef portability_EXPORTS
# define PORTABILITY_API __declspec(dllexport)
# else
# define PORTABILITY_API __declspec(dllimport)
# endif
#else
# define PORTABILITY_API
#endif
// Missing strndup, defined in portability.cpp (for FreeBSD).
#ifndef HAVE_STRNDUP
static char *strndup(const char *str, int len)
{
if (!str || len < 0)
return 0;
char* ret;
if (!(ret = (char*)malloc(len + 1)))
return 0;
memcpy(ret, str, len);
ret[len] = '\0';
return ret;
}
PORTABILITY_API char *strndup(const char *str, int len);
#endif // HAVE_STRNDUP
// Missing strtok_r, define it here (for MinGW).
// TODO: Move it into a library !
// Code provided by Charlie Gordon http://bytes.com/topic/c/answers/708293-strtok-strtok_r.
// Missing strtok_r, defined in portability.cpp (for MinGW).
#ifndef HAVE_STRTOK_R
static char *strtok_r(char *str, const char *delim, char **nextp)
{
char *ret;
if (!str)
str = *nextp;
str += strspn(str, delim);
if (*str == '\0')
return 0;
ret = str;
str += strcspn(str, delim);
if (*str)
*str++ = '\0';
*nextp = str;
return ret;
}
PORTABILITY_API char *strtok_r(char *str, const char *delim, char **nextp);
#endif // HAVE_STRTOK_R

View file

@ -44,7 +44,7 @@ ADD_LIBRARY(raceengine SHARED ${RACEENGINE_SOURCES})
#SET_TARGET_PROPERTIES(raceengine PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_SDLIB_LIBRARY(raceengine
tgf tgfdata robottools
portability tgf tgfdata robottools
networking)
IF(WIN32)

View file

@ -32,7 +32,8 @@ 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)
ADD_SDLIB_LIBRARY(robottools portability tgf)
IF(WIN32)
SD_INSTALL_FILES(BIN TARGETS robottools)

View file

@ -40,7 +40,7 @@ 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)
ADD_SDLIB_LIBRARY(tgf txml) # txml ignored if OPTION_3RDPARTY_EXPAT
ADD_SDLIB_LIBRARY(tgf portability txml) # txml ignored if OPTION_3RDPARTY_EXPAT
ADD_DL_LIBRARY(tgf)
ADD_SDL_LIBRARY(tgf)

View file

@ -41,7 +41,8 @@ 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)
ADD_SDLIB_LIBRARY(tgfclient portability tgf networking)
ADD_PNG_LIBRARY(tgfclient)
ADD_JPEG_LIBRARY(tgfclient)

View file

@ -35,7 +35,7 @@ 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)
ADD_SDLIB_LIBRARY(tgfdata txml tgf)
ADD_SDLIB_LIBRARY(tgfdata portability txml tgf) # txml ignored if OPTION_3RDPARTY_EXPAT
ADD_PLIB_LIBRARY(tgfdata sg ul)

View file

@ -45,6 +45,8 @@ 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)
ADD_SDLIB_LIBRARY(txml portability)
ADD_SUBDIRECTORY(gennmtab)
IF(WIN32)

View file

@ -21,7 +21,7 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_EXECUTABLE(${_TARGET_NAME} ${_SOURCES})
ADD_SDLIB_LIBRARY(${_TARGET_NAME} tgf tgfclient tgfdata raceengine)
ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability tgf tgfclient tgfdata raceengine)
IF(UNIX)
SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6)

View file

@ -49,7 +49,7 @@ ENDIF(UNIX OR MINGW)
ADD_PLIB_LIBRARY(ssggraph ul sg sl ssg ssgaux)
ADD_SDL_LIBRARY(ssggraph)
ADD_SDLIB_LIBRARY(ssggraph tgf tgfclient robottools)
ADD_SDLIB_LIBRARY(ssggraph portability tgf tgfclient robottools)
IF(OPENAL_FOUND)
TARGET_LINK_LIBRARIES(ssggraph ${OPENAL_LIBRARY})

View file

@ -37,7 +37,7 @@ IF(MSVC)
ENDIF(MSVC)
ADD_SDLIB_LIBRARY(networking tgf)
ADD_SDLIB_LIBRARY(networking portability tgf)
IF(WIN32)
SD_INSTALL_FILES(BIN TARGETS networking)

View file

@ -66,7 +66,8 @@ ADD_LIBRARY(simuv2.1 SHARED ${SIMU_SOURCES})
#SET_TARGET_PROPERTIES(simuv2.1 PROPERTIES VERSION ${VERSION} SOVERSION 0.0.0)
ADD_SOLID_LIBRARY(simuv2.1) # Ignored if not OPTION_3RDPARTY_SOLID
ADD_SDLIB_LIBRARY(simuv2.1 tgf robottools solid) # solid ignored if not OPTION_3RDPARTY_SOLID
ADD_SDLIB_LIBRARY(simuv2.1 portability tgf robottools solid) # solid ignored if not OPTION_3RDPARTY_SOLID
IF(UNIX OR MINGW)
SET_TARGET_PROPERTIES(simuv2.1 PROPERTIES PREFIX "")

View file

@ -36,7 +36,7 @@ ADD_LIBRARY(simuv2 SHARED ${_SOURCES})
ADD_SOLID_LIBRARY(simuv2) # Ignored if not OPTION_3RDPARTY_SOLID
ADD_SDLIB_LIBRARY(simuv2 tgf robottools solid) # solid ignored if OPTION_3RDPARTY_SOLID
ADD_SDLIB_LIBRARY(simuv2 portability tgf robottools solid) # solid ignored if OPTION_3RDPARTY_SOLID
IF(UNIX OR MINGW)
SET_TARGET_PROPERTIES(simuv2 PROPERTIES PREFIX "")

View file

@ -36,7 +36,7 @@ ADD_LIBRARY(simuv3 SHARED ${_SOURCES})
ADD_SOLID_LIBRARY(simuv3) # Ignored if not OPTION_3RDPARTY_SOLID
ADD_SDLIB_LIBRARY(simuv3 tgf robottools solid) # solid ignored if OPTION_3RDPARTY_SOLID
ADD_SDLIB_LIBRARY(simuv3 portability tgf robottools solid) # solid ignored if OPTION_3RDPARTY_SOLID
IF(UNIX OR MINGW)
SET_TARGET_PROPERTIES(simuv3 PROPERTIES PREFIX "")

View file

@ -40,7 +40,7 @@ ENDIF(UNIX OR MINGW)
ADD_PLIB_LIBRARY(snddefault ul sg sl ssg ssgaux)
ADD_SDL_LIBRARY(snddefault)
ADD_SDLIB_LIBRARY(snddefault tgf tgfclient robottools)
ADD_SDLIB_LIBRARY(snddefault portability tgf tgfclient robottools)
IF(OPENAL_FOUND)
TARGET_LINK_LIBRARIES(snddefault ${OPENAL_LIBRARY})

View file

@ -14,6 +14,6 @@ IF(UNIX OR MINGW)
SET_TARGET_PROPERTIES(telemetry PROPERTIES PREFIX "")
ENDIF(UNIX OR MINGW)
ADD_SDLIB_LIBRARY(telemetry tgf)
ADD_SDLIB_LIBRARY(telemetry portability tgf)
SD_INSTALL_FILES(LIB modules/telemetry TARGETS telemetry)

View file

@ -27,6 +27,7 @@ IF(UNIX OR MINGW)
ENDIF(UNIX OR MINGW)
ADD_PLIB_LIBRARY(track ul sg)
ADD_SDLIB_LIBRARY(track tgf robottools)
ADD_SDLIB_LIBRARY(track portability tgf robottools)
SD_INSTALL_FILES(LIB modules/track TARGETS track)

View file

@ -81,6 +81,6 @@ ENDIF(UNIX OR MINGW)
# TARGET_LINK_LIBRARIES(legacymenu winmm)
#ENDIF(WIN32)
ADD_SDLIB_LIBRARY(legacymenu tgf tgfclient tgfdata networking)
ADD_SDLIB_LIBRARY(legacymenu portability tgf tgfclient tgfdata networking)
SD_INSTALL_FILES(LIB modules/userinterface TARGETS legacymenu)

View file

@ -33,6 +33,6 @@ IF(UNIX OR MINGW)
SET_TARGET_PROPERTIES(textonly PROPERTIES PREFIX "")
ENDIF(UNIX OR MINGW)
ADD_SDLIB_LIBRARY(textonly tgf tgfclient tgfdata networking)
ADD_SDLIB_LIBRARY(textonly portability tgf tgfclient tgfdata networking)
SD_INSTALL_FILES(LIB modules/userinterface TARGETS textonly)

View file

@ -10,6 +10,8 @@ ADD_SDLIB_INCLUDEDIR(portability)
ADD_EXECUTABLE(${_TARGET_NAME} ${ACCC_SOURCES})
ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability)
IF(UNIX)
SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6)
ENDIF(UNIX)

View file

@ -18,7 +18,7 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_EXECUTABLE(${_TARGET_NAME} ${_SOURCES})
ADD_SDLIB_LIBRARY(${_TARGET_NAME} robottools tgf tgfclient)
ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability robottools tgf tgfclient)
IF(OPENGL_FOUND)
TARGET_LINK_LIBRARIES(${_TARGET_NAME} ${OPENGL_LIBRARY})
@ -34,4 +34,3 @@ IF(UNIX)
ENDIF(UNIX)
SD_INSTALL_FILES(BIN TARGETS ${_TARGET_NAME})

View file

@ -14,7 +14,7 @@ ENDIF(COMMAND CMAKE_POLICY)
ADD_EXECUTABLE(${_TARGET_NAME} ${NFSPERF_SOURCES})
ADD_SDLIB_LIBRARY(${_TARGET_NAME} tgf txml)
ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability tgf txml) # txml ignored if OPTION_3RDPARTY_EXPAT
IF(UNIX)
TARGET_LINK_LIBRARIES(${_TARGET_NAME} dl)

View file

@ -25,7 +25,7 @@ ENDIF(MSVC)
ADD_EXECUTABLE(${_TARGET_NAME} ${_SOURCES})
ADD_SDLIB_LIBRARY(${_TARGET_NAME} robottools tgf tgfclient)
ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability robottools tgf tgfclient)
IF(OPENGL_FOUND)
TARGET_LINK_LIBRARIES(${_TARGET_NAME} ${OPENGL_LIBRARY})

View file

@ -12,12 +12,11 @@ ENDIF(COMMAND cmake_policy)
ADD_EXECUTABLE(xmlversion ${XMLVERSION_SOURCES})
IF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)
#WARNING: the order of the library in the line below matters! First tgf, then
#txml!!!
ADD_SDLIB_LIBRARY(xmlversion tgf txml STATIC)
#WARNING: the order of the library in the line below matters! First tgf, then txml!!!
ADD_SDLIB_LIBRARY(xmlversion portability tgf txml STATIC)
ADD_SDL_LIBRARY(xmlversion)
ELSE(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)
ADD_SDLIB_LIBRARY(xmlversion tgf txml)
ADD_SDLIB_LIBRARY(xmlversion portability tgf txml)
ENDIF(CMAKE_SKIP_RPATH OR CMAKE_SKIP_BUILD_RPATH)
IF(UNIX)