diff --git a/0004-plugins-audio_alsa-Fix-byte-truncating-in-16-bit-dat.patch b/0004-plugins-audio_alsa-Fix-byte-truncating-in-16-bit-dat.patch new file mode 100644 index 0000000..ef63323 --- /dev/null +++ b/0004-plugins-audio_alsa-Fix-byte-truncating-in-16-bit-dat.patch @@ -0,0 +1,36 @@ +From 5d933bee5c100e119c26476e45b69e019b392323 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Wed, 17 Aug 2016 21:28:00 +0200 +Subject: [PATCH] plugins: audio_alsa: Fix byte truncating in 16-bit data + (#218): + +This fixes a bug introduced in 82305c72 which basically was +about muting a "dereferencing type-punned pointer will break +strict-aliasing rules" compiler warning. +--- + plugins/audio_alsa.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/plugins/audio_alsa.c b/plugins/audio_alsa.c +index 20022f3..ff0d8a9 100644 +--- a/plugins/audio_alsa.c ++++ b/plugins/audio_alsa.c +@@ -436,11 +436,12 @@ var_reset: /* Reset variables */ + for (i = 0; i < count; i++) { + /* cs == current sample */ + unsigned char cs, as, sl, sz, xz; +- short stmp; ++ unsigned short stmp; + + if (bytes_per_sample == 2) { +- stmp = buff[i * bytes_per_sample * alsa_hw.num_channels + +- bytes_per_sample * alsa_hw.channel]; ++ int ix = i * bytes_per_sample * alsa_hw.num_channels + ++ bytes_per_sample * alsa_hw.channel; ++ memcpy(&stmp, &buff[ix], sizeof(stmp)); + cs = stmp >> 8; + cs ^= 0x80; + } else { +-- +2.5.5 + diff --git a/0005-contrib-Fix-usb-devices-acl-permissions-rhbz-1364744.patch b/0005-contrib-Fix-usb-devices-acl-permissions-rhbz-1364744.patch new file mode 100644 index 0000000..a9dadfc --- /dev/null +++ b/0005-contrib-Fix-usb-devices-acl-permissions-rhbz-1364744.patch @@ -0,0 +1,31 @@ +From 6b8fad0fdfd026d437ab6b953e701f2ece307e45 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Thu, 18 Aug 2016 21:04:07 +0200 +Subject: [PATCH] contrib: Fix usb devices' acl permissions (rhbz #1364744). + +--- + contrib/60-lirc.rules | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/contrib/60-lirc.rules b/contrib/60-lirc.rules +index 8147546..687009b 100644 +--- a/contrib/60-lirc.rules ++++ b/contrib/60-lirc.rules +@@ -1,8 +1,9 @@ +-# Installing this udev rule will make the /dev/lirc* devices accessible +-# for users in the group "lirc" using regular group permissions. USB +-# devices grants rw permission to the lirc group using ACL. +-# To enable, copy to /etc/udev/rules.d. ++# Make the /dev/lirc* devices accessible for users in the group "lirc" ++# using regular group permissions. + + KERNEL=="lirc[0-9]*", SUBSYSTEM=="lirc", GROUP="lirc", MODE="0660" +-ACTION=="add", SUBSYSTEM=="usb", \ ++ ++# Grant rw permission to the lirc group for USB devices using acl(5). ++ ++ACTION=="add", SUBSYSTEM=="usb", ENV{DEVNAME}=="?*", \ + RUN+="/usr/bin/setfacl -m g:lirc:rw $env{DEVNAME}" +-- +2.5.5 + diff --git a/0006-include-Update-bundled-lirc.h.patch b/0006-include-Update-bundled-lirc.h.patch new file mode 100644 index 0000000..59f97bc --- /dev/null +++ b/0006-include-Update-bundled-lirc.h.patch @@ -0,0 +1,182 @@ +From 5dd37205a06a44e6b9cdbae5a3901e39270f0975 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Thu, 18 Aug 2016 22:35:31 +0200 +Subject: [PATCH 6/7] include: Update bundled lirc.h. + +--- + include/media/lirc.h | 95 ++++++---------------------------------------------- + 1 file changed, 10 insertions(+), 85 deletions(-) + +diff --git a/include/media/lirc.h b/include/media/lirc.h +index 601fccb..991ab45 100644 +--- a/include/media/lirc.h ++++ b/include/media/lirc.h +@@ -1,39 +1,13 @@ +-/** +- * @file lirc.c +- * This file contains some general definitions, like feature flags. +- * It's a bundled copy from the kernel sources. Being part of +- * kernel sources is a bug, see +- * https://bugzilla.kernel.org/show_bug.cgi?id=75751. +- * The file is upstreamed to the kernel from 4.6. +- */ +- +-#ifndef LIRC_BASE_H +-#define LIRC_BASE_H +- +-#ifdef __cplusplus +-extern "C" { +-#endif +- +-/** +- * This data type, with its extremely carefully selected name, is used as +- * data type for the signal durations. +- */ +-#define lirc_t int +- + /* + * lirc.h - linux infrared remote control header file +- * last modified 2010/06/03 by Jarod Wilson ++ * last modified 2010/07/13 by Jarod Wilson + */ + +-#if defined(__linux__) ++#ifndef _LINUX_LIRC_H ++#define _LINUX_LIRC_H ++ + #include + #include +-#elif defined(_NetBSD_) +-#include +-#elif defined(_CYGWIN_) +-#define __USE_LINUX_IOCTL_DEFS +-#include +-#endif + + #define PULSE_BIT 0x01000000 + #define PULSE_MASK 0x00FFFFFF +@@ -59,6 +33,9 @@ extern "C" { + #define LIRC_IS_FREQUENCY(val) (LIRC_MODE2(val) == LIRC_MODE2_FREQUENCY) + #define LIRC_IS_TIMEOUT(val) (LIRC_MODE2(val) == LIRC_MODE2_TIMEOUT) + ++/* used heavily by lirc userspace */ ++#define lirc_t int ++ + /*** lirc compatible hardware features ***/ + + #define LIRC_MODE2SEND(x) (x) +@@ -79,16 +56,8 @@ extern "C" { + + #define LIRC_CAN_SEND_MASK 0x0000003f + +-/** This flag indicates that the transmitter is capable of setting the +- * IR carrier frequency. */ + #define LIRC_CAN_SET_SEND_CARRIER 0x00000100 +- +-/** This flag indicates that the transmitter is capable of setting the +- * duty cycle of generated IR signals. */ + #define LIRC_CAN_SET_SEND_DUTY_CYCLE 0x00000200 +- +-/** This flag indicates that the transmitter is capable of setting a +- * transmitter mask, i.e., probably has several transmitters. */ + #define LIRC_CAN_SET_TRANSMITTER_MASK 0x00000400 + + #define LIRC_CAN_REC_RAW LIRC_MODE2REC(LIRC_MODE_RAW) +@@ -107,16 +76,10 @@ extern "C" { + #define LIRC_CAN_SET_REC_TIMEOUT 0x10000000 + #define LIRC_CAN_SET_REC_FILTER 0x08000000 + +- +-/** This flag indicates that the receiver is capable of estimating +- * the carrier frequency of received IR signals. */ + #define LIRC_CAN_MEASURE_CARRIER 0x02000000 + #define LIRC_CAN_USE_WIDEBAND_RECEIVER 0x04000000 + +-/** Extract sending features from its argument. */ + #define LIRC_CAN_SEND(x) ((x)&LIRC_CAN_SEND_MASK) +- +-/** Extract receiving features from its argument. */ + #define LIRC_CAN_REC(x) ((x)&LIRC_CAN_REC_MASK) + + #define LIRC_CAN_NOTIFY_DECODE 0x01000000 +@@ -127,20 +90,11 @@ extern "C" { + + #define LIRC_GET_SEND_MODE _IOR('i', 0x00000001, __u32) + #define LIRC_GET_REC_MODE _IOR('i', 0x00000002, __u32) +-#define LIRC_GET_SEND_CARRIER _IOR('i', 0x00000003, __u32) +-#define LIRC_GET_REC_CARRIER _IOR('i', 0x00000004, __u32) +-#define LIRC_GET_SEND_DUTY_CYCLE _IOR('i', 0x00000005, __u32) +-#define LIRC_GET_REC_DUTY_CYCLE _IOR('i', 0x00000006, __u32) + #define LIRC_GET_REC_RESOLUTION _IOR('i', 0x00000007, __u32) + + #define LIRC_GET_MIN_TIMEOUT _IOR('i', 0x00000008, __u32) + #define LIRC_GET_MAX_TIMEOUT _IOR('i', 0x00000009, __u32) + +-#define LIRC_GET_MIN_FILTER_PULSE _IOR('i', 0x0000000a, __u32) +-#define LIRC_GET_MAX_FILTER_PULSE _IOR('i', 0x0000000b, __u32) +-#define LIRC_GET_MIN_FILTER_SPACE _IOR('i', 0x0000000c, __u32) +-#define LIRC_GET_MAX_FILTER_SPACE _IOR('i', 0x0000000d, __u32) +- + /* code length in bits, currently only for LIRC_MODE_LIRCCODE */ + #define LIRC_GET_LENGTH _IOR('i', 0x0000000f, __u32) + +@@ -150,7 +104,6 @@ extern "C" { + #define LIRC_SET_SEND_CARRIER _IOW('i', 0x00000013, __u32) + #define LIRC_SET_REC_CARRIER _IOW('i', 0x00000014, __u32) + #define LIRC_SET_SEND_DUTY_CYCLE _IOW('i', 0x00000015, __u32) +-#define LIRC_SET_REC_DUTY_CYCLE _IOW('i', 0x00000016, __u32) + #define LIRC_SET_TRANSMITTER_MASK _IOW('i', 0x00000017, __u32) + + /* +@@ -164,45 +117,17 @@ extern "C" { + #define LIRC_SET_REC_TIMEOUT_REPORTS _IOW('i', 0x00000019, __u32) + + /* +- * pulses shorter than this are filtered out by hardware (software +- * emulation in lirc_dev?) +- */ +-#define LIRC_SET_REC_FILTER_PULSE _IOW('i', 0x0000001a, __u32) +-/* +- * spaces shorter than this are filtered out by hardware (software +- * emulation in lirc_dev?) +- */ +-#define LIRC_SET_REC_FILTER_SPACE _IOW('i', 0x0000001b, __u32) +-/* +- * if filter cannot be set independantly for pulse/space, this should +- * be used +- */ +-#define LIRC_SET_REC_FILTER _IOW('i', 0x0000001c, __u32) +- +-/* + * if enabled from the next key press on the driver will send + * LIRC_MODE2_FREQUENCY packets + */ +-#define LIRC_SET_MEASURE_CARRIER_MODE _IOW('i', 0x0000001d, __u32) ++#define LIRC_SET_MEASURE_CARRIER_MODE _IOW('i', 0x0000001d, __u32) + + /* +- * to set a range use +- * LIRC_SET_REC_DUTY_CYCLE_RANGE/LIRC_SET_REC_CARRIER_RANGE with the +- * lower bound first and later +- * LIRC_SET_REC_DUTY_CYCLE/LIRC_SET_REC_CARRIER with the upper bound ++ * to set a range use LIRC_SET_REC_CARRIER_RANGE with the ++ * lower bound first and later LIRC_SET_REC_CARRIER with the upper bound + */ +- +-#define LIRC_SET_REC_DUTY_CYCLE_RANGE _IOW('i', 0x0000001e, __u32) + #define LIRC_SET_REC_CARRIER_RANGE _IOW('i', 0x0000001f, __u32) + +-#define LIRC_NOTIFY_DECODE _IO('i', 0x00000020) +- +-#define LIRC_SETUP_START _IO('i', 0x00000021) +-#define LIRC_SETUP_END _IO('i', 0x00000022) + #define LIRC_SET_WIDEBAND_RECEIVER _IOW('i', 0x00000023, __u32) + +-#ifdef __cplusplus +-} + #endif +- +-#endif //LIRC_BASE_H +-- +2.5.5 + diff --git a/0007-lircd-Remove-use-of-functions-killed-in-kernel-4.8.0.patch b/0007-lircd-Remove-use-of-functions-killed-in-kernel-4.8.0.patch new file mode 100644 index 0000000..65a48e8 --- /dev/null +++ b/0007-lircd-Remove-use-of-functions-killed-in-kernel-4.8.0.patch @@ -0,0 +1,110 @@ +From 6a57d48e1a233dfc55d436e8d064509cb03973d1 Mon Sep 17 00:00:00 2001 +From: Alec Leamas +Date: Fri, 19 Aug 2016 04:48:02 +0200 +Subject: [PATCH 7/7] lircd: Remove use of functions killed in kernel 4.8.0 + +From 4.8.0 the kernel no longer supports LIRC_NOTIFY_DECODE, +LIRC_SETUP_START/LIRC_SETUP_END and several constants related +to initiating filters. Remove corresponding calls from lircd. +--- + daemons/lircd.cpp | 51 ++------------------------------------------------- + lib/driver.h | 7 +++++++ + 2 files changed, 9 insertions(+), 49 deletions(-) + +diff --git a/daemons/lircd.cpp b/daemons/lircd.cpp +index a7dbc94..a50d11f 100644 +--- a/daemons/lircd.cpp ++++ b/daemons/lircd.cpp +@@ -464,50 +464,6 @@ static int setup_timeout(void) + } + + +-static int setup_filter(void) +-{ +- int ret1, ret2; +- lirc_t min_pulse_supported = 0, max_pulse_supported = 0; +- lirc_t min_space_supported = 0, max_space_supported = 0; +- +- if (!(curr_driver->features & LIRC_CAN_SET_REC_FILTER)) +- return 1; +- if (curr_driver->drvctl_func(LIRC_GET_MIN_FILTER_PULSE, +- &min_pulse_supported) == -1 || +- curr_driver->drvctl_func(LIRC_GET_MAX_FILTER_PULSE, &max_pulse_supported) == -1 +- || curr_driver->drvctl_func(LIRC_GET_MIN_FILTER_SPACE, &min_space_supported) == -1 +- || curr_driver->drvctl_func(LIRC_GET_MAX_FILTER_SPACE, &max_space_supported) == -1) { +- log_error("could not get filter range"); +- log_perror_err(__func__); +- } +- +- if (setup_min_pulse > max_pulse_supported) +- setup_min_pulse = max_pulse_supported; +- else if (setup_min_pulse < min_pulse_supported) +- setup_min_pulse = 0; /* disable filtering */ +- +- if (setup_min_space > max_space_supported) +- setup_min_space = max_space_supported; +- else if (setup_min_space < min_space_supported) +- setup_min_space = 0; /* disable filtering */ +- +- ret1 = curr_driver->drvctl_func(LIRC_SET_REC_FILTER_PULSE, &setup_min_pulse); +- ret2 = curr_driver->drvctl_func(LIRC_SET_REC_FILTER_SPACE, &setup_min_space); +- if (ret1 == -1 || ret2 == -1) { +- if (curr_driver-> +- drvctl_func(LIRC_SET_REC_FILTER, +- setup_min_pulse < setup_min_space ? &setup_min_pulse : &setup_min_space) == -1) { +- log_error("could not set filter"); +- log_perror_err(__func__); +- return 0; +- } +- } +- return 1; +-} +- +- +- +- + static int setup_hardware(void) + { + int ret = 1; +@@ -516,10 +472,7 @@ static int setup_hardware(void) + if ((curr_driver->features & LIRC_CAN_SET_REC_CARRIER) + || (curr_driver->features & LIRC_CAN_SET_REC_TIMEOUT) + || (curr_driver->features & LIRC_CAN_SET_REC_FILTER)) { +- (void)curr_driver->drvctl_func(LIRC_SETUP_START, NULL); +- ret = setup_frequency() && setup_timeout() +- && setup_filter(); +- (void)curr_driver->drvctl_func(LIRC_SETUP_END, NULL); ++ ret = setup_frequency() && setup_timeout(); + } + } + return ret; +@@ -2162,7 +2115,7 @@ void loop(void) + int reps; + + if (curr_driver->drvctl_func && (curr_driver->features & LIRC_CAN_NOTIFY_DECODE)) +- curr_driver->drvctl_func(LIRC_NOTIFY_DECODE, NULL); ++ curr_driver->drvctl_func(DRVCTL_NOTIFY_DECODE, NULL); + + get_release_data(&remote_name, &button_name, &reps); + +diff --git a/lib/driver.h b/lib/driver.h +index c7c4a6a..fc7318e 100644 +--- a/lib/driver.h ++++ b/lib/driver.h +@@ -97,6 +97,13 @@ int drv_handle_options(const char* options); + /** drvctl cmd: Free memory in argument obtained using DRVCTL_GET_DEVICES. */ + #define DRVCTL_FREE_DEVICES 6 + ++/** ++ * The former LIRC_NOTIFY_DECODE, informs drier that signal is successfully ++ * decoded e. g., to initiate some visual feedback through a LED. ++ */ ++ ++#define DRVCTL_NOTIFY_DECODE 7 ++ + /** Last well-known command. Remaining is used in driver-specific controls.*/ + #define DRVCTL_MAX 128 + +-- +2.5.5 + diff --git a/lirc.spec b/lirc.spec index 9ab0886..7ad0925 100644 --- a/lirc.spec +++ b/lirc.spec @@ -4,8 +4,8 @@ #define tag devel Name: lirc -Version: 0.9.4 -Release: %{?tag:0.}3%{?tag:.}%{?tag}%{?dist}.1 +Version: 0.9.4b +Release: %{?tag:0.}2%{?tag:.}%{?tag}%{?dist} Summary: The Linux Infrared Remote Control package %global repo http://downloads.sourceforge.net/lirc/LIRC/%{version}/ @@ -18,9 +18,10 @@ Source0: %{?released:%{repo}}%{name}-%{version}%{?tag:-}%{?tag}.tar.gz Source1: README.fedora Source2: 99-remote-control-lirc.rules # Config only, cannot be upstreamed. -Patch1: 0001-Changing-effective-user-default.patch -Patch2: 0008-plugins-devinput-Make-the-list-devices-support-avail.patch -Patch3: 0003-lib-use-proper-linking-method-to-avoid-parallel-buil.patch +Patch1: 0004-plugins-audio_alsa-Fix-byte-truncating-in-16-bit-dat.patch +Patch2: 0005-contrib-Fix-usb-devices-acl-permissions-rhbz-1364744.patch +Patch3: 0006-include-Update-bundled-lirc.h.patch +Patch4: 0007-lircd-Remove-use-of-functions-killed-in-kernel-4.8.0.patch BuildRequires: alsa-lib-devel Buildrequires: autoconf @@ -41,7 +42,6 @@ BuildRequires: python3-PyYAML BuildRequires: systemd-devel Requires: %{name}-libs = %{version}-%{release} -Requires: python3-PyYAML Requires(pre): shadow-utils Requires(post): systemd @@ -105,6 +105,7 @@ Summary: LIRC Configuration Tools and Data Requires: lirc-core = %{version}-%{release} Requires: lirc-doc = %{version}-%{release} Requires: gnome-icon-theme +Requires: python3-PyYAML BuildArch: noarch %description config @@ -186,8 +187,16 @@ full support for the ftdi device. %setup -qn %{name}-%{version}%{?tag} %patch1 -p1 %patch2 -p1 + +%if 0%fedora > 24 %patch3 -p1 +%patch4 -p1 +cp lib/driver.h lib/lirc/driver.h +%endif + sed -i -e 's|/usr/local/etc/|/etc/|' contrib/irman2lirc +sed -i -e 's/#effective-user/effective-user /' lirc_options.conf +sed -i -e '/^effective-user/s/=$/= lirc/' lirc_options.conf %build @@ -339,6 +348,19 @@ systemd-tmpfiles --create %{_tmpfilesdir}/lirc.conf %{_udevrulesdir}/99-remote-control-lirc.rules %changelog +* Wed Aug 17 2016 Alec Leamas - 0.9.4b-2 +- Added patch for audio_alsa plugin (#218). +- Move R: python3-PyYAML to lirc-compat, fixes import error + https://retrace.fedoraproject.org/faf/reports/1229333/ +- Modify usb devices acl(5) udev rule (#1364744). + +* Tue Aug 09 2016 Alec Leamas - 0.9.4b-1 +- Rebuilt for new upstream version 0.9.4b. + +* Wed Jun 29 2016 Alec Leamas - 0.9.4a-1 +- New upstream release. +- Fixes #1350750, bad systemd files syntax. + * Tue Jul 19 2016 Fedora Release Engineering - 0.9.4-3.1 - https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages