From cdc3d958438a8af0d9f338192bab2ccfd8ebacda Mon Sep 17 00:00:00 2001 From: pouillot Date: Tue, 11 Sep 2012 18:33:31 +0000 Subject: [PATCH] Re #683 Added support for building with missing contents in source tree + OPTION_CHECK_CONTENTS CMake option to disable it when usefull ; defaults to Off git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@4931 30fe4595-0a0c-4342-8851-515496e4dcbd Former-commit-id: e89e21abb38e60cbb84ac71fa326a46fa55467ef Former-commit-id: c8eb5c8c63257e240e9e050e7551250f026f14fa --- cmake/macros.cmake | 373 +++++++++++++++++++------------- src/drivers/CMakeLists.txt | 18 +- src/libs/CMakeLists.txt | 5 +- src/modules/simu/CMakeLists.txt | 7 +- 4 files changed, 230 insertions(+), 173 deletions(-) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index 9fee11a27..48acfd8cc 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -306,26 +306,36 @@ MACRO(ROBOT_MODULE) # Install clone robot modules shared libraries (use ldconfig version naming scheme under Linux) IF(RBM_HAS_CLONENAMES AND RBM_CLONENAMES) + GET_TARGET_PROPERTY(MODLOC ${RBM_NAME} LOCATION) + FOREACH(CLONENAME ${RBM_CLONENAMES}) - SET(CLONE_MODLOC ${CLONENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) - IF(FALSE) - #IF(UNIX) - # 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 - 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() + + # Check contents if specified (because SD_INSTALL_FILES(LIB ...) doesn't do it itself). + IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${CLONENAME} OR OPTION_CHECK_CONTENTS) + + SET(CLONE_MODLOC ${CLONENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) + IF(FALSE) + #IF(UNIX) + # 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 + 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() + + ENDIF() # Contents checking. + ENDFOREACH(CLONENAME ${RBM_CLONENAMES}) + ENDIF() ENDMACRO(ROBOT_MODULE) @@ -378,12 +388,12 @@ MACRO(ROBOT_DATA) # Install specified files. IF(RBD_IS_USER) SD_INSTALL_DIRECTORIES(DATA drivers/${RBD_NAME} USER drivers/${RBD_NAME} - PREFIX ${RBD_PREFIX} DIRECTORIES ${RBD_SUBDIRS} - PATTERNS ${RBD_PATTERNS}) + PREFIX ${RBD_PREFIX} DIRECTORIES ${RBD_SUBDIRS} + PATTERNS ${RBD_PATTERNS}) ELSE() SD_INSTALL_DIRECTORIES(DATA drivers/${RBD_NAME} - PREFIX ${RBD_PREFIX} DIRECTORIES ${RBD_SUBDIRS} - PATTERNS ${RBD_PATTERNS}) + PREFIX ${RBD_PREFIX} DIRECTORIES ${RBD_SUBDIRS} + PATTERNS ${RBD_PATTERNS}) ENDIF() ENDIF(RBD_HAS_SUBDIRS AND RBD_SUBDIRS) @@ -438,9 +448,9 @@ MACRO(ADD_INTERFACE_INCLUDEDIR) ENDIF(IN_SOURCETREE) FIND_PATH(INTERFACE_INCLUDE_DIR raceman.h - PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include NO_DEFAULT_PATH) + PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include NO_DEFAULT_PATH) FIND_PATH(INTERFACE_INCLUDE_DIR raceman.h - PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include) + PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include) MARK_AS_ADVANCED(INTERFACE_INCLUDE_DIR) IF(INTERFACE_INCLUDE_DIR) INCLUDE_DIRECTORIES(${INTERFACE_INCLUDE_DIR}) @@ -517,20 +527,20 @@ MACRO(ADD_SDLIB_INCLUDEDIR) MARK_AS_ADVANCED(SDLIB_MATH_INCLUDE_DIR) SET(SDLIB_EXTRA_INCLUDEDIR SDLIB_MATH_INCLUDE_DIR) ELSEIF(SDLIB_LIB STREQUAL "txml") - # Temporary, as TXML will finally get replaced by Expat. - IF(NOT OPTION_3RDPARTY_EXPAT) + # Temporary, as TXML will finally get replaced by Expat. + IF(NOT OPTION_3RDPARTY_EXPAT) IF(IN_SOURCETREE) SET(INCLUDE_CANDIDATE ${SOURCE_DIR}/src/libs/txml) ELSE(IN_SOURCETREE) - SET(INCLUDE_CANDIDATE ${SD_INCLUDEDIR_ABS}) + SET(INCLUDE_CANDIDATE ${SD_INCLUDEDIR_ABS}) ENDIF(IN_SOURCETREE) FIND_PATH(SDLIB_TXML_INCLUDE_DIR xml.h PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include NO_DEFAULT_PATH) FIND_PATH(SDLIB_TXML_INCLUDE_DIR xml.h PATHS ${INCLUDE_CANDIDATE} /usr/include /usr/local/include) MARK_AS_ADVANCED(SDLIB_TXML_INCLUDE_DIR) SET(SDLIB_EXTRA_INCLUDEDIR SDLIB_TXML_INCLUDE_DIR) - ELSE(NOT OPTION_3RDPARTY_EXPAT) - SET(SDLIB_FOUND_LIB FALSE) - ENDIF(NOT OPTION_3RDPARTY_EXPAT) + ELSE(NOT OPTION_3RDPARTY_EXPAT) + SET(SDLIB_FOUND_LIB FALSE) + ENDIF(NOT OPTION_3RDPARTY_EXPAT) ELSEIF(SDLIB_LIB STREQUAL "robottools") IF(IN_SOURCETREE) SET(INCLUDE_CANDIDATE ${SOURCE_DIR}/src/libs/robottools) @@ -622,13 +632,13 @@ MACRO(ADD_SDLIB_LIBRARY TARGET) ENDIF(SDLIB_LIB STREQUAL "OPTIONAL" OR SDLIB_LIB STREQUAL "STATIC") IF(SDLIB_LIB STREQUAL "txml" AND OPTION_3RDPARTY_EXPAT) - SET(SDLIB_IGNORE TRUE) #Ignore: Use Expat - ENDIF(SDLIB_LIB STREQUAL "txml" AND OPTION_3RDPARTY_EXPAT) - + SET(SDLIB_IGNORE TRUE) #Ignore: Use Expat + ENDIF(SDLIB_LIB STREQUAL "txml" AND OPTION_3RDPARTY_EXPAT) + IF(SDLIB_LIB STREQUAL "solid" AND OPTION_3RDPARTY_SOLID) - SET(SDLIB_IGNORE TRUE) #Ignore: Use 3rd party SOLID - ENDIF(SDLIB_LIB STREQUAL "solid" AND OPTION_3RDPARTY_SOLID) - + SET(SDLIB_IGNORE TRUE) #Ignore: Use 3rd party SOLID + ENDIF(SDLIB_LIB STREQUAL "solid" AND OPTION_3RDPARTY_SOLID) + IF(NOT SDLIB_IGNORE) SET(SDLIB_FOUND_LIB TRUE) @@ -1127,6 +1137,9 @@ MACRO(ADD_SD_COMPILE_OPTIONS) IF(NOT _ALREADY_DONE) # CMake options. + SET(OPTION_CHECK_CONTENTS false CACHE BOOL "Set to On if you don't want the build to be stopped by missing optional contents folders") + MARK_AS_ADVANCED(OPTION_CHECK_CONTENTS) + SET(OPTION_OFFICIAL_ONLY false CACHE BOOL "Build / install only officially released contents") SET(OPTION_FORCE_DEBUG false CACHE BOOL "Force debug symbols even in Release build (Automatic in Debug builds)") @@ -1157,24 +1170,24 @@ MACRO(ADD_SD_COMPILE_OPTIONS) ENDIF(UNIX) SET(OPTION_AUTOVERSION true CACHE BOOL "Enable automatic computation of the version from SVN source tree") - - # Custom 3rdParty location for some Windows builds (standard CMake Find macros - # can't find it, so we needed another solution : see FindCustom3rdParty.cmake). - IF(MSVC) - SET(_OPTION_CUSTOM_3RDPARTY true) # Always needed for MSVC compilers. - ELSEIF(MINGW) - IF(CMAKE_GENERATOR STREQUAL "MSYS Makefiles") - # Not needed with "MSYS Makefiles" generator when using MinGW - # (3rd party libs assumed to be installed in standard location /usr/local). - SET(_OPTION_CUSTOM_3RDPARTY false) - ELSE(CMAKE_GENERATOR STREQUAL "MSYS Makefiles") - # Just as for MSVC builds : special location. - SET(_OPTION_CUSTOM_3RDPARTY true) - ENDIF(CMAKE_GENERATOR STREQUAL "MSYS Makefiles") - ENDIF(MSVC) + + # Custom 3rdParty location for some Windows builds (standard CMake Find macros + # can't find it, so we needed another solution : see FindCustom3rdParty.cmake). + IF(MSVC) + SET(_OPTION_CUSTOM_3RDPARTY true) # Always needed for MSVC compilers. + ELSEIF(MINGW) + IF(CMAKE_GENERATOR STREQUAL "MSYS Makefiles") + # Not needed with "MSYS Makefiles" generator when using MinGW + # (3rd party libs assumed to be installed in standard location /usr/local). + SET(_OPTION_CUSTOM_3RDPARTY false) + ELSE(CMAKE_GENERATOR STREQUAL "MSYS Makefiles") + # Just as for MSVC builds : special location. + SET(_OPTION_CUSTOM_3RDPARTY true) + ENDIF(CMAKE_GENERATOR STREQUAL "MSYS Makefiles") + ENDIF(MSVC) - SET(OPTION_CUSTOM_3RDPARTY ${_OPTION_CUSTOM_3RDPARTY} CACHE BOOL "Set to ON to use 3rdParty prebuilt API located in /../3rdparty") - MARK_AS_ADVANCED(OPTION_CUSTOM_3RDPARTY) + SET(OPTION_CUSTOM_3RDPARTY ${_OPTION_CUSTOM_3RDPARTY} CACHE BOOL "Set to ON to use 3rdParty prebuilt API located in /../3rdparty") + MARK_AS_ADVANCED(OPTION_CUSTOM_3RDPARTY) # Compiler definitions (needs more comments. Is it needed under Windows ?). ADD_DEFINITIONS(-D_SVID_SOURCE -D_BSD_SOURCE -DSHM) @@ -1238,6 +1251,19 @@ MACRO(ADD_SD_COMPILE_OPTIONS) ENDMACRO(ADD_SD_COMPILE_OPTIONS) +# Use as a replacement of native ADD_DIRECTORY if the target folder may be optional +# (if it is actually not there, and OPTION_CHECK_CONTENTS is Off, +# then the build will continue with a simple status message). +MACRO(SD_ADD_SUBDIRECTORY DIR_PATH) + + IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${DIR_PATH} OR OPTION_CHECK_CONTENTS) + ADD_SUBDIRECTORY(${DIR_PATH}) + ELSE() + MESSAGE(STATUS "Note : Won't build missing dir. ${DIR_PATH}") + ENDIF() + +ENDMACRO(SD_ADD_SUBDIRECTORY PATH) + MACRO(SD_INSTALL_CAR CARNAME) SET(SDIC_FILES ${CARNAME}.xml ${ARGN}) @@ -1283,6 +1309,7 @@ MACRO(SD_INSTALL_TRACK TRACKNAME CATEGORY) ENDMACRO(SD_INSTALL_TRACK TRACKNAME CATEGORY) # Data/Lib/Bin/Include files installation (with user settings registration for data files) +# Note: Missing files will be skipped if not there and OPTION_CHECK_CONTENTS is Off. # Args: # DATA : Data subdirectory where to install specified data files # LIB : Lib subdirectory where to install specified files/targets @@ -1387,13 +1414,29 @@ MACRO(SD_INSTALL_FILES) # Prepend prefix to files if specified. SET(REAL_FILES) # Reset the list (remember, it's a CMakeLists.txt global variable :-() IF(HAS_FILES) - IF(HAS_PREFIX) - FOREACH(FILE ${FILES}) - LIST(APPEND REAL_FILES ${PREFIX}/${FILE}) - ENDFOREACH() - ELSE() - SET(REAL_FILES ${FILES}) - ENDIF() + SET(_FILES) # Same. + FOREACH(FILE ${FILES}) + #MESSAGE(STATUS "SD_INSTALL_FILES: ${FILE}") + IF(HAS_PREFIX) + SET(_FILE ${PREFIX}/${FILE}) + ELSE() + SET(_FILE ${FILE}) + ENDIF() + # Contents check for non-generated files if specified. + IF(NOT IS_ABSOLUTE ${_FILE}) + SET(_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${_FILE}") + ENDIF() + IF(IS_LIB OR IS_BIN OR EXISTS ${_FILE} OR OPTION_CHECK_CONTENTS) + LIST(APPEND REAL_FILES ${_FILE}) + LIST(APPEND _FILES ${FILE}) + ELSE() + IF(IS_ABSOLUTE ${_FILE}) # Make message less long : remove useless source dir path. + STRING(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" _FILE "${_FILE}") + ENDIF() + MESSAGE(STATUS "Note : Won't install missing file ${_FILE}") + ENDIF() + ENDFOREACH() + SET(FILES ${_FILES}) ENDIF() # Install files @@ -1419,7 +1462,7 @@ MACRO(SD_INSTALL_FILES) # In order to run xmlversion.exe in the build tree (see below), under Windows, # we nearly always have to copy all dependencies next to it (tgf, txml or Expat, SDL, compiler run-time). GET_TARGET_PROPERTY(TGF_LIB tgf LOCATION) - IF(NOT OPTION_3RDPARTY_EXPAT) + IF(NOT OPTION_3RDPARTY_EXPAT) GET_TARGET_PROPERTY(TXML_LIB txml LOCATION) ELSE(NOT OPTION_3RDPARTY_EXPAT) FIND_PACKAGE(EXPAT) @@ -1428,7 +1471,7 @@ MACRO(SD_INSTALL_FILES) SET(EXPAT_LIB ${EXPAT_LIBPATH}/../bin/${EXPAT_LIBNAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) ENDIF(NOT OPTION_3RDPARTY_EXPAT) FIND_PACKAGE(SDL) - SET(SDL_LIBPATHNAME "${SDL_LIBRARY}") + SET(SDL_LIBPATHNAME "${SDL_LIBRARY}") IF(MINGW) # Multiple lib specs fuss ... find the one STRING(REGEX REPLACE ".*;([^;]+dll[^;]*);.*" "\\1" SDL_LIBPATHNAME "${SDL_LIBPATHNAME}") @@ -1473,55 +1516,55 @@ MACRO(SD_INSTALL_FILES) ENDIF() FOREACH(FILE ${FILES}) GET_FILENAME_COMPONENT(FILENAME \${FILE} NAME) - EXECUTE_PROCESS(COMMAND \"\${XMLVERSION_EXE}\" \"\${SD_DATADIR_ABS}/version.xml\" \"${DATA_PATH}\${FILENAME}\" \"${USER_PATH}/\${FILENAME}\" \"\${SD_DATADIR_ABS}\" RESULT_VARIABLE XMLVERSTATUS) - IF(XMLVERSTATUS) - MESSAGE(FATAL_ERROR \"Error: xmlversion failed\") - ENDIF() + EXECUTE_PROCESS(COMMAND \"\${XMLVERSION_EXE}\" \"\${SD_DATADIR_ABS}/version.xml\" \"${DATA_PATH}\${FILENAME}\" \"${USER_PATH}/\${FILENAME}\" \"\${SD_DATADIR_ABS}\" RESULT_VARIABLE XMLVERSTATUS) + IF(XMLVERSTATUS) + MESSAGE(FATAL_ERROR \"Error: xmlversion failed : \${XMLVERSTATUS}\") + ENDIF() ENDFOREACH()") ELSE(MSVC) INSTALL(CODE - "FILE(READ ${CMAKE_BINARY_DIR}/xmlversion_loc.txt XMLVERSION_EXE) - SET(MINGW ${MINGW}) - IF(MINGW) - SET(_LIBS_TO_INSTALL \"${TGF_LIB}\") - SET(OPTION_3RDPARTY_EXPAT ${OPTION_3RDPARTY_EXPAT}) - IF(NOT OPTION_3RDPARTY_EXPAT) - LIST(APPEND _LIBS_TO_INSTALL \"${TXML_LIB}\") - ENDIF(NOT OPTION_3RDPARTY_EXPAT) - # CMake configuration for MSYS Makefiles generator assumes that 3rd party dependencies are installed - # in standard Linux folders, hence in the PATH ; so no need to install next to xmlversion exe. - IF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") - IF(OPTION_3RDPARTY_EXPAT) - LIST(APPEND _LIBS_TO_INSTALL \"${EXPAT_LIB}\") - ENDIF(OPTION_3RDPARTY_EXPAT) - LIST(APPEND _LIBS_TO_INSTALL \"${SDL_LIB}\") - GET_FILENAME_COMPONENT(_MINGW_BINDIR \"${CMAKE_CXX_COMPILER}\" PATH) - LIST(APPEND _LIBS_TO_INSTALL \"\${_MINGW_BINDIR}/libstdc++-6.dll\" \"\${_MINGW_BINDIR}/libgcc_s_dw2-1.dll\") - ENDIF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") - GET_FILENAME_COMPONENT(XMLVERSION_DIR \"\${XMLVERSION_EXE}\" PATH) - MESSAGE(STATUS \"xmlversion : Libs to install=\${_LIBS_TO_INSTALL}\") - FILE(INSTALL DESTINATION \"\${XMLVERSION_DIR}\" TYPE FILE FILES \${_LIBS_TO_INSTALL}) - ENDIF(MINGW) - SET(SD_DATADIR_ABS \"${SD_DATADIR}\") - IF(NOT IS_ABSOLUTE \${SD_DATADIR_ABS}) - GET_FILENAME_COMPONENT(SD_DATADIR_ABS \"\${CMAKE_INSTALL_PREFIX}/\${SD_DATADIR_ABS}\" ABSOLUTE) - ENDIF() - # Why this path correction here ? This needs a comment ! - SET(CUR_DESTDIR \"\$ENV{DESTDIR}\") - IF(CUR_DESTDIR MATCHES \"[^/]\") - STRING(REGEX REPLACE \"^(.*[^/])/*$\" \"\\\\1\" CUR_DESTDIR_CORR \"\${CUR_DESTDIR}\") - ELSE(CUR_DESTDIR MATCHES \"[^/]\") - SET(CUR_DESTDIR_CORR \"\") - ENDIF(CUR_DESTDIR MATCHES \"[^/]\") - FOREACH(FILE ${FILES}) - GET_FILENAME_COMPONENT(FILENAME \${FILE} NAME) - EXECUTE_PROCESS(COMMAND \"\${XMLVERSION_EXE}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}/version.xml\" \"${DATA_PATH}\${FILENAME}\" \"${USER_PATH}/\${FILENAME}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}\" RESULT_VARIABLE XMLVERSTATUS) - IF(XMLVERSTATUS) - MESSAGE(FATAL_ERROR \"Error: xmlversion failed \$ENV(PATH)\") - ENDIF(XMLVERSTATUS) - ENDFOREACH()") + "FILE(READ ${CMAKE_BINARY_DIR}/xmlversion_loc.txt XMLVERSION_EXE) + SET(MINGW ${MINGW}) + IF(MINGW) + SET(_LIBS_TO_INSTALL \"${TGF_LIB}\") + SET(OPTION_3RDPARTY_EXPAT ${OPTION_3RDPARTY_EXPAT}) + IF(NOT OPTION_3RDPARTY_EXPAT) + LIST(APPEND _LIBS_TO_INSTALL \"${TXML_LIB}\") + ENDIF(NOT OPTION_3RDPARTY_EXPAT) + # CMake configuration for MSYS Makefiles generator assumes that 3rd party dependencies are installed + # in standard Linux folders, hence in the PATH ; so no need to install next to xmlversion exe. + IF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") + IF(OPTION_3RDPARTY_EXPAT) + LIST(APPEND _LIBS_TO_INSTALL \"${EXPAT_LIB}\") + ENDIF(OPTION_3RDPARTY_EXPAT) + LIST(APPEND _LIBS_TO_INSTALL \"${SDL_LIB}\") + GET_FILENAME_COMPONENT(_MINGW_BINDIR \"${CMAKE_CXX_COMPILER}\" PATH) + LIST(APPEND _LIBS_TO_INSTALL \"\${_MINGW_BINDIR}/libstdc++-6.dll\" \"\${_MINGW_BINDIR}/libgcc_s_dw2-1.dll\") + ENDIF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") + GET_FILENAME_COMPONENT(XMLVERSION_DIR \"\${XMLVERSION_EXE}\" PATH) + MESSAGE(STATUS \"xmlversion : Libs to install=\${_LIBS_TO_INSTALL}\") + FILE(INSTALL DESTINATION \"\${XMLVERSION_DIR}\" TYPE FILE FILES \${_LIBS_TO_INSTALL}) + ENDIF(MINGW) + SET(SD_DATADIR_ABS \"${SD_DATADIR}\") + IF(NOT IS_ABSOLUTE \${SD_DATADIR_ABS}) + GET_FILENAME_COMPONENT(SD_DATADIR_ABS \"\${CMAKE_INSTALL_PREFIX}/\${SD_DATADIR_ABS}\" ABSOLUTE) + ENDIF() + # Why this path correction here ? This needs a comment ! + SET(CUR_DESTDIR \"\$ENV{DESTDIR}\") + IF(CUR_DESTDIR MATCHES \"[^/]\") + STRING(REGEX REPLACE \"^(.*[^/])/*$\" \"\\\\1\" CUR_DESTDIR_CORR \"\${CUR_DESTDIR}\") + ELSE(CUR_DESTDIR MATCHES \"[^/]\") + SET(CUR_DESTDIR_CORR \"\") + ENDIF(CUR_DESTDIR MATCHES \"[^/]\") + FOREACH(FILE ${FILES}) + GET_FILENAME_COMPONENT(FILENAME \${FILE} NAME) + EXECUTE_PROCESS(COMMAND \"\${XMLVERSION_EXE}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}/version.xml\" \"${DATA_PATH}\${FILENAME}\" \"${USER_PATH}/\${FILENAME}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}\" RESULT_VARIABLE XMLVERSTATUS) + IF(XMLVERSTATUS) + MESSAGE(FATAL_ERROR \"Error: xmlversion failed : \${XMLVERSTATUS}\") + ENDIF(XMLVERSTATUS) + ENDFOREACH()") ENDIF(MSVC) @@ -1530,6 +1573,7 @@ MACRO(SD_INSTALL_FILES) ENDMACRO(SD_INSTALL_FILES) # Directory installation with pattern matching on files and user settings registration +# Note: Missing dirs will be skipped if not there and OPTION_CHECK_CONTENTS is Off. # Args: # DATA : Data subdirectory where to install specified sub-dirs # USER : User settings subdirectory where to install/update specified sub-dirs at run-time @@ -1591,6 +1635,23 @@ MACRO(SD_INSTALL_DIRECTORIES) SET(DEST_ALL "${SD_DATADIR}/${DATA_PATH}") ENDIF() + # Check / filter contents if specified + SET(_DIRECTORIES) + FOREACH(DIRECTORY ${DIRECTORIES}) + #MESSAGE(STATUS "SD_INSTALL_DIRS: ${DIRECTORY}") + IF(NOT IS_ABSOLUTE ${DIRECTORY}) + SET(_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${PREFIX}${DIRECTORY}") + ELSE() + SET(_DIRECTORY "${DIRECTORY}") + ENDIF() + IF(EXISTS ${_DIRECTORY} OR OPTION_CHECK_CONTENTS) + LIST(APPEND _DIRECTORIES ${DIRECTORY}) + ELSE() + MESSAGE(STATUS "Note : Won't install missing dir. ${PREFIX}${DIRECTORY}") + ENDIF() + ENDFOREACH() + SET(DIRECTORIES ${_DIRECTORIES}) + # Install selected files into the data dir. FOREACH(DIRECTORY ${DIRECTORIES}) SET(GLOB_EXPRS) @@ -1621,7 +1682,7 @@ MACRO(SD_INSTALL_DIRECTORIES) # In order to run xmlversion.exe in the build tree (see below), under Windows, # we nearly always have to copy all dependencies next to it (tgf, txml or Expat, SDL, compiler run-time). GET_TARGET_PROPERTY(TGF_LIB tgf LOCATION) - IF(NOT OPTION_3RDPARTY_EXPAT) + IF(NOT OPTION_3RDPARTY_EXPAT) GET_TARGET_PROPERTY(TXML_LIB txml LOCATION) ELSE(NOT OPTION_3RDPARTY_EXPAT) FIND_PACKAGE(EXPAT) @@ -1633,7 +1694,7 @@ MACRO(SD_INSTALL_DIRECTORIES) SET(EXPAT_LIB ${EXPAT_LIBPATH}/../bin/${EXPAT_LIBNAME}${CMAKE_SHARED_LIBRARY_SUFFIX}) ENDIF(NOT OPTION_3RDPARTY_EXPAT) FIND_PACKAGE(SDL) - SET(SDL_LIBPATHNAME "${SDL_LIBRARY}") + SET(SDL_LIBPATHNAME "${SDL_LIBRARY}") IF(MINGW) # Multiple lib specs fuss ... find the one STRING(REGEX REPLACE ".*;([^;]+dll[^;]*);.*" "\\1" SDL_LIBPATHNAME "${SDL_LIBPATHNAME}") @@ -1686,7 +1747,7 @@ MACRO(SD_INSTALL_DIRECTORIES) IF(NOT \"\${FILE}\" MATCHES \"\\\\.svn\") EXECUTE_PROCESS(COMMAND \"\${XMLVERSION_EXE}\" \"\${SD_DATADIR_ABS}/version.xml\" \"${DEST_ALL}\${FILE}\" \"${USER_PATH}/\${FILE}\" \"\${SD_DATADIR_ABS}\" RESULT_VARIABLE XMLVERSTATUS) IF(XMLVERSTATUS) - MESSAGE(FATAL_ERROR \"Error: xmlversion failed\") + MESSAGE(FATAL_ERROR \"Error: xmlversion failed : \${XMLVERSTATUS}\") ENDIF(XMLVERSTATUS) ENDIF() ENDFOREACH() @@ -1695,54 +1756,54 @@ MACRO(SD_INSTALL_DIRECTORIES) ELSE(MSVC) INSTALL(CODE - "FILE(READ \"${CMAKE_BINARY_DIR}/xmlversion_loc.txt\" XMLVERSION_EXE) - SET(MINGW ${MINGW}) - IF(MINGW) - SET(_LIBS_TO_INSTALL \"${TGF_LIB}\") - SET(OPTION_3RDPARTY_EXPAT ${OPTION_3RDPARTY_EXPAT}) - IF(NOT OPTION_3RDPARTY_EXPAT) - LIST(APPEND _LIBS_TO_INSTALL \"${TXML_LIB}\") - ENDIF(NOT OPTION_3RDPARTY_EXPAT) - # CMake configuration for MSYS Makefiles generator assumes that 3rd party dependencies are installed - # in standard Linux folders, hence in the PATH ; so no need to install next to xmlversion exe. - IF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") - IF(OPTION_3RDPARTY_EXPAT) - LIST(APPEND _LIBS_TO_INSTALL \"${EXPAT_LIB}\") - ENDIF(OPTION_3RDPARTY_EXPAT) - LIST(APPEND _LIBS_TO_INSTALL \"${SDL_LIB}\") - GET_FILENAME_COMPONENT(_MINGW_BINDIR \"${CMAKE_CXX_COMPILER}\" PATH) - LIST(APPEND _LIBS_TO_INSTALL \"\${_MINGW_BINDIR}/libstdc++-6.dll\" \"\${_MINGW_BINDIR}/libgcc_s_dw2-1.dll\") - ENDIF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") - MESSAGE(STATUS \"xmlversion : Libs to install=\${_LIBS_TO_INSTALL}\") - GET_FILENAME_COMPONENT(XMLVERSION_DIR \"\${XMLVERSION_EXE}\" PATH) - FILE(INSTALL DESTINATION \"\${XMLVERSION_DIR}\" TYPE FILE FILES \${_LIBS_TO_INSTALL}) - ENDIF(MINGW) - SET(SD_DATADIR_ABS \"${SD_DATADIR}\") - IF(NOT IS_ABSOLUTE \${SD_DATADIR_ABS}) - GET_FILENAME_COMPONENT(SD_DATADIR_ABS \"\${CMAKE_INSTALL_PREFIX}/\${SD_DATADIR_ABS}\" ABSOLUTE) - ENDIF() - # Why this path correction here ? This needs a comment ! - SET(CUR_DESTDIR \"\$ENV{DESTDIR}\") - IF(CUR_DESTDIR MATCHES \"[^/]\") - STRING(REGEX REPLACE \"^(.*[^/])/*$\" \"\\\\1\" CUR_DESTDIR_CORR \"\${CUR_DESTDIR}\") - ELSE(CUR_DESTDIR MATCHES \"[^/]\") - SET(CUR_DESTDIR_CORR \"\") - ENDIF(CUR_DESTDIR MATCHES \"[^/]\") - FOREACH(DIRECTORY ${DIRECTORIES}) - SET(GLOB_EXPRS) - FOREACH(PATTERN ${PATTERNS}) - LIST(APPEND GLOB_EXPRS \"${PREFIX}\${DIRECTORY}/\${PATTERN}\") - ENDFOREACH() - FILE(GLOB_RECURSE FILES RELATIVE \"${CMAKE_CURRENT_SOURCE_DIR}${POSTFIX} ${CMAKE_CURRENT_SOURCE_DIR}${POSTFIX}/\${GLOB_EXPRS}\") - FOREACH(FILE \${FILES}) - IF(NOT \"\${FILE}\" MATCHES \"\\\\.svn\") - EXECUTE_PROCESS(COMMAND \"\${XMLVERSION_EXE}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}/version.xml\" \"${DEST_ALL}\${FILE}\" \"${USER_PATH}/\${FILE}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}\" RESULT_VARIABLE XMLVERSTATUS) - IF(XMLVERSTATUS) - MESSAGE(FATAL_ERROR \"Error: xmlversion failed\") - ENDIF(XMLVERSTATUS) - ENDIF() - ENDFOREACH() - ENDFOREACH()") + "FILE(READ \"${CMAKE_BINARY_DIR}/xmlversion_loc.txt\" XMLVERSION_EXE) + SET(MINGW ${MINGW}) + IF(MINGW) + SET(_LIBS_TO_INSTALL \"${TGF_LIB}\") + SET(OPTION_3RDPARTY_EXPAT ${OPTION_3RDPARTY_EXPAT}) + IF(NOT OPTION_3RDPARTY_EXPAT) + LIST(APPEND _LIBS_TO_INSTALL \"${TXML_LIB}\") + ENDIF(NOT OPTION_3RDPARTY_EXPAT) + # CMake configuration for MSYS Makefiles generator assumes that 3rd party dependencies are installed + # in standard Linux folders, hence in the PATH ; so no need to install next to xmlversion exe. + IF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") + IF(OPTION_3RDPARTY_EXPAT) + LIST(APPEND _LIBS_TO_INSTALL \"${EXPAT_LIB}\") + ENDIF(OPTION_3RDPARTY_EXPAT) + LIST(APPEND _LIBS_TO_INSTALL \"${SDL_LIB}\") + GET_FILENAME_COMPONENT(_MINGW_BINDIR \"${CMAKE_CXX_COMPILER}\" PATH) + LIST(APPEND _LIBS_TO_INSTALL \"\${_MINGW_BINDIR}/libstdc++-6.dll\" \"\${_MINGW_BINDIR}/libgcc_s_dw2-1.dll\") + ENDIF(NOT CMAKE_GENERATOR STREQUAL \"MSYS Makefiles\") + MESSAGE(STATUS \"xmlversion : Libs to install=\${_LIBS_TO_INSTALL}\") + GET_FILENAME_COMPONENT(XMLVERSION_DIR \"\${XMLVERSION_EXE}\" PATH) + FILE(INSTALL DESTINATION \"\${XMLVERSION_DIR}\" TYPE FILE FILES \${_LIBS_TO_INSTALL}) + ENDIF(MINGW) + SET(SD_DATADIR_ABS \"${SD_DATADIR}\") + IF(NOT IS_ABSOLUTE \${SD_DATADIR_ABS}) + GET_FILENAME_COMPONENT(SD_DATADIR_ABS \"\${CMAKE_INSTALL_PREFIX}/\${SD_DATADIR_ABS}\" ABSOLUTE) + ENDIF() + # Why this path correction here ? This needs a comment ! + SET(CUR_DESTDIR \"\$ENV{DESTDIR}\") + IF(CUR_DESTDIR MATCHES \"[^/]\") + STRING(REGEX REPLACE \"^(.*[^/])/*$\" \"\\\\1\" CUR_DESTDIR_CORR \"\${CUR_DESTDIR}\") + ELSE(CUR_DESTDIR MATCHES \"[^/]\") + SET(CUR_DESTDIR_CORR \"\") + ENDIF(CUR_DESTDIR MATCHES \"[^/]\") + FOREACH(DIRECTORY ${DIRECTORIES}) + SET(GLOB_EXPRS) + FOREACH(PATTERN ${PATTERNS}) + LIST(APPEND GLOB_EXPRS \"${PREFIX}\${DIRECTORY}/\${PATTERN}\") + ENDFOREACH() + FILE(GLOB_RECURSE FILES RELATIVE \"${CMAKE_CURRENT_SOURCE_DIR}${POSTFIX} ${CMAKE_CURRENT_SOURCE_DIR}${POSTFIX}/\${GLOB_EXPRS}\") + FOREACH(FILE \${FILES}) + IF(NOT \"\${FILE}\" MATCHES \"\\\\.svn\") + EXECUTE_PROCESS(COMMAND \"\${XMLVERSION_EXE}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}/version.xml\" \"${DEST_ALL}\${FILE}\" \"${USER_PATH}/\${FILE}\" \"\${CUR_DESTDIR_CORR}\${SD_DATADIR_ABS}\" RESULT_VARIABLE XMLVERSTATUS) + IF(XMLVERSTATUS) + MESSAGE(FATAL_ERROR \"Error: xmlversion failed : \${XMLVERSTATUS}\") + ENDIF(XMLVERSTATUS) + ENDIF() + ENDFOREACH() + ENDFOREACH()") ENDIF(MSVC) diff --git a/src/drivers/CMakeLists.txt b/src/drivers/CMakeLists.txt index 2c6a45b5c..3cb0182f2 100644 --- a/src/drivers/CMakeLists.txt +++ b/src/drivers/CMakeLists.txt @@ -1,18 +1,18 @@ INCLUDE(../../cmake/macros.cmake) # Official robots. -ADD_SUBDIRECTORY(human) -ADD_SUBDIRECTORY(kilo2008) -ADD_SUBDIRECTORY(simplix) -ADD_SUBDIRECTORY(usr) +SD_ADD_SUBDIRECTORY(human) +SD_ADD_SUBDIRECTORY(kilo2008) +SD_ADD_SUBDIRECTORY(simplix) +SD_ADD_SUBDIRECTORY(usr) # Work-in-progress / unofficial robots. IF(NOT OPTION_OFFICIAL_ONLY) - ADD_SUBDIRECTORY(networkhuman) - #ADD_SUBDIRECTORY(shadow) + SD_ADD_SUBDIRECTORY(networkhuman) + #SD_ADD_SUBDIRECTORY(shadow) - #ADD_SUBDIRECTORY(bt) - #ADD_SUBDIRECTORY(hymie) - #ADD_SUBDIRECTORY(K1999) + #SD_ADD_SUBDIRECTORY(bt) + #SD_ADD_SUBDIRECTORY(hymie) + #SD_ADD_SUBDIRECTORY(K1999) ENDIF() diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt index 90430c268..fb31e14b5 100644 --- a/src/libs/CMakeLists.txt +++ b/src/libs/CMakeLists.txt @@ -4,7 +4,6 @@ IF(NOT OPTION_3RDPARTY_EXPAT) ADD_SUBDIRECTORY(txml) ENDIF(NOT OPTION_3RDPARTY_EXPAT) - ADD_SUBDIRECTORY(tgf) ADD_SUBDIRECTORY(tgfclient) ADD_SUBDIRECTORY(tgfdata) @@ -16,8 +15,8 @@ ADD_SUBDIRECTORY(portability) # Work-in-progress IF(NOT OPTION_OFFICIAL_ONLY) - ADD_SUBDIRECTORY(ephemeris) - #ADD_SUBDIRECTORY(metar) + SD_ADD_SUBDIRECTORY(ephemeris) + #SD_ADD_SUBDIRECTORY(metar) ENDIF() diff --git a/src/modules/simu/CMakeLists.txt b/src/modules/simu/CMakeLists.txt index c7cc61a8c..cc28c86d7 100644 --- a/src/modules/simu/CMakeLists.txt +++ b/src/modules/simu/CMakeLists.txt @@ -1,15 +1,12 @@ INCLUDE(../../../cmake/macros.cmake) ADD_SUBDIRECTORY(simuv2.1) -ADD_SUBDIRECTORY(simuv3) - -# Should normally becomes obsolete in 2.0. -ADD_SUBDIRECTORY(simuv2) # Unofficial / obsolete simulation engines. IF(NOT OPTION_OFFICIAL_ONLY) - #ADD_SUBDIRECTORY(simuv2) + SD_ADD_SUBDIRECTORY(simuv2) + SD_ADD_SUBDIRECTORY(simuv3) ENDIF()