diff --git a/_multibuild b/_multibuild
new file mode 100644
index 0000000..4bbc46c
--- /dev/null
+++ b/_multibuild
@@ -0,0 +1,3 @@
+
+ python311
+
diff --git a/speech-dispatcher-0.11.4.tar.gz b/speech-dispatcher-0.11.4.tar.gz
deleted file mode 100644
index 07ee5bd..0000000
--- a/speech-dispatcher-0.11.4.tar.gz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8c09221bb72d9db5c89cfd7b919771832b86c3a3772d645601696494edf566b9
-size 7127323
diff --git a/speech-dispatcher-0.12.0.tar.gz b/speech-dispatcher-0.12.0.tar.gz
new file mode 100644
index 0000000..982f74b
--- /dev/null
+++ b/speech-dispatcher-0.12.0.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1dd0bfa24b8338545e165451330adf51c4c0dca862b1b67e76fba5142dbbb74
+size 7481967
diff --git a/speech-dispatcher.changes b/speech-dispatcher.changes
index 1211870..40b2788 100644
--- a/speech-dispatcher.changes
+++ b/speech-dispatcher.changes
@@ -1,3 +1,109 @@
+-------------------------------------------------------------------
+Sun Feb 23 21:44:39 UTC 2025 - Michael Gorse
+
+- Update to version 0.12.0:
+ * Add libspeechd-module library for making it simpler to create
+ external spd modules.
+ * Update CLDR to version 45, symbols from orca 45.2, and symbols
+ from NVDA.
+ * Also support loading symbols from home directory.
+
+-------------------------------------------------------------------
+Tue Oct 29 18:29:19 UTC 2024 - Michael Gorse
+
+- Update to version 0.12.0~rc4:
+ * audio: Fix logging from audio modules in server-side audio.
+ * Sort Baratinoo engine higher.
+ * espeak-ng-mbrola: Fix mbrola voices with rate different from
+ 22KHz
+ * Add a run-spd-say script and make run-speechd and run-spd-say
+ able to talk directly.
+ * Add initial pipewire support.
+- Drop speech-dispatcher-missing-return-vals.patch and
+ speech-dispatcher-pulseaudio-samples.patch: fixed upstream.
+- Add libpipewire-0.3 to BuildRequires to build Pipewire support.
+- Package speechd_module library.
+
+-------------------------------------------------------------------
+Wed Oct 16 07:25:09 UTC 2024 - Dominique Leuenberger
+
+- Drop rcFOO symlinks (PED-266).
+
+-------------------------------------------------------------------
+Fri Jul 5 17:34:04 UTC 2024 - Michael Gorse
+
+- Add speech-dispatcher-pulseaudio-samples.patch: fix for losing
+ samples with pulseaudio.
+
+-------------------------------------------------------------------
+Wed May 22 18:40:02 UTC 2024 - Michael Gorse
+
+- Update to version 0.12.0~rc3:
+ * Detect module failures from generic module.
+ * Make the fallback espeak-ng and dummy modules hardcoded.
+ * Better detect generic module failures to disable them.
+ * pulse: Use asynchronous API to avoid buffer underruns.
+ * generic: Make stripping punctuation use locale charset.
+- Add speech-dispatcher-missing-return-vals.patch: add missing
+ return statements.
+
+-------------------------------------------------------------------
+Thu Feb 22 20:43:22 UTC 2024 - Michael Gorse
+
+- Update to version 0.12.0~rc2:
+ * Add openjtalk module.
+ * Fix splitting long UTF-8 sequences.
+ * Update CLDR to version 44 and symbols from NVDA.
+ * Add spd_fd function to C api.
+
+-------------------------------------------------------------------
+Thu Feb 22 07:52:51 UTC 2024 - Antonio Larrosa
+
+- Use _multibuild to build also a python311 flavor in SLE15
+ (jsc#PED-68)
+- Rename the python3-speechd package to %{primary_python}-speechd
+ in TW/ALP so that it follows the python package naming policy.
+- Fix %_datadir which is now included in the main speech-dispatcher
+ package instead of in -configure.
+- Only provide python3-speechd from python311-speechd in TW/ALP,
+ otherwise the python 3.11 flavor might be selected instead of
+ the real python3-speechd package in SLE15.
+- Only require python-speechd for the -configure package. The base
+ package does not require it to be installed.
+
+-------------------------------------------------------------------
+Tue Feb 13 09:20:06 UTC 2024 - Michael Gorse
+
+- Update to version 0.12.0~rc1:
+ * Add socket activation
+ * libspeechd: Simplify buffer management.
+ * Add language and variant parameters to "list voice" command.
+- Add pkgconfig(libsystemd) to BuildRequires.
+
+-------------------------------------------------------------------
+Sun Jan 14 17:31:18 UTC 2024 - Michael Gorse
+
+- Have speech-dispatcher-module espeak supplement libespeak-ng1,
+ rather than espeak-ng. The latter provides a binary which is not
+ used or needed and that might not be installed.
+
+-------------------------------------------------------------------
+Mon Aug 14 20:12:09 UTC 2023 - Michael Gorse
+
+- Update to version 0.11.5:
+ * Update CLDR to version 43 and symbols from NVDA.
+ * Fix parsing and emitting space character.
+ * Reduce espeak buffer size to avoid ssml issues.
+ * Add --disable-doc.
+ * Fix spd-conf not being able to set the default module.
+ * Fix pausing without index.
+
+-------------------------------------------------------------------
+Wed Jun 28 14:19:26 UTC 2023 - ecsos
+
+- Use always python3.11 to build, so Leap use also python3.11 to
+ build.
+
-------------------------------------------------------------------
Tue Dec 13 19:23:02 UTC 2022 - Michael Gorse
diff --git a/speech-dispatcher.spec b/speech-dispatcher.spec
index b0a5915..26f2d31 100644
--- a/speech-dispatcher.spec
+++ b/speech-dispatcher.spec
@@ -1,7 +1,7 @@
#
# spec file for package speech-dispatcher
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -16,15 +16,38 @@
#
+%global flavor @BUILD_FLAVOR@%{nil}
%if 0%{?suse_version} >= 1500
-%define espeak espeak-ng
-%define espeakdev espeak-ng-devel
+%define espeak espeak-ng
+%define espeakdev espeak-ng-devel
+%define espeak_lib libespeak-ng1
%else
-%define espeak espeak
-%define espeakdev espeak-devel
+%define espeak espeak
+%define espeakdev espeak-devel
+%define espeak_lib espeak
%endif
+%if 0%{?suse_version} > 1500
+%define _python %{primary_python}
+%if "%{flavor}" == "python311"
+ExclusiveArch: do-not-build
+%endif
+%else
+%if "%{flavor}" == "python311"
+%{?sle15_python_module_pythons}
+%define _python python311
+%define python_sitearch %{?python_sitearch:%python311_sitearch}
+%else
+%define _python python3
+%define python_sitearch %{?python_sitearch:%python3_sitearch}
+%endif
+%endif
+
+%if "%{flavor}" == ""
Name: speech-dispatcher
-Version: 0.11.4
+%else
+Name: speech-dispatcher-%{_python}
+%endif
+Version: 0.12.0
Release: 0
# FIXME missing backends: festival lite, ibmeci (ibm tts), dumbtts/ivona, nas
# The API and bindings are LGPL-2.1-or-later, other parts are
@@ -33,11 +56,12 @@ Summary: Device independent layer for speech synthesis
License: GPL-2.0-or-later AND LGPL-2.1-or-later
Group: System/Daemons
URL: https://devel.freebsoft.org/speechd
-Source0: https://github.com/brailcom/speechd/releases/download/%{version}/%{name}-%{version}.tar.gz
+Source0: https://github.com/brailcom/speechd/releases/download/%{version}/speech-dispatcher-%{version}.tar.gz
Patch0: harden_speech-dispatcherd.service.patch
# Logrotate file taken from Debian
Source2: speech-dispatcher.logrotate
Source99: baselibs.conf
+BuildRequires: %{_python}-setuptools
BuildRequires: %{espeakdev}
BuildRequires: alsa-devel
BuildRequires: dotconf-devel
@@ -49,10 +73,10 @@ BuildRequires: libpulse-devel
BuildRequires: libsndfile-devel
BuildRequires: libtool
BuildRequires: makeinfo
-BuildRequires: python3-setuptools
BuildRequires: systemd-rpm-macros
+BuildRequires: pkgconfig(libpipewire-0.3)
+BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(systemd)
-Requires: python3-speechd
# FIXME: use proper Requires(pre/post/preun/...)
PreReq: %{install_info_prereq}
Suggests: festival
@@ -79,8 +103,9 @@ tricky aspects of the speech subsystem.
Summary: Configuration tool for Speech Dispatcher
License: GPL-2.0-or-later AND LGPL-2.1-or-later
Group: System/Daemons
+Requires: %{_python}-pyxdg
+Requires: %{_python}-speechd
Requires: %{name} = %{version}
-Requires: python3-pyxdg
Enhances: %{name}
%description configure
@@ -101,7 +126,7 @@ Summary: ESpeak module for Speech Dispatcher
License: GPL-2.0-or-later AND LGPL-2.1-or-later
Group: System/Daemons
Requires: %{name} = %{version}
-Supplements: packageand(%{name}:%{espeak})
+Supplements: packageand(%{name}:%{espeak_lib})
%description module-espeak
The goal of Speech Dispatcher project is to provide a high-level device
@@ -131,6 +156,22 @@ to speech synthesis. The application neither needs to talk to the
devices directly nor to handle concurrent access, sound output and other
tricky aspects of the speech subsystem.
+%package -n libspeechd_module0
+Summary: Library for creating speech-dispatcher modules
+License: LGPL-2.1-or-later
+Group: System/Libraries
+Recommends: %{name}
+
+%description -n libspeechd_module0
+The goal of Speech Dispatcher project is to provide a high-level device
+independent layer for speech synthesis through a simple, stable and
+well documented interface.
+
+What is a very high level GUI library to graphics, Speech Dispatcher is
+to speech synthesis. The application neither needs to talk to the
+devices directly nor to handle concurrent access, sound output and other
+tricky aspects of the speech subsystem.
+
%package -n libspeechd-devel
Summary: Device independent layer for speech synthesis - Development files
License: LGPL-2.1-or-later
@@ -150,13 +191,17 @@ to speech synthesis. The application neither needs to talk to the
devices directly nor to handle concurrent access, sound output and other
tricky aspects of the speech subsystem.
-%package -n python3-speechd
+%package -n %{_python}-speechd
Summary: Device independent layer for speech synthesis - Python Bindings
License: LGPL-2.1-or-later
Group: Development/Libraries/Python
-Requires: %{name} >= %{version}
+Requires: speech-dispatcher >= %{version}
+%if 0%{?suse_version} > 1500
+Provides: python3-speechd = %{version}
+Obsoletes: python3-speechd < %{version}
+%endif
-%description -n python3-speechd
+%description -n %{_python}-speechd
The goal of Speech Dispatcher project is to provide a high-level device
independent layer for speech synthesis through a simple, stable and
well documented interface.
@@ -167,16 +212,20 @@ devices directly nor to handle concurrent access, sound output and other
tricky aspects of the speech subsystem.
%prep
-%setup -q
-# dummy module must almost never be dissabled
+%autosetup -p1
+# dummy module must almost never be disabled
sed -i "s/#AddModule \"dummy\"/AddModule \"dummy\"/" -i config/speechd.conf
# you must enable at least one module (except dummy), otherwise it will load
# all available modules and may cause huge cpu usage!
sed -i "s/#AddModule \"%{espeak}\"/AddModule \"%{espeak}\"/" -i config/speechd.conf
-%patch0 -p1
+
+sed -i '1{\,^#!%{_bindir}/env python,d}' src/api/python/speechd/_test.py
%build
%global optflags %{optflags} -fcommon
+%if "%{flavor}" == "python311"
+export PYTHON=/usr/bin/python3.11
+%endif
%configure --disable-static \
--with-libao \
--with-alsa \
@@ -186,13 +235,18 @@ sed -i "s/#AddModule \"%{espeak}\"/AddModule \"%{espeak}\"/" -i config/speechd.c
--without-kali \
--with-ibmtts=no \
--with-voxin=no
+%if "%{flavor}" == "python311"
+cd src/api/python/speechd
+%endif
%make_build
%install
+%if "%{flavor}" == "python311"
+cd src/api/python/speechd
+%endif
%make_install
find %{buildroot} -type f -name "*.la" -delete -print
-mkdir -p %{buildroot}%{_sbindir}
-ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rcspeech-dispatcherd
+%if "%{flavor}" == ""
# Create log dir. 0700 since the logs can contain user information.
install -d -m 0700 %{buildroot}%{_localstatedir}/log/speech-dispatcher/
# Install logrotate script
@@ -212,10 +266,15 @@ rm -f %{buildroot}%{_sysconfdir}/speech-dispatcher/modules/ibmtts.conf
test -d %{buildroot}%{_infodir}/dir && rm %{buildroot}%{_infodir}/dir
%find_lang %{name}
# rpmlint
-sed -i -e 's|/usr/bin/env python3|/usr/bin/python3|g' %{buildroot}%{_bindir}/spd-conf
+%{python_expand # Fix shebang path
+sed -i "1s|#\!.*python.*|#\!/usr/bin/$python|" %{buildroot}%{_bindir}/spd-conf
+}
+%endif
# Deduplicate python bytecode
-%fdupes %{buildroot}%{python3_sitearch}/speechd*
+%fdupes %{buildroot}%{python_sitearch}/speechd*
+# Deduplicate locale files
+%fdupes %{buildroot}%{_datadir}/speech-dispatcher/locale
%post
%install_info --info-dir=%{_infodir} %{_infodir}/%{name}.info.gz
@@ -253,6 +312,7 @@ done
%postun -n libspeechd2 -p /sbin/ldconfig
+%if "%{flavor}" == ""
%files -f %{name}.lang
%doc AUTHORS ANNOUNCE NEWS README.md
%license COPYING.LGPL COPYING.GPL-2 COPYING.GPL-3
@@ -274,6 +334,7 @@ done
%{_libexecdir}/speech-dispatcher-modules/sd_dummy
%{_libexecdir}/speech-dispatcher-modules/sd_festival
%{_libexecdir}/speech-dispatcher-modules/sd_generic
+%{_libexecdir}/speech-dispatcher-modules/sd_openjtalk
%{_infodir}/%{name}*.info.gz
%{_infodir}/spd-say.info.gz
%{_infodir}/ssip.info.gz
@@ -286,12 +347,13 @@ done
%endif
# systemd service file
%{_unitdir}/speech-dispatcherd.service
-%{_sbindir}/rcspeech-dispatcherd
+%{_userunitdir}/speech-dispatcher.service
+%{_userunitdir}/speech-dispatcher.socket
+%{_datadir}/speech-dispatcher/
%files configure
%{_bindir}/spd-conf
-%{python3_sitearch}/speechd_config/
-%{_datadir}/speech-dispatcher/
+%{python_sitearch}/speechd_config/
%files module-espeak
%config(noreplace) %{_sysconfdir}/speech-dispatcher/modules/espeak.conf
@@ -301,12 +363,17 @@ done
%files -n libspeechd2
%{_libdir}/libspeechd.so.*
+%files -n libspeechd_module0
+%{_libdir}/libspeechd_module.so.*
+
%files -n libspeechd-devel
%{_includedir}/%{name}/
%{_libdir}/*.so
%{_libdir}/pkgconfig/%{name}.pc
+%endif
-%files -n python3-speechd
-%{python3_sitearch}/speechd/
+%files -n %{_python}-speechd
+%{python_sitearch}/speechd/
+%pycache_only %{python_sitearch}/speechd/__pycache__
%changelog