#########################quick start############################################
# cmake ../ -G "CodeBlocks - Unix Makefiles"
# make
# make install
# make clean
# sudo apt-get install libopencv-dev
################################################################################
project(PtGreyCameras)
set(${PROJECT_NAME}_VERSION_MAJOR 0)
set(${PROJECT_NAME}_VERSION_MINOR 1)
# Create a DLL
add_definitions(-DCVWEBCAM_COMPONENT_EXPORTS)
add_definitions( -DVIDEO_EXPORTS )

#include(FindOpenCV.cmake)
find_package(OpenCV REQUIRED)

# Check for OpenCV
if(NOT OpenCV_FOUND)
    message(FATAL_ERROR "Project ${PROJECT_NAME} requires OpenCV library")
endif()
################################################################################
create_export(EXPORT_HDR ${PROJECT_NAME})
pacpus_plugin(PLUGIN_CPP PLUGIN_HDR ${PROJECT_NAME})
add_definitions (${QT_DEFINITIONS})
# ========================================
# Options
# ========================================
option(BUILD_PtGreyCameras "Whether or not build the PointGrey cameras" OFF)
if (BUILD_PtGreyCameras)
	option(BUILD_BumbleBeeXB3 "Whether or not build the BumbleBeeXB3" OFF)
	option(BUILD_FlyCapture2 "Whether or not build the FlyCapture2 based cameras" OFF)
	# ========================================
	# Find dependencies
	# ========================================
	if(BUILD_BumbleBeeXB3)
		find_package(BumblebeeXB3 REQUIRED)
		if(BumbleBeeXB3_FOUND)
			list(APPEND OPT_LIBRARIES ${BumbleBeeXB3_LIBRARIES})
			list(APPEND DBG_LIBRARIES ${BumbleBeeXB3_LIBRARIES})
			list(APPEND OPT_INCLUDE_DIRS ${BumbleBeeXB3_INCLUDE_DIRS})
			include_directories(${BumbleBeeXB3_INCLUDE_DIRS})
		endif(BumbleBeeXB3_FOUND)
	endif()
	# ========================================
	# Find dependencies
	# ========================================
	if(BUILD_FlyCapture2)
		find_package(FlyCapture2 REQUIRED)
		if(FlyCapture2_FOUND)
			list(APPEND OPT_LIBRARIES ${FlyCapture2_LIBRARIES_OPT})
			list(APPEND DBG_LIBRARIES ${FlyCapture2_LIBRARIES_OPT})
			list(APPEND OPT_INCLUDE_DIRS ${FlyCapture2_INCLUDE_DIRS})
			include_directories(${FlyCapture2_INCLUDE_DIRS})
		endif(FlyCapture2_FOUND)
	endif()
endif()
find_package(Qt5Network REQUIRED)
################################################################################
# DIRECTORIES
include_directories( 
    ${PROJECT_BINARY_DIR}
    ${QT_INCLUDE_DIR}
    ${PACPUS_INCLUDE_DIR}
    ${PACPUS_INCLUDE_DIR}/Pacpus/
)

# ========================================
# Link directories
# ========================================
link_directories( 
	${PACPUS_LIB_DIR}
)

################################################################################
# FILES
set(PROJECT_HDRS
    ${EXPORT_HDR}
    PtGreyCamerasExp.h
    #../../StdDbtPlayerComponents/ImageBaseStructure.h
)
set(PROJECT_SRCS
    ${PLUGIN_CPP} 
)

if(OpenCV_FOUND)
    list(APPEND OpenCV_LIBS ${OpenCV_LIBRARIES})
    list(APPEND OpenCV_INCLUDE_DIR ${OpenCV_INCLUDE_DIRS})
    include_directories(${OpenCV_INCLUDE_DIR})
endif(OpenCV_FOUND)

if(BUILD_PtGreyCameras AND BumbleBeeXB3_FOUND )
	list(APPEND PROJECT_SRCS
			BumblebeeXB3.cpp
			BumblebeeXB3.h			
	)	
endif()

if(BUILD_PtGreyCameras AND FlyCapture2_FOUND )
	list(APPEND PROJECT_SRCS
			Flea3Component.cpp
			Flea3Component.h
			Flea3Grabber.cpp
			Flea3Grabber.h
	)	
endif()

set(FILES_TO_MOC
    ${PLUGIN_HDR}
)
if(BUILD_PtGreyCameras AND BumbleBeeXB3_FOUND)
	list(APPEND
		FILES_TO_MOC
		BumblebeeXB3.h	  
	)	
endif()	

if(BUILD_PtGreyCameras AND FlyCapture2_FOUND)
	list(APPEND
		FILES_TO_MOC
		Flea3Component.h
		Flea3Grabber.h
	)	
endif()	

set(UI_FILES
)

################################################################################
# Qt: call moc, uic
qt_wrap_cpp(PROJECT_MOC_SRCS
    ${FILES_TO_MOC}
)

qt_wrap_ui(PROJECT_UI_SRCS
    ${UI_FILES}
)

################################################################################
# BUILD and LINK
pacpus_add_library(${PROJECT_NAME} SHARED
    ${PROJECT_HDRS}
    ${PROJECT_SRCS}
    ${PROJECT_MOC_SRCS}
    ${PROJECT_UI_SRCS}
)


# ========================================
# Libraries
# ========================================
set(LIBS
    optimized FileLib debug FileLib_d
    optimized PacpusLib debug PacpusLib_d
    optimized PacpusTools debug PacpusTools_d
)
if (WIN32)
    list(APPEND LIBS
        optimized ROAD_TIME debug ROAD_TIME_d
    )
endif()
# LINK 
target_link_libraries(${PROJECT_NAME} 
		      ${PACPUS_LIBRARIES} 
	              ${PACPUS_DEPENDENCIES_LIB} 
                      ${LIBS}
                      ${QT_LIBRARIES} 
                      ${OpenCV_LIBS}
                     )
qt5_use_modules(${PROJECT_NAME} Network)
################################################################################
# FOLDERS
pacpus_folder(${PROJECT_NAME} "components")
################################################################################
# INSTALL
pacpus_install(${PROJECT_NAME}) 
