cmake_minimum_required(VERSION 2.4.6)

if(COMMAND cmake_policy)
  cmake_policy(SET CMP0003 NEW)
endif(COMMAND cmake_policy)

#set the default path for built executables to the "bin" directory
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# All auxiliary source files are in the helpers directory
set(HELPER_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/colorcoder.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/colorcoder.h
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/filequeue.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/filequeue.h
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/imagequeue.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/imagequeue.h
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/ratelimit.h
    ${CMAKE_CURRENT_SOURCE_DIR}/helpers/ratelimit.cpp
)

# Also add the helpers directory to the include path
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/helpers)

if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/../common.cmake)
    # Compiling with global build system
    include(${CMAKE_CURRENT_SOURCE_DIR}/../common.cmake)
    spcom_settings(${HELPER_FILES})
else()
    if(NOT WIN32 OR MINGW)
        include(CheckCXXCompilerFlag)

        # Some useful flags
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -Wall")
        CHECK_CXX_COMPILER_FLAG("-march=native" NATIVE_ARCH_SUPPORT)
        if(NATIVE_ARCH_SUPPORT)
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
        endif()

        # Activate c++11 support
        CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
        CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
        if(COMPILER_SUPPORTS_CXX11)
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
        elseif(COMPILER_SUPPORTS_CXX0X)
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
        else()
            message(WARNING "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
        endif()
    endif()
endif()

# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Find the QtWidgets library
find_package(Qt5Widgets REQUIRED)

# Find required libraries
find_package(Threads)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

# Possible locations for the vision transfer library
set(VISIONTRANSFER_LIB ${CMAKE_CURRENT_SOURCE_DIR}/../libvisiontransfer/lib CACHE STRING "Lib directory for libvisiontransfer")
set(VISIONTRANSFER_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/../libvisiontransfer CACHE STRING "Include directory for libvisiontransfer")
link_directories(${VISIONTRANSFER_LIB})
include_directories(${VISIONTRANSFER_INCLUDE})

qt5_add_resources(RES_SPCOM resources.qrc)

add_executable(spcom
    spcom.h
    spcom.cpp
    mainwindow.cpp
    mainwindow.h
    mainwindow.ui
    preferencesdialog.h
    preferencesdialog.cpp
    preferencesdialog.ui
    displaywidget.h
    displaywidget.cpp
    ${HELPER_FILES}
    ${RES_SPCOM}
)
target_link_libraries(spcom ${CMAKE_THREAD_LIBS_INIT} visiontransfer${LIB_SUFFIX} ${OpenCV_LIBS} Qt5::Widgets)

# Installation settings
set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH};${CMAKE_INSTALL_PREFIX}/lib)
install(TARGETS spcom DESTINATION bin)
