cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR)
project(qb_chain_controllers VERSION 2.2.3 LANGUAGES CXX)

# Dependency Settings
find_package(catkin REQUIRED
  COMPONENTS
    roscpp
    control_msgs
    controller_interface
    geometry_msgs
    interactive_markers
    sensor_msgs
    trac_ik_lib
    tf2
    tf2_geometry_msgs
    tf2_ros
    qb_chain_msgs
)

include_directories(include
  ${catkin_INCLUDE_DIRS}
)

catkin_package(
  INCLUDE_DIRS
    include
  LIBRARIES
    ${PROJECT_NAME}
  CATKIN_DEPENDS
    roscpp
    trac_ik_lib
    control_msgs
    controller_interface
    geometry_msgs
    interactive_markers
    sensor_msgs
    tf2
    tf2_geometry_msgs
    tf2_ros
    qb_chain_msgs
)

# Exported libraries
add_library(${PROJECT_NAME}
  src/qb_kinematic_controller.cpp
  src/delta_kinematic_controller.cpp
  src/arm1_kinematic_controller.cpp
  src/arm2_kinematic_controller.cpp
  src/arm_v1_kinematic_controller.cpp
  src/arm_v2_kinematic_controller.cpp
  src/wrist_kinematic_controller.cpp
)

target_link_libraries(${PROJECT_NAME}
  PUBLIC
    ${catkin_LIBRARIES}
)

add_dependencies(${PROJECT_NAME}
  ${${PROJECT_NAME}_EXPORTED_TARGETS}
  ${catkin_EXPORTED_TARGETS}
)

# C++ Settings
if (CMAKE_VERSION VERSION_LESS "3.1")
  target_compile_options(${PROJECT_NAME}
    PUBLIC
      "-std=c++14"
  )
else ()
  set_property(
    TARGET
      ${PROJECT_NAME}
    PROPERTY CXX_STANDARD 14
  )

  set_property(
    TARGET
      ${PROJECT_NAME}
    PROPERTY CXX_STANDARD_REQUIRED ON
  )
endif ()

# Installation
install(
  TARGETS ${PROJECT_NAME}
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
)

install(
  DIRECTORY
    include/${PROJECT_NAME}/
  DESTINATION
    ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
)

install(
  FILES
    plugin_arm1.xml
    plugin_arm2.xml
    plugin_arm_v1.xml
    plugin_arm_v2.xml
    plugin_delta.xml
    plugin_wrist.xml
  DESTINATION
    ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
