Kaydet (Commit) 1d175f77 authored tarafından Éric Araujo's avatar Éric Araujo

Merge fixes for #1326113 and #12297 from 3.2

...@@ -22,7 +22,8 @@ is detected, or when :func:`os._exit` is called. ...@@ -22,7 +22,8 @@ is detected, or when :func:`os._exit` is called.
Register *func* as a function to be executed at termination. Any optional Register *func* as a function to be executed at termination. Any optional
arguments that are to be passed to *func* must be passed as arguments to arguments that are to be passed to *func* must be passed as arguments to
:func:`register`. :func:`register`. It is possible to register the same function and arguments
more than once.
At normal program termination (for instance, if :func:`sys.exit` is called or At normal program termination (for instance, if :func:`sys.exit` is called or
the main module's execution completes), all functions registered are called in the main module's execution completes), all functions registered are called in
...@@ -35,15 +36,17 @@ is detected, or when :func:`os._exit` is called. ...@@ -35,15 +36,17 @@ is detected, or when :func:`os._exit` is called.
saved. After all exit handlers have had a chance to run the last exception to saved. After all exit handlers have had a chance to run the last exception to
be raised is re-raised. be raised is re-raised.
This function returns *func* which makes it possible to use it as a decorator This function returns *func*, which makes it possible to use it as a
without binding the original name to ``None``. decorator.
.. function:: unregister(func) .. function:: unregister(func)
Remove a function *func* from the list of functions to be run at interpreter- Remove *func* from the list of functions to be run at interpreter
shutdown. After calling :func:`unregister`, *func* is guaranteed not to be shutdown. After calling :func:`unregister`, *func* is guaranteed not to be
called when the interpreter shuts down. called when the interpreter shuts down, even if it was registered more than
once. :func:`unregister` silently does nothing if *func* was not previously
registered.
.. seealso:: .. seealso::
...@@ -100,6 +103,4 @@ Usage as a :term:`decorator`:: ...@@ -100,6 +103,4 @@ Usage as a :term:`decorator`::
def goodbye(): def goodbye():
print("You are now leaving the Python sector.") print("You are now leaving the Python sector.")
This obviously only works with functions that don't take arguments. This only works with functions that can be called without arguments.
...@@ -165,8 +165,7 @@ class build_ext(Command): ...@@ -165,8 +165,7 @@ class build_ext(Command):
if plat_py_include != py_include: if plat_py_include != py_include:
self.include_dirs.append(plat_py_include) self.include_dirs.append(plat_py_include)
if isinstance(self.libraries, str): self.ensure_string_list('libraries')
self.libraries = [self.libraries]
# Life is easier if we're not forever checking for None, so # Life is easier if we're not forever checking for None, so
# simplify these options to empty lists if unset # simplify these options to empty lists if unset
......
...@@ -178,21 +178,21 @@ class BuildExtTestCase(TempdirManager, ...@@ -178,21 +178,21 @@ class BuildExtTestCase(TempdirManager,
# make sure cmd.libraries is turned into a list # make sure cmd.libraries is turned into a list
# if it's a string # if it's a string
cmd = build_ext(dist) cmd = build_ext(dist)
cmd.libraries = 'my_lib' cmd.libraries = 'my_lib, other_lib lastlib'
cmd.finalize_options() cmd.finalize_options()
self.assertEqual(cmd.libraries, ['my_lib']) self.assertEqual(cmd.libraries, ['my_lib', 'other_lib', 'lastlib'])
# make sure cmd.library_dirs is turned into a list # make sure cmd.library_dirs is turned into a list
# if it's a string # if it's a string
cmd = build_ext(dist) cmd = build_ext(dist)
cmd.library_dirs = 'my_lib_dir' cmd.library_dirs = 'my_lib_dir%sother_lib_dir' % os.pathsep
cmd.finalize_options() cmd.finalize_options()
self.assertTrue('my_lib_dir' in cmd.library_dirs) self.assertEqual(cmd.library_dirs, ['my_lib_dir', 'other_lib_dir'])
# make sure rpath is turned into a list # make sure rpath is turned into a list
# if it's a list of os.pathsep's paths # if it's a string
cmd = build_ext(dist) cmd = build_ext(dist)
cmd.rpath = os.pathsep.join(['one', 'two']) cmd.rpath = 'one%stwo' % os.pathsep
cmd.finalize_options() cmd.finalize_options()
self.assertEqual(cmd.rpath, ['one', 'two']) self.assertEqual(cmd.rpath, ['one', 'two'])
......
...@@ -472,6 +472,9 @@ Library ...@@ -472,6 +472,9 @@ Library
- Issue #13015: Fix a possible reference leak in defaultdict.__repr__. - Issue #13015: Fix a possible reference leak in defaultdict.__repr__.
Patch by Suman Saha. Patch by Suman Saha.
- Issue #1326113: distutils' build_ext command --libraries option now
correctly parses multiple values separated by whitespace or commas.
- Issue #10287: nntplib now queries the server's CAPABILITIES first before - Issue #10287: nntplib now queries the server's CAPABILITIES first before
sending MODE READER, and only sends it if not already in READER mode. sending MODE READER, and only sends it if not already in READER mode.
Patch by Hynek Schlawack. Patch by Hynek Schlawack.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment