cmake_minimum_required(VERSION 3.5)

# Set CMake policies to support later version behaviour
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) # option() honors variables already set

# build options

option(BUILD_NOTIFY_CONTACT_DATA_REMINDER "Build contact data reminder" ON)
option(BUILD_NOTIFY_OBJECT_STATE_CHANGES "Build object state changes notifier" ON)
option(BUILD_NOTIFY_OBJECT_EVENTS "Build object events notifier" ON)
option(CMAKE_EXPORT_COMPILE_COMMANDS "If enabled, generates a compile_commands.json file containing the exact compiler calls." ON)

# project details

include("cmake/package.cmake")

package(fred-notify
    FULL_VERSION "1.2.0")

project(FredNotify
    VERSION ${PACKAGE_VERSION}
    LANGUAGES CXX)

# dependencies

include("cmake/package_dependencies.cmake")

add_package_dependencies(FROM_FILE "dependencies.txt")

# build (modules)

add_custom_target("${PACKAGE_NAME}" ALL)

if(BUILD_NOTIFY_CONTACT_DATA_REMINDER)
    add_subdirectory("modules/contact_data_reminder")
    add_dependencies("${PACKAGE_NAME}" fred-notify-contact-data-reminder)
endif()

if(BUILD_NOTIFY_OBJECT_STATE_CHANGES)
    add_subdirectory("modules/object_state_changes")
    add_dependencies("${PACKAGE_NAME}" fred-notify-object-state-changes)
endif()

if(BUILD_NOTIFY_OBJECT_EVENTS)
    add_subdirectory("modules/object_events")
    add_dependencies("${PACKAGE_NAME}" fred-notify-object-events)
endif()

# installation

include(GNUInstallDirs)

add_custom_target(uninstall
    COMMAND xargs -L10 rm -v < ${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt
    COMMAND cat ${CMAKE_CURRENT_BINARY_DIR}/install_manifest.txt | xargs -L1 dirname | sort | uniq | xargs -L10 rmdir -p --ignore-fail-on-non-empty)

# dist

include("cmake/package_dist.cmake")
package_dist(PACKAGE_NAME "${PACKAGE_NAME}"
             PACKAGE_TARNAME "${PACKAGE_TARNAME}")

list_package_dependencies_recursive("${PACKAGE_NAME}")
