cmake_minimum_required(VERSION 3.16) # Qt requires CMake 3.16
project(
  qmarkdowntextedit
  LANGUAGES CXX
  VERSION 1.0.0)

# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

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

# add option to disable test executable
option(QMARKDOWNTEXTEDIT_EXE "Build test executable" ON)

# find qt
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} OPTIONAL_COMPONENTS Quick)

# needed for windows
if(WIN32)
  set(INTL_LDFLAGS -lintl)
endif(WIN32)

# QMarkdownTextEdit library
set(RC_FILES media.qrc)

# Translations arent loaded so don't include them
set(TS_FILES trans/qmarkdowntextedit_de.ts trans/qmarkdowntextedit_ur.ts
             trans/qmarkdowntextedit_zh_CN.ts)

set(QMARKDOWNTEXTEDIT_SOURCES
    ${RC_FILES}
    linenumberarea.h # We need to keep this here, otherwise the build fails
    markdownhighlighter.cpp
    qmarkdowntextedit.cpp
    qownlanguagedata.cpp
    qownlanguagedata.h
    qplaintexteditsearchwidget.cpp
    qplaintexteditsearchwidget.ui)
set(QMARKDOWNTEXTEDIT_HEADERS markdownhighlighter.h qmarkdowntextedit.h
                              qplaintexteditsearchwidget.h)

add_library(qmarkdowntextedit ${QMARKDOWNTEXTEDIT_SOURCES})
set_target_properties(qmarkdowntextedit
                      PROPERTIES PUBLIC_HEADER "${QMARKDOWNTEXTEDIT_HEADERS}")

target_link_libraries(qmarkdowntextedit PUBLIC Qt${QT_VERSION_MAJOR}::Widgets
                                               ${INTL_LDFLAGS})

if(Qt${QT_VERSION_MAJOR}Quick_FOUND)
  target_link_libraries(qmarkdowntextedit PUBLIC Qt${QT_VERSION_MAJOR}::Quick)

  add_executable(QtQuickExample examples/qml/example.cpp
                                examples/qml/ressources.qrc)
  target_link_libraries(QtQuickExample PRIVATE Qt${QT_VERSION_MAJOR}::Quick
                                               qmarkdowntextedit)
endif()

# QMarkdownTextEdit executable
if(QMARKDOWNTEXTEDIT_EXE)
  set(SOURCE_FILES main.cpp mainwindow.cpp mainwindow.h mainwindow.ui)

  add_executable(qmarkdowntextedit-exe ${SOURCE_FILES})
  set_target_properties(qmarkdowntextedit-exe PROPERTIES OUTPUT_NAME
                                                         "qmarkdowntextedit")
  target_link_libraries(
    qmarkdowntextedit-exe PRIVATE Qt${QT_VERSION_MAJOR}::Widgets
                                  ${INTL_LDFLAGS} qmarkdowntextedit)
endif()

include(GNUInstallDirs) # Doesn't fail on windows

# Install the lib
install(
  TARGETS qmarkdowntextedit
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib
  RUNTIME DESTINATION bin
  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

# Add PkgConfig config file
configure_file(qmarkdowntextedit.pc.in ${CMAKE_BINARY_DIR}/qmarkdowntextedit.pc
               @ONLY)
install(FILES ${CMAKE_BINARY_DIR}/qmarkdowntextedit.pc
        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)

# Install exe
if(QMARKDOWNTEXTEDIT_EXE)
  install(TARGETS qmarkdowntextedit-exe DESTINATION bin)
endif()
