summaryrefslogtreecommitdiff
path: root/meta-phosphor/recipes-phosphor/sensors/phosphor-hwmon_git.bb
blob: 8daeb91f3a6d9085731ed05e090fed57ad47f828 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
SUMMARY = "OpenBMC hwmon poller"
DESCRIPTION = "OpenBMC hwmon poller."
PR = "r1"
PV = "1.0+git${SRCPV}"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=fa818a259cbed7ce8bc2a22d35a464fc"

inherit meson
inherit obmc-phosphor-systemd

PACKAGECONFIG ??= ""
# Meson configure option to enable/disable max31785-msl
PACKAGECONFIG[max31785-msl] = "-Denable-max31785-msl=true, -Denable-max31785-msl=false"

PACKAGE_BEFORE_PN = "max31785-msl"
SYSTEMD_PACKAGES = "${PN} max31785-msl"

SYSTEMD_SERVICE_${PN} = "xyz.openbmc_project.Hwmon@.service"
SYSTEMD_SERVICE_max31785-msl = "${@bb.utils.contains('PACKAGECONFIG', 'max31785-msl', 'phosphor-max31785-msl@.service', '', d)}"

DEPENDS += " \
        sdbusplus \
        sdeventplus \
        stdplus \
        phosphor-dbus-interfaces \
        phosphor-logging \
        gpioplus \
        cli11 \
        "

FILES_${PN} += "${base_libdir}/systemd/system/xyz.openbmc_project.Hwmon@.service"
RDEPENDS_${PN} += "\
        bash \
        "

RRECOMMENDS_${PN} += "${VIRTUAL-RUNTIME_phosphor-hwmon-config}"

FILES_max31785-msl = "\
        ${base_libdir}/systemd/system/phosphor-max31785-msl@.service \
        ${bindir}/max31785-msl \
        "
RDEPENDS_max31785-msl = "${VIRTUAL-RUNTIME_base-utils} i2c-tools bash"

SRC_URI += "git://github.com/openbmc/phosphor-hwmon"

SRCREV = "6d50c3e9e184d3741eec13bd164518864fe806bf"

S = "${WORKDIR}/git"

# The following postinstall script iterate over hwmon env files:
# 1. It adds HW_SENSOR_ID value if not set. The value being calculated
#    as sha256sum.
# 2. For each hwmon the script generates busconfig ACLs.
pkg_postinst_${PN}() {
    [ -n "$D" ] || return 0

    hwmon_dir="$D/etc/default/obmc/hwmon"
    dbus_dir="$D/etc/dbus-1/system.d"

    [ -d "${hwmon_dir}" ] || return 0

    # Remove existing links and replace with actual copy of the file to prevent
    # HW_SENSOR_ID variable override for different sensors' instances.
    find "${hwmon_dir}" -type l -name \*.conf | while read f; do
        path="$(readlink -f $f)"
        rm -f "${f}"
        cp "${path}" "${f}"
    done

    find "${hwmon_dir}" -type f -name \*.conf | while read f; do
        path="/${f##${hwmon_dir}/}"
        path="${path%.conf}"
        sensor_id="$(printf "%s" "${path}" | sha256sum | cut -d\  -f1)"
        acl_file="${dbus_dir}/xyz.openbmc_project.Hwmon-${sensor_id}.conf"

        egrep -q '^HW_SENSOR_ID\s*=' "${f}" ||
            printf "\n# Sensor id for %s\nHW_SENSOR_ID = \"%s\"\n" "${path}" "${sensor_id}" >> "${f}"

        # Extract HW_SENSOR_ID that could be either quoted or unquoted string.
        sensor_id="$(sed -n 's,^HW_SENSOR_ID\s*=\s*"\?\(.[^" ]\+\)\s*"\?,\1,p' "${f}")"

        [ ! -f "${acl_file}" ] || continue
        path_s="$(echo "${path}" | sed 's,\-\-,\\-\\-,g')"
        cat <<EOF>"${acl_file}"
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy user="root">
    <!-- ${path_s} -->
    <allow own="xyz.openbmc_project.Hwmon-${sensor_id}.Hwmon1"/>
    <allow send_destination="xyz.openbmc_project.Hwmon-${sensor_id}.Hwmon1"/>
  </policy>
</busconfig>
EOF
    done
}