Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gnuradio for openSUSE:Factory checked in at 2026-08-20 16:14:47 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gnuradio (Old) and /work/SRC/openSUSE:Factory/.gnuradio.new.1258 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnuradio" Thu Aug 20 16:14:47 2026 rev:76 rq:1372037 version:3.10.12.0 Changes: -------- --- /work/SRC/openSUSE:Factory/gnuradio/gnuradio.changes 2025-10-06 18:07:27.065569304 +0200 +++ /work/SRC/openSUSE:Factory/.gnuradio.new.1258/gnuradio.changes 2026-08-20 16:15:08.848935226 +0200 @@ -1,0 +2,18 @@ +Tue Aug 18 13:52:38 UTC 2026 - Mikhail Paulyshka <[email protected]> + +- Enable all GNU Radio components explicitly at CMake configure time so missing dependencies cause the build to fail. +- Enable the test suite and run it during %check. + * Skip three ZeroMQ message source tests that segfault during teardown on ppc64le +- Add BuildRequires for libboost_regex-devel, libboost_test-devel, python3-pyzmq and xvfb-run. +- Add upstream patches: + * gnuradio-fix-fastnoise-unit-test.patch (gh#gnuradio/gnuradio#8145) + * gnuradio-run-qtgui-tests-with-xvfb.patch (gh#gnuradio/gnuradio#8170) +- Remove obsolete patches: + * missing_library.patch, + * gnuradio-not-install-freedesktop-files.patch + * grc_to_37.sh +- Install desktop integration files directly during %install. +- Remove deprecated %suse_update_desktop_file usage +- Clean up rpmlint findings + +------------------------------------------------------------------- Old: ---- gnuradio-not-install-freedesktop-files.patch grc_to_37.sh missing_library.patch New: ---- gnuradio-fix-fastnoise-unit-test.patch gnuradio-run-qtgui-tests-with-xvfb.patch ----------(Old B)---------- Old: * missing_library.patch, * gnuradio-not-install-freedesktop-files.patch * grc_to_37.sh Old:- Remove obsolete patches: * missing_library.patch, * gnuradio-not-install-freedesktop-files.patch ----------(Old E)---------- ----------(New B)---------- New:- Add upstream patches: * gnuradio-fix-fastnoise-unit-test.patch (gh#gnuradio/gnuradio#8145) * gnuradio-run-qtgui-tests-with-xvfb.patch (gh#gnuradio/gnuradio#8170) New: * gnuradio-fix-fastnoise-unit-test.patch (gh#gnuradio/gnuradio#8145) * gnuradio-run-qtgui-tests-with-xvfb.patch (gh#gnuradio/gnuradio#8170) - Remove obsolete patches: ----------(New E)---------- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnuradio.spec ++++++ --- /var/tmp/diff_new_pack.pI6JGo/_old 2026-08-20 16:15:10.183982458 +0200 +++ /var/tmp/diff_new_pack.pI6JGo/_new 2026-08-20 16:15:10.187982599 +0200 @@ -1,7 +1,7 @@ # # spec file for package gnuradio # -# Copyright (c) 2025 SUSE LLC and contributors +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -25,12 +25,12 @@ License: GPL-3.0-or-later URL: https://gnuradio.org Source0: https://github.com/gnuradio/gnuradio/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz -# http://www.nathanwest.us/grc_to_37.sh -Source4: grc_to_37.sh Source99: %{name}-rpmlintrc -Patch0: missing_library.patch -Patch1: gnuradio-not-install-freedesktop-files.patch -Patch2: boost.patch +Patch0: boost.patch +# PATCH-FIX-UPSTREAM gnuradio-fix-fastnoise-unit-test.patch gh#gnuradio/gnuradio#8145 +Patch1: gnuradio-fix-fastnoise-unit-test.patch +# PATCH-FIX-UPSTREAM gnuradio-run-qtgui-tests-with-xvfb.patch gh#gnuradio/gnuradio#8170 +Patch2: gnuradio-run-qtgui-tests-with-xvfb.patch BuildRequires: alsa-devel BuildRequires: cmake >= 3.16.3 BuildRequires: codec2-devel @@ -47,6 +47,8 @@ BuildRequires: libad9361-iio-devel BuildRequires: libboost_atomic-devel >= 1.69 BuildRequires: libboost_filesystem-devel >= 1.69 +BuildRequires: libboost_regex-devel >= 1.69 +BuildRequires: libboost_test-devel >= 1.69 %if 0%{?suse_version} <= 1600 BuildRequires: libboost_system-devel %endif @@ -75,6 +77,7 @@ BuildRequires: python3-pyaml >= 3.11 BuildRequires: python3-pybind11-devel >= 2.4.3 BuildRequires: python3-pycairo +BuildRequires: python3-pyzmq BuildRequires: python3-qt5-devel BuildRequires: python3-thrift BuildRequires: qwt6-qt5-devel @@ -82,8 +85,8 @@ BuildRequires: spdlog-devel BuildRequires: thrift BuildRequires: uhd-devel -BuildRequires: update-desktop-files BuildRequires: volk-devel >= 2.4.1 +BuildRequires: xvfb-run BuildRequires: typelib(Gtk) = 3.0 BuildRequires: typelib(PangoCairo) = 1.0 BuildRequires: typelib(cairo) = 1.0 @@ -205,11 +208,11 @@ %prep %setup -q -%patch -P 0 -p1 -%patch -P 1 -p1 -R %if 0%{?suse_version} > 1600 -%patch -P 2 -p1 +%patch -P 0 -p1 %endif +%patch -P 1 -p1 +%patch -P 2 -p1 # protect the template files from %%cmake macro magic / mangling find gr-utils/modtool/templates/gr-newmod -name CMakeLists.txt -ls -exec mv '{}' '{}.tmpl' \; @@ -219,7 +222,51 @@ %define __builder ninja %cmake \ - -DENABLE_GRC=ON \ + -DBUILD_SHARED_LIBS:BOOL=ON \ + -DENABLE_DEFAULT:BOOL=OFF \ + -DENABLE_TESTING:BOOL=ON \ + -DENABLE_PYTHON:BOOL=ON \ + -DENABLE_GRC:BOOL=ON \ + -DENABLE_JSONYAML_BLOCKS:BOOL=ON \ + -DENABLE_GNURADIO_RUNTIME:BOOL=ON \ + -DENABLE_COMMON_PCH:BOOL=ON \ + -DENABLE_GR_CTRLPORT:BOOL=ON \ + -DENABLE_CTRLPORT_THRIFT:BOOL=ON \ + -DENABLE_GR_BLOCKS:BOOL=ON \ + -DENABLE_GR_FEC:BOOL=ON \ + -DENABLE_GR_FFT:BOOL=ON \ + -DENABLE_GR_FILTER:BOOL=ON \ + -DENABLE_GR_ANALOG:BOOL=ON \ + -DENABLE_GR_DIGITAL:BOOL=ON \ + -DENABLE_GR_DTV:BOOL=ON \ + -DENABLE_GR_AUDIO:BOOL=ON \ + -DENABLE_GR_CHANNELS:BOOL=ON \ + -DENABLE_GR_PDU:BOOL=ON \ + -DENABLE_GR_IIO:BOOL=ON \ + -DENABLE_GR_QTGUI:BOOL=ON \ + -DENABLE_GR_TRELLIS:BOOL=ON \ + -DENABLE_GR_UHD:BOOL=ON \ + -DENABLE_UHD_RFNOC:BOOL=ON \ + -DENABLE_GR_UTILS:BOOL=ON \ + -DENABLE_GR_MODTOOL:BOOL=ON \ + -DENABLE_GR_BLOCKTOOL:BOOL=ON \ + -DENABLE_GR_VIDEO_SDL:BOOL=ON \ + -DENABLE_GR_VOCODER:BOOL=ON \ + -DENABLE_GR_WAVELET:BOOL=ON \ + -DENABLE_GR_ZEROMQ:BOOL=ON \ + -DENABLE_GR_NETWORK:BOOL=ON \ + -DENABLE_GR_SOAPY:BOOL=ON \ + -DENABLE_DOXYGEN:BOOL=%{with docs} \ + -DENABLE_MANPAGES:BOOL=ON \ + -DENABLE_EXAMPLES:BOOL=ON \ + -DENABLE_PERFORMANCE_COUNTERS:BOOL=ON \ + -DENABLE_BASH_COMPLETIONS:BOOL=ON \ + -DENABLE_FISH_COMPLETIONS:BOOL=ON \ + -DENABLE_ZSH_COMPLETIONS:BOOL=ON \ + -DTRY_SHM_VMCIRCBUF:BOOL=ON \ + -DENABLE_POSTINSTALL:BOOL=OFF \ + -DENABLE_NATIVE:BOOL=OFF \ + -DENABLE_BAD_BOOST:BOOL=OFF \ %ifarch armv6l armv6hl -Dhave_mfpu_neon=0 \ %endif @@ -227,27 +274,40 @@ -DENABLE_INTERNAL_VOLK:BOOL=OFF %cmake_build +%check +%ifarch ppc64le +# The ZeroMQ message source tests segfault during teardown on ppc64le. +%ctest --exclude-regex '^qa_zeromq_(pull|req|sub)_msg_source$' +%else +%ctest +%endif + %install # move the template files back find gr-utils/modtool/templates/gr-newmod -name CMakeLists.txt.tmpl -execdir mv '{}' 'CMakeLists.txt' \; %cmake_install +# Python modules are imported, not executed directly. +find %{buildroot}%{python3_sitearch}/gnuradio \ + %{buildroot}%{_datadir}/gnuradio/modtool/templates \ + -type f ! -perm /111 -exec sed -i '1{/^#!.*\(python\|bash\)/d}' '{}' + +rm %{buildroot}%{_datadir}/gnuradio/modtool/templates/gr-newmod/python/howto/bindings/README.md + +install -Dpm 0644 grc/scripts/freedesktop/gnuradio-grc.desktop %{buildroot}%{_datadir}/applications/gnuradio-grc.desktop +install -Dpm 0644 grc/scripts/freedesktop/gnuradio-grc.xml %{buildroot}%{_datadir}/mime/packages/gnuradio-grc.xml +install -Dpm 0644 grc/scripts/freedesktop/org.gnuradio.grc.metainfo.xml %{buildroot}%{_datadir}/metainfo/org.gnuradio.grc.metainfo.xml +for size in 16 24 32 48 64 128 256; do + install -Dpm 0644 grc/scripts/freedesktop/grc-icon-${size}.png %{buildroot}%{_datadir}/icons/hicolor/${size}x${size}/apps/gnuradio-grc.png +done + install -d %{buildroot}%{_docdir}/%{name} mv %{buildroot}/%{_datadir}/doc/%{name}-*/* %{buildroot}%{_docdir}/%{name}/ -%suse_update_desktop_file -r %{buildroot}%{_datadir}/applications/gnuradio-grc.desktop Network HamRadio - -install -Dpm 0755 %{SOURCE4} %{buildroot}/%{_bindir} - # Compiled examples are installed as "data", but are arch dependent install -dm 0755 %{buildroot}%{_libdir}/gnuradio mv %{buildroot}%{_datadir}/gnuradio/examples %{buildroot}%{_libdir}/gnuradio/ -# remove duplicate icons (just keep hicolor) -rm -rf %{buildroot}%{_datadir}/%{name}/grc/freedesktop -rm -rf %{buildroot}%{_datadir}/icons/gnome - %fdupes %{buildroot}%{_docdir} %fdupes %{buildroot}%{_includedir} %fdupes %{buildroot}%{_libdir} @@ -257,7 +317,26 @@ %files %license COPYING -%{_bindir}/* +%{_bindir}/gnuradio-companion +%{_bindir}/gnuradio-config-info +%{_bindir}/gr-ctrlport-monitor +%{_bindir}/gr-perf-monitorx +%{_bindir}/gr_filter_design +%{_bindir}/gr_modtool +%{_bindir}/gr_plot +%{_bindir}/gr_plot_const +%{_bindir}/gr_plot_fft +%{_bindir}/gr_plot_iq +%{_bindir}/gr_plot_psd +%{_bindir}/gr_plot_qt +%{_bindir}/gr_read_file_metadata +%{_bindir}/grcc +%{_bindir}/polar_channel_construction +%{_bindir}/uhd_fft +%{_bindir}/uhd_rx_cfile +%{_bindir}/uhd_rx_nogui +%{_bindir}/uhd_siggen +%{_bindir}/uhd_siggen_gui %dir %{_datadir}/gnuradio %{_datadir}/gnuradio/grc/ %{_datadir}/gnuradio/modtool/ ++++++ gnuradio-fix-fastnoise-unit-test.patch ++++++ >From da522afee4a84c1b7b03503ad38983c7b0cdcd82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20M=C3=BCller?= <[email protected]> Date: Tue, 2 Jun 2026 12:20:43 +0200 Subject: [PATCH] analog/fastnoise+gr::random: simplify, fix unit test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcus Müller <[email protected]> --- gnuradio-runtime/lib/math/random.cc | 65 +++++++++++++++++++++++-- gr-analog/python/analog/qa_fastnoise.py | 3 +- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/gnuradio-runtime/lib/math/random.cc b/gnuradio-runtime/lib/math/random.cc index 6423a39f6c4..c2191314457 100644 --- a/gnuradio-runtime/lib/math/random.cc +++ b/gnuradio-runtime/lib/math/random.cc @@ -23,6 +23,8 @@ * */ +#include <cstdint> +#include <limits> #ifdef HAVE_CONFIG_H #include <config.h> #endif @@ -106,11 +108,64 @@ float random::gasdev() float random::laplacian() { - float z = ran1(); - if (z > 0.5f) { - return -logf(2.0f * (1.0f - z)); - } - return logf(2 * z); + /* Original code, for reference: + * + * float z = ran1(); + * if (z > 0.5f) { + * return -logf(2.0f * (1.0f - z)); + * } + * return logf(2 * z); + * + * So: Z ~ U[0;1], which means the (1.0f - z) + * is utterly senseless, and then so is the "2*"; + * we transform the if-clause + * float y = 2*ran1(); // =2*(1-z) + * if (y <= 1.0f) { + * return -logf(y); + * } + * return logf(y); + * + * or, really, just + * + * return absf(logf(2*ran1())); + * that's it. That should have been the function. + * + * BUT. + * + * Let's talk about Laplace(µ,2b) generation! + * + * Classically, let V ~ U[-0.5;+0.5]; + * + * X = µ - b · sgn(V) ln(1 - 2·|V|) + * + * We're generating mean = 0, var = 2, so + * µ = 0, b = 1 + * + * therefore + * + * X = 0 - 1 · sgn(V) ln(1-2·|V|) + * = -sgn(V) ln(1-2·|V|) + * + * that ln argument is stupid – instead, + * let W ~ U[0;1], S~U{-1,+1} + * X = S · ln(W) + * + * That is a tiny bit less work, isn't it? + * We need to form W from a 63 bit uniform integer P (we're using the + * highest bit as S), so technically W = P / (2⁶³ - 1) but logarithm says + * X = S · (ln(P) - ln(2⁶³-1)) + */ + // make sure we're on the right range + static_assert(decltype(d_rng)::min() == 0 && + decltype(d_rng)::max() == std::numeric_limits<uint64_t>::max()); + constexpr auto lower_bitmask = ((uint64_t)(1) << 63) - 1; + // ln(2⁶³-1): + constexpr float log_scaling = 0x1.5d589f2fe5107p+5; + const uint64_t v = d_rng(); + const bool signbit = (v >> 63); + const float w = (v & lower_bitmask); + const float value = std::log(w) - log_scaling; + return signbit ? -value : value; } /* * Copied from The KC7WW / OH2BNS Channel Simulator diff --git a/gr-analog/python/analog/qa_fastnoise.py b/gr-analog/python/analog/qa_fastnoise.py index 91f3f0bba15..016042049b9 100644 --- a/gr-analog/python/analog/qa_fastnoise.py +++ b/gr-analog/python/analog/qa_fastnoise.py @@ -17,7 +17,7 @@ class test_fastnoise_source(gr_unittest.TestCase): def setUp(self): self.num = 2**22 - self.num_items = 10**6 + self.num_items = 2**22 self.default_args = {"samples": self.num, "seed": 43, "ampl": 1} def tearDown(self): @@ -92,6 +92,7 @@ def test_001_real_gaussian_moments(self): self.assertAlmostEqual(data.var(), 1, places=2) def test_001_real_laplacian_moments(self): + self.num_items = 10**7 data = self.run_test_real(analog.GR_LAPLACIAN) # mean, variance ++++++ gnuradio-rpmlintrc ++++++ --- /var/tmp/diff_new_pack.pI6JGo/_old 2026-08-20 16:15:10.313987057 +0200 +++ /var/tmp/diff_new_pack.pI6JGo/_new 2026-08-20 16:15:10.321987340 +0200 @@ -1,3 +1,16 @@ -# Template file for gr_newmod -addFilter("devel-file-in-non-devel-package.*/usr/share/gnuradio/modtool/templates/gr-newmod/include/howto/api.h") +# Empty compatibility module imported by grc.gui_qt.helpers. +addFilter("zero-length.*/gnuradio/grc/gui_qt/helpers/qt.py") + +# These development files are input for gr_modtool's module template. +addFilter("devel-file-in-non-devel-package.*/usr/share/gnuradio/modtool/templates/gr-newmod/include/gnuradio/howto/api.h") +addFilter("devel-file-in-non-devel-package.*/usr/share/gnuradio/modtool/templates/gr-newmod/docs/doxygen/pydoc_macros.h") + +# Hidden files are intentionally shipped as part of gr_modtool templates. +addFilter("version-control-internal-file.*/usr/share/gnuradio/modtool/templates/gr-newmod/python/howto/.gitignore") +addFilter("hidden-file-or-dir.*/usr/share/gnuradio/modtool/templates/gr-newmod/python/howto/.gitignore") +addFilter("hidden-file-or-dir.*/usr/share/gnuradio/modtool/templates/gr-newmod/.conda") +addFilter("hidden-file-or-dir.*/usr/share/gnuradio/.cmake-format.py") + +# Qt loads this resource from its private Python module path. +addFilter("file-not-in-%lang.*/gnuradio/grc/gui_qt/resources/language/en_US/LC_MESSAGES/grc.mo") ++++++ gnuradio-run-qtgui-tests-with-xvfb.patch ++++++ >From e9a4a7f3bd4d5cf3bee15ea1cdbd9d9fc9ff0f5b Mon Sep 17 00:00:00 2001 From: Mikhail Paulyshka <[email protected]> Date: Tue, 18 Aug 2026 17:03:45 +0300 Subject: [PATCH 1/1] gr-qtgui: actually run tests through xvfb-run Restore the intended behavior from pull request #3545. The QA_DISPLAY_SERVER variable is set when xvfb-run is found, but accidentally was dropped from the gr_add_test invocation, causing qa_qtgui to run without a display. Signed-off-by: Mikhail Paulyshka <[email protected]> --- gr-qtgui/python/qtgui/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gr-qtgui/python/qtgui/CMakeLists.txt b/gr-qtgui/python/qtgui/CMakeLists.txt index 2d4c7f12e..177135a7e 100644 --- a/gr-qtgui/python/qtgui/CMakeLists.txt +++ b/gr-qtgui/python/qtgui/CMakeLists.txt @@ -61,7 +61,7 @@ if(ENABLE_TESTING) if(CMAKE_CROSSCOMPILING) get_filename_component(py_qa_test_file ${py_qa_test_file} NAME) endif(CMAKE_CROSSCOMPILING) - gr_add_test(${py_qa_test_name} ${QA_PYTHON_EXECUTABLE} -B ${py_qa_test_file}) + gr_add_test(${py_qa_test_name} ${QA_DISPLAY_SERVER} ${QA_PYTHON_EXECUTABLE} -B ${py_qa_test_file}) endforeach(py_qa_test_file) endif(ENABLE_TESTING) -- 2.55.0
