# config file for tarantoolctl
if (TARGET_OS_FREEBSD)
    set(SYSCONFIG_DEFAULT "tarantool/default")
elseif (NOT IS_DIRECTORY "${CMAKE_INSTALL_SYSCONFDIR}/sysconfig")
    # Debian/Ubuntu/etc.
    set(SYSCONFIG_DEFAULT "default")
else()
    # RedHat/Fedora/etc.
    set(SYSCONFIG_DEFAULT "sysconfig")
endif()
configure_file(tarantoolctl.in tarantoolctl @ONLY)

option(ENABLE_DIST "Enable install of init scripts" OFF)

if (NOT ENABLE_DIST)
    return ()
endif()

include(systemd)

#
# tarantoolctl
#

# Default path to data in default/tarantool
if (TARGET_OS_FREEBSD)
    set(TARANTOOL_DATADIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/db/tarantool")
else()
    set(TARANTOOL_DATADIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/tarantool")
endif()
message (STATUS "tarantoolctl datadir: ${TARANTOOL_DATADIR}")
set(TARANTOOL_LOGDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/log/tarantool")
message (STATUS "tarantoolctl logdir: ${TARANTOOL_LOGDIR}")
set(TARANTOOL_RUNDIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/run/tarantool")
message (STATUS "tarantoolctl rundir: ${TARANTOOL_RUNDIR}")
set(TARANTOOL_USER "tarantool")
set(SYSCONFIG_AVAILABLEDIR "tarantool/instances.available")
set(SYSCONFIG_ENABLEDDIR "tarantool/instances.enabled")
set(TARANTOOL_AVAILABLEDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${SYSCONFIG_AVAILABLEDIR}")
set(TARANTOOL_ENABLEDDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/${SYSCONFIG_ENABLEDDIR}")
if(NOT WITH_SYSVINIT)
    # Don't use instances.enabled on systemd distros
    set(TARANTOOL_INSTANCEDIR "${TARANTOOL_AVAILABLEDIR}")
else()
    set(TARANTOOL_INSTANCEDIR "${TARANTOOL_ENABLEDDIR}")
endif()

configure_file(default/tarantool.in default/tarantool @ONLY)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/default/tarantool DESTINATION
    ${CMAKE_INSTALL_SYSCONFDIR}/${SYSCONFIG_DEFAULT}/
    PERMISSIONS
    OWNER_READ OWNER_WRITE
    GROUP_READ
    WORLD_READ)

# tarantoolctl itself
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/tarantoolctl DESTINATION ${CMAKE_INSTALL_BINDIR}
    PERMISSIONS
    OWNER_READ OWNER_WRITE OWNER_EXECUTE
    GROUP_READ GROUP_EXECUTE
    WORLD_READ WORLD_EXECUTE
)

# directories in /etc/ for tarantoolctl
install(DIRECTORY DESTINATION
    ${CMAKE_INSTALL_SYSCONFDIR}/${SYSCONFIG_AVAILABLEDIR}
)
if (WITH_SYSVINIT)
    install(DIRECTORY DESTINATION
        ${CMAKE_INSTALL_SYSCONFDIR}/${SYSCONFIG_ENABLEDDIR}
    )
endif()

# an example instance script for tarantoolctl
install (FILES example.lua DESTINATION
        ${CMAKE_INSTALL_SYSCONFDIR}/${SYSCONFIG_AVAILABLEDIR}
    PERMISSIONS
    OWNER_READ OWNER_WRITE OWNER_READ
    GROUP_READ WORLD_READ
)

# directories for data, logs and pid files
# Sic: chmod and chown are performed by rpm/deb
install(DIRECTORY DESTINATION ${TARANTOOL_DATADIR})
install(DIRECTORY DESTINATION ${TARANTOOL_LOGDIR})

# /var/run/tarantool is only needed with sysvinit
# systemd creates this directory automatically using systemd-tmpfiles
if (WITH_SYSVINIT)
    install(DIRECTORY DESTINATION ${TARANTOOL_RUNDIR})
endif()

if (NOT TARGET_OS_FREEBSD)
    set (WITH_LOGROTATE_DEFAULT ON)
endif()
option(WITH_LOGROTATE "Enable logrotate configuration" ${WITH_LOGROTATE_DEFAULT})
file(APPEND "${_OptionalPackagesFile}" "-- WITH_LOGROTATE=${WITH_LOGROTATE}\n")

if (WITH_LOGROTATE)
    # logrotate files
    configure_file(tarantool.logrotate.in tarantool.logrotate @ONLY)
    install (FILES ${CMAKE_CURRENT_BINARY_DIR}/tarantool.logrotate
        DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/logrotate.d/
        RENAME "tarantool"
        PERMISSIONS
        OWNER_READ OWNER_WRITE
        GROUP_READ
        WORLD_READ)
endif()

# man page for tarantoolctl
pod2man (
    tarantoolctl.pod "tarantoolctl" 1
    "Tarantool instances control"
)

#
# Init scripts
#

if (WITH_SYSTEMD)
    message (STATUS "Using scripts for systemd")
    # NOTE: always install tarantool.init to ${CMAKE_INSTALL_PREFIX}/lib
    # instead of ${CMAKE_INSTALL_LIBDIR} because LIBDIR depends on the target
    # architecture, but tarantool-common is noarch package.
    set(SYSV_INITD_DIR ${CMAKE_INSTALL_PREFIX}/lib/tarantool)

    configure_file("tarantool@.service.in" "tarantool@.service" @ONLY)
    install (FILES ${CMAKE_CURRENT_BINARY_DIR}/tarantool@.service
        DESTINATION ${SYSTEMD_UNIT_DIR}
        PERMISSIONS
        OWNER_READ OWNER_WRITE
        GROUP_READ GROUP_READ
        WORLD_READ WORLD_READ)

    if(WITH_SYSVINIT)
        # Install generator and tarantool.service file to allow
        # sysvinit alongside systemd (Debian/Ubuntu)
        #
        configure_file("tarantool-generator.in" "tarantool-generator" @ONLY)
        install (FILES ${CMAKE_CURRENT_BINARY_DIR}/tarantool-generator
            DESTINATION ${SYSTEMD_GENERATOR_DIR}
            PERMISSIONS
            OWNER_READ OWNER_WRITE OWNER_EXECUTE
            GROUP_READ GROUP_READ GROUP_EXECUTE
            WORLD_READ WORLD_READ WORLD_EXECUTE)
        install (FILES ${CMAKE_CURRENT_SOURCE_DIR}/tarantool.service
            DESTINATION ${SYSTEMD_UNIT_DIR}
            PERMISSIONS
            OWNER_READ OWNER_WRITE
            GROUP_READ GROUP_READ
            WORLD_READ WORLD_READ)
    endif()

    configure_file(tarantool.tmpfiles.conf.in tarantool.tmpfiles.conf @ONLY)
    install (FILES "${CMAKE_CURRENT_BINARY_DIR}/tarantool.tmpfiles.conf"
        DESTINATION "${SYSTEMD_TMPFILES_DIR}"
        RENAME "tarantool.conf"
        PERMISSIONS
        OWNER_READ OWNER_WRITE
        GROUP_READ GROUP_READ
        WORLD_READ WORLD_READ)
endif()

if (WITH_SYSVINIT)
    message (STATUS "Using scripts for sysvinit")
    install (FILES tarantool.init DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/init.d/
        RENAME tarantool
        PERMISSIONS
        OWNER_READ OWNER_WRITE
        GROUP_READ GROUP_EXECUTE
        WORLD_READ WORLD_EXECUTE)
endif()
