cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
# CMake 2.4.6 doesn't include FindPkgConfig, so we provide our own copy
include($ENV{ROS_ROOT}/core/rosbuild/FindPkgConfig.cmake)

# Set the build type.  Options are:
#  Coverage       : w/ debug symbols, w/o optimization, w/ code-coverage
#  Debug          : w/ debug symbols, w/o optimization
#  Release        : w/o debug symbols, w/ optimization
#  RelWithDebInfo : w/ debug symbols, w/ optimization
#  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries
#set(ROS_BUILD_TYPE RelWithDebInfo)

#generate the actions
rosbuild_find_ros_package(actionlib_msgs)
include(${actionlib_msgs_PACKAGE_PATH}/cmake/actionbuild.cmake)
genaction()

rosbuild_init()


#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set the default path for built libraries to the "lib" directory
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

#uncomment if you have defined messages
#rosbuild_genmsg()
#uncomment if you have defined services
#rosbuild_gensrv()

#common commands for building c++ executables and libraries
#rosbuild_add_library(${PROJECT_NAME} src/example.cpp)
#target_link_libraries(${PROJECT_NAME} another_library)
#rosbuild_add_boost_directories()
#rosbuild_link_boost(${PROJECT_NAME} thread)
#rosbuild_add_executable(example examples/example.cpp)
#target_link_libraries(example ${PROJECT_NAME})


# Dynamic reconfigure
rosbuild_find_ros_package(dynamic_reconfigure)
include(${dynamic_reconfigure_PACKAGE_PATH}/cmake/cfgbuild.cmake)
gencfg()


#Rviz does not export all necessary include dirs, so we need to fix that
#(otherwise we can't include tool.h)
rosbuild_find_ros_package(rviz)
include_directories(${rviz_PACKAGE_PATH}/src/rviz)

include_directories( ui )

find_package(wxWidgets REQUIRED)
include(${wxWidgets_USE_FILE})
include_directories( ${wxWidgets_INCLUDE_DIRS} )

pkg_check_modules(OGRE OGRE)
include_directories( ${OGRE_INCLUDE_DIRS} )
link_directories( ${OGRE_LIBRARY_DIRS} )
                                    
# define intermediate compilation units

rosbuild_add_library(interactive_manipulation_backend
  src/interactive_manipulation_backend.cpp
)

rosbuild_add_library(point_head_display
  src/point_head_camera_display.cpp
  src/point_head_view_controller.cpp
)

rosbuild_add_library(publish_click_display
  src/publish_click_camera_display.cpp
  src/publish_click_view_controller.cpp
)

rosbuild_add_library(camera_focus_display
  src/camera_focus_display.cpp
  ui/pr2_interactive_manipulation/interactive_manipulation_ui.cpp
)

rosbuild_add_library(interactive_manipulation_frontend 
  src/interactive_manipulation_frontend.cpp
  src/interactive_manipulation_frontend_display.cpp
  src/advanced_options_dialog.cpp
  ui/pr2_interactive_manipulation/interactive_manipulation_ui.cpp
)

# backend node
rosbuild_add_executable(interactive_manipulation_backend_node 
  src/interactive_manipulation_backend_node.cpp
  src/gripper_controller.cpp
)
target_link_libraries(interactive_manipulation_backend_node 
  interactive_manipulation_backend
)

# user interface based on interactive markers
rosbuild_add_executable(interactive_marker_node
  src/interactive_marker_node.cpp
  src/graspable_object_handler.cpp
)

# rviz plugin
rosbuild_add_library(interactive_manipulation_plugin 
  src/init.cpp
)
target_link_libraries(interactive_manipulation_plugin 
  interactive_manipulation_frontend
  point_head_display
  publish_click_display
  camera_focus_display
  default_plugin # from rviz
  ${wxWidgets_LIBRARIES}
  ${OGRE_LIBRARIES}
)

rosbuild_add_executable(grasp_caller src/grasp_caller.cpp)
target_link_libraries(grasp_caller
  interactive_manipulation_frontend
  ${wxWidgets_LIBRARIES}
)

rosbuild_add_executable(tf_throttle src/tf_throttle.cpp)
