SUMMARY = "Phosphor Host logger"
DESCRIPTION = "Save log messages from host's console to the persistent storage."
HOMEPAGE = "https://github.com/openbmc/phosphor-hostlogger"
PR = "r1"
PV = "1.0+git${SRCPV}"

inherit meson
inherit systemd

# License info
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"

# Dependencies
DEPENDS += " \
            phosphor-logging \
            zlib \
           "
RDEPENDS:${PN} += "obmc-console"
RRECOMMENDS:${PN} += "phosphor-debug-collector"

# Source code repository
S = "${WORKDIR}/git"
SRC_URI = "git://github.com/openbmc/phosphor-hostlogger"
SRCREV = "042b5ba8438d1423f807feb5ef739cda063ea8d2"

# Disable unit tests
EXTRA_OEMESON += "-Dtests=disabled"

# Systemd service template
SYSTEMD_PACKAGES = "${PN}"
SYSTEMD_SERVICE:${PN} = "hostlogger@.service"

# Default service instance to install (single-host mode)
DEFAULT_INSTANCE = "ttyVUART0"
DEFAULT_SERVICE = "hostlogger@${DEFAULT_INSTANCE}.service"

# Multi-host mode setup - list of configuration files to install, can be added
# via SRC_URI in a bbappend. The file name is the name of the service instance,
# which should match the corresponding instance of the obmc-console service.
CUSTOM_CONFIGS = "${@custom_configs('${WORKDIR}')}"
CUSTOM_SERVICES = "${@custom_services('${CUSTOM_CONFIGS}')}"

# Preset systemd units
SYSTEMD_SERVICE:${PN} += "${@'${CUSTOM_SERVICES}' if len('${CUSTOM_SERVICES}') \
                                                  else '${DEFAULT_SERVICE}'}"

# Gets list of custom config files in a directory
def custom_configs(workdir):
    if os.path.exists(workdir):
        return ' '.join([f for f in os.listdir(workdir) if f.endswith('.conf')])

# Get list of custom service instances
def custom_services(configs):
    return ' '.join(['hostlogger@' + i.replace('.conf', '.service') \
                     for i in configs.split()])

do_install:append() {
  # Install config files
  if [ -n "${CUSTOM_CONFIGS}" ]; then
    for CONFIG_FILE in ${CUSTOM_CONFIGS}; do
        install -Dm 0644 ${WORKDIR}/${CONFIG_FILE} \
                     ${D}${sysconfdir}/hostlogger/${CONFIG_FILE}
    done
  else
    install -Dm 0644 ${S}/default.conf \
                     ${D}${sysconfdir}/hostlogger/${DEFAULT_INSTANCE}.conf
  fi
}
