Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 703422 Details for
Bug 867958
Create Python 3 package
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[PATCH 3/5] Backport Python 3 bindings
0003-Backport-Python-3-bindings.patch (text/plain), 25.24 KB, created by
Kalev Lember
on 2013-02-27 12:56:26 UTC
(
hide
)
Description:
[PATCH 3/5] Backport Python 3 bindings
Filename:
MIME Type:
Creator:
Kalev Lember
Created:
2013-02-27 12:56:26 UTC
Size:
25.24 KB
patch
obsolete
>From 098e2359ed829cee2bec7761b30dda42c5d84d0f Mon Sep 17 00:00:00 2001 >From: Kalev Lember <kalevlember@gmail.com> >Date: Wed, 27 Feb 2013 13:00:07 +0100 >Subject: [PATCH 3/5] Backport Python 3 bindings > >Extracted from speech-dispatcher-0.8-beta1.tar.gz. It seems unlikely >that we get an updated speech-dispatcher package in time for F19, but we >need the Python 3 support for Orca. > >https://bugzilla.redhat.com/show_bug.cgi?id=867958 >--- > speech-dispatcher-python3.patch | 514 ++++++++++++++++++++++++++++++++++++++++ > speech-dispatcher.spec | 33 ++- > 2 files changed, 545 insertions(+), 2 deletions(-) > create mode 100644 speech-dispatcher-python3.patch > >diff --git a/speech-dispatcher-python3.patch b/speech-dispatcher-python3.patch >new file mode 100644 >index 0000000..5858e05 >--- /dev/null >+++ b/speech-dispatcher-python3.patch >@@ -0,0 +1,514 @@ >+diff -urN speechd/client.py speechd/client.py >+--- speechd/client.py 2010-09-10 10:23:55.000000000 +0200 >++++ speechd/client.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -32,7 +32,7 @@ >+ except: >+ import dummy_threading as threading >+ >+-import paths >++from . import paths >+ >+ class CallbackType(object): >+ """Constants describing the available types of callbacks""" >+@@ -151,9 +151,9 @@ >+ class _SSIP_Connection(object): >+ """Implemantation of low level SSIP communication.""" >+ >+- _NEWLINE = "\r\n" >+- _END_OF_DATA_MARKER = '.' >+- _END_OF_DATA_MARKER_ESCAPED = '..' >++ _NEWLINE = b"\r\n" >++ _END_OF_DATA_MARKER = b'.' >++ _END_OF_DATA_MARKER_ESCAPED = b'..' >+ _END_OF_DATA = _NEWLINE + _END_OF_DATA_MARKER + _NEWLINE >+ _END_OF_DATA_ESCAPED = _NEWLINE + _END_OF_DATA_MARKER_ESCAPED + _NEWLINE >+ # Constants representing \r\n. and \r\n.. >+@@ -187,12 +187,12 @@ >+ try: >+ self._socket = socket.socket(socket_family, socket.SOCK_STREAM) >+ self._socket.connect(socket_connect_args) >+- except socket.error, ex: >++ except socket.error as ex: >+ raise SSIPCommunicationError("Can't open socket using method " >+ + communication_method, >+ original_exception = ex) >+ >+- self._buffer = "" >++ self._buffer = b"" >+ self._com_buffer = [] >+ self._callback = None >+ self._ssip_reply_semaphore = threading.Semaphore(0) >+@@ -232,7 +232,7 @@ >+ except IOError: >+ # If the socket has been closed, exit the thread >+ sys.exit() >+- if code/100 != 7: >++ if code//100 != 7: >+ # This is not an index mark nor an event >+ self._com_buffer.append((code, msg, data)) >+ self._ssip_reply_semaphore.release() >+@@ -267,7 +267,7 @@ >+ pointer = self._buffer.find(self._NEWLINE) >+ line = self._buffer[:pointer] >+ self._buffer = self._buffer[pointer+len(self._NEWLINE):] >+- return line >++ return line.decode('utf-8') >+ >+ def _recv_message(self): >+ """Read server response or a callback >+@@ -321,11 +321,11 @@ >+ or isinstance(args[0], int) >+ cmd = ' '.join((command,) + tuple(map(str, args))) >+ try: >+- self._socket.send(cmd + self._NEWLINE) >++ self._socket.send(cmd.encode('utf-8') + self._NEWLINE) >+ except socket.error: >+ raise SSIPCommunicationError("Speech Dispatcher connection lost.") >+ code, msg, data = self._recv_response() >+- if code/100 != 2: >++ if code//100 != 2: >+ raise SSIPCommandError(code, msg, cmd) >+ return code, msg, data >+ >+@@ -340,6 +340,7 @@ >+ 'IOError' is raised when the socket was closed by the remote side. >+ >+ """ >++ data = data.encode('utf-8') >+ # Escape the end-of-data marker even if present at the beginning >+ # The start of the string is also the start of a line. >+ if data.startswith(self._END_OF_DATA_MARKER): >+@@ -357,7 +358,7 @@ >+ except socket.error: >+ raise SSIPCommunicationError("Speech Dispatcher connection lost.") >+ code, msg, response_data = self._recv_response() >+- if code/100 != 2: >++ if code//100 != 2: >+ raise SSIPDataError(code, msg, data) >+ return code, msg, response_data >+ >+@@ -493,7 +494,7 @@ >+ """Default host for server connections.""" >+ DEFAULT_PORT = 6560 >+ """Default port number for server connections.""" >+- DEFAULT_SOCKET_PATH = "~/.speech-dispatcher/speechd.sock" >++ DEFAULT_SOCKET_PATH = "speech-dispatcher/speechd.sock" >+ """Default name of the communication unix socket""" >+ >+ def __init__(self, name, component='default', user='unknown', address=None, >+@@ -509,7 +510,7 @@ >+ user -- user identification string (user name). When multi-user >+ acces is expected, this can be used to identify their connections. >+ address -- server address as specified in Speech Dispatcher >+- documentation (e.g. "unix:/home/joe/.speech-dispatcher/speechd.sock" >++ documentation (e.g. "unix:/run/user/joe/speech-dispatcher/speechd.sock" >+ or "inet:192.168.0.85:6561") >+ autospawn -- a flag to specify whether the library should >+ try to start the server if it determines its not already >+@@ -519,9 +520,9 @@ >+ method -- communication method to use, one of the constants defined in class >+ CommunicationMethod >+ socket_path -- for CommunicationMethod.UNIX_SOCKET, socket >+- path in filesystem. By default, this is ~/.speech-dispatcher/speechd.sock >+- where `~' is the users home directory as determined from the system >+- defaults and from the $HOMEDIR environment variable. >++ path in filesystem. By default, this is $XDG_RUNTIME_DIR/speech-dispatcher/speechd.sock >++ where $XDG_RUNTIME_DIR is determined using the XDG Base Directory >++ Specification. >+ host -- for CommunicationMethod.INET_SOCKET, server hostname >+ or IP address as a string. If None, the default value is >+ taken from SPEECHD_HOST environment variable (if it >+@@ -535,9 +536,12 @@ >+ Dispatcher documentation. >+ """ >+ >++ _home = os.path.expanduser("~") >++ _runtime_dir = os.environ.get('XDG_RUNTIME_DIR', os.environ.get('XDG_CACHE_HOME', os.path.join(_home, '.cache'))) >++ _sock_path = os.path.join(_runtime_dir, self.DEFAULT_SOCKET_PATH) >+ # Resolve connection parameters: >+ connection_args = {'communication_method': CommunicationMethod.UNIX_SOCKET, >+- 'socket_path': os.path.expanduser(self.DEFAULT_SOCKET_PATH), >++ 'socket_path': _sock_path, >+ 'host': self.DEFAULT_HOST, >+ 'port': self.DEFAULT_PORT, >+ } >+@@ -576,14 +580,14 @@ >+ """Establish new connection (and/or autospawn server)""" >+ try: >+ self._conn = _SSIP_Connection(**connection_args) >+- except SSIPCommunicationError, ce: >++ except SSIPCommunicationError as ce: >+ # Suppose server might not be running, try the autospawn mechanism >+ if autospawn != False: >+ # Autospawn is however not guaranteed to start the server. The server >+ # will decide, based on it's configuration, whether to honor the request. >+ try: >+ self._server_spawn(connection_args) >+- except SpawnError, se: >++ except SpawnError as se: >+ ce.set_additional_exception(se) >+ raise ce >+ self._conn = _SSIP_Connection(**connection_args) >+@@ -737,8 +741,6 @@ >+ >+ """ >+ self._conn.send_command('SPEAK') >+- if isinstance(text, unicode): >+- text = text.encode('utf-8') >+ result = self._conn.send_data(text) >+ if callback: >+ msg_id = int(result[2][0]) >+@@ -759,8 +761,6 @@ >+ message is queued on the server and the method returns immediately. >+ >+ """ >+- if isinstance(char, unicode): >+- char = char.encode('utf-8') >+ self._conn.send_command('CHAR', char.replace(' ', 'space')) >+ >+ def key(self, key): >+diff -urN speechd/__init__.py speechd/__init__.py >+--- speechd/__init__.py 2010-09-10 10:21:48.000000000 +0200 >++++ speechd/__init__.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -14,5 +14,5 @@ >+ # along with this program; if not, write to the Free Software >+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA >+ >+-from client import * >++from .client import * >+ >+diff -urN speechd/_test.py speechd/_test.py >+--- speechd/_test.py 2010-09-10 10:21:50.000000000 +0200 >++++ speechd/_test.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -19,7 +19,7 @@ >+ import unittest >+ import time >+ >+-from client import PunctuationMode, CallbackType, SSIPClient, Scope, Speaker >++from .client import PunctuationMode, CallbackType, SSIPClient, Scope, Speaker >+ >+ >+ class _SSIPClientTest(unittest.TestCase): >+@@ -124,10 +124,10 @@ >+ c = self._client >+ for module in c.list_output_modules(): >+ c.set_output_module(module) >+- print "**", module >++ print("**", module) >+ c.speak(module +"using default voice") >+ for name, lang, dialect in c.list_synthesis_voices(): >+- print " -", module, name, lang, dialect >++ print(" -", module, name, lang, dialect) >+ c.set_synthesis_voice(name) >+ c.speak(module +" using voice "+ name) >+ >+diff -urN speechd_config/config.py speechd_config/config.py >+--- speechd_config/config.py 2010-09-10 16:38:39.000000000 +0200 >++++ speechd_config/config.py 2012-07-13 15:52:02.000000000 +0200 >+@@ -26,14 +26,15 @@ >+ import datetime >+ >+ from optparse import OptionParser >++from xdg import BaseDirectory >+ >+ # Configuration and sound data paths >+-import paths >++from . import paths >+ >+ def report(msg): >+ """Output information messages for the user on stdout >+ and if desired, by espeak synthesis""" >+- print msg >++ print(msg) >+ if options.use_espeak_synthesis: >+ os.system("espeak \"" + msg + "\"") >+ >+@@ -57,7 +58,7 @@ >+ input_audio_icon() >+ >+ if not options.dont_ask: >+- str_inp = raw_input(">") >++ str_inp = input(">") >+ >+ # On plain enter, return default >+ if options.dont_ask or (len(str_inp) == 0): >+@@ -75,6 +76,8 @@ >+ return int(str_inp) >+ elif isinstance(default, str): >+ return str_inp >++ else: >++ raise TypeError("Invalid type for the default value") >+ >+ def question_with_suggested_answers(text, default, suggest): >+ """Ask a question with suggested answers. If the answer typed is not >+@@ -191,7 +194,7 @@ >+ }, >+ 'dont_ask': >+ { >+- 'descr' : "Do not ask any questions, allways use default values", >++ 'descr' : "Do not ask any questions, always use default values", >+ 'doc' : None, >+ 'type' : bool, >+ 'default' : False, >+@@ -213,17 +216,17 @@ >+ and problem diagnostics.""" >+ self.cmdline_parser = OptionParser(usage) >+ >+- for option, definition in self._conf_options.iteritems(): >++ for option, definition in self._conf_options.items(): >+ # Set object attributes to default values >+ def_val = definition.get('default', None) >+ setattr(self, option, def_val) >+ >+ # Fill in the cmdline_parser object >+- if definition.has_key('command_line'): >++ if 'command_line' in definition: >+ descr = definition.get('descr', None) >+ type = definition.get('type', None) >+ >+- if definition.has_key('arg_map'): >++ if 'arg_map' in definition: >+ type, map = definition['arg_map'] >+ if type == str: >+ type_str = 'string' >+@@ -248,10 +251,10 @@ >+ # Set options according to command line flags >+ (cmdline_options, args) = self.cmdline_parser.parse_args() >+ >+- for option, definition in self._conf_options.iteritems(): >++ for option, definition in self._conf_options.items(): >+ val = getattr(cmdline_options, option, None) >+ if val != None: >+- if definition.has_key('arg_map'): >++ if 'arg_map' in definition: >+ former_type, map = definition['arg_map'] >+ try: >+ val = map[val] >+@@ -270,17 +273,9 @@ >+ def __init__(self): >+ self.festival_socket = None >+ >+- def user_speechd_dir(self): >+- """Return user Speech Dispatcher configuration and logging directory""" >+- return os.path.expanduser(os.path.join('~', '.speech-dispatcher')) >+- >+- def user_speechd_dir_exists(self): >+- """Determine whether user speechd directory exists""" >+- return os.path.exists(self.user_speechd_dir()) >+- >+ def user_conf_dir(self): >+ """Return user configuration directory""" >+- return os.path.join(self.user_speechd_dir(), "conf") >++ return os.path.join(BaseDirectory.xdg_config_home, "speech-dispatcher") >+ >+ def system_conf_dir(self): >+ """Determine system configuration directory""" >+@@ -298,7 +293,8 @@ >+ self.festival_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) >+ try: >+ self.festival_socket.connect((socket.gethostbyname(host), port)) >+- except socket.error, (num, reson): >++ except socket.error as e: >++ (num, reson) = e.args >+ report("""ERROR: It was not possible to connect to Festival on the >+ given host and port. Connection failed with error %d : %s .""" % (num, reson)) >+ report("""Hint: Most likely, your Festival server is not running now >+@@ -314,8 +310,8 @@ >+ if not self.festival_socket: >+ if not self.festival_connect(): >+ return False >+- self.festival_socket.send("(require 'speech-dispatcher)\n") >+- reply = self.festival_socket.recv(1024) >++ self.festival_socket.send(bytes("(require 'speech-dispatcher)\n", "ascii")) >++ reply = str(self.festival_socket.recv(1024)) >+ if "LP" in reply: >+ report("Festival contains freebsoft-utils.") >+ return True >+@@ -346,8 +342,8 @@ >+ cmd = "aplay" + " " + wavfile >+ elif type == 'pulse': >+ cmd = "paplay" + " " + wavfile >+- elif type == 'oss': >+- raise NotImplementedError >++ else: >++ raise NotImplementedError("Test for this audio system is not implemented") >+ >+ try: >+ ret = os.system(cmd) >+@@ -500,18 +496,18 @@ >+ report(""" >+ >+ Diagnostics results:""") >+- if results.has_key('spd_say_working'): >++ if 'spd_say_working' in results: >+ if results['spd_say_working']: >+ report("Speech Dispatcher is working") >+ else: >+ report("Speech Dispatcher not working through spd-say") >+- if results.has_key('synthesizers'): >++ if 'synthesizers' in results: >+ report("Synthesizers that were tested and seem to work: %s" % >+ str(results['synthesizers'])) >+- if results.has_key('audio'): >++ if 'audio' in results: >+ report("Audio systems that were tested and seem to work: %s" % >+ str(results['audio'])) >+- if results.has_key('python_speechd'): >++ if 'python_speechd' in results: >+ if(results['python_speechd']): >+ report("Python Speech Dispatcher module is importable") >+ else: >+@@ -551,6 +547,8 @@ >+ processes. Do you want to do it now?""", True) >+ if reply: >+ os.system("killall speech-dispatcher") >++ # Attempt to workaround the psmisc 22.15 bug with 16 char max process names >++ os.system("killall speech-dispatch") >+ else: >+ report(""" >+ You decided not to kill running Speech Dispatcher processes. >+@@ -562,7 +560,7 @@ >+ time.sleep(2) >+ >+ # All debugging files are written to TMPDIR/speech-dispatcher/ >+- if os.environ.has_key('TMPDIR'): >++ if 'TMPDIR' in os.environ: >+ tmpdir = os.environ['TMPDIR'] >+ else: >+ tmpdir = "/tmp/" >+@@ -589,7 +587,7 @@ >+ time.sleep(2) >+ >+ if not speechd_started: >+- reply = report("Speech Dispatcher failed to start, continuing anyway") >++ reply = question("Speech Dispatcher failed to start, continuing anyway") >+ >+ report("Trying to speak some messages") >+ ret = os.system("spd-say \"Speech Dispatcher debugging 1\"") >+@@ -608,6 +606,8 @@ >+ os.system("tar -cz %s %s > %s" % >+ (debugdir_path, configure_directory, debugarchive_path)) >+ os.system("killall speech-dispatcher") >++ # Attempt to workaround the psmisc 22.15 bug with 16 char max process names >++ os.system("killall speech-dispatch") >+ os.system("rm -rf %s" % debugdir_path) >+ >+ report(""" >+@@ -639,7 +639,7 @@ >+ # Parse config file in-place and replace the desired options+values >+ for line in fileinput.input(configfile, inplace=True, backup=".bak"): >+ # Check if the current line contains any of the desired options >+- for opt, value in options.iteritems(): >++ for opt, value in options.items(): >+ if opt in line: >+ # Now count unknown words and try to judge if this is >+ # real configuration or just a comment >+@@ -671,42 +671,35 @@ >+ else: >+ spd_val = str(value) >+ >+- print opt + " " + spd_val >++ print(opt + " " + spd_val) >+ break >+ >+ else: >+- print line, >++ print(line, end=' ') >+ >+ def create_user_configuration(self): >+ """Create user configuration in the standard location""" >+ >+ # Ask before touching things that we do not have to! >+- if test.user_speechd_dir_exists(): >+- if test.user_conf_dir_exists(): >+- if test.user_configuration_seems_complete(): >+- reply = question( >+- """User configuration already exists. >+-Do you want to rewrite it with a new one?""", False) >+- if reply == False: >+- report("Keeping configuration intact and continuing with settings.") >+- return >+- else: >+- self.remove_user_configuration() >++ if test.user_conf_dir_exists(): >++ if test.user_configuration_seems_complete(): >++ reply = question( >++ "User configuration already exists." >++ "Do you want to rewrite it with a new one?", False) >++ if reply == False: >++ report("Keeping configuration intact and continuing with settings.") >++ return >+ else: >+- reply = question( >+- """User configuration already exists, but it seems to be incomplete. >+-Do you want to keep it?""", False) >+- if reply == False: >+- self.remove_user_configuration() >+- else: >+- report("Keeping configuration intact and aborting.") >+- return >+- >+- # TODO: Check for permissions on logfiles and pid >+- else: >+- report("Creating " + test.user_speechd_dir()) >+- os.mkdir(test.user_speechd_dir()) >+- >++ self.remove_user_configuration() >++ else: >++ reply = question( >++ "User configuration already exists, but it seems to be incomplete." >++ "Do you want to keep it?", False) >++ if reply == False: >++ self.remove_user_configuration() >++ else: >++ report("Keeping configuration intact and aborting.") >++ return >+ # Copy the original intact configuration files >+ # creating a conf/ subdirectory >+ shutil.copytree(paths.SPD_CONF_ORIG_PATH, test.user_conf_dir()) >+@@ -722,7 +715,7 @@ >+ report("Warning: You must be root or under sudo to do this.") >+ report("Configuring system settings for Speech Dispatcher") >+ else: >+- assert(0) >++ raise ValueError("Invalid configuration type") >+ >+ # Now determine the most important config option >+ self.default_output_module = question_with_suggested_answers( >+@@ -737,7 +730,7 @@ >+ self.default_audio_method = question_with_suggested_answers( >+ "Default audio output method", >+ "pulse", >+- ["pulse", "alsa", "oss", "pulse,alsa"]) >++ ["pulse", "libao", "alsa", "oss", "pulse,alsa"]) >+ >+ self.default_speech_rate = question( >+ "Default speech rate (on the scale of -100..100, 0 is default, 50 is faster, -50 is slower)", >+@@ -788,6 +781,8 @@ >+ Do you want to kill all running Speech Dispatchers and try again?""", True) >+ if reply: >+ os.system("killall speech-dispatcher") >++ # Attempt to workaround the psmisc 22.15 bug with 16 char max process names >++ os.system("killall speech-dispatch") >+ err = os.system("speech-dispatcher") >+ if err: >+ report("Can't start Speech Dispatcher") >+@@ -834,7 +829,7 @@ >+ elif speechd_type == 'system': >+ self.configure_basic_settings(type='system') >+ else: >+- assert(False) >++ raise ValueError("Invalid configuration type") >+ >+ reply = question("Do you want to start/restart Speech Dispatcher now and run some tests?", True) >+ if not reply: >+diff -urN speechd_config/__init__.py speechd_config/__init__.py >+--- speechd_config/__init__.py 2010-09-01 15:30:12.000000000 +0200 >++++ speechd_config/__init__.py 2012-07-11 11:05:05.000000000 +0200 >+@@ -14,5 +14,5 @@ >+ # along with this program; if not, write to the Free Software >+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA >+ >+-from config import * >++from .config import * >+ >diff --git a/speech-dispatcher.spec b/speech-dispatcher.spec >index 595df23..f9ebc32 100644 >--- a/speech-dispatcher.spec >+++ b/speech-dispatcher.spec >@@ -19,10 +19,14 @@ Buildrequires: glib2-devel > Buildrequires: libao-devel > Buildrequires: pulseaudio-libs-devel > BuildRequires: python-setuptools-devel >+BuildRequires: python2-devel >+BuildRequires: python3-devel > BuildRequires: texinfo > BuildRequires: systemd-units > BuildRequires: automake libtool > Patch0: 0001-RPM-Cleanups.patch >+# Backported Python 3 suppor from speech-dispatcher-0.8-beta1.tar.gz >+Patch1: speech-dispatcher-python3.patch > > Requires(post): systemd-units > Requires(post): systemd-sysv >@@ -74,7 +78,7 @@ Requires(preun):/sbin/install-info > speechd documentation > > %package -n python-speechd >-Summary: Python Client API for speech-dispatcher >+Summary: Python 2 Client API for speech-dispatcher > License: GPLv2+ > Group: Development/Libraries > Requires: speech-dispatcher = %{version}-%{release} >@@ -82,7 +86,17 @@ Obsoletes: speech-dispatcher-python < 0.7.1-11 > Provides: speech-dispatcher-python = %{version}-%{release} > > %description -n python-speechd >-speechd python module >+Python 2 bindings for speech-dispatcher. >+ >+%package -n python3-speechd >+Summary: Python 3 Client API for speech-dispatcher >+License: GPLv2+ >+Group: Development/Libraries >+Requires: speech-dispatcher = %{version}-%{release} >+Requires: python3-pyxdg >+ >+%description -n python3-speechd >+Python 3 bindings for speech-dispatcher. > > %prep > %setup -q >@@ -103,6 +117,16 @@ for dir in \ > popd > done > >+# HACK: copy over and patch the Python 2 module for Python 3 support. >+# Proper Python 3 support is available in speech-dispatcher 0.8-beta1, and >+# this hack can be removed when the package gets updated. >+mkdir -p %{buildroot}%{python3_sitearch} >+cp -a %{buildroot}%{python_sitearch}/* %{buildroot}%{python3_sitearch}/ >+pushd %{buildroot}%{python3_sitearch} >+rm */*.pyc */*.pyo >+patch -p0 < %{PATCH1} >+popd >+ > mkdir -p %{buildroot}%{_unitdir} > install -p -m 0644 %SOURCE1 %{buildroot}%{_unitdir}/ > >@@ -200,10 +224,15 @@ fi > %files -n python-speechd > %{python_sitearch}/speechd* > >+%files -n python3-speechd >+%{python3_sitearch}/speechd* >+ > %changelog > * Wed Feb 27 2013 Kalev Lember <kalevlember@gmail.com> - 0.7.1-11 > - Rename the Python 2 package to python-speechd, for consistency with other > distros >+- Backport Python 3 bindings from 0.8-beta1 and install them in python3-speechd >+ subpackage (#867958) > > * Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.7.1-10 > - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild >-- >1.8.1.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 867958
:
703420
|
703421
|
703422
|
703424
|
703425
|
703882