summaryrefslogtreecommitdiff
blob: b00ac4df8a8670f900bc4b7d6df0f559c51d0138 (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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit linux-info systemd toolchain-funcs multilib-minimal

DESCRIPTION="Hardware Monitoring user-space utilities"
HOMEPAGE="https://hwmon.wiki.kernel.org/ https://github.com/lm-sensors/lm-sensors"

if [[ "${PV}" =~ .*_p[[:digit:]]{8}.* ]] ; then
	COMMIT="2c8cca3d6cd60121b401734c1a24cfec7daed4fc"
	SRC_URI="https://github.com/lm-sensors/${PN}/archive/${COMMIT}.tar.gz -> ${P}.tar.gz"
	S="${WORKDIR}/${PN}-${COMMIT}"
else
	SRC_URI="https://github.com/lm-sensors/lm-sensors/archive/V$(ver_rs 1- -).tar.gz -> ${P}.tar.gz"
	S="${WORKDIR}/${PN}-$(ver_rs 1- -)"
fi

LICENSE="GPL-2+ LGPL-2.1"

# SUBSLOT based on SONAME of libsensors.so
SLOT="0/5.0.0"

KEYWORDS="~alpha amd64 arm arm64 ~loong ~mips ppc ppc64 ~riscv sparc x86 ~amd64-linux ~x86-linux"
IUSE="contrib selinux sensord static-libs"

COMMON_DEPS="
	sensord? (
		net-analyzer/rrdtool
		virtual/logger
	)"

RDEPEND="${COMMON_DEPS}
	dev-lang/perl
	!<sys-apps/openrc-0.36
	selinux? ( sec-policy/selinux-sensord )"

DEPEND="${COMMON_DEPS}
	app-alternatives/yacc
	app-alternatives/lex"

CONFIG_CHECK="~HWMON ~I2C_CHARDEV ~I2C"
WARNING_HWMON="${PN} requires CONFIG_HWMON to be enabled for use."
WARNING_I2C_CHARDEV="sensors-detect requires CONFIG_I2C_CHARDEV to be enabled."
WARNING_I2C="${PN} requires CONFIG_I2C to be enabled for most sensors."

PATCHES=(
	"${FILESDIR}"/${PN}-3.5.0-sensors-detect-gentoo.patch
	"${FILESDIR}"/${PN}-3.6.0-no-which.patch
	"${FILESDIR}"/${PN}-3.6.0-w83627ehf-nct6775.patch
)

DOCS=( CHANGES CONTRIBUTORS INSTALL README )
DOCS+=( doc/{donations,fancontrol.txt,fan-divisors,libsensors-API.txt,progs,temperature-sensors,vid} )

src_prepare() {
	default

	if [[ -n "${COMMIT}" ]]; then
		local _version="${PV%_*}+git_${COMMIT}"

		sed -i \
			-e "s:LM_VERSION.*:LM_VERSION \"${_version}\":" \
			version.h || \
			die "Failed to update version.h"

		sed -i \
			-e "s/^\$revision = '.*/\$revision = '${_version}';/" \
			-e "/^\$revision =~ s.*/d" \
			prog/detect/sensors-detect || \
			die "Failed to set revision in prog/detect/sensors-detect"

		sed -i \
			-e "s/^echo \"# pwmconfig revision.*/echo \"# pwmconfig revision ${_version}\"/" \
			-e "/^REVISION=.*/d" \
			-e "/^REVDATE=.*/d" \
			-e "s:^PIDFILE=\".*:PIDFILE=\"/run/fancontrol.pid\":" \
			prog/pwm/pwmconfig || \
			die "Failed to adjust prog/pwm/pwmconfig"
	else
		sed -i \
			-e "s:^PIDFILE=\".*:PIDFILE=\"/run/fancontrol.pid\":" \
			prog/pwm/pwmconfig || \
			die "Failed to adjust PIDFILE in prog/pwm/pwmconfig"
	fi

	# Respect LDFLAGS
	sed -i -e 's/\$(LIBDIR)$/\$(LIBDIR) \$(LDFLAGS)/g' Makefile || \
		die "Failed to sed in LDFLAGS"

	sed -i \
		-e "s:^PIDFILE=\".*:PIDFILE=\"/run/fancontrol.pid\":" \
		prog/pwm/fancontrol || \
		die "Failed to adjust PIDFILE of prog/pwm/fancontrol"

	# Don't use EnvironmentFile in systemd unit
	sed -i \
		-e '/^EnvironmentFile=/d' \
		-e '/^Exec.*modprobe.*/d' \
		prog/init/lm_sensors.service || \
		die "Failed to remove EnvironmentFile from systemd unit file"

	if ! use static-libs; then
		sed -i -e '/^BUILD_STATIC_LIB/d' Makefile || \
			die "Failed to disable static building"
	fi

	# Don't show outdated user instructions
	sed -i -e '/^	@echo "\*\*\* /d' Makefile || \
		die "Failed to remove outdated user instructions"

	multilib_copy_sources
}

multilib_src_configure() {
	default

	if multilib_is_native_abi && use sensord; then
		# sensord requires net-analyzer/rrdtool which doesn't have real multilib
		# support. To prevent errors like
		#
		#   skipping incompatible /usr/lib/librrd.so when searching for -lrrd
		#   cannot find -lrrd
		#
		# we only build sensord when we are building for profile's native ABI
		# (it doesn't affect libsensors.so).
		sed -i -e 's:^#\(PROG_EXTRA.*\):\1:' Makefile || \
			die "Failed to enable building of sensord"
	fi
}

multilib_src_compile() {
	emake \
		CC="$(tc-getCC)" \
		CXX="$(tc-getCXX)" \
		LD="$(tc-getLD)" \
		AR="$(tc-getAR)"
}

multilib_src_install() {
	# We need to set CC and friends again here to avoid recompilation for cross
	# bug #799851
	emake \
		CC="$(tc-getCC)" \
		CXX="$(tc-getCXX)" \
		LD="$(tc-getLD)" \
		AR="$(tc-getAR)" \
		DESTDIR="${ED}" \
		PREFIX="/usr" \
		MANDIR="/usr/share/man" \
		ETCDIR="/etc" \
		LIBDIR="/usr/$(get_libdir)" \
		install
}

multilib_src_install_all() {
	newinitd "${FILESDIR}"/lm_sensors.initd lm_sensors
	newconfd "${FILESDIR}"/lm_sensors.confd lm_sensors
	systemd_dounit prog/init/lm_sensors.service

	newinitd "${FILESDIR}"/fancontrol.initd fancontrol
	newconfd "${FILESDIR}"/fancontrol.confd fancontrol
	systemd_newunit "${FILESDIR}"/fancontrol.service-r1 fancontrol.service

	if use sensord; then
		newconfd "${FILESDIR}"/sensord.confd sensord
		newinitd "${FILESDIR}"/sensord.initd sensord
		systemd_newunit "${FILESDIR}"/sensord.service-r1 sensord.service
	fi

	einstalldocs

	docinto developers
	dodoc doc/developers/applications

	if use contrib; then
		insinto /usr/share/lm_sensors
		doins -r "${S}"/configs
	fi
}

pkg_postinst() {
	local _new_loader='3.4.0_p20160725'
	local _v
	for _v in ${REPLACING_VERSIONS}; do
		if ! ver_test "${_v}" -gt "${_new_loader}"; then
			# This is an upgrade which require migration

			elog ""
			elog "Since version 3.4.0_p20160725 ${PN} no longer loads modules on its own"
			elog "instead it is using \"modules-load\" services provided by OpenRC or systemd."
			elog ""
			elog "To migrate your configuration you have 2 options:"
			elog ""
			elog "  a) Re-create a new configuration using \"/usr/sbin/sensors-detect\""
			elog ""
			elog "  b) Copy existing \"modules_<n>\", \"HWMON_MODULES\" or \"BUS_MODULES\""
			elog "     variables from \"/etc/conf.d/lm_modules\" to"
			elog "     \"/etc/modules-load.d/lm_sensors.conf\" and adjust format."
			elog ""
			elog "     For details see https://wiki.gentoo.org/wiki/Systemd#Automatic_module_loading"
			elog ""
			elog "     Important: Don't forget to migrate your module's argument"
			elog "                (modules_<name>_args variable) if your are not already"
			elog "                using \"/etc/modprobe.d\" (which is recommended)."

			# Show this elog only once
			break
		fi
	done

	if [[ -z "${REPLACING_VERSIONS}" ]]; then
		# New installation

		elog ""
		elog "Please run \`/usr/sbin/sensors-detect' in order to setup"
		elog "\"/etc/modules-load.d/lm_sensors.conf\"."
		elog ""
		elog "You might want to add lm_sensors to your default runlevel to make"
		elog "sure the sensors get initialized on the next startup."
		elog ""
		elog "Be warned, the probing of hardware in your system performed by"
		elog "sensors-detect could freeze your system."
	fi
}