cmake_minimum_required(VERSION 3.16)

project(BareCode
    VERSION 1.0.0
    DESCRIPTION "A modular code editor built with Qt6"
    LANGUAGES CXX
)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

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

# Platform-specific settings
if(WIN32)
    set(CMAKE_WIN32_EXECUTABLE ON)
    add_compile_definitions(PLATFORM_WINDOWS)
elseif(UNIX AND NOT APPLE)
    add_compile_definitions(PLATFORM_LINUX)
elseif(APPLE)
    add_compile_definitions(PLATFORM_MACOS)
endif()

# Find Qt6
find_package(Qt6 REQUIRED COMPONENTS
    Core
    Gui
    Widgets
)

qt_standard_project_setup()

# Include cmake modules
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

# Collect sources
add_subdirectory(src)

# Resources
qt_add_resources(BARECODE_RESOURCES resources/resources.qrc)

# Main executable
qt_add_executable(BareCode
    main.cpp
    ${BARECODE_RESOURCES}
)

target_link_libraries(BareCode PRIVATE
    BareCode_Core
    BareCode_Editor
    BareCode_FileTree
    BareCode_Highlighter
    Qt6::Core
    Qt6::Gui
    Qt6::Widgets
)

target_include_directories(BareCode PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
)

# Install rules
include(GNUInstallDirs)
install(TARGETS BareCode
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
