commit:     85f08b2beefc799a843a3c84f309cf44a3316a93
Author:     Conrad Kostecki <conikost <AT> gentoo <DOT> org>
AuthorDate: Thu Jan 23 23:49:58 2025 +0000
Commit:     Conrad Kostecki <conikost <AT> gentoo <DOT> org>
CommitDate: Thu Jan 23 23:51:12 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=85f08b2b

sys-power/apcupsd: update EAPI 7 -> 8

Also changed:
* Sorted use flags
* Use generated apcupsd.conf
* Set NISIP via configure
* Remove runlevel check from apcupsd.powerfail
* Patch for LTO
* Dropped PAGER workaround

Closes: https://bugs.gentoo.org/418177
Closes: https://bugs.gentoo.org/832350
Closes: https://bugs.gentoo.org/941584
Closes: https://github.com/gentoo/gentoo/pull/40199

Signed-off-by: Conrad Kostecki <conikost <AT> gentoo.org>

 sys-power/apcupsd/apcupsd-3.14.14-r4.ebuild       | 160 ++++++++++++++++++++++
 sys-power/apcupsd/files/apcupsd-3.14.14-lto.patch |  29 ++++
 sys-power/apcupsd/files/apcupsd.powerfail.init-r1 |  17 +++
 3 files changed, 206 insertions(+)

