732 lines
25 KiB
CMake
732 lines
25 KiB
CMake
|
include (${gazebo_cmake_dir}/GazeboUtils.cmake)
|
||
|
include (CheckCXXSourceCompiles)
|
||
|
|
||
|
include (${gazebo_cmake_dir}/FindOS.cmake)
|
||
|
include (FindPkgConfig)
|
||
|
include (${gazebo_cmake_dir}/FindFreeimage.cmake)
|
||
|
|
||
|
execute_process(COMMAND pkg-config --modversion protobuf
|
||
|
OUTPUT_VARIABLE PROTOBUF_VERSION
|
||
|
RESULT_VARIABLE protobuf_modversion_failed)
|
||
|
|
||
|
########################################
|
||
|
# 1. can not use BUILD_TYPE_PROFILE is defined after include this module
|
||
|
# 2. TODO: TOUPPER is a hack until we fix the build system to support standard build names
|
||
|
if (CMAKE_BUILD_TYPE)
|
||
|
string(TOUPPER ${CMAKE_BUILD_TYPE} TMP_CMAKE_BUILD_TYPE)
|
||
|
if ("${TMP_CMAKE_BUILD_TYPE}" STREQUAL "PROFILE")
|
||
|
include (${gazebo_cmake_dir}/FindGooglePerfTools.cmake)
|
||
|
if (GOOGLE_PERFTOOLS_FOUND)
|
||
|
message(STATUS "Include google-perftools")
|
||
|
else()
|
||
|
BUILD_ERROR("Need google/heap-profiler.h (libgoogle-perftools-dev) tools to compile in Profile mode")
|
||
|
endif()
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
if (PROTOBUF_VERSION LESS 2.3.0)
|
||
|
BUILD_ERROR("Incorrect version: Gazebo requires protobuf version 2.3.0 or greater")
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# The Google Protobuf library for message generation + serialization
|
||
|
find_package(Protobuf REQUIRED)
|
||
|
if (NOT PROTOBUF_FOUND)
|
||
|
BUILD_ERROR ("Missing: Google Protobuf (libprotobuf-dev)")
|
||
|
endif()
|
||
|
if (NOT PROTOBUF_PROTOC_EXECUTABLE)
|
||
|
BUILD_ERROR ("Missing: Google Protobuf Compiler (protobuf-compiler)")
|
||
|
endif()
|
||
|
if (NOT PROTOBUF_PROTOC_LIBRARY)
|
||
|
BUILD_ERROR ("Missing: Google Protobuf Compiler Library (libprotoc-dev)")
|
||
|
endif()
|
||
|
|
||
|
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
||
|
set (GZ_PROTOBUF_LIBRARY ${PROTOBUF_LIBRARY_DEBUG})
|
||
|
set (GZ_PROTOBUF_PROTOC_LIBRARY ${PROTOBUF_PROTOC_LIBRARY_DEBUG})
|
||
|
else()
|
||
|
set (GZ_PROTOBUF_LIBRARY ${PROTOBUF_LIBRARY})
|
||
|
set (GZ_PROTOBUF_PROTOC_LIBRARY ${PROTOBUF_PROTOC_LIBRARY})
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
include (FindOpenGL)
|
||
|
if (NOT OPENGL_FOUND)
|
||
|
BUILD_ERROR ("Missing: OpenGL")
|
||
|
set (HAVE_OPENGL FALSE)
|
||
|
else ()
|
||
|
if (OPENGL_INCLUDE_DIR)
|
||
|
APPEND_TO_CACHED_LIST(gazeboserver_include_dirs
|
||
|
${gazeboserver_include_dirs_desc}
|
||
|
${OPENGL_INCLUDE_DIR})
|
||
|
set (HAVE_OPENGL TRUE)
|
||
|
add_definitions(-DHAVE_OPENGL)
|
||
|
endif()
|
||
|
if (OPENGL_LIBRARIES)
|
||
|
APPEND_TO_CACHED_LIST(gazeboserver_link_libs
|
||
|
${gazeboserver_link_libs_desc}
|
||
|
${OPENGL_LIBRARIES})
|
||
|
endif()
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
include (FindOpenAL)
|
||
|
if (NOT OPENAL_FOUND)
|
||
|
BUILD_WARNING ("OpenAL not found, audio support will be disabled.")
|
||
|
set (HAVE_OPENAL OFF CACHE BOOL "HAVE OpenAL" FORCE)
|
||
|
else ()
|
||
|
set (HAVE_OPENAL ON CACHE BOOL "HAVE OpenAL" FORCE)
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
find_package(HDF5 COMPONENTS C CXX)
|
||
|
|
||
|
if (NOT HDF5_FOUND)
|
||
|
BUILD_WARNING("HDF5 not found")
|
||
|
else ()
|
||
|
message(STATUS "HDF5 Found")
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find packages
|
||
|
|
||
|
# In Visual Studio we use configure.bat to trick all path cmake
|
||
|
# variables so let's consider that as a replacement for pkgconfig
|
||
|
if (MSVC)
|
||
|
set (PKG_CONFIG_FOUND TRUE)
|
||
|
endif()
|
||
|
|
||
|
if (PKG_CONFIG_FOUND)
|
||
|
pkg_check_modules(CURL libcurl)
|
||
|
if (NOT CURL_FOUND)
|
||
|
BUILD_ERROR ("Missing: libcurl. Required for connection to model database.")
|
||
|
endif()
|
||
|
|
||
|
pkg_check_modules(PROFILER libprofiler)
|
||
|
if (PROFILER_FOUND)
|
||
|
set (CMAKE_LINK_FLAGS_PROFILE "-Wl,--no-as-needed -lprofiler -Wl,--as-needed ${CMAKE_LINK_FLAGS_PROFILE}" CACHE INTERNAL "Link flags for profile")
|
||
|
else ()
|
||
|
find_library(PROFILER profiler)
|
||
|
if (PROFILER)
|
||
|
message (STATUS "Looking for libprofiler - found")
|
||
|
set (CMAKE_LINK_FLAGS_PROFILE "-Wl,--no-as-needed -lprofiler -Wl,--as-needed ${CMAKE_LINK_FLAGS_PROFILE}" CACHE INTERNAL "Link flags for profile")
|
||
|
else()
|
||
|
message (STATUS "Looking for libprofiler - not found")
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
pkg_check_modules(TCMALLOC libtcmalloc)
|
||
|
if (TCMALLOC_FOUND)
|
||
|
set (CMAKE_LINK_FLAGS_PROFILE "${CMAKE_LINK_FLAGS_PROFILE} -Wl,--no-as-needed -ltcmalloc -Wl,--no-as-needed"
|
||
|
CACHE INTERNAL "Link flags for profile" FORCE)
|
||
|
else ()
|
||
|
find_library(TCMALLOC tcmalloc)
|
||
|
if (TCMALLOC)
|
||
|
message (STATUS "Looking for libtcmalloc - found")
|
||
|
set (CMAKE_LINK_FLAGS_PROFILE "${CMAKE_LINK_FLAGS_PROFILE} -ltcmalloc"
|
||
|
CACHE INTERNAL "Link flags for profile" FORCE)
|
||
|
else ()
|
||
|
message (STATUS "Looking for libtcmalloc - not found")
|
||
|
endif()
|
||
|
endif ()
|
||
|
|
||
|
#################################################
|
||
|
# Find Simbody
|
||
|
set(SimTK_INSTALL_DIR ${SimTK_INSTALL_PREFIX})
|
||
|
#list(APPEND CMAKE_MODULE_PATH ${SimTK_INSTALL_PREFIX}/share/cmake)
|
||
|
find_package(Simbody)
|
||
|
if (Simbody_FOUND)
|
||
|
set (HAVE_SIMBODY TRUE)
|
||
|
else()
|
||
|
BUILD_WARNING ("Simbody not found, for simbody physics engine option, please install libsimbody-dev.")
|
||
|
set (HAVE_SIMBODY FALSE)
|
||
|
endif()
|
||
|
|
||
|
#################################################
|
||
|
# Find DART
|
||
|
find_package(DARTCore 4.3.3 QUIET)
|
||
|
if (DARTCore_FOUND)
|
||
|
message (STATUS "Looking for DARTCore - found")
|
||
|
set (HAVE_DART TRUE)
|
||
|
else()
|
||
|
message (STATUS "Looking for DARTCore - not found")
|
||
|
BUILD_WARNING ("DART not found, for dart physics engine option, please install libdart-core4-dev.")
|
||
|
set (HAVE_DART FALSE)
|
||
|
endif()
|
||
|
|
||
|
#################################################
|
||
|
# Find tinyxml. Only debian distributions package tinyxml with a pkg-config
|
||
|
# Use pkg_check_modules and fallback to manual detection
|
||
|
# (needed, at least, for MacOS)
|
||
|
|
||
|
# Use system installation on UNIX and Apple, and internal copy on Windows
|
||
|
if (UNIX OR APPLE)
|
||
|
message (STATUS "Using system tinyxml.")
|
||
|
set (USE_EXTERNAL_TINYXML True)
|
||
|
elseif(WIN32)
|
||
|
message (STATUS "Using internal tinyxml.")
|
||
|
set (USE_EXTERNAL_TINYXML False)
|
||
|
add_definitions(-DTIXML_USE_STL)
|
||
|
else()
|
||
|
message (STATUS "Unknown platform, unable to configure tinyxml.")
|
||
|
BUILD_ERROR("Unknown platform")
|
||
|
endif()
|
||
|
|
||
|
if (USE_EXTERNAL_TINYXML)
|
||
|
pkg_check_modules(tinyxml tinyxml)
|
||
|
if (NOT tinyxml_FOUND)
|
||
|
find_path (tinyxml_INCLUDE_DIRS tinyxml.h ${tinyxml_INCLUDE_DIRS} ENV CPATH)
|
||
|
find_library(tinyxml_LIBRARIES NAMES tinyxml)
|
||
|
set (tinyxml_FAIL False)
|
||
|
if (NOT tinyxml_INCLUDE_DIRS)
|
||
|
message (STATUS "Looking for tinyxml headers - not found")
|
||
|
set (tinyxml_FAIL True)
|
||
|
endif()
|
||
|
if (NOT tinyxml_LIBRARIES)
|
||
|
message (STATUS "Looking for tinyxml library - not found")
|
||
|
set (tinyxml_FAIL True)
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
if (tinyxml_FAIL)
|
||
|
message (STATUS "Looking for tinyxml.h - not found")
|
||
|
BUILD_ERROR("Missing: tinyxml")
|
||
|
endif()
|
||
|
else()
|
||
|
# Needed in WIN32 since in UNIX the flag is added in the code installed
|
||
|
message (STATUS "Skipping search for tinyxml")
|
||
|
set (tinyxml_INCLUDE_DIRS "")
|
||
|
set (tinyxml_LIBRARIES "")
|
||
|
set (tinyxml_LIBRARY_DIRS "")
|
||
|
endif()
|
||
|
|
||
|
#################################################
|
||
|
# Find tinyxml2. Only debian distributions package tinyxml with a pkg-config
|
||
|
# Use pkg_check_modules and fallback to manual detection
|
||
|
# (needed, at least, for MacOS)
|
||
|
|
||
|
# Use system installation on UNIX and Apple, and internal copy on Windows
|
||
|
if (UNIX OR APPLE)
|
||
|
message (STATUS "Using system tinyxml2.")
|
||
|
set (USE_EXTERNAL_TINYXML2 True)
|
||
|
elseif(WIN32)
|
||
|
message (STATUS "Using internal tinyxml2.")
|
||
|
set (USE_EXTERNAL_TINYXML2 False)
|
||
|
else()
|
||
|
message (STATUS "Unknown platform, unable to configure tinyxml2.")
|
||
|
BUILD_ERROR("Unknown platform")
|
||
|
endif()
|
||
|
|
||
|
if (USE_EXTERNAL_TINYXML2)
|
||
|
pkg_check_modules(tinyxml2 tinyxml2)
|
||
|
if (NOT tinyxml2_FOUND)
|
||
|
find_path (tinyxml2_INCLUDE_DIRS tinyxml2.h ${tinyxml2_INCLUDE_DIRS} ENV CPATH)
|
||
|
find_library(tinyxml2_LIBRARIES NAMES tinyxml2)
|
||
|
set (tinyxml2_FAIL False)
|
||
|
if (NOT tinyxml2_INCLUDE_DIRS)
|
||
|
message (STATUS "Looking for tinyxml2 headers - not found")
|
||
|
set (tinyxml2_FAIL True)
|
||
|
endif()
|
||
|
if (NOT tinyxml2_LIBRARIES)
|
||
|
message (STATUS "Looking for tinyxml2 library - not found")
|
||
|
set (tinyxml2_FAIL True)
|
||
|
endif()
|
||
|
if (NOT tinyxml2_LIBRARY_DIRS)
|
||
|
message (STATUS "Looking for tinyxml2 library dirs - not found")
|
||
|
set (tinyxml2_FAIL True)
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
if (tinyxml2_FAIL)
|
||
|
message (STATUS "Looking for tinyxml2.h - not found")
|
||
|
BUILD_ERROR("Missing: tinyxml2")
|
||
|
else()
|
||
|
include_directories(${tinyxml2_INCLUDE_DIRS})
|
||
|
link_directories(${tinyxml2_LIBRARY_DIRS})
|
||
|
endif()
|
||
|
else()
|
||
|
# Needed in WIN32 since in UNIX the flag is added in the code installed
|
||
|
message (STATUS "Skipping search for tinyxml2")
|
||
|
set (tinyxml2_INCLUDE_DIRS "")
|
||
|
set (tinyxml2_LIBRARIES "")
|
||
|
set (tinyxml2_LIBRARY_DIRS "")
|
||
|
endif()
|
||
|
|
||
|
if (NOT WIN32)
|
||
|
#################################################
|
||
|
# Find libtar.
|
||
|
find_path (libtar_INCLUDE_DIRS libtar.h)
|
||
|
find_library(libtar_LIBRARIES tar)
|
||
|
set (LIBTAR_FOUND True)
|
||
|
|
||
|
if (NOT libtar_INCLUDE_DIRS)
|
||
|
message (STATUS "Looking for libtar.h - not found")
|
||
|
set (LIBTAR_FOUND False)
|
||
|
else ()
|
||
|
message (STATUS "Looking for libtar.h - found")
|
||
|
include_directories(${libtar_INCLUDE_DIRS})
|
||
|
endif ()
|
||
|
if (NOT libtar_LIBRARIES)
|
||
|
message (STATUS "Looking for libtar.so - not found")
|
||
|
set (LIBTAR_FOUND False)
|
||
|
else ()
|
||
|
message (STATUS "Looking for libtar.so - found")
|
||
|
endif ()
|
||
|
|
||
|
if (NOT LIBTAR_FOUND)
|
||
|
BUILD_ERROR("Missing: libtar")
|
||
|
endif()
|
||
|
else()
|
||
|
set(libtar_LIBRARIES "")
|
||
|
endif()
|
||
|
|
||
|
#################################################
|
||
|
# Find TBB
|
||
|
pkg_check_modules(TBB tbb)
|
||
|
set (TBB_PKG_CONFIG "tbb")
|
||
|
if (NOT TBB_FOUND)
|
||
|
message(STATUS "TBB not found, attempting to detect manually")
|
||
|
set (TBB_PKG_CONFIG "")
|
||
|
|
||
|
find_library(tbb_library tbb ENV LD_LIBRARY_PATH)
|
||
|
if (tbb_library)
|
||
|
set(TBB_FOUND true)
|
||
|
set(TBB_LIBRARIES ${tbb_library})
|
||
|
else (tbb_library)
|
||
|
BUILD_ERROR ("Missing: TBB - Threading Building Blocks")
|
||
|
endif(tbb_library)
|
||
|
endif (NOT TBB_FOUND)
|
||
|
|
||
|
#################################################
|
||
|
# Find OGRE
|
||
|
# On Windows, we assume that all the OGRE* defines are passed in manually
|
||
|
# to CMake.
|
||
|
if (NOT WIN32)
|
||
|
execute_process(COMMAND pkg-config --modversion OGRE
|
||
|
OUTPUT_VARIABLE OGRE_VERSION)
|
||
|
string(REPLACE "\n" "" OGRE_VERSION ${OGRE_VERSION})
|
||
|
|
||
|
string (REGEX REPLACE "^([0-9]+).*" "\\1"
|
||
|
OGRE_MAJOR_VERSION "${OGRE_VERSION}")
|
||
|
string (REGEX REPLACE "^[0-9]+\\.([0-9]+).*" "\\1"
|
||
|
OGRE_MINOR_VERSION "${OGRE_VERSION}")
|
||
|
string (REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1"
|
||
|
OGRE_PATCH_VERSION ${OGRE_VERSION})
|
||
|
|
||
|
set(OGRE_VERSION
|
||
|
${OGRE_MAJOR_VERSION}.${OGRE_MINOR_VERSION}.${OGRE_PATCH_VERSION})
|
||
|
endif()
|
||
|
|
||
|
pkg_check_modules(OGRE-RTShaderSystem
|
||
|
OGRE-RTShaderSystem>=${MIN_OGRE_VERSION})
|
||
|
|
||
|
if (OGRE-RTShaderSystem_FOUND)
|
||
|
set(ogre_ldflags ${OGRE-RTShaderSystem_LDFLAGS})
|
||
|
set(ogre_include_dirs ${OGRE-RTShaderSystem_INCLUDE_DIRS})
|
||
|
set(ogre_libraries ${OGRE-RTShaderSystem_LIBRARIES})
|
||
|
set(ogre_library_dirs ${OGRE-RTShaderSystem_LIBRARY_DIRS})
|
||
|
set(ogre_cflags ${OGRE-RTShaderSystem_CFLAGS})
|
||
|
|
||
|
set (INCLUDE_RTSHADER ON CACHE BOOL "Enable GPU shaders")
|
||
|
else ()
|
||
|
set (INCLUDE_RTSHADER OFF CACHE BOOL "Enable GPU shaders")
|
||
|
endif ()
|
||
|
|
||
|
pkg_check_modules(OGRE OGRE>=${MIN_OGRE_VERSION})
|
||
|
# There are some runtime problems to solve with ogre-1.9.
|
||
|
# Please read gazebo issues: 994, 995
|
||
|
if (NOT OGRE_FOUND)
|
||
|
BUILD_ERROR("Missing: Ogre3d version >=${MIN_OGRE_VERSION}(http://www.orge3d.org)")
|
||
|
else ()
|
||
|
set(ogre_ldflags ${ogre_ldflags} ${OGRE_LDFLAGS})
|
||
|
set(ogre_include_dirs ${ogre_include_dirs} ${OGRE_INCLUDE_DIRS})
|
||
|
set(ogre_libraries ${ogre_libraries};${OGRE_LIBRARIES})
|
||
|
set(ogre_library_dirs ${ogre_library_dirs} ${OGRE_LIBRARY_DIRS})
|
||
|
set(ogre_cflags ${ogre_cflags} ${OGRE_CFLAGS})
|
||
|
endif ()
|
||
|
|
||
|
pkg_check_modules(OGRE-Terrain OGRE-Terrain)
|
||
|
if (OGRE-Terrain_FOUND)
|
||
|
set(ogre_ldflags ${ogre_ldflags} ${OGRE-Terrain_LDFLAGS})
|
||
|
set(ogre_include_dirs ${ogre_include_dirs} ${OGRE-Terrain_INCLUDE_DIRS})
|
||
|
set(ogre_libraries ${ogre_libraries};${OGRE-Terrain_LIBRARIES})
|
||
|
set(ogre_library_dirs ${ogre_library_dirs} ${OGRE-Terrain_LIBRARY_DIRS})
|
||
|
set(ogre_cflags ${ogre_cflags} ${OGRE-Terrain_CFLAGS})
|
||
|
endif()
|
||
|
|
||
|
pkg_check_modules(OGRE-Overlay OGRE-Overlay)
|
||
|
if (OGRE-Overlay_FOUND)
|
||
|
set(ogre_ldflags ${ogre_ldflags} ${OGRE-Overlay_LDFLAGS})
|
||
|
set(ogre_include_dirs ${ogre_include_dirs} ${OGRE-Overlay_INCLUDE_DIRS})
|
||
|
set(ogre_libraries ${ogre_libraries};${OGRE-Overlay_LIBRARIES})
|
||
|
set(ogre_library_dirs ${ogre_library_dirs} ${OGRE-Overlay_LIBRARY_DIRS})
|
||
|
set(ogre_cflags ${ogre_cflags} ${OGRE-Overlay_CFLAGS})
|
||
|
endif()
|
||
|
|
||
|
|
||
|
set (OGRE_INCLUDE_DIRS ${ogre_include_dirs}
|
||
|
CACHE INTERNAL "Ogre include path")
|
||
|
|
||
|
# Also find OGRE's plugin directory, which is provided in its .pc file as the
|
||
|
# `plugindir` variable. We have to call pkg-config manually to get it.
|
||
|
# On Windows, we assume that all the OGRE* defines are passed in manually
|
||
|
# to CMake.
|
||
|
if (NOT WIN32)
|
||
|
execute_process(COMMAND pkg-config --variable=plugindir OGRE
|
||
|
OUTPUT_VARIABLE _pkgconfig_invoke_result
|
||
|
RESULT_VARIABLE _pkgconfig_failed)
|
||
|
if(_pkgconfig_failed)
|
||
|
BUILD_WARNING ("Failed to find OGRE's plugin directory. The build will succeed, but gazebo will likely fail to run.")
|
||
|
else()
|
||
|
# This variable will be substituted into cmake/setup.sh.in
|
||
|
set (OGRE_PLUGINDIR ${_pkgconfig_invoke_result})
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Check and find libccd (if needed)
|
||
|
pkg_check_modules(CCD ccd>=1.4)
|
||
|
if (NOT CCD_FOUND)
|
||
|
message(STATUS "Using internal copy of libccd")
|
||
|
set(CCD_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/deps/libccd/include")
|
||
|
set(CCD_LIBRARY_DIRS "${CMAKE_BINARY_DIR}/deps/libccd")
|
||
|
set(CCD_LIBRARIES gazebo_ccd)
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find OpenAL
|
||
|
# pkg_check_modules(OAL openal)
|
||
|
# if (NOT OAL_FOUND)
|
||
|
# BUILD_WARNING ("Openal not found. Audio capabilities will be disabled.")
|
||
|
# set (HAVE_OPENAL FALSE)
|
||
|
# else (NOT OAL_FOUND)
|
||
|
# set (HAVE_OPENAL TRUE)
|
||
|
# endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find libswscale format
|
||
|
pkg_check_modules(libswscale libswscale)
|
||
|
if (NOT libswscale_FOUND)
|
||
|
BUILD_WARNING ("libswscale not found. Audio-video capabilities will be disabled.")
|
||
|
else()
|
||
|
include_directories(${libswscale_INCLUDE_DIRS})
|
||
|
link_directories(${libswscale_LIBRARY_DIRS})
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find AV format
|
||
|
pkg_check_modules(libavformat libavformat)
|
||
|
if (NOT libavformat_FOUND)
|
||
|
BUILD_WARNING ("libavformat not found. Audio-video capabilities will be disabled.")
|
||
|
else()
|
||
|
include_directories(${libavformat_INCLUDE_DIRS})
|
||
|
link_directories(${libavformat_LIBRARY_DIRS})
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find avcodec
|
||
|
pkg_check_modules(libavcodec libavcodec)
|
||
|
if (NOT libavcodec_FOUND)
|
||
|
BUILD_WARNING ("libavcodec not found. Audio-video capabilities will be disabled.")
|
||
|
else()
|
||
|
include_directories(${libavcodec_INCLUDE_DIRS})
|
||
|
link_directories(${libavcodec_LIBRARY_DIRS})
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find avutil
|
||
|
pkg_check_modules(libavutil libavutil)
|
||
|
if (NOT libavutil_FOUND)
|
||
|
BUILD_WARNING ("libavutil not found. Audio-video capabilities will be disabled.")
|
||
|
endif ()
|
||
|
|
||
|
|
||
|
if (libavutil_FOUND AND libavformat_FOUND AND libavcodec_FOUND AND libswscale_FOUND)
|
||
|
set (HAVE_FFMPEG TRUE)
|
||
|
else ()
|
||
|
set (HAVE_FFMPEG FALSE)
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find Player
|
||
|
pkg_check_modules(PLAYER playercore>=3.0 playerc++ playerwkb)
|
||
|
if (NOT PLAYER_FOUND)
|
||
|
set (INCLUDE_PLAYER OFF CACHE BOOL "Build gazebo plugin for player")
|
||
|
BUILD_WARNING ("Player not found, gazebo plugin for player will not be built.")
|
||
|
else (NOT PLAYER_FOUND)
|
||
|
set (INCLUDE_PLAYER ON CACHE BOOL "Build gazebo plugin for player")
|
||
|
set (PLAYER_INCLUDE_DIRS ${PLAYER_INCLUDE_DIRS} CACHE INTERNAL
|
||
|
"Player include directory")
|
||
|
set (PLAYER_LINK_DIRS ${PLAYER_LINK_DIRS} CACHE INTERNAL
|
||
|
"Player link directory")
|
||
|
set (PLAYER_LINK_LIBS ${PLAYER_LIBRARIES} CACHE INTERNAL
|
||
|
"Player libraries")
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find GNU Triangulation Surface Library
|
||
|
pkg_check_modules(gts gts)
|
||
|
if (gts_FOUND)
|
||
|
message (STATUS "Looking for GTS - found")
|
||
|
set (HAVE_GTS TRUE)
|
||
|
else ()
|
||
|
set (HAVE_GTS FALSE)
|
||
|
BUILD_WARNING ("GNU Triangulation Surface library not found - Gazebo will not have CSG support.")
|
||
|
endif ()
|
||
|
|
||
|
#################################################
|
||
|
# Find bullet
|
||
|
# First and preferred option is to look for bullet standard pkgconfig,
|
||
|
# so check it first. if it is not present, check for the OSRF
|
||
|
# custom bullet2.82.pc file
|
||
|
pkg_check_modules(BULLET bullet>=2.82)
|
||
|
if (NOT BULLET_FOUND)
|
||
|
pkg_check_modules(BULLET bullet2.82>=2.82)
|
||
|
endif()
|
||
|
|
||
|
if (BULLET_FOUND)
|
||
|
set (HAVE_BULLET TRUE)
|
||
|
add_definitions( -DLIBBULLET_VERSION=${BULLET_VERSION} )
|
||
|
else()
|
||
|
set (HAVE_BULLET FALSE)
|
||
|
add_definitions( -DLIBBULLET_VERSION=0.0 )
|
||
|
BUILD_WARNING ("Bullet > 2.82 not found, for bullet physics engine option, please install libbullet2.82-dev.")
|
||
|
endif()
|
||
|
|
||
|
if (BULLET_VERSION VERSION_GREATER 2.82)
|
||
|
add_definitions( -DLIBBULLET_VERSION_GT_282 )
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find libusb
|
||
|
pkg_check_modules(libusb-1.0 libusb-1.0)
|
||
|
if (NOT libusb-1.0_FOUND)
|
||
|
BUILD_WARNING ("libusb-1.0 not found. USB peripherals support will be disabled.")
|
||
|
set (HAVE_USB OFF CACHE BOOL "HAVE USB" FORCE)
|
||
|
else()
|
||
|
message (STATUS "Looking for libusb-1.0 - found. USB peripherals support enabled.")
|
||
|
set (HAVE_USB ON CACHE BOOL "HAVE USB" FORCE)
|
||
|
include_directories(${libusb-1.0_INCLUDE_DIRS})
|
||
|
link_directories(${libusb-1.0_LIBRARY_DIRS})
|
||
|
endif ()
|
||
|
|
||
|
#################################################
|
||
|
# Find Oculus SDK.
|
||
|
pkg_check_modules(OculusVR OculusVR)
|
||
|
|
||
|
if (HAVE_USB AND OculusVR_FOUND)
|
||
|
message (STATUS "Oculus Rift support enabled.")
|
||
|
set (HAVE_OCULUS ON CACHE BOOL "HAVE OCULUS" FORCE)
|
||
|
include_directories(SYSTEM ${OculusVR_INCLUDE_DIRS})
|
||
|
link_directories(${OculusVR_LIBRARY_DIRS})
|
||
|
else ()
|
||
|
BUILD_WARNING ("Oculus Rift support will be disabled.")
|
||
|
set (HAVE_OCULUS OFF CACHE BOOL "HAVE OCULUS" FORCE)
|
||
|
endif()
|
||
|
else (PKG_CONFIG_FOUND)
|
||
|
set (BUILD_GAZEBO OFF CACHE INTERNAL "Build Gazebo" FORCE)
|
||
|
BUILD_ERROR ("Error: pkg-config not found")
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find SDFormat
|
||
|
set (SDFormat_MIN_VERSION 4.1.0)
|
||
|
find_package(SDFormat ${SDFormat_MIN_VERSION})
|
||
|
|
||
|
if (NOT SDFormat_FOUND)
|
||
|
message (STATUS "Looking for SDFormat - not found")
|
||
|
BUILD_ERROR ("Missing: SDF version >=${SDFormat_MIN_VERSION}. Required for reading and writing SDF files.")
|
||
|
else()
|
||
|
message (STATUS "Looking for SDFormat - found")
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find QT
|
||
|
find_package(Qt4 COMPONENTS QtCore QtGui QtXml QtXmlPatterns REQUIRED)
|
||
|
if (NOT QT4_FOUND)
|
||
|
BUILD_ERROR("Missing: Qt4")
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find Boost, if not specified manually
|
||
|
include(FindBoost)
|
||
|
find_package(Boost ${MIN_BOOST_VERSION} REQUIRED thread signals system filesystem program_options regex iostreams date_time)
|
||
|
|
||
|
if (NOT Boost_FOUND)
|
||
|
set (BUILD_GAZEBO OFF CACHE INTERNAL "Build Gazebo" FORCE)
|
||
|
BUILD_ERROR ("Boost not found. Please install thread signals system filesystem program_options regex date_time boost version ${MIN_BOOST_VERSION} or higher.")
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find libdl
|
||
|
find_path(libdl_include_dir dlfcn.h /usr/include /usr/local/include)
|
||
|
if (NOT libdl_include_dir)
|
||
|
message (STATUS "Looking for dlfcn.h - not found")
|
||
|
BUILD_ERROR ("Missing libdl: Required for plugins.")
|
||
|
set (libdl_include_dir /usr/include)
|
||
|
else (NOT libdl_include_dir)
|
||
|
message (STATUS "Looking for dlfcn.h - found")
|
||
|
endif ()
|
||
|
|
||
|
find_library(libdl_library dl /usr/lib /usr/local/lib)
|
||
|
if (NOT libdl_library)
|
||
|
message (STATUS "Looking for libdl - not found")
|
||
|
BUILD_ERROR ("Missing libdl: Required for plugins.")
|
||
|
set(libdl_library "")
|
||
|
else (NOT libdl_library)
|
||
|
message (STATUS "Looking for libdl - found")
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find gdal
|
||
|
include (FindGDAL)
|
||
|
if (NOT GDAL_FOUND)
|
||
|
message (STATUS "Looking for libgdal - not found")
|
||
|
BUILD_WARNING ("GDAL not found, Digital elevation terrains support will be disabled.")
|
||
|
set (HAVE_GDAL OFF CACHE BOOL "HAVE GDAL" FORCE)
|
||
|
else ()
|
||
|
message (STATUS "Looking for libgdal - found")
|
||
|
set (HAVE_GDAL ON CACHE BOOL "HAVE GDAL" FORCE)
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Include man pages stuff
|
||
|
include (${gazebo_cmake_dir}/Ronn2Man.cmake)
|
||
|
include (${gazebo_cmake_dir}/Man.cmake)
|
||
|
add_manpage_target()
|
||
|
|
||
|
########################################
|
||
|
# Find Space Navigator header and library
|
||
|
find_library(SPNAV_LIBRARY NAMES spnav)
|
||
|
find_file(SPNAV_HEADER NAMES spnav.h)
|
||
|
if (SPNAV_LIBRARY AND SPNAV_HEADER)
|
||
|
message(STATUS "Looking for libspnav and spnav.h - found")
|
||
|
set(HAVE_SPNAV TRUE)
|
||
|
else()
|
||
|
message(STATUS "Looking for libspnav and spnav.h - not found")
|
||
|
set(HAVE_SPNAV FALSE)
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find xsltproc, which is used by tools/check_test_ran.py
|
||
|
find_program(XSLTPROC xsltproc)
|
||
|
if (NOT EXISTS ${XSLTPROC})
|
||
|
BUILD_WARNING("xsltproc not found. The check_test_ran.py script will cause tests to fail.")
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find uuid-dev Library
|
||
|
#pkg_check_modules(uuid uuid)
|
||
|
#if (uuid_FOUND)
|
||
|
# message (STATUS "Looking for uuid - found")
|
||
|
# set (HAVE_UUID TRUE)
|
||
|
#else ()
|
||
|
# set (HAVE_UUID FALSE)
|
||
|
# BUILD_WARNING ("uuid-dev library not found - Gazebo will not have uuid support.")
|
||
|
#endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find uuid
|
||
|
# - In UNIX we use uuid library.
|
||
|
# - In Windows the native RPC call, no dependency needed.
|
||
|
if (UNIX)
|
||
|
pkg_check_modules(uuid uuid)
|
||
|
if (uuid_FOUND)
|
||
|
message (STATUS "Looking for uuid - found")
|
||
|
set (HAVE_UUID TRUE)
|
||
|
else ()
|
||
|
set (HAVE_UUID FALSE)
|
||
|
BUILD_WARNING ("uuid-dev library not found - Gazebo will not have uuid support.")
|
||
|
endif ()
|
||
|
else()
|
||
|
message (STATUS "Using Windows RPC UuidCreate function")
|
||
|
set (HAVE_UUID TRUE)
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find graphviz
|
||
|
include (${gazebo_cmake_dir}/FindGraphviz.cmake)
|
||
|
if (NOT GRAPHVIZ_FOUND)
|
||
|
message (STATUS "Looking for libgraphviz-dev - not found")
|
||
|
BUILD_WARNING ("Graphviz not found, Model editor's schematic view will be disabled.")
|
||
|
set (HAVE_GRAPHVIZ OFF CACHE BOOL "HAVE GRAPHVIZ" FORCE)
|
||
|
else ()
|
||
|
message (STATUS "Looking for libgraphviz-dev - found")
|
||
|
set (HAVE_GRAPHVIZ ON CACHE BOOL "HAVE GRAPHVIZ" FORCE)
|
||
|
endif ()
|
||
|
|
||
|
########################################
|
||
|
# Find ignition math in unix platforms
|
||
|
# In Windows we expect a call from configure.bat script with the paths
|
||
|
if (NOT WIN32)
|
||
|
find_package(ignition-math2 2.4 QUIET)
|
||
|
if (NOT ignition-math2_FOUND)
|
||
|
message(STATUS "Looking for ignition-math2-config.cmake - not found")
|
||
|
BUILD_ERROR ("Missing: Ignition math2 library.")
|
||
|
else()
|
||
|
message(STATUS "Looking for ignition-math2-config.cmake - found")
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
########################################
|
||
|
# Find the Ignition_Transport library
|
||
|
# In Windows we expect a call from configure.bat script with the paths
|
||
|
if (NOT WIN32)
|
||
|
find_package(ignition-transport2 QUIET)
|
||
|
if (NOT ignition-transport2_FOUND)
|
||
|
find_package(ignition-transport1 QUIET)
|
||
|
if (NOT ignition-transport1_FOUND)
|
||
|
BUILD_WARNING ("Missing: Ignition Transport (libignition-transport-dev or libignition-transport2-dev")
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
if (ignition-transport2_FOUND OR ignition-transport1_FOUND)
|
||
|
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IGNITION-TRANSPORT_CXX_FLAGS}")
|
||
|
include_directories(${IGNITION-TRANSPORT_INCLUDE_DIRS})
|
||
|
link_directories(${IGNITION-TRANSPORT_LIBRARY_DIRS})
|
||
|
endif()
|
||
|
endif()
|
||
|
|
||
|
################################################
|
||
|
# Find Valgrind for checking memory leaks in the
|
||
|
# tests
|
||
|
find_program(VALGRIND_PROGRAM NAMES valgrind PATH ${VALGRIND_ROOT}/bin)
|
||
|
option(GAZEBO_RUN_VALGRIND_TESTS "Run gazebo tests with Valgrind" FALSE)
|
||
|
mark_as_advanced(GAZEBO_RUN_VALGRIND_TESTS)
|
||
|
if (GAZEBO_RUN_VALGRIND_TESTS AND NOT VALGRIND_PROGRAM)
|
||
|
BUILD_WARNING("valgrind not found. Memory check tests will be skipped.")
|
||
|
endif()
|
||
|
|
||
|
|
||
|
########################################
|
||
|
# Find QWT (QT graphing library)
|
||
|
#find_path(QWT_INCLUDE_DIR NAMES qwt.h PATHS
|
||
|
# /usr/include
|
||
|
# /usr/local/include
|
||
|
# "$ENV{LIB_DIR}/include"
|
||
|
# "$ENV{INCLUDE}"
|
||
|
# PATH_SUFFIXES qwt-qt4 qwt qwt5
|
||
|
# )
|
||
|
#
|
||
|
#find_library(QWT_LIBRARY NAMES qwt qwt6 qwt5 PATHS
|
||
|
# /usr/lib
|
||
|
# /usr/local/lib
|
||
|
# "$ENV{LIB_DIR}/lib"
|
||
|
# "$ENV{LIB}/lib"
|
||
|
# )
|
||
|
#
|
||
|
#if (QWT_INCLUDE_DIR AND QWT_LIBRARY)
|
||
|
# set(HAVE_QWT TRUE)
|
||
|
#endif (QWT_INCLUDE_DIR AND QWT_LIBRARY)
|
||
|
#
|
||
|
#if (HAVE_QWT)
|
||
|
# if (NOT QWT_FIND_QUIETLY)
|
||
|
# message(STATUS "Found Qwt: ${QWT_LIBRARY}")
|
||
|
# endif (NOT QWT_FIND_QUIETLY)
|
||
|
#else ()
|
||
|
# if (QWT_FIND_REQUIRED)
|
||
|
# BUILD_WARNING ("Could not find libqwt-dev. Plotting features will be disabled.")
|
||
|
# endif (QWT_FIND_REQUIRED)
|
||
|
#endif ()
|