cmake_minimum_required(VERSION 2.8.3)
project(background_subtraction)

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

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS  roscpp std_msgs sensor_msgs cv_bridge dynamic_reconfigure utils_qt message_generation)

find_package(OpenCV REQUIRED)

find_package(csapex)

# for qt moc files:
include_directories(${CMAKE_CURRENT_BINARY_DIR})

file(GLOB INCLUDES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} include/background_subtraction/*.h)
set(headers ${INCLUDES})

generate_dynamic_reconfigure_options(cfg/Global.cfg)

# for generated qt stuff
include_directories(${CMAKE_BINARY_DIR}/${PROJECT_NAME})


## Find message files
file(GLOB messages messages RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/msg/"
    "${CMAKE_CURRENT_SOURCE_DIR}/msg/*.msg")

## Generate messages in the 'msg' folder
add_message_files(
  FILES
  ${messages}
)

## Generate services in the 'srv' folder
# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )

## Generate added messages and services with any dependencies listed here
generate_messages(
  DEPENDENCIES
  std_msgs
  sensor_msgs
)

###################################################
## Declare things to be passed to other projects ##
###################################################

## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
   INCLUDE_DIRS include
   LIBRARIES bg_sub
   CATKIN_DEPENDS message_runtime sensor_msgs std_msgs
#  DEPENDS system_lib
)

file(COPY src/masked_image_handler.h DESTINATION ${PROJECT_SOURCE_DIR}/include/background_subtraction/)
include_directories(include
  ${catkin_INCLUDE_DIRS}
)

qt5_wrap_ui(QT_UI
    ui/background_remover_window.ui)

add_library(bg_sub
    src/masked_image_handler.cpp
    ${headers}
)
target_link_libraries(bg_sub
    ${QT_LIBRARIES}
    ${catkin_LIBRARIES}
)

set(bg_remover_src
    src/node.cpp
    src/adaptive_background_remover.cpp
    src/background_remover.cpp
    src/background_remover_node.cpp
    src/background_remover_window.cpp
    src/simple_background_remover.cpp
    src/opencv_background_remover.cpp

    ${QT_UI}
)


set(bitness 32)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
  set(bitness 64)
endif()

if(bitness EQUAL 64)
    set(bg_remover_src
        ${bg_remover_src}
        src/vibe_background_remover.cpp
        src/vibe-background.o
    )
endif()

add_executable(bg_remover ${bg_remover_src})

target_link_libraries(bg_remover
    bg_sub
    ${QT_LIBRARIES}
    ${OpenCV_LIBS}
    ${catkin_LIBRARIES}
)

add_executable(masked2img
    src/masked_2_img_node.cpp
)
target_link_libraries(masked2img
    bg_sub
    ${catkin_LIBRARIES}
)

if(${csapex_FOUND})

find_package(csapex_vision REQUIRED)

message("vision " ${csapex_vision_INCLUDE_DIRS})

include_directories(${csapex_INCLUDE_DIRS})
include_directories(${csapex_vision_INCLUDE_DIRS})

add_library(bgsubplugin
    src/background_subtraction.cpp
    src/csapex_plugin.cpp
    src/background_remover.cpp
    src/adaptive_background_remover.cpp
    src/simple_background_remover.cpp
    src/opencv_background_remover.cpp
)
target_link_libraries(bgsubplugin
    bg_sub
    ${catkin_LIBRARIES}
    ${csapex_LIBRARIES}
    ${csapex_vision_LIBRARIES}
)

endif()


#
# INSTALL
#

install(FILES bg_sub_plugins.xml
        DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})

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

install(TARGETS bgsubplugin
        ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})


install(TARGETS bg_sub
        ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})

