cmake_minimum_required(VERSION 3.5)
project(h264_video_encoder)

## Compile as C++14
set(CMAKE_CXX_STANDARD 14)

find_package(h264_encoder_core REQUIRED)
find_package(aws_common REQUIRED)
find_package(aws_ros2_common REQUIRED)
find_package(image_transport REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(kinesis_video_msgs REQUIRED)
find_package(ament_cmake REQUIRED)
find_package(rmw_implementation REQUIRED)

#############
## Compile ##
#############

set(h264_video_encoder_SRCS
  src/h264_video_encoder.cpp
)
set(h264_video_encoder_INCS
  include
  ${h264_encoder_core_INCLUDE_DIRS}
  ${aws_common_INCLUDE_DIRS}
  ${aws_ros2_common_INCLUDE_DIRS}
  ${kinesis_video_msgs_INCLUDE_DIRS}
  ${rclcpp_INCLUDE_DIRS}
  ${ament_cmake_INCLUDE_DIRS}
  ${rmw_implementation_INCLUDE_DIRS}
  ${image_transport_INCLUDE_DIRS}
)
set(h264_video_encoder_LIBS
  ${h264_encoder_core_LIBRARIES}
  ${kinesis_video_msgs_LIBRARIES}
  ${rclcpp_LIBRARIES}
  ${ament_cmake_LIBRARIES}
  ${aws_ros2_common_LIBRARIES}
  ${rmw_implementation_LIBRARIES}
  ${aws_common_LIBRARIES}
  ${image_transport_LIBRARIES}
)

# add the publisher example
add_executable(${PROJECT_NAME} src/main.cpp ${h264_video_encoder_SRCS})
add_library(${PROJECT_NAME}_lib STATIC ${h264_video_encoder_SRCS})

target_include_directories(${PROJECT_NAME} PRIVATE ${h264_video_encoder_INCS})
target_include_directories(${PROJECT_NAME}_lib PUBLIC ${h264_video_encoder_INCS})

target_link_libraries(${PROJECT_NAME} ${h264_video_encoder_LIBS})
target_link_libraries(${PROJECT_NAME}_lib ${h264_video_encoder_LIBS})

#############
## Install ##
#############

# Mark executables and/or libraries for installation
install(TARGETS ${PROJECT_NAME}
  ARCHIVE DESTINATION lib/${PROJECT_NAME} 
  LIBRARY DESTINATION lib/${PROJECT_NAME} 
  RUNTIME DESTINATION lib/${PROJECT_NAME}
)

install(DIRECTORY launch DESTINATION share/${PROJECT_NAME})
install(DIRECTORY config DESTINATION share/${PROJECT_NAME})


#############
## Tests ##
#############

if(BUILD_TESTING)
  find_package(ament_cmake_gtest REQUIRED)
  ## Add gtest based cpp test target and link libraries
  ament_add_gtest(test_h264_video_encoder
    test/h264_video_encoder_test.cpp
  )
  target_include_directories(test_h264_video_encoder
  PRIVATE include ${h264_video_encoder_INCS})
  target_link_libraries(test_h264_video_encoder
    ${PROJECT_NAME}_lib
    ${h264_video_encoder_LIBS}
    ${GMOCK_BOTH_LIBRARIES}
  )
endif()

ament_export_dependencies(h264_encoder_core)
ament_export_dependencies(aws_common)
ament_export_dependencies(aws_ros2_common)
ament_export_dependencies(image_transport)
ament_export_dependencies(sensor_msgs)
ament_export_dependencies(kinesis_video_msgs)
ament_export_dependencies(ament_cmake)
ament_export_dependencies(rmw_implementation)


ament_package()