require pcp.inc
#inherit perlnative

# NOTE: the following prog dependencies are unknown, ignoring: gtar gzip pkgmk xmlto lzma qshape md5sum pod2man publican git makedepend qmake-qt4 xconfirm true gmake xz dblatex hdiutil rpm bzip2 which mkinstallp dtrace seinfo qmake-qt5 gawk dlltool rpmbuild dpkg makepkg qmake echo
# NOTE: unable to map the following pkg-config dependencies: libmicrohttpd libsystemd-journal
#       (this is based on recipes that have previously been built and packaged)
# NOTE: the following library dependencies are unknown, ignoring: nspr gen ibumad regex sasl2 pfm nss papi ibmad
#       (this is based on recipes that have previously been built and packaged)
DEPENDS += "perl-native bison-native flex-native python3-native python3-setuptools python3 \
	pcp-native cairo zlib ncurses readline libx11 avahi openssl"


SRC_URI += "file://0001-Remove-unsuitble-part-for-cross-compile.patch \
            file://pass-options-to-AR.patch \
            file://fix_parallel_make.patch \
           "

export PCP_DIR="${RECIPE_SYSROOT_NATIVE}"
#export PCP_RUN_DIR="${RECIPE_SYSROOT_NATIVE}"
EXTRA_OEMAKE = "CC="${CC}" LD="${LD}""
inherit useradd systemd features_check

# Needs libx11
REQUIRED_DISTRO_FEATURES = "x11"

SYSTEMD_AUTO_ENABLE:${PN} = "enable"
SYSTEMD_SERVICE:${PN} = "pmcd.service pmcd.service pmie_check.service pmie_farm_check.service \
                         pmlogger_daily.service pmlogger_farm_check.service pmfind.service \
                         pmie_daily.service  pmlogger.service pmlogger_daily_report.service \
                         pmproxy.service pmie.service pmie_farm.service pmlogger_check.service \
                         pmlogger_farm.service"

USERADD_PACKAGES = "${PN}"
USERADD_PARAM:${PN} = "--system --home ${localstatedir}/lib/pcp --no-create-home \
                       --user-group pcp"

USERADD_PACKAGES += "${PN}-testsuite"
USERADD_PARAM:${PN}-testsuite = "--system --home ${localstatedir}/lib/pcp/testsuite --no-create-home \
                       --user-group pcpqa"

RDEPENDS:${PN} += "perl"
RDEPENDS:${PN}-testsuite += "${PN} bash perl"
RDEPENDS:python3-${PN} += "${PN} python3"

do_configure:prepend () {
    cp ${WORKDIR}/config.linux ${B}
    rm -rf ${S}/include/pcp/configsz.h
    rm -rf ${S}/include/pcp/platformsz.h
    export SED=${TMPDIR}/hosttools/sed
    export PYTHON=python3
}

do_compile:prepend() {
	sed -i -e "s,#undef HAVE_64BIT_LONG,,g" \
		-e "s,#undef HAVE_64BIT_PTR,,g" \
		-e "s,#undef PM_SIZEOF_SUSECONDS_T,,g" \
		-e "s,#undef PM_SIZEOF_TIME_T,,g" \
		${S}/src/include/pcp/config.h.in
	sed -i -e "s,HAVE_PYTHON_ORDEREDDICT = false,HAVE_PYTHON_ORDEREDDICT = true,g" \
		${S}/src/include/builddefs
	sed -i -e "s,TOPDIR)/python3-pcp.list,TOPDIR)/python3-pcp.list --install-lib=${PYTHON_SITEPACKAGES_DIR},g" ${S}/src/python/GNUmakefile
	export PYTHON=python3
	#export PYTHON3=${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN}
}

do_compile() {
        oe_runmake default_pcp 
}

do_install () {
	export NO_CHOWN=true
	oe_runmake install DIST_ROOT=${D}\
	install_pcp

	rm -rf ${D}${localstatedir}/log
	rm -rf ${D}${localstatedir}/lib/pcp/pmcd
	rm -rf ${D}${localstatedir}/lib/pcp/tmp
	rm -rf ${D}${localstatedir}/run
	mv ${D}${docdir}/C* ${D}${docdir}/pcp-doc/
	mv ${D}${docdir}/I* ${D}${docdir}/pcp-doc/
	mv ${D}${docdir}/R* ${D}${docdir}/pcp-doc/
	mv ${D}${docdir}/V* ${D}${docdir}/pcp-doc/
	sed -i "s#PCP_AWK_PROG=.*#PCP_AWK_PROG=awk#" ${D}/${sysconfdir}/pcp.conf
	sed -i "s#PCP_SORT_PROG=.*#PCP_SORT_PROG=sort#" ${D}/${sysconfdir}/pcp.conf
	sed -i "s#PCP_ECHO_PROG=.*#PCP_ECHO_PROG=echo#" ${D}/${sysconfdir}/pcp.conf
	sed -i "s#PCP_WHICH_PROG=.*#PCP_WHICH_PROG=which#" ${D}/${sysconfdir}/pcp.conf
}

PACKAGES += " ${PN}-export-zabbix-agent ${PN}-testsuite \
	libpcp-gui2  libpcp-gui2-dev \
	libpcp-import1 \
	libpcp-mmv1 libpcp-mmv1-dev \
	libpcp-pmda3 libpcp-pmda3-dev \
	libpcp-trace2 libpcp-trace2-dev \
	libpcp-web1 libpcp-web1-dev \
	libpcp3 libpcp3-dev python3-${PN}\
"
FILES:libpcp-gui2 = "${libdir}/libpcp_gui.so.2 \
"	
FILES:libpcp-gui2-dev = " \
	${libdir}/libpcp_gui.so \
	${libdir}/libpcp_gui.a \
	${includedir}/pmafm.h \
	${includedir}/pmtime.h \
"
FILES:libpcp-mmv1 = " \
	${libdir}/libpcp_mmv.so.1 \
"
FILES:libpcp-mmv1-dev = " \
	${libdir}/libpcp_mmv.a \
	${libdir}/libpcp_mmv.so \
	${libdir}/libpcp_mmv.so \
	${includedir}/mmv_stats.h \
	${includedir}/mmv_dev.h \
	${datadir}/man/man3/mmv_* \
	${datadir}/man/man5/mmv.5.gz \
"
FILES:libpcp-import1 = " \
	${libdir}/libpcp_import.so.1 \
"
FILES:libpcp-pmda3 = " \
	${libdir}/libpcp_pmda.so.3 \
"
FILES:libpcp-pmda3-dev = " \
	${includedir}/pmda.h \
	${includedir}/pmdaroot.h \
	${libdir}/libpcp_pmda.a \
	${libdir}/libpcp_pmda.so \
	${libdir}/pkgconfig/libpcp_pmda.pc \
	${datadir}/man/man3/PMDA.3.gz \
	${datadir}/man/man3/pmda* \
"
FILES:libpcp-trace2 = " \
	${libdir}/libpcp_trace.so.2 \
"
FILES:libpcp-trace2-dev = " \
	${includedir}/trace.h \
	${includedir}/trace_dev.h \
	${libdir}/libpcp_trace.a \
	${libdir}/libpcp_trace.so \
	${datadir}/man/man3/pmtrace* \
"
FILES:libpcp-web1 = " \
	${libdir}/libpcp_web.so.1 \
"
FILES:libpcp-web1-dev = " \
	${includedir}/pmhttp.h \
	${includedir}/pmjson.h \
	${libdir}/libpcp_web.a \
	${libdir}/libpcp_web.so \
	${datadir}/man/man3/pmhttp* \
	${datadir}/man/man3/pmjson* \
"
FILES:libpcp3 = " \
	${libdir}/libpcp.so.3 \
"

FILES:${PN} = " \
	${sysconfdir}/pcp \
	${sysconfdir}/cron.d \
	${sysconfdir}/init.d \
	${libexecdir} \
	${bindir} \
	${datadir}/bash-completion \
	${datadir}/pcp-gui \
	${datadir}/zsh \
	${systemd_system_unitdir}/ \
	${libdir}/pcp/ \
	${datadir}/pcp \
	${libdir}/*.sh \
	${datadir}/man \
	${libdir}/rc-proc.sh.minimal \
	${sysconfdir}/p* \
	${sysconfdir}/s* \
	${localstatedir}/lib/pcp/config \
	${localstatedir}/lib/pcp/pmdas/ \
	${localstatedir}/lib/pcp/pmns \
	${libdir}/libpcp_fault.so.3 \
"

FILES:${PN}-export-zabbix-agent += " \
	${libdir}/zabbix \
	${sysconfdir}/zabbix \
	${mandir}/man3/zbxpcp.3.gz \
	${libdir}/zabbix \
"
FILES:${PN}-testsuite = "${localstatedir}/lib/pcp/testsuite/"
FILES:python3-${PN} = "${PYTHON_SITEPACKAGES_DIR}"
FILES:${PN}-dev += " \
        ${includedir}/pcp \
        ${libdir}/libpcp.a \
        ${libdir}/libpcp.so \
        ${localstatedir}/lib/pcp/pmdas/*/*.so \
        ${libexecdir}/pcp/bin/install-sh \
        ${libdir}/pkgconfig/libpcp.pc \
        ${libdir}/zabbix/modules/*.so \
        ${datadir}/man/man3/LOGIMPORT.3.gz \
        ${datadir}/man/man3/P* \
        ${datadir}/man/man3/Q* \
        ${datadir}/man/man3/__pm* \
        ${datadir}/man/man3/pmA* \
        ${datadir}/man/man3/pmC* \
        ${datadir}/man/man3/pmD* \
        ${datadir}/man/man3/pmE* \
        ${datadir}/man/man3/pmF* \
        ${datadir}/man/man3/pmG* \
        ${datadir}/man/man3/pmH* \
        ${datadir}/man/man3/pmI* \
        ${datadir}/man/man3/pmL* \
        ${datadir}/man/man3/pmM* \
        ${datadir}/man/man3/pmN* \
        ${datadir}/man/man3/pmO* \
        ${datadir}/man/man3/pmP* \
        ${datadir}/man/man3/pmR* \
        ${datadir}/man/man3/pmS* \
        ${datadir}/man/man3/pmT* \
        ${datadir}/man/man3/pmU* \
        ${datadir}/man/man3/pmW* \
        ${datadir}/man/man3/pmf* \
        ${datadir}/man/man3/pmg* \
        ${datadir}/man/man3/pmi* \
        ${datadir}/man/man3/pms* \
        ${datadir}/man/man3/pmt* \
"
#| chkacc1.c:8:10: fatal error: localconfig.h: No such file or directory
#|     8 | #include "localconfig.h"
#|       |          ^~~~~~~~~~~~~~~
PARALLEL_MAKE = ""
