# SPDX-License-Identifier: GPL-2.0-or-later
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_check_modules(GST REQUIRED gstreamer-1.0)
pkg_check_modules(LIBNOTIFY REQUIRED libnotify)
pkg_check_modules(APPINDICATOR REQUIRED ayatana-appindicator3-0.1)

add_executable(alarm-clock-applet
    alarm-applet.c alarm-applet.h
    player.c player.h
    util.c util.h
    list-entry.c list-entry.h
    alarm.c alarm.h
    alarm-enums.h
    alarm-gsettings.c alarm-gsettings.h
    ui.c ui.h
    alarm-actions.c alarm-actions.h
    alarm-list-window.c alarm-list-window.h
    alarm-settings.c alarm-settings.h
    prefs.c prefs.h
    # Autogenerated
    io.github.alarm-clock-applet.enums.gschema.xml
    alarm-glib-enums.c alarm-glib-enums.h
    alarm-clock-applet.desktop
    autostart/alarm-clock-applet.desktop
)
set_property(TARGET alarm-clock-applet PROPERTY C_STANDARD 11)

target_compile_options(alarm-clock-applet PRIVATE ${GTK3_CFLAGS_OTHER})

# Set default log domain
target_compile_definitions(alarm-clock-applet PUBLIC G_LOG_DOMAIN=\"alarm-clock-applet\")

# Really awful hack
if(CMAKE_VERSION VERSION_LESS "3.13")
    target_link_libraries(alarm-clock-applet PRIVATE "-rdynamic")
else()
    target_link_options(alarm-clock-applet PRIVATE "-rdynamic")
endif()

target_link_libraries(alarm-clock-applet PRIVATE
    ${GTK3_LIBRARIES}
    ${GST_LIBRARIES}
    ${LIBNOTIFY_LIBRARIES}
    ${APPINDICATOR_LIBRARIES}
)

target_include_directories(alarm-clock-applet PRIVATE
    ${GTK3_INCLUDE_DIRS}
    ${GST_INCLUDE_DIRS}
    ${LIBNOTIFY_INCLUDE_DIRS}
    ${APPINDICATOR_INCLUDE_DIRS}
)

if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.13")
    target_link_directories(alarm-clock-applet PRIVATE
        ${GTK3_LIBRARY_DIRS}
        ${GST_LIBRARY_DIRS}
        ${LIBNOTIFY_LIBRARY_DIRS}
        ${APPINDICATOR_LIBRARY_DIRS}
    )
endif()

# All generated files will go to build/src, so include it
target_include_directories(alarm-clock-applet PRIVATE
    "${CMAKE_BINARY_DIR}/src/"
)

configure_file(
    "${CMAKE_SOURCE_DIR}/src/config.h.in"
    "${CMAKE_BINARY_DIR}/src/config.h"
)

# Binary
install(
    TARGETS alarm-clock-applet
    DESTINATION "bin"
)

# ui and css
install(
    FILES
        "${CMAKE_SOURCE_DIR}/data/alarm-clock.ui"
        "${CMAKE_SOURCE_DIR}/data/alarm-clock.css"
    DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/alarm-clock-applet/"
)

# Desktop shortcut
# This can't go in po/CMakeLists.txt...
add_custom_command(OUTPUT "alarm-clock-applet.desktop"
    COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}
    --desktop
    --template "${CMAKE_SOURCE_DIR}/data/alarm-clock-applet.desktop.in"
    --output "alarm-clock-applet.desktop"
    -d "${CMAKE_SOURCE_DIR}/po/"
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/"
    DEPENDS "${CMAKE_SOURCE_DIR}/data/alarm-clock-applet.desktop.in" translations
)

install(
    FILES
        "${CMAKE_BINARY_DIR}/src/alarm-clock-applet.desktop"
    DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications/"
)

# Autostart
# Create a subdir and put the file in there so that we can keep the asme filename
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/src/autostart")
add_custom_command(OUTPUT "autostart/alarm-clock-applet.desktop"
    COMMAND ${GETTEXT_MSGFMT_EXECUTABLE}
    --desktop
    --template "${CMAKE_SOURCE_DIR}/data/alarm-clock-applet_autostart.desktop.in"
    --output "alarm-clock-applet.desktop"
    -d "${CMAKE_SOURCE_DIR}/po/"
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/autostart/"
    DEPENDS "${CMAKE_SOURCE_DIR}/data/alarm-clock-applet_autostart.desktop.in" translations
)

