SUMMARY = "Phosphor hwmon configuration generator"
DESCRIPTION = "Generate phosphor-hwmon configuration from an MRW."
PR = "r1"

inherit obmc-phosphor-license
inherit allarch

DEPENDS += "mrw-perl-tools-native mrw-native"

do_compile_append() {
    ${STAGING_BINDIR_NATIVE}/perl-native/perl \
        ${STAGING_BINDIR_NATIVE}/hwmon.pl \
        -x ${STAGING_DATADIR_NATIVE}/obmc-mrw/${MACHINE}.xml \
        -d ${WORKDIR}
}

def find_conf_files(dir):
    from fnmatch import fnmatch
    myfiles = []

    #These conf files generated by hwmon.pl are in
    #subdirectories which we need to preserve the path to.
    for root, dirs, files in os.walk(dir):
        for name in files:
            if fnmatch(name, "*.conf"):
                myfiles.append(os.path.join(root, name))

    return  myfiles

python install_conf_files() {
    from shutil import copy

    files = find_conf_files(d.getVar("WORKDIR", True))

    install_dir = os.path.join(d.getVar("D", True),
                               "etc", "default", "obmc", "hwmon")

    dir_len = len(d.getVar("WORKDIR", True))

    for f in files:
        dest = os.path.join(install_dir, f[dir_len + 1:])
        parent = os.path.dirname(dest)
        if not os.path.exists(parent):
            os.makedirs(parent)

        copy(f, dest)
}

do_install[postfuncs] += "install_conf_files"