diff --git a/sys-power/apcupsd/apcupsd-3.14.14-r4.ebuild 
b/sys-power/apcupsd/apcupsd-3.14.14-r4.ebuild
new file mode 100644
index 000000000000..c3bc2dbb2a36
--- /dev/null
+++ b/sys-power/apcupsd/apcupsd-3.14.14-r4.ebuild
@@ -0,0 +1,160 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit linux-info systemd udev tmpfiles
+
+DESCRIPTION="APC UPS daemon with integrated tcp/ip remote shutdown"
+HOMEPAGE="http://www.apcupsd.org/";
+SRC_URI="https://downloads.sourceforge.net/apcupsd/${P}.tar.gz";
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~riscv ~x86"
+IUSE="cgi +modbus selinux snmp +usb"
+
+DEPEND="
+       sys-apps/util-linux[tty-helpers]
+       cgi? ( media-libs/gd:2= )
+       modbus? (
+               usb? ( virtual/libusb:0= )
+       )
+       snmp? ( net-analyzer/net-snmp )
+"
+
+RDEPEND="
+       virtual/mailx
+       selinux? ( sec-policy/selinux-apcupsd )
+       ${DEPEND}
+"
+
+CONFIG_CHECK="~USB_HIDDEV ~HIDRAW"
+ERROR_USB_HIDDEV="CONFIG_USB_HIDDEV:   needed to access USB-attached UPSes"
+ERROR_HIDRAW="CONFIG_HIDRAW:           needed to access USB-attached UPSes"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-3.14.9-aliasing.patch
+       "${FILESDIR}"/${PN}-3.14.9-close-on-exec.patch
+       "${FILESDIR}"/${PN}-3.14.9-commfailure.patch
+       "${FILESDIR}"/${PN}-3.14.9-fix-nologin.patch
+       "${FILESDIR}"/${PN}-3.14.9-gapcmon.patch
+       "${FILESDIR}"/${PN}-3.14.9-wall-on-mounted-usr.patch
+       "${FILESDIR}"/${PN}-3.14.14-lto.patch
+)
+
+pkg_setup() {
+       if use kernel_linux && use usb && linux_config_exists ; then
+               check_extra_config
+       fi
+}
+
+src_prepare() {
+       default
+       # skip this specific doc step as produced files never installed
+       # this avoids calling the col command not available on musl based 
system.
+       sed -i "/^SUBDIRS/ s/doc//g" Makefile || die
+}
+
+src_configure() {
+       # We force the DISTNAME to gentoo so it will use gentoo's layout also
+       # when installed on non-linux systems.
+       local myeconfargs
+       myeconfargs=(
+               APCUPSD_MAIL="$(type -p mail)"
+               --disable-gapcmon
+               --enable-net
+               --enable-pcnet
+               --sbindir="/sbin"
+               --sysconfdir="${EPREFIX}/etc/apcupsd"
+               --with-distname="gentoo"
+               --with-pwrfail-dir="${EPREFIX}/etc/apcupsd"
+               --with-lock-dir="${EPREFIX}/run/apcupsd"
+               --with-log-dir="${EPREFIX}/var/log"
+               --with-nisip="127.0.0.1"
+               --with-nis-port="3551"
+               --with-pid-dir="${EPREFIX}/run/apcupsd"
+               --with-upscable="$(usex usb usb smart)"
+               --with-upstype="$(usex usb usb apcsmart)"
+               $(use_enable cgi)
+               $(use_enable modbus)
+               $(use_enable snmp)
+               $(use_enable usb)
+               $(use_with cgi cgi-bin "${EPREFIX}/usr/libexec/${PN}/cgi-bin")
+               $(usex modbus $(use_enable usb modbus-usb) 
"--disable-modbus-usb")
+               $(usex usb "--without-serial-dev" 
"--with-serial-dev=/dev/ttyS0")
+               $(usex usb "--with-dev=" "--with-dev=/dev/ttyS0")
+       )
+
+       econf "${myeconfargs[@]}"
+}
+
+src_compile() {
+       emake VERBOSE="2"
+}
+
+src_install() {
+       emake DESTDIR="${D}" VERBOSE="2" install
+
+       rm "${ED}"/etc/init.d/apcupsd || die
+       rm "${ED}"/etc/init.d/halt || die
+       rm -r "${ED}"/usr/share/hal || die
+
+       insinto /etc/apcupsd
+       newins examples/safe.apccontrol safe.apccontrol
+
+       doman doc/*.8 doc/*.5
+
+       docinto html
+       dodoc -r doc/manual/.
+       einstalldocs
+
+       newinitd "${FILESDIR}"/apcupsd.init apcupsd
+       newinitd "${FILESDIR}"/apcupsd.powerfail.init-r1 apcupsd.powerfail
+
+       systemd_dounit "${FILESDIR}"/apcupsd.service
+       dotmpfiles "${FILESDIR}"/apcupsd-tmpfiles.conf
+
+       # replace it with our udev rules if we're in Linux
+       if use kernel_linux ; then
+               udev_newrules "${FILESDIR}"/apcupsd-udev.rules 60-${PN}.rules
+       fi
+
+}
+
+pkg_postinst() {
+       use kernel_linux && udev_reload
+
+       tmpfiles_process ${PN}-tmpfiles.conf
+
+       if use cgi ; then
+               elog "The cgi-bin directory for ${PN} is 
/usr/libexec/${PN}/cgi-bin."
+               elog "Set up your ScriptAlias or symbolic links accordingly."
+       fi
+
+       elog ""
+       elog "Since version 3.14.0 you can use multiple apcupsd instances to"
+       elog "control more than one UPS in a single box with openRC."
+       elog "To do this, create a link between /etc/init.d/apcupsd to a new"
+       elog "/etc/init.d/apcupsd.something, and it will then load the"
+       elog "configuration file at /etc/apcupsd/something.conf."
+       elog ""
+
+       elog 'If you want apcupsd to power off your UPS when it'
+       elog 'shuts down your system in a power failure, you must'
+       elog 'add apcupsd.powerfail to your shutdown runlevel:'
+       elog ''
+       elog ' \e[01m rc-update add apcupsd.powerfail shutdown \e[0m'
+       elog ''
+
+       if use kernel_linux; then
+               elog "Starting from version 3.14.9-r1, ${PN} installs udev 
rules"
+               elog "for persistent device naming. If you have multiple UPS"
+               elog "connected to the machine, you can point them to the 
devices"
+               elog "in /dev/apcups/by-id directory."
+       fi
+}
+
+pkg_postrm() {
+       use kernel_linux && udev_reload
+}

diff --git a/sys-power/apcupsd/files/apcupsd-3.14.14-lto.patch 
b/sys-power/apcupsd/files/apcupsd-3.14.14-lto.patch
new file mode 100644
index 000000000000..54ad76b61a35
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd-3.14.14-lto.patch
@@ -0,0 +1,29 @@
+Fix extern symbol declarations to be consistent with the definition.
+
+Bug: https://bugs.gentoo.org/941584
+Signed-off-by: Holger Hoffstätte <[email protected]>
+
+diff -rup a/src/apcupsd.c a/src/apcupsd.c
+--- a/src/apcupsd.c
++++ b/src/apcupsd.c
+@@ -31,7 +31,7 @@ static void daemon_start(void);
+ int pidcreated = 0;
+ extern int kill_on_powerfail;
+ extern FILE *trace_fd;
+-extern char *pidfile;
++extern const char *pidfile;
+ 
+ /*
+  * The terminate function and trapping signals allows apcupsd
+diff -rup a/src/options.c b/src/options.c
+--- a/src/options.c
++++ b/src/options.c
+@@ -62,7 +62,7 @@ int terminate_on_powerfail = FALSE;
+ int kill_on_powerfail = FALSE;
+ int dumb_mode_test = FALSE;        /* for testing dumb mode */
+ int go_background = TRUE;
+-extern char *pidfile;
++extern const char *pidfile;
+ extern bool trace;
+ 
+ static void print_usage(char *argv[])

diff --git a/sys-power/apcupsd/files/apcupsd.powerfail.init-r1 
b/sys-power/apcupsd/files/apcupsd.powerfail.init-r1
new file mode 100644
index 000000000000..d582d9eb5b3a
--- /dev/null
+++ b/sys-power/apcupsd/files/apcupsd.powerfail.init-r1
@@ -0,0 +1,17 @@
+#!/sbin/openrc-run
+# Copyright 2009-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+description='Signal the UPS to kill power in a power failure condition'
+
+depend() {
+       need mount-ro
+}
+
+start() {
+       if [ -f /etc/apcupsd/powerfail ] ; then
+               ebegin 'Signaling UPS to kill power'
+               /sbin/apcupsd --killpower
+               eend $?
+       fi
+}

Reply via email to