project(app)

PKG_CHECK_MODULES(DDJVUAPI REQUIRED ddjvuapi)
PKG_CHECK_MODULES(PODOFO libpodofo)
PKG_SEARCH_MODULE(ENCHANT REQUIRED enchant-2 enchant)
PKG_CHECK_MODULES(QTSPELL REQUIRED QtSpell-qt5>=0.8.0)
PKG_CHECK_MODULES(POPPLER REQUIRED poppler-qt5)
FIND_PACKAGE(OpenMP REQUIRED)
FIND_PACKAGE(KF5Sane 21.08 REQUIRED)
FIND_PACKAGE(KF5Config 5.46.0 REQUIRED)
FIND_PACKAGE(KF5CoreAddons 5.46.0 REQUIRED)
FIND_PACKAGE(KF5XmlGui 5.46.0 REQUIRED)
FIND_PACKAGE(KF5ItemViews 5.46.0 REQUIRED)
FIND_PACKAGE(QtSingleApplication REQUIRED)

#QuaZip5
FIND_PATH(QUAZIP_INCLUDE_DIR NAME quazipfile.h PATHS /usr/include  PATH_SUFFIXES quazip5 quazip)
FIND_LIBRARY(QUAZIP_LIBRARIES NAMES quazip5 quazip1-qt5)
IF(NOT QUAZIP_INCLUDE_DIR OR NOT QUAZIP_LIBRARIES)
    MESSAGE(FATAL_ERROR "QuaZip5 is required but was not found")
ENDIF()

IF(ENCHANT_FOUND AND (${ENCHANT_VERSION} VERSION_GREATER_EQUAL 2))
    ADD_DEFINITIONS(-DHAVE_ENCHANT2)
ENDIF()

IF(NOT PODOFO_FOUND)
    MESSAGE(WARNING "Using hardcoded cflags and ldflags for podofo")
    SET(PODOFO_INCLUDE_DIRS /usr/include/)
    SET(PODOFO_LDFLAGS -lpodofo)
ENDIF(NOT PODOFO_FOUND)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")

ADD_DEFINITIONS(-DPACKAGE_NAME=\"${PACKAGE_NAME}\")
ADD_DEFINITIONS(-DPACKAGE_VERSION=\"${PACKAGE_VERSION}\")
ADD_DEFINITIONS(-DGETTEXT_PACKAGE=\"${CMAKE_PROJECT_NAME}\")
ADD_DEFINITIONS(-DMANUAL_DIR=\"${MANUAL_DIR}\")

# translations
file(GLOB TS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/translations/*.ts)
SET_SOURCE_FILES_PROPERTIES(${TS_FILES} PROPERTIES OUTPUT_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/translations)
QT5_ADD_TRANSLATION(QM_FILES ${TS_FILES})

SET(app_SRCS
    configdialog.cpp
    configsettings.cpp
    crashhandler.cpp
    displayer.cpp
    displayertoolselect.cpp
    displayrenderer.cpp
    djvudocument.cpp
    filedialogs.cpp
    main.cpp
    mainwindow.cpp
    outputeditor.cpp
    outputeditortext.cpp
    outputtextedit.cpp
    outputviewerhtml.cpp
    recognitionmenu.cpp
    recognizer.cpp
    searchreplaceframe.cpp
    sourcemanager.cpp
    substitutionsmanager.cpp
    utils.cpp
    ccittfax4encoder.cpp
    papersize.cpp
    sourcedocumentmodel.cpp
    pageitemdelegate.cpp
    languageselectiondialog.cpp
    flyocrstarter.cpp
    pagespinbox.cpp
    hocr/displayertoolhocr.cpp
    hocr/hocrdocument.cpp
    hocr/hocrodtexporter.cpp
    hocr/hocrpdfexporter.cpp
    hocr/hocrpdfexportwidget.cpp
    hocr/hocrproofreadwidget.cpp
    hocr/hocrspellchecker.cpp
    hocr/hocrtextexporter.cpp
    hocr/outputeditorhocr.cpp
    icons/icons.qrc
    translations/fly-ocr_locales.qrc
)

SET(app_UIS
    forms/batchmodedialog.ui
    forms/characterlistdialog.ui
    forms/configdialog.ui
    forms/crashhandler.ui
    forms/mainwindow.ui
    forms/pagerangedialog.ui
    forms/pdfexportdialog.ui
    forms/pdfexportwidget.ui
    forms/searchreplaceframe.ui
    forms/languageselectiondialog.ui
)

SET_SOURCE_FILES_PROPERTIES(translations/fly-ocr_locales.qrc PROPERTIES OBJECT_DEPENDS ${QM_FILES})

QT5_WRAP_UI(app_UIS_H ${app_UIS})

INCLUDE_DIRECTORIES(
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_BINARY_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/hocr
    ${CMAKE_CURRENT_SOURCE_DIR}/../
)

INCLUDE_DIRECTORIES(
    SYSTEM
    ${DDJVUAPI_INCLUDE_DIRS}
    ${ENCHANT_INCLUDE_DIRS}
    ${PODOFO_INCLUDE_DIRS}
    ${POPPLER_INCLUDE_DIRS}
    ${QTSPELL_INCLUDE_DIRS}
    ${QUAZIP_INCLUDE_DIR}
    ${QTSINGLEAPPLICATION_INCLUDE_DIRS}
)

LINK_DIRECTORIES(
    ${DDJVUAPI_LIBRARY_DIRS}
    ${ENCHANT_LIBRARY_DIRS}
    ${PODOFO_LIBRARY_DIRS}
    ${POPPLER_LIBRARY_DIRS}
    ${QTSPELL_LIBRARY_DIRS}
)

ADD_DEFINITIONS(
    ${DDJVUAPI_CFLAGS}
    ${ENCHANT_CFLAGS}
    ${PODOFO_CFLAGS}
    ${POPPLER_CFLAGS}
    ${QTSPELL_CFLAGS}
    ${QTSINGLEAPPLICATION_DEFINITIONS}
)

ADD_EXECUTABLE(fly-ocr ${app_SRCS} ${app_UIS_H})
TARGET_LINK_LIBRARIES(fly-ocr PRIVATE
    Qt5::Widgets
    Qt5::Concurrent
    Qt5::PrintSupport
    Qt5::Xml
    Qt5::WebEngineWidgets
    KF5::Sane
    KF5::ConfigCore
    KF5::ConfigGui
    KF5::CoreAddons
    KF5::XmlGui
    KF5::ItemViews
    libfly-ocr
    ${DDJVUAPI_LDFLAGS}
    ${ENCHANT_LDFLAGS}
    ${PODOFO_LDFLAGS}
    ${POPPLER_LDFLAGS}
    ${QTSPELL_LDFLAGS}
    ${QUAZIP_LIBRARIES}
    ${QTSINGLEAPPLICATION_LIBRARIES}
)
ADD_DEPENDENCIES(fly-ocr libfly-ocr)
INSTALL(TARGETS fly-ocr DESTINATION ${CMAKE_INSTALL_BINDIR})
INSTALL(FILES fly-ocr.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)
INSTALL(DIRECTORY icons/128x128 icons/16x16 icons/192x192 icons/22x22 icons/256x256 icons/32x32 icons/48x48 icons/64x64 icons/96x96
        DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor)
