cmake_minimum_required(VERSION 3.16)

project(virtualcmm)

if(WIN32)

    add_definitions(-DUNICODE -D_UNICODE)

    if(MSVC)
	    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
    endif()

endif()

if(DEFINED TARGET_BIN_LOCATION)
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${TARGET_BIN_LOCATION})
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${TARGET_BIN_LOCATION})
else()
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
endif()

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

find_package(QT NAMES Qt6 Qt5)

message(STATUS "Using prefix Qt${QT_VERSION_MAJOR} for components...")

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGL)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Xml)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Network)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS SerialPort)
if(${QT_VERSION_MAJOR} GREATER 4)
    find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
endif()
if(${QT_VERSION_MAJOR} GREATER 5)
    find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS OpenGLWidgets)
endif()
find_package(OpenGL REQUIRED)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(sources ../core/mat4.cpp
            ../core/messagebox.cpp
            ../core/openglgeometryfactory.cpp
            ../core/openglvertexbuffer.cpp
            ../core/openglwidget.cpp
            ../core/optioneditor.cpp
            ../core/vector2.cpp
            ../core/vector3.cpp
            ../core/xmlfile.cpp
            src/artifactballbarwidget.cpp
            src/artifactcontainerwidget.cpp
            src/artifactfreepointswidget.cpp
            src/artifactgaugeblockwidget.cpp
            src/artifactringgaugewidget.cpp
            src/artifactspherewidget.cpp
            src/artifactstepgaugewidget.cpp
            src/bufferdisplaywidget.cpp
            src/command_executor.cpp
            src/coordinatedisplaywidget.cpp
            src/coordinatewidget.cpp
            src/jogboxdialog.cpp
            src/machine.cpp
            src/machine_dc.cpp
            src/machine_dock.cpp
            src/machine_ipp.cpp
            src/machine_leitz.cpp
            src/machine_offline.cpp
            src/machineattributeswidget.cpp
            src/machineerrorsdialog.cpp
            src/main.cpp
            src/opengldisplay.cpp
            src/opengldisplaywidget.cpp
            src/protocoldialog.cpp
            src/virtualcmm.cpp)

set(headers ../core/mat4.h
            ../core/messagebox.h
            ../core/openglgeometryfactory.h
            ../core/openglshaders.h
            ../core/openglvertexbuffer.h
            ../core/openglwidget.h
            ../core/optioneditor.h
            ../core/vector2.h
            ../core/vector3.h
            ../core/xmlfile.h
            src/artifactballbarwidget.h
            src/artifactcontainerwidget.h
            src/artifactfreepointswidget.h
            src/artifactgaugeblockwidget.h
            src/artifactpointtype.h
            src/artifactringgaugewidget.h
            src/artifactspherewidget.h
            src/artifactstepgaugewidget.h
            src/bufferdisplaywidget.h
            src/command_executor.h
            src/coordinatedisplaywidget.h
            src/coordinatewidget.h
            src/jogboxdialog.h
            src/machine.h
            src/machine_dc.h
            src/machine_dock.h
            src/machine_ipp.h
            src/machine_leitz.h
            src/machine_offline.h
            src/machineattributeswidget.h
            src/machineerrorsdialog.h
            src/opengldisplay.h
            src/opengldisplaywidget.h
            src/protocoldialog.h
            src/virtualcmm.h)

set(resources res/virtualcmm.qrc)

add_executable(virtualcmm ${sources} ${headers} ${resources})

if(APPLE)

    set_target_properties(virtualcmm PROPERTIES MACOSX_BUNDLE TRUE)
    set_target_properties(virtualcmm PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME virtualcmm)
    set_target_properties(virtualcmm PROPERTIES MACOSX_BUNDLE_ICON_FILE ${PROJECT_SOURCE_DIR}/res/icons.icns)

endif()

target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::Core)
target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::Gui)
target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::OpenGL)
target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::Xml)
target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::Network)
target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::SerialPort)
if(${QT_VERSION_MAJOR} GREATER 4)
    target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
endif()
if(${QT_VERSION_MAJOR} GREATER 5)
    target_link_libraries(virtualcmm PRIVATE Qt${QT_VERSION_MAJOR}::OpenGLWidgets)
endif()
target_link_libraries(virtualcmm PUBLIC OpenGL::GL)

set_target_properties(virtualcmm PROPERTIES DEBUG_POSTFIX "d")

install(TARGETS virtualcmm DESTINATION bin)

