cmake_minimum_required(VERSION 2.4.6)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
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)

find_package(Eigen REQUIRED)
include_directories(SYSTEM ${EIGEN_INCLUDE_DIRS})

# 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)

                                    
# build is where the UI file outputs (ui_*.h) go.
include_directories( build )


pkg_check_modules(OGRE OGRE)
include_directories(SYSTEM ${OGRE_INCLUDE_DIRS} )
link_directories( ${OGRE_LIBRARY_DIRS} )

find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
include(${QT_USE_FILE})
add_definitions(-DQT_NO_KEYWORDS)

qt4_wrap_ui(UIC_FILES
  src/advanced_options_dialog.ui
  src/camera_focus.ui
  src/interactive_manipulation.ui
)

qt4_wrap_cpp(MOC_FILES
  include/pr2_interactive_manipulation/advanced_options_dialog.h
  include/pr2_interactive_manipulation/camera_focus_display.h
  include/pr2_interactive_manipulation/interactive_manipulation_frontend.h
)

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

# 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/point_head_camera_display.cpp
  src/point_head_view_controller.cpp
  src/publish_click_camera_display.cpp
  src/publish_click_view_controller.cpp
  src/camera_focus_display.cpp
  src/interactive_manipulation_frontend.cpp
  src/interactive_manipulation_frontend_display.cpp
  src/advanced_options_dialog.cpp
  src/init.cpp
  ${UIC_FILES}
  ${MOC_FILES}
)
target_link_libraries(interactive_manipulation_plugin 
  default_plugin # from rviz
  ${QT_LIBRARIES}
  ${OGRE_LIBRARIES}
)

# rosbuild_add_executable(grasp_caller src/grasp_caller.cpp)
# target_link_libraries(grasp_caller
#   interactive_manipulation_frontend
# )

