%global debug_package %{nil} Name: uke-power-integration Version: 1.0.0 Release: 1%{?dist} Summary: Uke power-integration package selection and source family License: MIT URL: https://github.com/MCC45TR/uke-linux-hardware-support Source0: uke-power-integration-1.0.0.tar.xz ExclusiveArch: aarch64 SourceLicense: MIT AND (MIT) BuildRequires: cmake gcc-c++ ninja-build extra-cmake-modules BuildRequires: gcc-c++ make systemd-rpm-macros jq dbus-daemon systemd BuildRequires: pkgconfig(libcrypto) BuildRequires: pkgconfig(libdrm) BuildRequires: pkgconfig(libsystemd) >= 257 BuildRequires: qt6-qtbase-devel kf6-kcoreaddons-devel libksysguard-devel lm_sensors-devel BuildRequires: systemd-rpm-macros systemd-udev %description Reviewed component sources with independent binary package identities. The source package adds no runtime selection RPM or service. %package -n uke-adaptive-display Version: 1.0.16 Release: 13.fc46 License: MIT Summary: Standard desktop sensor and display policy for Uke Requires: iio-sensor-proxy(ssc) >= 1 Requires: uke-ssc-fileservice >= 2026.09.21-8 Requires: coreutils grep sed systemd-udev Requires: powerdevil >= 6.8.0 Requires: kscreen >= 6.8.0 Requires: ddcutil >= 3.0.2 Requires: libddcutil >= 3.0.2 Requires: systemd >= 256 Requires: ksystemstats >= 6.8.0 Requires: libksysguard >= 6.8.0 Requires(post): systemd Requires(preun): systemd Requires(postun): systemd %description -n uke-adaptive-display Qualcomm SSC support for the standard desktop SensorProxy interface. Original KDE and other compatible desktop clients control rotation and ambient brightness. This preview installs a manually enabled integration target and test instructions. It includes no firmware, calibration, desktop replacement or brightness daemon. Original PowerDevil defaults make short power-button presses toggle only the display. Original DDC tools and restricted platform DisplayPort seat access prepare external monitor brightness; physical adapter/monitor tests are separate. Standard systemd policy enables suspend using s2idle. Physical wake, resume and power use remain separate device acceptance gates. Administrator masks are preserved. %package -n uke-battery-observer Version: 1.4.1 Release: 2.fc46 License: MIT Summary: Read-only native battery observation for Xiaomi Uke Requires: senemos-native-runtime(libstdc++) systemd-libs Requires(pre): systemd %description -n uke-battery-observer C++ standard power-supply collector and read-only D-Bus diagnostics. Firmware controls charging. No raw-property writes, PD negotiation, thresholds, factory access or calibration changes are supplied. Health and estimation algorithms remain disabled until pack/firmware evidence is qualified. This source component reports software tests and physical qualification separately. %package -n uke-charge-control Version: 1.4.1 Release: 2.fc46 License: MIT Summary: Evidence-gated native Uke charge-control backend Requires: senemos-native-runtime(libstdc++) systemd-libs Requires: upower >= 1.91.5 Requires(pre): systemd %description -n uke-charge-control Separate privileged threshold/current helper and disabled admission services. General controls require the reviewed kernel option, exact per-boot evidence, numerical guards and matching firmware setting readback. Positive FCC writes use the separately admitted OEM property. Voltage and PD remain firmware-owned; no voltage writer. The shipped profile is unqualified. No physical acceptance is implied. An explicit matched-kernel operation can enable only the existing 70/80 cap with external input off, preserving thresholds and electrical settings. Another explicit operation requests that already enabled target once. An opaque firmware reply is reported as receipt only, with physical effect unknown. %package -n uke-offline-charge Version: 1.4.1 Release: 2.fc46 License: MIT Summary: Minimal native charger-boot interface for Uke Requires: systemd senemos-native-runtime(libstdc++) %description -n uke-offline-charge Native DRM battery screen for an explicitly detected charger boot. The matched initramfs selects its isolated systemd target before desktop startup. Normal boots are unchanged. No firmware writer, PD control or charging algorithm is included. Physical charger-boot, power-key and unplug behavior require testing. %prep %setup -q ( mkdir -p "%{_builddir}/uke-power-integration-1.0.0/work/uke-battery-observer" cd '%{_builddir}/uke-power-integration-1.0.0/work/uke-battery-observer' rm -rf 'uke-battery-observer-1.4.1' /usr/bin/rpmuncompress -x '%{_builddir}/uke-power-integration-1.0.0/inputs/uke-battery-observer/uke-battery-observer-1.4.1.tar.xz' STATUS=$? if [ $STATUS -ne 0 ]; then exit $STATUS fi cd 'uke-battery-observer-1.4.1' /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . sha256sum -c SOURCE-SHA256SUMS ) ( mkdir -p "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display" cd '%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display' rm -rf 'uke-adaptive-display-1.0.16' /usr/bin/rpmuncompress -x '%{_builddir}/uke-power-integration-1.0.0/inputs/uke-adaptive-display/uke-adaptive-display-1.0.16.tar.xz' STATUS=$? if [ $STATUS -ne 0 ]; then exit $STATUS fi cd 'uke-adaptive-display-1.0.16' /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . ( mkdir -p "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display" cd '%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display' rm -rf 'uke-adaptive-display-1.0.16' /usr/bin/rpmuncompress -x '%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16/inputs/uke-adaptive-display/uke-adaptive-display-1.0.16.tar.gz' STATUS=$? if [ $STATUS -ne 0 ]; then exit $STATUS fi cd 'uke-adaptive-display-1.0.16' /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . ) ) %build ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-battery-observer/uke-battery-observer-1.4.1" /usr/bin/make -O -j${RPM_BUILD_NCPUS} V=1 VERBOSE=1 CXXFLAGS="-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wno-complain-wrong-lang -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer" LDFLAGS="-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes " ) ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16" ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16" CFLAGS="${CFLAGS:--O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer }" ; export CFLAGS ; CXXFLAGS="${CXXFLAGS:--O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer }" ; export CXXFLAGS ; FFLAGS="${FFLAGS:--O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules }" ; export FFLAGS ; FCFLAGS="${FCFLAGS:--O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules }" ; export FCFLAGS ; VALAFLAGS="${VALAFLAGS:--g}" ; export VALAFLAGS ; RUSTFLAGS="${RUSTFLAGS:--Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn}" ; export RUSTFLAGS ; LDFLAGS="${LDFLAGS:--Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes }" ; export LDFLAGS ; LT_SYS_LIBRARY_PATH="${LT_SYS_LIBRARY_PATH:-/usr/lib64:}" ; export LT_SYS_LIBRARY_PATH ; CC="${CC:-gcc}" ; export CC ; CXX="${CXX:-g++}" ; export CXX /usr/bin/cmake \ -S "." \ -B "redhat-linux-build" \ -G Ninja \ -DCMAKE_C_FLAGS_RELEASE:STRING="-DNDEBUG" \ -DCMAKE_CXX_FLAGS_RELEASE:STRING="-DNDEBUG" \ -DCMAKE_Fortran_FLAGS_RELEASE:STRING="-DNDEBUG" \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ -DCMAKE_INSTALL_DO_STRIP:BOOL=OFF \ -DCMAKE_INSTALL_PREFIX:PATH=/usr \ -DCMAKE_INSTALL_FULL_SBINDIR:PATH=/usr/bin \ -DCMAKE_INSTALL_SBINDIR:PATH=bin \ -DINCLUDE_INSTALL_DIR:PATH=/usr/include \ -DLIB_INSTALL_DIR:PATH=/usr/lib64 \ -DSYSCONF_INSTALL_DIR:PATH=/etc \ -DSHARE_INSTALL_PREFIX:PATH=/usr/share \ -DLIB_SUFFIX=64 \ -DBUILD_SHARED_LIBS:BOOL=ON -S src/adreno-stats /usr/bin/cmake --build "redhat-linux-build" -j${RPM_BUILD_NCPUS} --verbose ) ) %install ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-battery-observer/uke-battery-observer-1.4.1" /usr/bin/make install DESTDIR=%{buildroot} INSTALL="/usr/bin/install -p" prefix=/usr ) ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16" ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16" DESTDIR="%{buildroot}" /usr/bin/cmake --install "redhat-linux-build" install -Dm644 packaging/adreno.page %{buildroot}/usr/share/plasma-systemmonitor/adreno.page install -Dm644 packaging/uke-adaptive-display.target %{buildroot}/usr/lib/systemd/system/uke-adaptive-display.target install -Dm644 packaging/80-uke-adaptive-display.preset %{buildroot}/usr/lib/systemd/system-preset/80-uke-adaptive-display.preset install -Dm644 packaging/71-uke-tablet-mode.rules %{buildroot}/usr/lib/udev/rules.d/71-uke-tablet-mode.rules install -Dm644 packaging/61-uke-display-ddc.rules %{buildroot}/usr/lib/udev/rules.d/61-uke-display-ddc.rules install -Dm644 packaging/60-block-scheduler.rules %{buildroot}/etc/udev/rules.d/60-block-scheduler.rules install -Dm644 packaging/powerdevilrc %{buildroot}/etc/xdg/powerdevilrc install -Dm644 packaging/kwinoutputconfig.json %{buildroot}/etc/xdg/kwinoutputconfig.json install -Dm755 src/uke-ddc-config %{buildroot}/usr/libexec/senemos-uke/uke-ddc-config install -Dm644 packaging/60-uke-display-ddc.conf %{buildroot}/usr/lib/systemd/user/plasma-powerdevil.service.d/60-uke-display-ddc.conf install -Dm644 packaging/30-uke-s2idle.conf %{buildroot}/usr/lib/systemd/sleep.conf.d/30-uke-s2idle.conf install -Dm644 packaging/uke-suspend.conf %{buildroot}/usr/lib/tmpfiles.d/uke-suspend.conf ) ) %check ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-battery-observer/uke-battery-observer-1.4.1" # Host software checks; never tablet acceptance or automatic device access. /usr/bin/make -O -j${RPM_BUILD_NCPUS} V=1 VERBOSE=1 validate test-native ) ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16" ( cd "%{_builddir}/uke-power-integration-1.0.0/work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16" /usr/bin/ctest --test-dir "redhat-linux-build" \ --output-on-failure \ --force-new-ctest-process \ -j${RPM_BUILD_NCPUS} \ udevadm verify packaging/71-uke-tablet-mode.rules udevadm verify packaging/61-uke-display-ddc.rules udevadm verify packaging/60-block-scheduler.rules sh tests/ddc-config.sh systemd-tmpfiles --dry-run --create packaging/uke-suspend.conf ) ) %pre -n uke-battery-observer %post -n uke-battery-observer if [ $1 -eq 1 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then # Initial installation /usr/lib/systemd/systemd-update-helper install-system-units uke-battery.service || : fi %preun -n uke-battery-observer if [ $1 -eq 0 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then # Package removal, not upgrade /usr/lib/systemd/systemd-update-helper remove-system-units uke-battery.service || : fi %postun -n uke-battery-observer %post -n uke-charge-control if [ $1 -eq 1 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then # Initial installation /usr/lib/systemd/systemd-update-helper install-system-units uke-charge-control.service uke-charge-automatic.service uke-charge-protection.service || : fi %preun -n uke-charge-control if [ $1 -eq 0 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then # Package removal, not upgrade /usr/lib/systemd/systemd-update-helper remove-system-units uke-charge-control.service uke-charge-automatic.service uke-charge-protection.service || : fi %postun -n uke-charge-control %files -n uke-charge-control %license work/uke-battery-observer/uke-battery-observer-1.4.1/LICENSE %doc work/uke-battery-observer/uke-battery-observer-1.4.1/docs/CHARGE-CONTROL.md work/uke-battery-observer/uke-battery-observer-1.4.1/docs/CHARGING-PROTOCOLS.md work/uke-battery-observer/uke-battery-observer-1.4.1/docs/BATTERY-LONGEVITY.md work/uke-battery-observer/uke-battery-observer-1.4.1/docs/CHARGE-PUMP-PROTECTION.md work/uke-battery-observer/uke-battery-observer-1.4.1/docs/OSS-CHARGING-INVENTORY.tsv %doc work/uke-battery-observer/uke-battery-observer-1.4.1/docs/CHARGING-DOCUMENTS.tsv /usr/libexec/uke-charge-control /usr/share/uke-battery/protection-readiness.json /usr/lib/systemd/system/uke-charge-control.service /usr/lib/systemd/system/uke-charge-automatic.service /usr/lib/systemd/system/uke-charge-protection.service /usr/lib/udev/rules.d/80-uke-charge-protection.rules /usr/lib/systemd/system-preset/91-uke-charge-control.preset %config(noreplace) /etc/uke-battery/control-profile.json %config(noreplace) /etc/UPower/UPower.conf.d/60-uke-battery-safety.conf %files -n uke-offline-charge %license work/uke-battery-observer/uke-battery-observer-1.4.1/LICENSE %doc work/uke-battery-observer/uke-battery-observer-1.4.1/docs/OFFLINE-CHARGING.md /usr/libexec/uke-offline-charge /usr/lib/systemd/system/uke-offline-charge.service /usr/lib/systemd/system/uke-offline-charge.target %files -n uke-battery-observer %license work/uke-battery-observer/uke-battery-observer-1.4.1/LICENSE %doc work/uke-battery-observer/uke-battery-observer-1.4.1/README.md work/uke-battery-observer/uke-battery-observer-1.4.1/docs/BATTERY.md work/uke-battery-observer/uke-battery-observer-1.4.1/docs/RUNTIME-PROFILE.md work/uke-battery-observer/uke-battery-observer-1.4.1/docs/BATTERY-ENGINEERING.md work/uke-battery-observer/uke-battery-observer-1.4.1/SOURCE-SHA256SUMS /usr/bin/uke-battery /usr/lib/systemd/system/uke-battery.service /usr/lib/systemd/system-preset/90-uke-battery.preset /usr/share/dbus-1/system.d/org.senemos.Uke.Battery1.conf /usr/share/dbus-1/system-services/org.senemos.Uke.Battery1.service /usr/lib/sysusers.d/uke-battery.conf /usr/share/uke-battery/battery-profile.json /usr/share/uke-battery/model-profile.json %post -n uke-adaptive-display if [ $1 -eq 1 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then # Initial installation /usr/lib/systemd/systemd-update-helper install-system-units uke-adaptive-display.target || : fi command -v systemd-tmpfiles >/dev/null && systemd-tmpfiles --create /usr/lib/tmpfiles.d/uke-suspend.conf || : %preun -n uke-adaptive-display if [ $1 -eq 0 ] && [ -x "/usr/lib/systemd/systemd-update-helper" ]; then # Package removal, not upgrade /usr/lib/systemd/systemd-update-helper remove-system-units uke-adaptive-display.target || : fi %postun -n uke-adaptive-display %files -n uke-adaptive-display %license work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16/LICENSE %doc work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16/docs/ADAPTIVE-DISPLAY.md work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16/docs/DISPLAY-CONTROLS.md work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16/docs/SUSPEND.md work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16/docs/SERVICE-POLICY.md work/uke-adaptive-display/uke-adaptive-display-1.0.16/work/uke-adaptive-display/uke-adaptive-display-1.0.16/docs/GPU-MONITORING.md /usr/lib64/qt6/plugins/ksystemstats/libuke_adreno.so /usr/share/plasma-systemmonitor/adreno.page %config(noreplace) /etc/xdg/powerdevilrc %config(noreplace) /etc/xdg/kwinoutputconfig.json %config(noreplace) /etc/udev/rules.d/60-block-scheduler.rules /usr/lib/systemd/system/uke-adaptive-display.target /usr/lib/systemd/system-preset/80-uke-adaptive-display.preset /usr/lib/udev/rules.d/71-uke-tablet-mode.rules /usr/lib/udev/rules.d/61-uke-display-ddc.rules /usr/libexec/senemos-uke/uke-ddc-config /usr/lib/systemd/user/plasma-powerdevil.service.d/60-uke-display-ddc.conf /usr/lib/systemd/sleep.conf.d/30-uke-s2idle.conf /usr/lib/tmpfiles.d/uke-suspend.conf %changelog * Tue Oct 20 2026 Senemos Maintainers <75160848+MCC45TR@users.noreply.github.com> - 1.0.0-1 - Build reviewed child recipes under one source family without binary repackaging.