cmake_minimum_required(VERSION 3.10)
project(Kepka
    LANGUAGES C CXX
    VERSION 2.0.0
    DESCRIPTION "Unofficial Telegram Desktop fork"
#    HOMEPAGE_URL "https://github.com/procxx/kepka"
)

set(PROJECT_COMPANY_NAME "pro.cxx Community")
set(PROJECT_VERSION_RC 2)

if(PROJECT_VERSION_RC)
    set(PROJECT_VERSION "${PROJECT_VERSION}-rc${PROJECT_VERSION_RC}")
endif()

##================================================
## Build customizations
##================================================
option(KEPKA_OPTION_USE_YANDEX_MAPS "Use Yandex.Maps static API for locations (instead Google Maps)" ON)

if(KEPKA_OPTION_USE_YANDEX_MAPS)
	add_definitions("-DKEPKA_USE_YANDEX_MAPS")
endif()

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/modules/")

if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.10)
    cmake_policy(SET CMP0071 NEW)
endif()

# includes block
include(CTest)
# clang-format
include(modules/clang-cxx-dev-tools.cmake)

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

if (UNIX AND NOT APPLE)
    set(LINUX 1)
endif()

function(set_flag_if_supported target shortname flag)
    include(CheckCXXCompilerFlag)
    check_cxx_compiler_flag(${flag} ${shortname}_FLAG_SUPPORTED)
    if (${shortname}_FLAG_SUPPORTED)
        target_compile_options(${target} PRIVATE ${flag})
    endif()
endfunction()

##================================================
## Configure packages
##================================================

if (EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
    include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
    conan_basic_setup()
else()
    find_package(OpenSSL REQUIRED)
endif()

if (LINUX)
    find_package(OpenAL REQUIRED)
    find_package(ALSA)
    find_package(PulseAudio)
    find_package(Qt5 COMPONENTS DBus)
else()
    # Needs OpenAL-SOFT
    # Install via `brew install openal-soft` and configure with cmake call from README.md
    find_package(OpenAL REQUIRED NO_MODULE)
    set(OPENAL_LIBRARY OpenAL::OpenAL)
endif()

set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads)
find_package(ZLIB REQUIRED)
find_package(FFmpeg REQUIRED)
find_package(Opus REQUIRED)
find_package(Qt5 COMPONENTS Core Gui Widgets Network REQUIRED)

if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.12.0")
    find_package(Python3 REQUIRED)
else()
    # TODO: remove when we will update cmake required version
    find_package(PythonInterp)
    if((PYTHONINTERP_FOUND) AND (PYTHON_VERSION_MAJOR GREATER 2))
        set(Python3_EXECUTABLE ${PYTHON_EXECUTABLE})
    else()
        message(FATAL_ERROR "Python 3 is required")
    endif()
endif()

if (NOT SWSCALE_FOUND)
    message(FATAL_ERROR "FFmpeg swscale is required")
endif()
if (NOT SWRESAMPLE_FOUND)
    message(FATAL_ERROR "FFmpeg swresample is required")
endif()

find_program(CCACHE ccache)
if (CCACHE)
    message(STATUS "Enabling ccache")
    set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE})
    set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE})
endif()

option(ENABLE_IPO "Enable IPO optimizations." OFF)
option(PACKAGED_BUILD "Enable packaged build." OFF)

option(BUILD_DOC "Build documentation" OFF)
mark_as_advanced(BUILD_DOC)

if(BUILD_DOC)
    find_package(Doxygen)
    if(DOXYGEN_FOUND)
        add_custom_target( doc_doxygen ALL
            COMMAND ${DOXYGEN_EXECUTABLE} ${PROJECT_SOURCE_DIR}/Doxyfile
            WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
            COMMENT "Generating API documentation with Doxygen"
            VERBATIM )
    endif()
endif()

# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -O1 -fno-omit-frame-pointer -g")
add_subdirectory(Telegram)