# CMAKE_INSTALL_FULL_SYSCONFDIR is /usr/local/etc/ which doesn't work in this case
set(SYSCONFDIR_XDG "${CMAKE_INSTALL_FULL_SYSCONFDIR}")
if(SYSCONFDIR_XDG STREQUAL "/usr/local/etc")
    set(SYSCONFDIR_XDG "/etc")
endif()

install(
    FILES
        "${CMAKE_BINARY_DIR}/src/autostart/alarm-clock-applet.desktop"
    DESTINATION "${SYSCONFDIR_XDG}/xdg/autostart/"
)

# GSettings schemas
install(
    FILES
        "${CMAKE_SOURCE_DIR}/data/io.github.alarm-clock-applet.gschema.xml"
        "${CMAKE_BINARY_DIR}/src/io.github.alarm-clock-applet.enums.gschema.xml"
    DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/glib-2.0/schemas/"
)

# Generate enums from header
find_program(GLIB_MKENUMS "glib-mkenums" REQUIRED)
add_custom_command(OUTPUT "io.github.alarm-clock-applet.enums.gschema.xml"
    COMMAND ${GLIB_MKENUMS}
    --comments "<!-- @comment@ -->"
    --fhead "<schemalist>"
    --vhead "  <@type@ id=\"io.github.alarm-clock-applet.@EnumName@\">"
    --vprod "    <value nick=\"@valuenick@\" value=\"@valuenum@\"/>"
    --vtail "  </@type@>"
    --ftail "</schemalist>"
    "${CMAKE_SOURCE_DIR}/src/alarm-enums.h"
    --output "io.github.alarm-clock-applet.enums.gschema.xml"
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/"
    DEPENDS "alarm-enums.h"
    VERBATIM
)

add_custom_command(OUTPUT "alarm-glib-enums.c"
    COMMAND ${GLIB_MKENUMS}
    --template "${CMAKE_SOURCE_DIR}/src/alarm-glib-enums.c.etemplate"
    --output "alarm-glib-enums.c"
    "${CMAKE_SOURCE_DIR}/src/alarm-enums.h"
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/"
    DEPENDS "alarm-enums.h" "alarm-glib-enums.c.etemplate"
)

add_custom_command(OUTPUT "alarm-glib-enums.h"
    COMMAND ${GLIB_MKENUMS}
    --template "${CMAKE_SOURCE_DIR}/src/alarm-glib-enums.h.etemplate"
    --output "alarm-glib-enums.h"
    "${CMAKE_SOURCE_DIR}/src/alarm-enums.h"
    WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/src/"
    DEPENDS "alarm-enums.h" "alarm-glib-enums.h.etemplate"
)

install(
    CODE
        "execute_process(COMMAND glib-compile-schemas \"${CMAKE_INSTALL_FULL_DATAROOTDIR}/glib-2.0/schemas/\")"
)

add_custom_target(compile_gsettings_schema
    COMMAND
        glib-compile-schemas "${CMAKE_INSTALL_FULL_DATAROOTDIR}/glib-2.0/schemas/"
)
add_dependencies(uninstall compile_gsettings_schema)

# Icons
install(DIRECTORY "${CMAKE_SOURCE_DIR}/data/icons/icons"
    DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}"
    FILE_PERMISSIONS
    OWNER_READ OWNER_WRITE
    GROUP_READ
    WORLD_READ
    DIRECTORY_PERMISSIONS
    OWNER_READ OWNER_WRITE OWNER_EXECUTE
    GROUP_READ GROUP_EXECUTE
    WORLD_READ WORLD_EXECUTE
)

# Needed to regenerate the icon cache
# 3.12 first introduced TOUCH, and Ubuntu 18.04 has 3.10
install(
    CODE
        "if(NOT DEFINED ENV{DESTDIR})
            file(WRITE \"\${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/.xdg-icon-resource-dummy\" \"\")
            file(REMOVE \"\${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/.xdg-icon-resource-dummy\")
        endif()"
)

if(ENABLE_GCONF_MIGRATION)
    add_dependencies(alarm-clock-applet alarm-clock-applet-gconf-migration)
endif()

# Manpage
include(Pod2man)
pod2man("${CMAKE_SOURCE_DIR}/src/alarm-clock-applet.pod" "${PROJECT_VERSION}" 1 "General Commands Manual")
