
# Find includes in corresponding current build & source directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

set(SRC_LIST
        aboutdlg.ui
        aboutdlg.cpp
        bookmarklistdlg.ui
        bookmarklistdlg.cpp
        crqtutil.cpp
        main.cpp
        recentdlg.ui
        recentdlg.cpp
        tocdlg.ui
        tocdlg.cpp
        addbookmarkdlg.ui
        addbookmarkdlg.cpp
        cr3widget.cpp
        filepropsdlg.ui
        filepropsdlg.cpp
        mainwindow.ui
        mainwindow.cpp
        settings.ui
        settings.cpp
        sampleview.cpp
        searchdlg.ui
        searchdlg.cpp
        searchhistorymodel.cpp
        searchhistoryitemdelegate.cpp
        searchresultitemdelegate.cpp
        searchresultmodel.cpp
        fallbackfontsdialog.ui
        fallbackfontsdialog.cpp
        fontfamiliesdialog.ui
        fontfamiliesdialog.cpp
        tabdata.cpp
        tabscollection.cpp
        utils.cpp
)

if(WIN32)
  set(SRC_LIST ${SRC_LIST} crqt.rc)
  set_property(SOURCE crqt.rc PROPERTY OBJECT_DEPENDS ${CMAKE_BINARY_DIR}/config.h)
endif(WIN32)

set(LANGUAGES ru uk cs bg hu nl)
message( "Languages: ${LANGUAGES}" )
set(LANGUAGE_TS_FILES)
foreach(LANGUAGE ${LANGUAGES})
  set(TS_FILE "${CMAKE_CURRENT_SOURCE_DIR}/i18n/crqt_${LANGUAGE}.ts")
  list(APPEND LANGUAGE_TS_FILES ${TS_FILE})
endforeach(LANGUAGE ${LANGUAGES})

if( ${USE_QT} STREQUAL QT6 )
  qt6_add_resources(CRQT_RCS crqtres.qrc)
elseif ( ${USE_QT} STREQUAL QT5 )
  qt5_add_resources(CRQT_RCS crqtres.qrc)
endif()

set(QM_FILES)
if(LANGUAGE_TS_FILES)
  if( ${USE_QT} STREQUAL QT6 )
    qt6_update_translations(QM_FILES ${LANGUAGE_TS_FILES} ${SRC_LIST})
  elseif ( ${USE_QT} STREQUAL QT5 )
    qt5_update_translations(QM_FILES ${LANGUAGE_TS_FILES} ${SRC_LIST})
  endif()
endif(LANGUAGE_TS_FILES)

if (WIN32)
  # -mwindows -> window application (without terminal screen)
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mwindows")
  add_executable(crqt WIN32 ${SRC_LIST} ${CRQT_RCS} ${QM_FILES})
else()
  add_executable(crqt ${SRC_LIST} ${CRQT_RCS} ${QM_FILES})
endif (WIN32)

if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
  if (CMAKE_HOST_UNIX)
    configure_file(valgrind_check.sh.cmake ${CMAKE_CURRENT_BINARY_DIR}/valgrind_check.sh)
  endif(CMAKE_HOST_UNIX)
endif("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")

if(WIN32)
if(CMAKE_GENERATOR MATCHES "Visual Studio.*")
  message("Visual Studio generator detected")
  set_target_properties(crqt PROPERTIES
      LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
  set_target_properties(crqt PROPERTIES
      LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
  set_target_properties(crqt PROPERTIES
      LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
  set_target_properties(crqt PROPERTIES
      LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS")
endif(CMAKE_GENERATOR MATCHES "Visual Studio.*")
endif(WIN32)

if( ${USE_QT} STREQUAL QT6 )
  target_link_libraries(crqt PRIVATE crengine-ng::crengine-ng Qt6::Core Qt6::Gui Qt6::Widgets Qt6::Svg)
elseif ( ${USE_QT} STREQUAL QT5 )
  target_link_libraries(crqt PRIVATE crengine-ng::crengine-ng Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Svg)
endif()

if (QT_FEATURE_static)
  if(${USE_QT} STREQUAL QT6)
    if(UNIX AND NOT MACOS)
      target_link_libraries(crqt PRIVATE Qt6::QWaylandIntegrationPlugin Qt6::QXdgDesktopPortalThemePlugin)
    endif()
  endif()
endif()

if (MACOS)
  install( TARGETS crqt RUNTIME DESTINATION Contents/MacOS )
  #install( DIRECTORY ../data/skins DESTINATION share/crqt/skins )
  install( DIRECTORY ../data/textures DESTINATION Contents/Resources )
  install( DIRECTORY ../data/backgrounds DESTINATION Contents/Resources )
  install( FILES ${QM_FILES} DESTINATION Contents/Resources/i18n )
  install( FILES desktop/crqt.icns DESTINATION Contents/Resources )
  install( FILES desktop/Assets.car DESTINATION Contents/Resources )
  configure_file(desktop/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
  install( FILES ${CMAKE_CURRENT_BINARY_DIR}/Info.plist DESTINATION Contents )
  install( FILES desktop/PkgInfo DESTINATION Contents )
  # install crengine-ng data files
  install( DIRECTORY ${CRENGINE_NG_DATA_DIR}/ DESTINATION Contents/Resources FILES_MATCHING PATTERN "*.css" )
  install( DIRECTORY ${CRENGINE_NG_DATA_DIR}/hyph/ DESTINATION Contents/Resources/hyph FILES_MATCHING PATTERN "*.pattern" )
elseif (UNIX)
  install( TARGETS crqt RUNTIME DESTINATION bin )
  #install( DIRECTORY ../data/skins DESTINATION share/crqt/skins )
  install( DIRECTORY ../data/textures DESTINATION share/crqt )
  install( DIRECTORY ../data/backgrounds DESTINATION share/crqt )
  install( FILES ${QM_FILES} DESTINATION share/crqt/i18n )
  install( FILES desktop/io.gitlab.coolreader_ng.crqt-ng.desktop DESTINATION share/applications )
  install( FILES desktop/io.gitlab.coolreader_ng.crqt-ng.metainfo.xml DESTINATION share/metainfo )
  install( FILES desktop/crqt-16x16.png DESTINATION share/icons/hicolor/16x16/apps RENAME crqt.png )
  install( FILES desktop/crqt-22x22.png DESTINATION share/icons/hicolor/22x22/apps RENAME crqt.png )
  install( FILES desktop/crqt-24x24.png DESTINATION share/icons/hicolor/24x24/apps RENAME crqt.png )
  install( FILES desktop/crqt-32x32.png DESTINATION share/icons/hicolor/32x32/apps RENAME crqt.png )
  install( FILES desktop/crqt-48x48.png DESTINATION share/icons/hicolor/48x48/apps RENAME crqt.png )
  install( FILES desktop/crqt-64x64.png DESTINATION share/icons/hicolor/64x64/apps RENAME crqt.png )
  install( FILES desktop/crqt-128x128.png DESTINATION share/icons/hicolor/128x128/apps RENAME crqt.png )
  install( FILES desktop/crqt-256x256.png DESTINATION share/icons/hicolor/256x256/apps RENAME crqt.png )
  install( FILES icons/crqt-logo.svg DESTINATION share/icons/hicolor/scalable/apps RENAME crqt.svg)
else()
  install( TARGETS crqt RUNTIME DESTINATION . )
  #install( DIRECTORY ../data/skins DESTINATION . )
  install( DIRECTORY ../data/textures DESTINATION . )
  install( DIRECTORY ../data/backgrounds DESTINATION . )
  install( FILES ${QM_FILES} DESTINATION i18n )
endif()
