cmake_minimum_required(VERSION 3.12)


set(project_name "Info3_Praktikum")

project("Info3_Praktikum" C CXX)
set(CMAKE_C_STANDARD 17)
set(CMAKE_CXX_STANDARD 20)

set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(PROJECT_SOURCES
        src/ControlDeveloper.cpp
        src/ControlUI.cpp
        src/ControlModel.cpp
        src/ControlModelRegistry.cpp
        src/PanelCommandTypes.cpp
        src/TableCommandModel.cpp
        src/PanelCommandTable.cpp
        src/PanelConfigDirection.cpp
        src/PanelConfigPause.cpp
        src/PanelConfigGear.cpp
        src/PanelConfigDefault.cpp
        src/CommandType.cpp
        src/CommandListOWN.cpp
        include/ComHandler.cpp
        include/ObjectFileHandler.cpp
        src/Gear.cpp
        src/Direction.cpp
        src/Pause.cpp
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(ControlDeveloper
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET Text2Console APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
#                 ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
    if(ANDROID)
        add_library(ControlDeveloper SHARED
            ${PROJECT_SOURCES}
        )
# Define properties for Android with Qt 5 after find_package() calls as:
#    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
    else()
        add_executable(ControlDeveloper
            ${PROJECT_SOURCES}
        )
    endif()
endif()

# Add include directory
target_include_directories(ControlDeveloper PUBLIC include/)

target_link_libraries(ControlDeveloper PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

set_target_properties(ControlDeveloper PROPERTIES
  #  MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
  #  MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
  #  MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(ControlDeveloper)
endif()


add_executable("Test_Command_List"
src/testCommandList.cpp 
src/CommandListOWN.cpp
src/Gear.cpp
src/Pause.cpp
src/Direction.cpp

)
# Add include directory
target_include_directories("Test_Command_List" PUBLIC include/)

add_executable("Test_Control_Model"
src/testControlModel.cpp 
src/ControlModel.cpp
src/ControlModelRegistry.cpp
src/CommandListOWN.cpp
src/CommandType.cpp
src/Gear.cpp
src/Pause.cpp
src/Direction.cpp
include/ComHandler.cpp
include/ObjectFileHandler.cpp
)
# Add include directory
target_include_directories("Test_Control_Model" PUBLIC include/)

add_executable("Test_Object_File_Handler"
src/testObjectFileHandler.cpp 
include/ObjectFileHandler.cpp
src/Gear.cpp
src/Pause.cpp
src/Direction.cpp
)
# Add include directory
target_include_directories("Test_Object_File_Handler" PUBLIC include/)


add_executable("Class-Member-Variable-demo"
src/class-member-variables.cpp
)


# Doxygen documentation
find_package(Doxygen)
if (DOXYGEN_FOUND)
    add_custom_target( doc_doxygen ALL
        COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..
        COMMENT "Generating API documentation with Doxygen"
        VERBATIM )
else (DOXYGEN_FOUND)
    message("Doxygen need to be installed to generate the doxygen documentation")
endif (DOXYGEN_FOUND)