#
# Copyright (c) 2013-2020,2025-2026 Red Hat.
# Copyright (c) 2000,2003,2004 Silicon Graphics, Inc.  All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# This program 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.
#

TOPDIR = ../..
include $(TOPDIR)/src/include/builddefs
-include ./GNUlocaldefs

CPMDAS = root pmcd pmimport \
	linux_proc linux_xfs linux_zfs linux \
	darwin_proc darwin freebsd netbsd aix \
	solaris windows \
	sample simple trivial sendmail mailq txmon \
	apache cisco trace shping mounts weblog \
	mmv lmsensors process summary etw \
	lustrecomm infiniband logger bash systemd \
	gfs2 jbd2 cifs nvidia resctrl perfevent \
	dm pipe openbsd docker smart podman statsd \
	hacluster linux_sockets denki bpf overhead \
	farm amdgpu btrfs valkey

PLPMDAS = bonding netfilter zimbra postgresql \
	dbping memcache mysql oracle kvm \
	named news pdns samba dtsrun postfix gpsd \
	rsyslog snmp nginx \
	ds389 ds389log activemq lustre gpfs slurm \
	bind2 redis nutcracker

PYPMDAS = gluster zswap unbound haproxy \
	libvirt lio openmetrics opentelemetry \
	elasticsearch bpftrace mssql netcheck \
	rabbitmq openvswitch nfsclient nixl mongodb \
	uwsgi rocestat hdb rds chrony db2

SUBDIRS = $(CPMDAS) $(PLPMDAS) $(PYPMDAS)
LDIRT = local.conf pmcd.conf local.root

ifneq ("$(wildcard $(TOPDIR)/src/include/pcp/config.h)","")
HAVE_UNIX_DOMAIN_SOCKETS = $(shell grep 'define HAVE_STRUCT_SOCKADDR_UN' $(TOPDIR)/src/include/pcp/config.h >/dev/null && echo yes)
else
    # after make clean in src/include/pcp, config.h is gone ... punt
    HAVE_UNIX_DOMAIN_SOCKETS = no
endif

default :: default_pcp

default_pcp : $(SUBDIRS)
	@echo '# Performance Metrics Domain Specifications' > pmcd.conf
	@echo '# ' >> pmcd.conf
	@echo '# This file is automatically generated during the build' >> pmcd.conf
	@echo '# Name  Id      IPC     IPC Params      File/Cmd' >> pmcd.conf
	@cat pmcd.conf > local.conf
	$(SUBDIRS_MAKERULE)
	@echo >> pmcd.conf
	@echo '[access]' >> pmcd.conf
	@echo 'disallow ".*" : store;' >> pmcd.conf
	@echo 'disallow ":*" : store;' >> pmcd.conf
ifeq "$(HAVE_UNIX_DOMAIN_SOCKETS)" "yes"
	@echo 'allow "local:*" : all;' >> pmcd.conf
else
	@echo 'allow "localhost" : all;' >> pmcd.conf
endif
	root_files=""; \
	for pmda in `$(AWK) '/^[^#]/ {print $$1}' local.conf`; do \
	    f=`find . -maxdepth 3 -name "root_$$pmda" \
	       | grep "^\./$(PCP_PLATFORM)" | head -1`; \
	    [ -z "$$f" ] && \
	        f=`find . -maxdepth 3 -name "root_$$pmda" | head -1`; \
	    [ -n "$$f" ] && root_files="$$root_files $$f"; \
	done; \
	if [ -n "$$root_files" ]; then \
	    rm -f local.root; \
	    $(PMNSMERGE) $$root_files local.root; \
	fi

install :: install_pcp

install_pcp :: $(SUBDIRS)
	$(SUBDIRS_MAKERULE)

install_pcp :: default_pcp
	$(INSTALL) -m 755 -d `dirname $(PCP_PMCDCONF_PATH)`
	$(INSTALL) -m 644 pmcd.conf $(PCP_PMCDCONF_PATH)
	$(INSTALL) -m 644 local.conf indom.conf $(PCP_ETC_DIR)/pcp
	$(INSTALL) -m 644 -t $(PCP_PMNS_DIR)/local.root local.root $(PCP_PMNSADM_DIR)/local.root

include $(BUILDRULES)
