cmake_minimum_required(VERSION 3.16)

project(Assignment7-RPS VERSION 0.1 LANGUAGES CXX)

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

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

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

set(PROJECT_SOURCES
    main.cpp
    Choice.h
    Who.h
    Player.h
    Human.h
    Computer.h
    Display.h
    TextDisplay.h
    TextDisplay.cpp
    GUIDisplay.h
    GUIDisplay.cpp
    RPSEngine.h
    RPSEngine.cpp
    TextEngine.h
    TextEngine.cpp
    GUIEngine.cpp
    GUIEngine.h
    Frequencies.h
    Frequencies.cpp
    ChoiceAlgorithm.h
    KeyboardAlgorithm.h
    KeyboardAlgorithm.cpp
    ButtonAlgorithm.h
    ButtonAlgorithm.cpp
    RandomAlgorithm.h
    RandomAlgorithm.cpp
    SmartAlgorithm.h
    SmartAlgorithm.cpp
    AlgorithmFactory.h
    GUIEngine.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(Assignment7-RPS
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
# Define target properties for Android with Qt 6 as:
#    set_property(TARGET Assignment7-RPS 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(Assignment7-RPS 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(Assignment7-RPS
            ${PROJECT_SOURCES}
        )
    endif()
endif()

target_link_libraries(Assignment7-RPS PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.Assignment7-RPS)
endif()
set_target_properties(Assignment7-RPS PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS Assignment7-RPS
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(Assignment7-RPS)
endif()
