IF (NOT Simox_CONFIGURED) # defines Simox_CONFIGURED variable which indicates that this config file has already been included SET(Simox_CONFIGURED TRUE) # Set up build type IF(NOT CMAKE_BUILD_TYPE) SET(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) ENDIF(NOT CMAKE_BUILD_TYPE) GET_FILENAME_COMPONENT (CurrentSimoxPath ${CMAKE_CURRENT_LIST_FILE} PATH) MESSAGE (STATUS "** Simox_DIR: ${CurrentSimoxPath}") SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CurrentSimoxPath}/CMakeModules) SET(Simox_BUILD_DIRECTORY ${CMAKE_BINARY_DIR}) SET(Simox_DIR ${CurrentSimoxPath}) # Offer the user the choice of overriding the installation directories set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") set(INSTALL_INCLUDE_DIR include CACHE PATH "Installation directory for header files") if(WIN32 AND NOT CYGWIN) set(DEF_INSTALL_CMAKE_DIR CMake) else() set(DEF_INSTALL_CMAKE_DIR lib/CMake/Simox) endif() set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH "Installation directory for CMake files") # Make relative paths absolute (needed later on) foreach(p LIB BIN INCLUDE CMAKE) set(var INSTALL_${p}_DIR) if(NOT IS_ABSOLUTE "${${var}}") set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") endif() endforeach() # set up include-directories include_directories( "${PROJECT_SOURCE_DIR}" # to find headers "${PROJECT_BINARY_DIR}") # to find config headers ############################# VERSION ################################# set(Simox_MAJOR_VERSION 2) set(Simox_MINOR_VERSION 3) set(Simox_PATCH_VERSION 0) set(Simox_VERSION ${Simox_MAJOR_VERSION}.${Simox_MINOR_VERSION}.${Simox_PATCH_VERSION}) MESSAGE (STATUS "** Simox version: ${Simox_VERSION}") ############################# SETUP PATHS ############################# SET(Simox_BUILD_DIRECTORY ${CMAKE_BINARY_DIR}) SET(BIN_DIR bin) SET(LIB_DIR lib) SET(DATA_DIR data) SET(Simox_LIB_DIR ${Simox_BUILD_DIRECTORY}/${LIB_DIR}) SET(Simox_BIN_DIR ${Simox_BUILD_DIRECTORY}/${BIN_DIR}) SET(Simox_DATA_DIR ${CurrentSimoxPath}/VirtualRobot/data) MESSAGE (STATUS "** SIMOX LIB DIR: ${Simox_LIB_DIR}") MESSAGE (STATUS "** SIMOX BIN DIR: ${Simox_BIN_DIR}") MESSAGE (STATUS "** SIMOX DATA DIR: ${Simox_DATA_DIR}") SET(Simox_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}) SET(Simox_INSTALL_LIB_DIR ${Simox_INSTALL_DIR}/${LIB_DIR}) SET(Simox_INSTALL_BIN_DIR ${Simox_INSTALL_DIR}/${BIN_DIR}) SET(Simox_INSTALL_DATA_DIR ${Simox_INSTALL_DIR}/${DATA_DIR}) SET(Simox_INSTALL_HEADER_DIR ${Simox_INSTALL_DIR}/include) MESSAGE (STATUS "** SIMOX INSTALL LIB DIR: ${Simox_INSTALL_LIB_DIR}") MESSAGE (STATUS "** SIMOX INSTALL BIN DIR: ${Simox_INSTALL_BIN_DIR}") MESSAGE (STATUS "** SIMOX INSTALL DATA DIR: ${Simox_INSTALL_DATA_DIR}") MESSAGE (STATUS "** SIMOX INSTALL HEADER DIR: ${Simox_INSTALL_HEADER_DIR}") ADD_DEFINITIONS("-DVirtualRobot_SRC_DATA_PATH=\"${Simox_DATA_DIR}\"") ADD_DEFINITIONS("-DSimox_DATA_PATH=\"${Simox_INSTALL_DATA_DIR}\"") ########################### IDE settings ################################ # use virtual folders for grouping projects in IDEs set_property(GLOBAL PROPERTY USE_FOLDERS ON) ############################# Set OS specific options ############################# IF(UNIX) # We are on Linux SET(Simox_TEST_DIR ${Simox_BIN_DIR}/tests) IF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") ADD_DEFINITIONS(-fPIC) ENDIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64") IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") MESSAGE(STATUS "Configuring Debug build") ADD_DEFINITIONS(-D_DEBUG) # -Wall -W -Werror -pedantic) ELSE() MESSAGE(STATUS "Configuring Release build") ENDIF() # use, i.e. don't skip the full RPATH for the build tree SET(CMAKE_SKIP_BUILD_RPATH FALSE) # when building, don't use the install RPATH already # (but later on when installing) SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) SET(CMAKE_INSTALL_RPATH "${Simox_INSTALL_LIB_DIR}") # add the automatically determined parts of the RPATH # which point to directories outside the build tree to the install RPATH SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) # the RPATH to be used when installing, but only if it's not a system directory LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${Simox_INSTALL_LIB_DIR}" isSystemDir) IF("${isSystemDir}" STREQUAL "-1") SET(CMAKE_INSTALL_RPATH "${Simox_INSTALL_LIB_DIR}") ENDIF("${isSystemDir}" STREQUAL "-1") ELSE(UNIX) # We are on Windows SET(Simox_TEST_DIR ${Simox_BIN_DIR}) ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) # On MSVC we compile with /MP flag (use multiple threads) IF(MSVC) ADD_DEFINITIONS(/MP) ENDIF(MSVC) ENDIF(UNIX) ####################################################################### # Setup for testing ####################################################################### ENABLE_TESTING() INCLUDE(CTest) MESSAGE(STATUS "** Test output directory: ${Simox_TEST_DIR}") ADD_DEFINITIONS(-DSimox_TEST_DIR=\"${Simox_TEST_DIR}/\") ####################################################################### # Setup dependencies ####################################################################### SET (Simox_EXTERNAL_INCLUDE_DIRS "") SET (Simox_EXTERNAL_LIBRARIES "") SET (Simox_EXTERNAL_LIBRARY_DIRS "") SET (Simox_EXTERNAL_LIBRARY_FLAGS "") SET (Simox_EXTERNAL_LIBRARY_CMAKE_INCLUDE "") ############################# SETUP MODULES ############################# MESSAGE (STATUS "** Module path: " ${CMAKE_MODULE_PATH}) #### Eigen FIND_PACKAGE (Eigen3 REQUIRED) if (Eigen3_FOUND) SET (Simox_EXTERNAL_INCLUDE_DIRS ${Simox_EXTERNAL_INCLUDE_DIRS} ${Eigen3_INCLUDE_DIR}) endif (Eigen3_FOUND) #### BOOST FIND_PACKAGE(Boost 1.42.0 COMPONENTS filesystem system unit_test_framework program_options thread REQUIRED) if (Boost_FOUND) MESSAGE (STATUS "Boost found at: ${Boost_INCLUDE_DIR}") SET (Simox_EXTERNAL_INCLUDE_DIRS ${Simox_EXTERNAL_INCLUDE_DIRS} ${Boost_INCLUDE_DIR}) SET (Simox_EXTERNAL_LIBRARY_DIRS ${Simox_EXTERNAL_LIBRARY_DIRS} ${Boost_LIBRARY_DIRS}) SET (Simox_EXTERNAL_LIBRARIES ${Simox_EXTERNAL_LIBRARIES} ${Boost_LIBRARIES}) # disable boost auto linking SET (Simox_EXTERNAL_LIBRARY_FLAGS "${Simox_EXTERNAL_LIBRARY_FLAGS} -DBOOST_ALL_NO_LIB -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_UNIT_TEST_FRAMEWORK_DYN_LINK -DBOOST_THREAD_DYN_LINK") else (Boost_FOUND) MESSAGE ("!! Could not find Boost !!") endif (Boost_FOUND) #### QT # QT_QMAKE_EXECUTABLE is the only relieable way of setting the qt4 path! # convert env var to cmake define IF(NOT "$ENV{QT_QMAKE_EXECUTABLE}" STREQUAL "") MESSAGE (STATUS "USING QT-PATH from environment variable QT_QMAKE_EXECUTABLE: $ENV{QT_QMAKE_EXECUTABLE}") file(TO_CMAKE_PATH "$ENV{QT_QMAKE_EXECUTABLE}" QT_QMAKE_EXECUTABLE) ENDIF() FIND_PACKAGE(Qt4 4.6.0 COMPONENTS QtOpenGL QtCore QtGui) #### VISUALIZATION Coin3D+Qt+SoQt / OSG+Qt ########################################## SET (Simox_VISUALIZATION FALSE) SET (Simox_VISUALIZATION_LIBS "") SET (Simox_VISUALIZATION_INCLUDE_PATHS "") SET (Simox_VISUALIZATION_COMPILE_FLAGS "") OPTION(Simox_USE_COIN_VISUALIZATION "Use Coin3D for visualization" ON) OPTION(Simox_USE_OPENSCENEGRAPH_VISUALIZATION "Use OpenSceneGraph for visualization" OFF) OPTION(Simox_USE_COLLADA "Enable the loading of robots from collada files" OFF) if (Simox_USE_COIN_VISUALIZATION) MESSAGE(STATUS "Searching Coin3D, Qt and SoQt...") ##### Coin3D FIND_PACKAGE(Coin3D REQUIRED) if (COIN3D_FOUND) MESSAGE (STATUS "Found Coin3D: " ${COIN3D_INCLUDE_DIRS}) ##INCLUDE_DIRECTORIES(${COIN3D_INCLUDE_DIRS}) ##ADD_DEFINITIONS(-DCOIN_DLL) endif (COIN3D_FOUND) if ( QT_FOUND ) MESSAGE (STATUS "Found Qt4: " ${QT_INCLUDE_DIR}) MESSAGE (STATUS "QT_USE_FILE: " ${QT_USE_FILE}) list(APPEND Simox_EXTERNAL_CMAKE_INCLUDE ${QT_USE_FILE}) include(${QT_USE_FILE}) SET (Simox_EXTERNAL_LIBRARY_CMAKE_INCLUDE ${Simox_EXTERNAL_LIBRARY_CMAKE_INCLUDE} ${QT_USE_FILE}) SET (Simox_EXTERNAL_LIBRARY_DIRS ${Simox_EXTERNAL_LIBRARY_DIRS} ${QT_LIBRARY_DIR}) SET (Simox_EXTERNAL_LIBRARIES ${Simox_EXTERNAL_LIBRARIES} ${QT_LIBRARIES}) #MESSAGE(STATUS "QT_LIBRARIES: " ${QT_LIBRARIES}) #### SoQt # This will set SoQt_INCLUDE_DIRS and SoQt_LIBRARIES FIND_PACKAGE(SoQt) if (SOQT_FOUND) MESSAGE (STATUS "Found SoQt:" ${SoQt_INCLUDE_DIRS}) ##ADD_DEFINITIONS(-DSOQT_DLL) else (SOQT_FOUND) MESSAGE (STATUS "Did not found SoQt. Disabling SoQt support.") endif (SOQT_FOUND) else ( QT_FOUND ) MESSAGE (STATUS "Did not found Qt. Disabling Qt/SoQt support.") endif ( QT_FOUND ) if (QT_FOUND AND SOQT_FOUND AND COIN3D_FOUND) MESSAGE (STATUS "Enabling Coin3D/Qt/SoQt support") MESSAGE (STATUS "By using the Coin3D library, the license of Simox is GPL, since Coin3D is a GPL library. If you want to use Simox under LGPL you must disable Coin3D support!") SET (Simox_VISUALIZATION TRUE) SET (Simox_VISUALIZATION_LIBS ${QT_LIBRARIES} ${COIN3D_LIBRARIES} ${SoQt_LIBRARIES} ) SET (Simox_VISUALIZATION_INCLUDE_PATHS ${QT_INCLUDE_DIR} ${SoQt_INCLUDE_DIRS} ${COIN3D_INCLUDE_DIRS} ) SET (Simox_VISUALIZATION_COMPILE_FLAGS " -DCOIN_DLL -DSOQT_DLL ") endif() elseif (Simox_USE_OPENSCENEGRAPH_VISUALIZATION) MESSAGE(STATUS "Searching OSG and Qt...") FIND_PACKAGE(OpenSceneGraph REQUIRED osgViewer osgUtil osgDB osgGA) if (OPENSCENEGRAPH_FOUND) MESSAGE (STATUS "Found OpenSceneGraph:" ${OPENSCENEGRAPH_INCLUDE_DIRS}) ##INCLUDE_DIRECTORIES(${OPENSCENEGRAPH_INCLUDE_DIRS}) endif (OPENSCENEGRAPH_FOUND) if ( QT_FOUND ) MESSAGE (STATUS "Found Qt4: " ${QT_INCLUDE_DIR}) list(APPEND Simox_EXTERNAL_CMAKE_INCLUDE ${QT_USE_FILE}) include(${QT_USE_FILE}) #MESSAGE(STATUS "QT_LIBRARIES: " ${QT_LIBRARIES}) else ( QT_FOUND ) MESSAGE (STATUS "Did not found Qt. Disabling Qt/OSG support.") endif ( QT_FOUND ) if (QT_FOUND AND OPENSCENEGRAPH_FOUND) MESSAGE (STATUS "Enabling OSG/Qt support") ### a little hack is needed here since osgQt is not supported in the FindOSG script MESSAGE("OPENSCENEGRAPH_LIBRARIES: ${OPENSCENEGRAPH_LIBRARIES}") LIST(GET OPENSCENEGRAPH_LIBRARIES 1 firstOsgLib) MESSAGE("firstOsgLib: ${firstOsgLib}") GET_FILENAME_COMPONENT(osgLibPath ${firstOsgLib} PATH) MESSAGE("osgLibPath: ${osgLibPath}") if (UNIX) list(APPEND OPENSCENEGRAPH_LIBRARIES ${osgLibPath}/libosgQt.so) else() list(APPEND OPENSCENEGRAPH_LIBRARIES optimized) list(APPEND OPENSCENEGRAPH_LIBRARIES ${osgLibPath}/osgQt.lib) list(APPEND OPENSCENEGRAPH_LIBRARIES debug) list(APPEND OPENSCENEGRAPH_LIBRARIES ${osgLibPath}/osgQtd.lib) endif() MESSAGE("OPENSCENEGRAPH_LIBRARIES: ${OPENSCENEGRAPH_LIBRARIES}") SET (Simox_VISUALIZATION TRUE) SET (Simox_VISUALIZATION_LIBS ${QT_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES} ) SET (Simox_VISUALIZATION_INCLUDE_PATHS ${OPENSCENEGRAPH_INCLUDE_DIRS} ) SET (Simox_VISUALIZATION_COMPILE_FLAGS "") endif() else() MESSAGE(STATUS "Visualization disabled") endif() if (Simox_USE_COLLADA) MESSAGE(STATUS "Searching for Collada...") FIND_PACKAGE(COLLADA_DOM REQUIRED 2.4) IF(COLLADA_DOM_FOUND) MESSAGE (STATUS "Found Collada") MESSAGE (STATUS "* Collada COLLADA_DOM_ROOT_DIR : ${COLLADA_DOM_ROOT_DIR}") MESSAGE (STATUS "* Collada Include DIRS: ${COLLADA_DOM_INCLUDE_DIRS}") MESSAGE (STATUS "* Collada Libs: ${COLLADA_DOM_LIBRARIES}") MESSAGE (STATUS "* Collada COLLADA_DOM_LIBRARY_DIRS: ${COLLADA_DOM_LIBRARY_DIRS}") FIND_LIBRARY(COLLADA_LIBRARY ${COLLADA_DOM_LIBRARIES} ${COLLADA_DOM_LIBRARY_DIRS}) MESSAGE (STATUS "Collada Full Collada lib: ${COLLADA_LIBRARY}") #include_directories(${COLLADA_DOM_INCLUDE_DIRS}) SET (Simox_EXTERNAL_INCLUDE_DIRS ${Simox_EXTERNAL_INCLUDE_DIRS} ${COLLADA_DOM_INCLUDE_DIRS}) SET (Simox_EXTERNAL_LIBRARIES ${Simox_EXTERNAL_LIBRARIES} ${COLLADA_LIBRARY}) SET (Simox_EXTERNAL_LIBRARY_FLAGS "${Simox_EXTERNAL_LIBRARY_FLAGS} -DDOM_DYNAMIC ") ENDIF() endif() SET (Simox_EXTERNAL_INCLUDE_DIRS ${Simox_EXTERNAL_INCLUDE_DIRS} ${Simox_VISUALIZATION_INCLUDE_PATHS}) SET (Simox_EXTERNAL_LIBRARIES ${Simox_EXTERNAL_LIBRARIES} ${Simox_VISUALIZATION_LIBS}) SET (Simox_EXTERNAL_LIBRARY_FLAGS "${Simox_EXTERNAL_LIBRARY_FLAGS} ${Simox_VISUALIZATION_COMPILE_FLAGS}") ## for historical reasons: set VirtualRobot flags to Simox flags SET (VirtualRobot_VISUALIZATION ${Simox_VISUALIZATION}) SET (VirtualRobot_VISUALIZATION_LIBS ${Simox_VISUALIZATION_LIBS}) SET (VirtualRobot_VISUALIZATION_INCLUDE_PATHS ${Simox_VISUALIZATION_INCLUDE_PATHS}) SET (VirtualRobot_VISUALIZATION_COMPILE_FLAGS ${Simox_VISUALIZATION_COMPILE_FLAGS}) INCLUDE_DIRECTORIES(${Simox_EXTERNAL_INCLUDE_DIRS}) ADD_DEFINITIONS( ${Simox_EXTERNAL_LIBRARY_FLAGS} ) ENDIF(NOT Simox_CONFIGURED)