# Copyright (C) 2015-2017 Canonical Ltd
# Copyright (C) 2019 Joan CiberSheep
# Copyright (C) 2019-2023 Daniel Frost
# Copyright (C) 2022-2023 Guido Berhoerster
# Copyright (C) 2023 Ratchanan Srirattanamet
# Copyright (C) 2024 Mike Gabriel
# Copyright (C) 2024 Maciej Sopyło <me@klh.io>
#
# SPDX-License-Identifier: GPL-3.0-only
#
# This file is part of Lomiri Weather App
#
# Lomiri Weather App is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3 as
# published by the Free Software Foundation.
#
# Lomiri Weather App is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

cmake_minimum_required(VERSION 3.5)
project(lomiri-weather-app VERSION 6.1.2 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS FALSE)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)

include(FindGettext)
if(NOT GETTEXT_FOUND)
    message(FATAL_ERROR "Could not find gettext")
endif(NOT GETTEXT_FOUND)

set (MANIFEST_PATH "manifest.json.in" CACHE INTERNAL "Relative path to the manifest file")

find_package(flatbuffers) # latest(?) name
if(NOT flatbuffers_FOUND)
  find_package(FlatBuffers) # older name
  if(NOT FlatBuffers_FOUND)
    find_package(Flatbuffers) # even older name
    if(NOT Flatbuffers_FOUND)
      message(FATAL_ERROR
        "Failed to find a flatbuffers CMake module, tried the following names: flatbuffers, FlatBuffers, Flatbuffers"
      )
    endif()
  endif()
endif()
message(STATUS "Found a flatbuffers CMake module")

find_package(Qt5Core REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5Quick REQUIRED)
find_package(Qt5QuickControls2 REQUIRED)
find_package(Qt5Location REQUIRED)
find_package(Qt5WebEngine REQUIRED)

# Automatically create moc files
set(CMAKE_AUTOMOC ON)

option(INSTALL_TESTS "Install the tests on make install" on)
option(CLICK_MODE "Build as a click package" on)
set(OWM_API_KEY "" CACHE STRING "OpenWeatherMap API key")

# Tests
enable_testing()

# Standard install paths
include(GNUInstallDirs)

set(CLICK_NAME weather.ubports)
set(APP_NAME lomiri-weather-app)
set(MAIN_QML ${APP_NAME}.qml)
set(DESKTOP_FILE "${APP_NAME}.desktop")
set(URLS_FILE "${APP_NAME}.url-dispatcher")
set(ICON weather-app.svg)
set(SPLASH weather-app-splash.svg)
set(AUTOPILOT_DIR lomiri_weather_app)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
add_definitions(-DQT_MESSAGELOGCONTEXT)
message(STATUS "App version is: ${PROJECT_VERSION}")


# Set install paths
if(CLICK_MODE)
  # Find out the architecture for package building
  # to determine the plugin's installation path
  execute_process(
      COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH
      OUTPUT_VARIABLE ARCH_TRIPLET
      OUTPUT_STRIP_TRAILING_WHITESPACE
  )
  set(CMAKE_INSTALL_PREFIX "/")
  set(CMAKE_INSTALL_BINDIR "/")
  set(LOMIRI_WEATHER_APP_DIR "${CMAKE_INSTALL_DATADIR}/app")
  set(EXEC "lomiri-weather-app-migrate.py ${APP_NAME}")
  set(DATA_DIR /)
  set(URLS_DIR ${DATA_DIR})
  set(ICON_DIR ${LOMIRI_WEATHER_APP_DIR})
  set(ICON ${ICON_DIR}/${ICON})
  set(SPLASH_DIR ${LOMIRI_WEATHER_APP_DIR})
  set(SPLASH ${SPLASH_DIR}/${SPLASH})
  set(QT_IMPORTS_DIR "/lib/${ARCH_TRIPLET}")
  set(MODULE_PATH ${QT_IMPORTS_DIR})
else(CLICK_MODE)
  set(DATA_DIR ${CMAKE_INSTALL_FULL_DATADIR}/${APP_NAME})
  set(LOMIRI_WEATHER_APP_DIR "${DATA_DIR}/app")
  set(EXEC ${APP_NAME})
  set(ICON_DIR ${DATA_DIR}/)
  set(ICON ${ICON_DIR}${ICON})
  set(SPLASH_DIR ${DATA_DIR}/)
  set(SPLASH ${SPLASH_DIR}${SPLASH})
  execute_process(
    COMMAND qmake -query QT_INSTALL_QML
    OUTPUT_VARIABLE QT_IMPORTS_DIR
    OUTPUT_STRIP_TRAILING_WHITESPACE
  )
  set(DESKTOP_DIR ${CMAKE_INSTALL_DATADIR}/applications)
  set(URLS_DIR ${CMAKE_INSTALL_DATADIR}/lomiri-url-dispatcher/urls)
endif(CLICK_MODE)

if(${CLICK_MODE})
  message("-- Configuring manifest.json")

  configure_file(${MANIFEST_PATH} ${CMAKE_CURRENT_BINARY_DIR}/manifest.json)
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifest.json DESTINATION ${CMAKE_INSTALL_PREFIX})
  install(FILES "${APP_NAME}.apparmor" DESTINATION ${CMAKE_INSTALL_PREFIX})
else(CLICK_MODE)
endif()

install(PROGRAMS lomiri-weather-app-migrate.py DESTINATION ${DATA_DIR})

configure_file(${DESKTOP_FILE}.in.in ${DESKTOP_FILE}.in)

add_custom_target(${DESKTOP_FILE} ALL
    COMMENT "Merging translations into ${DESKTOP_FILE}..."
    COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}
            --desktop --template=${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE}.in
            -o ${DESKTOP_FILE}
            -d ${CMAKE_SOURCE_DIR}/po
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE}
        DESTINATION ${CMAKE_INSTALL_DATADIR}/applications)

install(FILES ${URLS_FILE} DESTINATION ${URLS_DIR})

add_subdirectory(po)
add_subdirectory(tests)
add_subdirectory(src)

# make the qml files visible on qtcreator
file(GLOB QML_JS_FILES
    RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
    *.qml *.js README* *.txt)

add_custom_target(weather_ubports_QMLFiles DEPENDS lomiri-weather-app.qml SOURCES ${QML_JS_FILES})

# TODO: Add custom target for autopilot and run.
