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}/mrw-config-files
}

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

    conf_file_dir = os.path.join(
        d.getVar("WORKDIR", True),
        'mrw-config-files')
    files = find_conf_files(conf_file_dir)

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

    dir_len = len(conf_file_dir)

    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"
