From f437c085ea092b99c2a720f89ed144d46eeb99fa Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Mon, 22 Apr 2024 04:14:58 +0900 Subject: [PATCH 01/47] 3.11.9 --- README.md | 7 +- aifc/Doc/aifc.rst | 2 +- aifc/aifc/__init__.py | 59 +++++++++--- aifc/pyproject.toml | 2 +- aifc/tests/test_aifc.py | 13 ++- asynchat/Doc/asynchat.rst | 5 +- asynchat/asynchat/__init__.py | 11 +-- asynchat/pyproject.toml | 2 +- asynchat/tests/test_asynchat.py | 11 ++- asyncore/Doc/asyncore.rst | 6 +- asyncore/asyncore/__init__.py | 8 +- asyncore/pyproject.toml | 2 +- asyncore/tests/test_asyncore.py | 7 +- cgi/Doc/cgi.rst | 39 +++++++- cgi/cgi/__init__.py | 8 ++ cgi/pyproject.toml | 2 +- cgi/tests/test_cgi.py | 6 +- cgitb/Doc/cgitb.rst | 2 +- cgitb/cgitb/__init__.py | 19 +++- cgitb/pyproject.toml | 2 +- cgitb/tests/test_cgitb.py | 3 +- chunk/Doc/chunk.rst | 2 +- chunk/chunk/__init__.py | 4 + chunk/pyproject.toml | 2 +- crypt/Doc/crypt.rst | 7 +- crypt/crypt/__init__.py | 4 + crypt/pyproject.toml | 2 +- crypt/tests/test_crypt.py | 4 +- imghdr/Doc/imghdr.rst | 2 +- imghdr/imghdr/__init__.py | 9 +- imghdr/pyproject.toml | 2 +- imghdr/tests/test_imghdr.py | 6 +- mailcap/Doc/mailcap.rst | 4 +- mailcap/mailcap/__init__.py | 6 ++ mailcap/pyproject.toml | 2 +- mailcap/tests/test_mailcap.py | 45 +++++++-- nntplib/Doc/nntplib.rst | 2 + nntplib/nntplib/__init__.py | 3 + nntplib/pyproject.toml | 2 +- nntplib/tests/{ => certdata}/keycert3.pem | 0 nntplib/tests/test_nntplib.py | 9 +- pipes/Doc/pipes.rst | 4 +- pipes/pipes/__init__.py | 3 + pipes/pyproject.toml | 2 +- pipes/tests/test_pipes.py | 4 +- scripts/update.py | 7 +- smtpd/Doc/smtpd.rst | 23 +---- smtpd/pyproject.toml | 2 +- smtpd/smtpd/__init__.py | 106 ++-------------------- smtpd/tests/test_smtpd.py | 11 ++- sndhdr/Doc/sndhdr.rst | 50 +++++++++- sndhdr/pyproject.toml | 2 +- sndhdr/sndhdr/__init__.py | 16 +++- sndhdr/tests/test_sndhdr.py | 5 +- sunau/Doc/sunau.rst | 2 +- sunau/pyproject.toml | 2 +- sunau/sunau/__init__.py | 11 ++- sunau/tests/test_sunau.py | 8 +- telnetlib/Doc/telnetlib.rst | 3 +- telnetlib/pyproject.toml | 2 +- telnetlib/telnetlib/__init__.py | 4 +- telnetlib/tests/test_telnetlib.py | 7 +- uu/Doc/uu.rst | 2 +- uu/pyproject.toml | 2 +- uu/tests/test_uu.py | 11 ++- uu/uu/__init__.py | 3 + xdrlib/Doc/xdrlib.rst | 2 +- xdrlib/pyproject.toml | 2 +- xdrlib/tests/test_xdrlib.py | 4 +- xdrlib/xdrlib/__init__.py | 3 + 70 files changed, 396 insertions(+), 240 deletions(-) rename nntplib/tests/{ => certdata}/keycert3.pem (100%) diff --git a/README.md b/README.md index e03a1da..301b1ff 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,11 @@ For more information, see [PEP 594](https://peps.python.org/pep-0594/). If your project depends on a module that has been removed from the standard, here is the redistribution of the dead batteries. +```shell +pip install standard-{name} # Don't forget to add `standard-` prefix! +pip install standard-uu # e.g. `uu` can be installed by standard-uu +``` + ## Contribution guideline Please do *NOT* submit any new features or any compatibility work. @@ -27,7 +32,7 @@ I know it might sound like more maintenance work, but it's not as bad as it seem It's not easy to tell users "We will deprecate this library. Please fork or go to find another library." I know it's not the most pleasant thing to do. Preparing a backup will be a bit more nice. Now telling "We will remove this library from standard library, but you can install it via PIP!" will be a lot easier. The only additional burden for users will be the Internet with SSL. -There could be one more step. If we can get users to install the old standard packages via PIP, we can also get them to install less core-language libraries as separatedly distributing first-party libraries. Libraries that have users but aren't necessarily standard libraries can be turned into non-standard libraries. +There could be one more step - though this is a rejected idea in PEP 594. If we can get users to install the old standard packages via PIP, we can also get them to install less core-language libraries as separatedly distributing first-party libraries. Libraries that have users but aren't necessarily standard libraries can be turned into non-standard libraries. I'm not sure if this is the best way, but it will give developers the option to choose whether or not to do. I really hope that finally Python developers could decide to remove even more batteries in future. diff --git a/aifc/Doc/aifc.rst b/aifc/Doc/aifc.rst index fa27785..9f20a30 100644 --- a/aifc/Doc/aifc.rst +++ b/aifc/Doc/aifc.rst @@ -13,7 +13,7 @@ single: AIFF-C -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`aifc` module is deprecated (see :pep:`PEP 594 <594#aifc>` for details). diff --git a/aifc/aifc/__init__.py b/aifc/aifc/__init__.py index ed5da7d..5254987 100644 --- a/aifc/aifc/__init__.py +++ b/aifc/aifc/__init__.py @@ -140,6 +140,10 @@ __all__ = ["Error", "open"] + +warnings._deprecated(__name__, remove=(3, 13)) + + class Error(Exception): pass @@ -251,7 +255,9 @@ def _write_float(f, x): _write_ulong(f, himant) _write_ulong(f, lomant) -from chunk import Chunk +with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + from chunk import Chunk from collections import namedtuple _aifc_params = namedtuple('_aifc_params', @@ -447,21 +453,33 @@ def readframes(self, nframes): # def _alaw2lin(self, data): - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop return audioop.alaw2lin(data, 2) def _ulaw2lin(self, data): - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop return audioop.ulaw2lin(data, 2) def _adpcm2lin(self, data): - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop if not hasattr(self, '_adpcmstate'): # first time self._adpcmstate = None data, self._adpcmstate = audioop.adpcm2lin(data, 2, self._adpcmstate) return data + def _sowt2lin(self, data): + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop + return audioop.byteswap(data, 2) + def _read_comm_chunk(self, chunk): self._nchannels = _read_short(chunk) self._nframes = _read_long(chunk) @@ -497,6 +515,8 @@ def _read_comm_chunk(self, chunk): self._convert = self._ulaw2lin elif self._comptype in (b'alaw', b'ALAW'): self._convert = self._alaw2lin + elif self._comptype in (b'sowt', b'SOWT'): + self._convert = self._sowt2lin else: raise Error('unsupported compression type') self._sampwidth = 2 @@ -659,7 +679,7 @@ def setcomptype(self, comptype, compname): if self._nframeswritten: raise Error('cannot change parameters after starting to write') if comptype not in (b'NONE', b'ulaw', b'ULAW', - b'alaw', b'ALAW', b'G722'): + b'alaw', b'ALAW', b'G722', b'sowt', b'SOWT'): raise Error('unsupported compression type') self._comptype = comptype self._compname = compname @@ -680,7 +700,7 @@ def setparams(self, params): if self._nframeswritten: raise Error('cannot change parameters after starting to write') if comptype not in (b'NONE', b'ulaw', b'ULAW', - b'alaw', b'ALAW', b'G722'): + b'alaw', b'ALAW', b'G722', b'sowt', b'SOWT'): raise Error('unsupported compression type') self.setnchannels(nchannels) self.setsampwidth(sampwidth) @@ -764,28 +784,43 @@ def close(self): # def _lin2alaw(self, data): - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop return audioop.lin2alaw(data, 2) def _lin2ulaw(self, data): - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop return audioop.lin2ulaw(data, 2) def _lin2adpcm(self, data): - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop if not hasattr(self, '_adpcmstate'): self._adpcmstate = None data, self._adpcmstate = audioop.lin2adpcm(data, 2, self._adpcmstate) return data + def _lin2sowt(self, data): + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop + return audioop.byteswap(data, 2) + def _ensure_header_written(self, datasize): if not self._nframeswritten: - if self._comptype in (b'ULAW', b'ulaw', b'ALAW', b'alaw', b'G722'): + if self._comptype in (b'ULAW', b'ulaw', + b'ALAW', b'alaw', b'G722', + b'sowt', b'SOWT'): if not self._sampwidth: self._sampwidth = 2 if self._sampwidth != 2: raise Error('sample width must be 2 when compressing ' - 'with ulaw/ULAW, alaw/ALAW or G7.22 (ADPCM)') + 'with ulaw/ULAW, alaw/ALAW, sowt/SOWT ' + 'or G7.22 (ADPCM)') if not self._nchannels: raise Error('# channels not specified') if not self._sampwidth: @@ -801,6 +836,8 @@ def _init_compression(self): self._convert = self._lin2ulaw elif self._comptype in (b'alaw', b'ALAW'): self._convert = self._lin2alaw + elif self._comptype in (b'sowt', b'SOWT'): + self._convert = self._lin2sowt def _write_header(self, initlength): if self._aifc and self._comptype != b'NONE': diff --git a/aifc/pyproject.toml b/aifc/pyproject.toml index f2629d8..9350b03 100644 --- a/aifc/pyproject.toml +++ b/aifc/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-aifc" -version = "3.10.14" +version = "3.11.9" description = "Standard library aifc redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/aifc/tests/test_aifc.py b/aifc/tests/test_aifc.py index fb6da41..d3863d4 100644 --- a/aifc/tests/test_aifc.py +++ b/aifc/tests/test_aifc.py @@ -1,14 +1,17 @@ from test.support import findfile from test.support.os_helper import TESTFN, unlink -from test.support.warnings_helper import check_no_resource_warning +from test.support.warnings_helper import check_no_resource_warning, import_deprecated import unittest from unittest import mock from test import audiotests -from audioop import byteswap import io import sys import struct -import aifc + + +aifc = import_deprecated("aifc") +audioop = import_deprecated("audioop") + class AifcTest(audiotests.AudioWriteTests, audiotests.AudioTestsWithSourceFile): @@ -121,7 +124,7 @@ class AifcULAWTest(AifcTest, unittest.TestCase): E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \ """) if sys.byteorder != 'big': - frames = byteswap(frames, 2) + frames = audioop.byteswap(frames, 2) class AifcALAWTest(AifcTest, unittest.TestCase): @@ -142,7 +145,7 @@ class AifcALAWTest(AifcTest, unittest.TestCase): E4800CC0 62000A40 08C00A40 2B000B40 52000E40 8A001180 B6000EC0 46000A40 \ """) if sys.byteorder != 'big': - frames = byteswap(frames, 2) + frames = audioop.byteswap(frames, 2) class AifcMiscTest(unittest.TestCase): diff --git a/asynchat/Doc/asynchat.rst b/asynchat/Doc/asynchat.rst index 70753bf..32e04ad 100644 --- a/asynchat/Doc/asynchat.rst +++ b/asynchat/Doc/asynchat.rst @@ -10,8 +10,8 @@ **Source code:** :source:`Lib/asynchat.py` -.. deprecated:: 3.6 - :mod:`asynchat` will be removed in Python 3.12 +.. deprecated-removed:: 3.6 3.12 + The :mod:`asynchat` module is deprecated (see :pep:`PEP 594 <594#asynchat>` for details). Please use :mod:`asyncio` instead. @@ -34,6 +34,7 @@ Typically an :class:`asyncore.dispatcher` server channel generates new :class:`asynchat.async_chat` channel objects as it receives incoming connection requests. +.. include:: ../includes/wasm-notavail.rst .. class:: async_chat() diff --git a/asynchat/asynchat/__init__.py b/asynchat/asynchat/__init__.py index e081e67..bed797e 100644 --- a/asynchat/asynchat/__init__.py +++ b/asynchat/asynchat/__init__.py @@ -48,12 +48,11 @@ import asyncore from collections import deque -from warnings import warn -warn( - 'The asynchat module is deprecated and will be removed in Python 3.12. ' - 'The recommended replacement is asyncio', - DeprecationWarning, - stacklevel=2) +from warnings import _deprecated + +_DEPRECATION_MSG = ('The {name} module is deprecated and will be removed in ' + 'Python {remove}. The recommended replacement is asyncio') +_deprecated(__name__, _DEPRECATION_MSG, remove=(3, 12)) diff --git a/asynchat/pyproject.toml b/asynchat/pyproject.toml index 303d188..be651e2 100644 --- a/asynchat/pyproject.toml +++ b/asynchat/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-asynchat" -version = "3.10.14" +version = "3.11.9" description = "Standard library asynchat redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/asynchat/tests/test_asynchat.py b/asynchat/tests/test_asynchat.py index 973ac1f..9d08bd0 100644 --- a/asynchat/tests/test_asynchat.py +++ b/asynchat/tests/test_asynchat.py @@ -3,6 +3,7 @@ from test import support from test.support import socket_helper from test.support import threading_helper +from test.support import warnings_helper import errno import socket @@ -12,11 +13,11 @@ import unittest import unittest.mock -import warnings -with warnings.catch_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - import asynchat - import asyncore + +asynchat = warnings_helper.import_deprecated('asynchat') +asyncore = warnings_helper.import_deprecated('asyncore') + +support.requires_working_socket(module=True) HOST = socket_helper.HOST SERVER_QUIT = b'QUIT\n' diff --git a/asyncore/Doc/asyncore.rst b/asyncore/Doc/asyncore.rst index a732fd7..a3a4e90 100644 --- a/asyncore/Doc/asyncore.rst +++ b/asyncore/Doc/asyncore.rst @@ -13,8 +13,8 @@ **Source code:** :source:`Lib/asyncore.py` -.. deprecated:: 3.6 - :mod:`asyncore` will be removed in Python 3.12 +.. deprecated-removed:: 3.6 3.12 + The :mod:`asyncore` module is deprecated (see :pep:`PEP 594 <594#asyncore>` for details). Please use :mod:`asyncio` instead. @@ -28,6 +28,8 @@ This module provides the basic infrastructure for writing asynchronous socket service clients and servers. +.. include:: ../includes/wasm-notavail.rst + There are only two ways to have a program on a single processor do "more than one thing at a time." Multi-threaded programming is the simplest and most popular way to do it, but there is another very different technique, that lets diff --git a/asyncore/asyncore/__init__.py b/asyncore/asyncore/__init__.py index a360d40..57c8687 100644 --- a/asyncore/asyncore/__init__.py +++ b/asyncore/asyncore/__init__.py @@ -57,11 +57,9 @@ ENOTCONN, ESHUTDOWN, EISCONN, EBADF, ECONNABORTED, EPIPE, EAGAIN, \ errorcode -warnings.warn( - 'The asyncore module is deprecated and will be removed in Python 3.12. ' - 'The recommended replacement is asyncio', - DeprecationWarning, - stacklevel=2) +_DEPRECATION_MSG = ('The {name} module is deprecated and will be removed in ' + 'Python {remove}. The recommended replacement is asyncio') +warnings._deprecated(__name__, _DEPRECATION_MSG, remove=(3, 12)) _DISCONNECTED = frozenset({ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE, diff --git a/asyncore/pyproject.toml b/asyncore/pyproject.toml index 3113110..79dcd95 100644 --- a/asyncore/pyproject.toml +++ b/asyncore/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-asyncore" -version = "3.10.14" +version = "3.11.9" description = "Standard library asyncore redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/asyncore/tests/test_asyncore.py b/asyncore/tests/test_asyncore.py index ecd1e12..98ccd3a 100644 --- a/asyncore/tests/test_asyncore.py +++ b/asyncore/tests/test_asyncore.py @@ -18,10 +18,9 @@ if support.PGO: raise unittest.SkipTest("test is not helpful for PGO") -import warnings -with warnings.catch_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - import asyncore +support.requires_working_socket(module=True) + +asyncore = warnings_helper.import_deprecated('asyncore') HAS_UNIX_SOCKETS = hasattr(socket, 'AF_UNIX') diff --git a/cgi/Doc/cgi.rst b/cgi/Doc/cgi.rst index eeb80ed..295a601 100644 --- a/cgi/Doc/cgi.rst +++ b/cgi/Doc/cgi.rst @@ -15,10 +15,16 @@ single: URL single: Common Gateway Interface -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`cgi` module is deprecated (see :pep:`PEP 594 <594#cgi>` for details and alternatives). + The :class:`FieldStorage` class can typically be replaced with + :func:`urllib.parse.parse_qsl` for ``GET`` and ``HEAD`` requests, + and the :mod:`email.message` module or + `multipart `_ for ``POST`` and ``PUT``. + Most :ref:`utility functions ` have replacements. + -------------- Support module for Common Gateway Interface (CGI) scripts. @@ -26,6 +32,12 @@ Support module for Common Gateway Interface (CGI) scripts. This module defines a number of utilities for use by CGI scripts written in Python. +The global variable ``maxlen`` can be set to an integer indicating the maximum +size of a POST request. POST requests larger than this size will result in a +:exc:`ValueError` being raised during parsing. The default value of this +variable is ``0``, meaning the request size is unlimited. + +.. include:: ../includes/wasm-notavail.rst Introduction ------------ @@ -288,6 +300,12 @@ algorithms implemented in this module in other circumstances. ``sys.stdin``). The *keep_blank_values*, *strict_parsing* and *separator* parameters are passed to :func:`urllib.parse.parse_qs` unchanged. + .. deprecated-removed:: 3.11 3.13 + This function, like the rest of the :mod:`cgi` module, is deprecated. + It can be replaced by calling :func:`urllib.parse.parse_qs` directly + on the desired query string (except for ``multipart/form-data`` input, + which can be handled as described for :func:`parse_multipart`). + .. function:: parse_multipart(fp, pdict, encoding="utf-8", errors="replace", separator="&") @@ -311,12 +329,31 @@ algorithms implemented in this module in other circumstances. .. versionchanged:: 3.10 Added the *separator* parameter. + .. deprecated-removed:: 3.11 3.13 + This function, like the rest of the :mod:`cgi` module, is deprecated. + It can be replaced with the functionality in the :mod:`email` package + (e.g. :class:`email.message.EmailMessage`/:class:`email.message.Message`) + which implements the same MIME RFCs, or with the + `multipart `__ PyPI project. + .. function:: parse_header(string) Parse a MIME header (such as :mailheader:`Content-Type`) into a main value and a dictionary of parameters. + .. deprecated-removed:: 3.11 3.13 + This function, like the rest of the :mod:`cgi` module, is deprecated. + It can be replaced with the functionality in the :mod:`email` package, + which implements the same MIME RFCs. + + For example, with :class:`email.message.EmailMessage`:: + + from email.message import EmailMessage + msg = EmailMessage() + msg['content-type'] = 'application/json; charset="utf8"' + main, params = msg.get_content_type(), msg['content-type'].params + .. function:: test() diff --git a/cgi/cgi/__init__.py b/cgi/cgi/__init__.py index 6cb8cf2..8787567 100755 --- a/cgi/cgi/__init__.py +++ b/cgi/cgi/__init__.py @@ -13,6 +13,11 @@ This module defines a number of utilities for use by CGI scripts written in Python. + +The global variable maxlen can be set to an integer indicating the maximum size +of a POST request. POST requests larger than this size will result in a +ValueError being raised during parsing. The default value of this variable is 0, +meaning the request size is unlimited. """ # History @@ -48,6 +53,9 @@ "print_form", "print_directory", "print_arguments", "print_environ_usage"] + +warnings._deprecated(__name__, remove=(3,13)) + # Logging support # =============== diff --git a/cgi/pyproject.toml b/cgi/pyproject.toml index 3d9517b..b7e4a54 100644 --- a/cgi/pyproject.toml +++ b/cgi/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-cgi" -version = "3.10.14" +version = "3.11.9" description = "Standard library cgi redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/cgi/tests/test_cgi.py b/cgi/tests/test_cgi.py index c1b893d..24486e4 100644 --- a/cgi/tests/test_cgi.py +++ b/cgi/tests/test_cgi.py @@ -1,4 +1,3 @@ -import cgi import os import sys import tempfile @@ -8,6 +7,9 @@ from test import support from test.support import warnings_helper +cgi = warnings_helper.import_deprecated("cgi") + + class HackedSysModule: # The regression test will have real values in sys.argv, which # will completely confuse the test of the cgi module @@ -51,7 +53,7 @@ def do_test(buf, method): return ComparableException(err) parse_strict_test_cases = [ - ("", ValueError("bad query field: ''")), + ("", {}), ("&", ValueError("bad query field: ''")), ("&&", ValueError("bad query field: ''")), # Should the next few really be valid? diff --git a/cgitb/Doc/cgitb.rst b/cgitb/Doc/cgitb.rst index 3b0b106..7f00bcd 100644 --- a/cgitb/Doc/cgitb.rst +++ b/cgitb/Doc/cgitb.rst @@ -16,7 +16,7 @@ single: exceptions; in CGI scripts single: tracebacks; in CGI scripts -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`cgitb` module is deprecated (see :pep:`PEP 594 <594#cgitb>` for details). diff --git a/cgitb/cgitb/__init__.py b/cgitb/cgitb/__init__.py index 17ddda3..8ce0e83 100644 --- a/cgitb/cgitb/__init__.py +++ b/cgitb/cgitb/__init__.py @@ -31,6 +31,11 @@ import time import tokenize import traceback +import warnings +from html import escape as html_escape + +warnings._deprecated(__name__, remove=(3, 13)) + def reset(): """Return a string that resets the CGI and browser to a known state.""" @@ -105,10 +110,16 @@ def html(einfo, context=5): etype = etype.__name__ pyver = 'Python ' + sys.version.split()[0] + ': ' + sys.executable date = time.ctime(time.time()) - head = '' + pydoc.html.heading( - '%s' % - strong(pydoc.html.escape(str(etype))), - '#ffffff', '#6622aa', pyver + '
' + date) + ''' + head = f''' + + + + + +
 
+ 
+{html_escape(str(etype))}
+{pyver}
{date}

A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred.

''' diff --git a/cgitb/pyproject.toml b/cgitb/pyproject.toml index 885e992..cd8af5b 100644 --- a/cgitb/pyproject.toml +++ b/cgitb/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-cgitb" -version = "3.10.14" +version = "3.11.9" description = "Standard library cgitb redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/cgitb/tests/test_cgitb.py b/cgitb/tests/test_cgitb.py index 590ffde..501c7fc 100644 --- a/cgitb/tests/test_cgitb.py +++ b/cgitb/tests/test_cgitb.py @@ -1,8 +1,9 @@ from test.support.os_helper import temp_dir from test.support.script_helper import assert_python_failure +from test.support.warnings_helper import import_deprecated import unittest import sys -import cgitb +cgitb = import_deprecated("cgitb") class TestCgitb(unittest.TestCase): diff --git a/chunk/Doc/chunk.rst b/chunk/Doc/chunk.rst index 5a84c89..3b88e55 100644 --- a/chunk/Doc/chunk.rst +++ b/chunk/Doc/chunk.rst @@ -17,7 +17,7 @@ single: Real Media File Format single: RMFF -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`chunk` module is deprecated (see :pep:`PEP 594 <594#chunk>` for details). diff --git a/chunk/chunk/__init__.py b/chunk/chunk/__init__.py index 870c39f..618781e 100644 --- a/chunk/chunk/__init__.py +++ b/chunk/chunk/__init__.py @@ -48,6 +48,10 @@ default is 1, i.e. aligned. """ +import warnings + +warnings._deprecated(__name__, remove=(3, 13)) + class Chunk: def __init__(self, file, align=True, bigendian=True, inclheader=False): import struct diff --git a/chunk/pyproject.toml b/chunk/pyproject.toml index 10f34eb..20b8628 100644 --- a/chunk/pyproject.toml +++ b/chunk/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-chunk" -version = "3.10.14" +version = "3.11.9" description = "Standard library chunk redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/crypt/Doc/crypt.rst b/crypt/Doc/crypt.rst index e795f10..51f9146 100644 --- a/crypt/Doc/crypt.rst +++ b/crypt/Doc/crypt.rst @@ -16,10 +16,11 @@ single: crypt(3) pair: cipher; DES -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`crypt` module is deprecated (see :pep:`PEP 594 <594#crypt>` for details and alternatives). The :mod:`hashlib` module is a potential replacement for certain use cases. + The `passlib `_ package can replace all use cases of this module. -------------- @@ -36,7 +37,9 @@ the :manpage:`crypt(3)` routine in the running system. Therefore, any extensions available on the current implementation will also be available on this module. -.. availability:: Unix. Not available on VxWorks. +.. availability:: Unix, not VxWorks. + +.. include:: ../includes/wasm-notavail.rst Hashing Methods --------------- diff --git a/crypt/crypt/__init__.py b/crypt/crypt/__init__.py index b296c3e..de4a14a 100644 --- a/crypt/crypt/__init__.py +++ b/crypt/crypt/__init__.py @@ -12,10 +12,14 @@ import errno import string as _string +import warnings from random import SystemRandom as _SystemRandom from collections import namedtuple as _namedtuple +warnings._deprecated(__name__, remove=(3, 13)) + + _saltchars = _string.ascii_letters + _string.digits + './' _sr = _SystemRandom() diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index 8a2332c..2b74691 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-crypt" -version = "3.10.14" +version = "3.11.9" description = "Standard library crypt redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/crypt/tests/test_crypt.py b/crypt/tests/test_crypt.py index 877c575..b2a5ce6 100644 --- a/crypt/tests/test_crypt.py +++ b/crypt/tests/test_crypt.py @@ -1,12 +1,12 @@ import sys import unittest -from test.support import check_sanitizer +from test.support import check_sanitizer, warnings_helper try: if check_sanitizer(address=True, memory=True): raise unittest.SkipTest("The crypt module SEGFAULTs on ASAN/MSAN builds") - import crypt + crypt = warnings_helper.import_deprecated("crypt") IMPORT_ERROR = None except ImportError as ex: if sys.platform != 'win32': diff --git a/imghdr/Doc/imghdr.rst b/imghdr/Doc/imghdr.rst index c17bf89..318fe65 100644 --- a/imghdr/Doc/imghdr.rst +++ b/imghdr/Doc/imghdr.rst @@ -7,7 +7,7 @@ **Source code:** :source:`Lib/imghdr.py` -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`imghdr` module is deprecated (see :pep:`PEP 594 <594#imghdr>` for details and alternatives). diff --git a/imghdr/imghdr/__init__.py b/imghdr/imghdr/__init__.py index 6e01fd8..6a372e6 100644 --- a/imghdr/imghdr/__init__.py +++ b/imghdr/imghdr/__init__.py @@ -1,9 +1,14 @@ """Recognize image file formats based on their first few bytes.""" from os import PathLike +import warnings __all__ = ["what"] + +warnings._deprecated(__name__, remove=(3, 13)) + + #-------------------------# # Recognize image headers # #-------------------------# @@ -35,9 +40,11 @@ def what(file, h=None): tests = [] def test_jpeg(h, f): - """JPEG data in JFIF or Exif format""" + """JPEG data with JFIF or Exif markers; and raw JPEG""" if h[6:10] in (b'JFIF', b'Exif'): return 'jpeg' + elif h[:4] == b'\xff\xd8\xff\xdb': + return 'jpeg' tests.append(test_jpeg) diff --git a/imghdr/pyproject.toml b/imghdr/pyproject.toml index be533a3..f4e25ab 100644 --- a/imghdr/pyproject.toml +++ b/imghdr/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-imghdr" -version = "3.10.14" +version = "3.11.9" description = "Standard library imghdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/imghdr/tests/test_imghdr.py b/imghdr/tests/test_imghdr.py index b2d1fc8..208c8ee 100644 --- a/imghdr/tests/test_imghdr.py +++ b/imghdr/tests/test_imghdr.py @@ -1,12 +1,13 @@ -import imghdr import io import os import pathlib import unittest import warnings -from test.support import findfile +from test.support import findfile, warnings_helper from test.support.os_helper import TESTFN, unlink +imghdr = warnings_helper.import_deprecated("imghdr") + TEST_FILES = ( ('python.png', 'png'), @@ -16,6 +17,7 @@ ('python.pgm', 'pgm'), ('python.pbm', 'pbm'), ('python.jpg', 'jpeg'), + ('python-raw.jpg', 'jpeg'), # raw JPEG without JFIF/EXIF markers ('python.ras', 'rast'), ('python.sgi', 'rgb'), ('python.tiff', 'tiff'), diff --git a/mailcap/Doc/mailcap.rst b/mailcap/Doc/mailcap.rst index 5a433d9..bfaedb4 100644 --- a/mailcap/Doc/mailcap.rst +++ b/mailcap/Doc/mailcap.rst @@ -7,7 +7,7 @@ **Source code:** :source:`Lib/mailcap.py` -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`mailcap` module is deprecated (see :pep:`PEP 594 <594#mailcap>` for details). The :mod:`mimetypes` module provides an alternative. @@ -60,7 +60,7 @@ standard. However, mailcap files are supported on most Unix systems. use) to determine whether or not the mailcap line applies. :func:`findmatch` will automatically check such conditions and skip the entry if the check fails. - .. versionchanged:: 3.10.8 + .. versionchanged:: 3.11 To prevent security issues with shell metacharacters (symbols that have special effects in a shell command line), ``findmatch`` will refuse diff --git a/mailcap/mailcap/__init__.py b/mailcap/mailcap/__init__.py index 444c640..7278ea7 100644 --- a/mailcap/mailcap/__init__.py +++ b/mailcap/mailcap/__init__.py @@ -7,6 +7,12 @@ __all__ = ["getcaps","findmatch"] +_DEPRECATION_MSG = ('The {name} module is deprecated and will be removed in ' + 'Python {remove}. See the mimetypes module for an ' + 'alternative.') +warnings._deprecated(__name__, _DEPRECATION_MSG, remove=(3, 13)) + + def lineno_sort_key(entry): # Sort in ascending order, with unspecified entries at the end if 'lineno' in entry: diff --git a/mailcap/pyproject.toml b/mailcap/pyproject.toml index 27e684b..d90b16e 100644 --- a/mailcap/pyproject.toml +++ b/mailcap/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-mailcap" -version = "3.10.14" +version = "3.11.9" description = "Standard library mailcap redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/mailcap/tests/test_mailcap.py b/mailcap/tests/test_mailcap.py index 32f07ab..e80e340 100644 --- a/mailcap/tests/test_mailcap.py +++ b/mailcap/tests/test_mailcap.py @@ -1,10 +1,15 @@ -import mailcap -import os import copy +import os +import sys import test.support -from test.support import os_helper import unittest -import sys +import warnings +from test.support import os_helper +from test.support import warnings_helper + + +mailcap = warnings_helper.import_deprecated('mailcap') + # Location of mailcap file MAILCAPFILE = test.support.findfile("mailcap.txt") @@ -123,7 +128,6 @@ def test_subst(self): (["", "audio/*", "foo.txt"], ""), (["echo foo", "audio/*", "foo.txt"], "echo foo"), (["echo %s", "audio/*", "foo.txt"], "echo foo.txt"), - (["echo %t", "audio/*", "foo.txt"], None), (["echo %t", "audio/wav", "foo.txt"], "echo audio/wav"), (["echo \\%t", "audio/*", "foo.txt"], "echo %t"), (["echo foo", "audio/*", "foo.txt", plist], "echo foo"), @@ -206,9 +210,6 @@ def test_findmatch(self): ([c, "audio/basic"], {"key": "description", "filename": fname}, ('"An audio fragment"', audio_basic_entry)), - ([c, "audio/*"], - {"filename": fname}, - (None, None)), ([c, "audio/wav"], {"filename": fname}, ("/usr/local/bin/showaudio audio/wav", audio_entry)), @@ -220,6 +221,10 @@ def test_findmatch(self): @unittest.skipUnless(os.name == "posix", "Requires 'test' command on system") @unittest.skipIf(sys.platform == "vxworks", "'test' command is not supported on VxWorks") + @unittest.skipUnless( + test.support.has_subprocess_support, + "'test' command needs process support." + ) def test_test(self): # findmatch() will automatically check any "test" conditions and skip # the entry if the check fails. @@ -237,6 +242,30 @@ def test_test(self): ] self._run_cases(cases) + def test_unsafe_mailcap_input(self): + with self.assertWarnsRegex(mailcap.UnsafeMailcapInput, + 'Refusing to substitute parameter.*' + 'into a shell command'): + unsafe_param = mailcap.subst("echo %{total}", + "audio/wav", + "foo.txt", + ["total=*"]) + self.assertEqual(unsafe_param, None) + + with self.assertWarnsRegex(mailcap.UnsafeMailcapInput, + 'Refusing to substitute MIME type' + '.*into a shell'): + unsafe_mimetype = mailcap.subst("echo %t", "audio/*", "foo.txt") + self.assertEqual(unsafe_mimetype, None) + + with self.assertWarnsRegex(mailcap.UnsafeMailcapInput, + 'Refusing to use mailcap with filename.*' + 'Use a safe temporary filename.'): + unsafe_filename = mailcap.findmatch(MAILCAPDICT, + "audio/wav", + filename="foo*.txt") + self.assertEqual(unsafe_filename, (None, None)) + def _run_cases(self, cases): for c in cases: self.assertEqual(mailcap.findmatch(*c[0], **c[1]), c[2]) diff --git a/nntplib/Doc/nntplib.rst b/nntplib/Doc/nntplib.rst index 2a996e4..a36c8a5 100644 --- a/nntplib/Doc/nntplib.rst +++ b/nntplib/Doc/nntplib.rst @@ -21,6 +21,8 @@ the Network News Transfer Protocol. It can be used to implement a news reader or poster, or automated news processors. It is compatible with :rfc:`3977` as well as the older :rfc:`977` and :rfc:`2980`. +.. include:: ../includes/wasm-notavail.rst + Here are two small examples of how it can be used. To list some statistics about a newsgroup and print the subjects of the last 10 articles:: diff --git a/nntplib/nntplib/__init__.py b/nntplib/nntplib/__init__.py index f6e746e..dddea05 100644 --- a/nntplib/nntplib/__init__.py +++ b/nntplib/nntplib/__init__.py @@ -68,6 +68,7 @@ import collections import datetime import sys +import warnings try: import ssl @@ -85,6 +86,8 @@ "decode_header", ] +warnings._deprecated(__name__, remove=(3, 13)) + # maximal line length when calling readline(). This is to prevent # reading arbitrary length lines. RFC 3977 limits NNTP line length to # 512 characters, including CRLF. We have selected 2048 just to be on diff --git a/nntplib/pyproject.toml b/nntplib/pyproject.toml index 0a17b7c..3a67875 100644 --- a/nntplib/pyproject.toml +++ b/nntplib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-nntplib" -version = "3.10.14" +version = "3.11.9" description = "Standard library nntplib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/nntplib/tests/keycert3.pem b/nntplib/tests/certdata/keycert3.pem similarity index 100% rename from nntplib/tests/keycert3.pem rename to nntplib/tests/certdata/keycert3.pem diff --git a/nntplib/tests/test_nntplib.py b/nntplib/tests/test_nntplib.py index 4f05921..30ae557 100644 --- a/nntplib/tests/test_nntplib.py +++ b/nntplib/tests/test_nntplib.py @@ -5,13 +5,13 @@ import unittest import functools import contextlib -import nntplib import os.path import re import threading from test import support -from test.support import socket_helper +from test.support import socket_helper, warnings_helper +nntplib = warnings_helper.import_deprecated("nntplib") from nntplib import NNTP, GroupInfo from unittest.mock import patch try: @@ -20,7 +20,7 @@ ssl = None -certfile = os.path.join(os.path.dirname(__file__), 'keycert3.pem') +certfile = os.path.join(os.path.dirname(__file__), 'certdata', 'keycert3.pem') if ssl is not None: SSLError = ssl.SSLError @@ -1593,8 +1593,7 @@ def setUp(self): self.background.start() self.addCleanup(self.background.join) - self.nntp = NNTP(socket_helper.HOST, port, usenetrc=False).__enter__() - self.addCleanup(self.nntp.__exit__, None, None, None) + self.nntp = self.enterContext(NNTP(socket_helper.HOST, port, usenetrc=False)) def run_server(self, sock): # Could be generalized to handle more commands in separate methods diff --git a/pipes/Doc/pipes.rst b/pipes/Doc/pipes.rst index 1c5bb8b..471ae0d 100644 --- a/pipes/Doc/pipes.rst +++ b/pipes/Doc/pipes.rst @@ -10,7 +10,7 @@ **Source code:** :source:`Lib/pipes.py` -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`pipes` module is deprecated (see :pep:`PEP 594 <594#pipes>` for details). Please use the :mod:`subprocess` module instead. @@ -23,7 +23,7 @@ The :mod:`pipes` module defines a class to abstract the concept of a *pipeline* Because the module uses :program:`/bin/sh` command lines, a POSIX or compatible shell for :func:`os.system` and :func:`os.popen` is required. -.. availability:: Unix. Not available on VxWorks. +.. availability:: Unix, not VxWorks. The :mod:`pipes` module defines the following class: diff --git a/pipes/pipes/__init__.py b/pipes/pipes/__init__.py index 8cc74b0..61d63b4 100644 --- a/pipes/pipes/__init__.py +++ b/pipes/pipes/__init__.py @@ -60,10 +60,13 @@ import re import os import tempfile +import warnings # we import the quote function rather than the module for backward compat # (quote used to be an undocumented but used function in pipes) from shlex import quote +warnings._deprecated(__name__, remove=(3, 13)) + __all__ = ["Template"] # Conversion step kinds diff --git a/pipes/pyproject.toml b/pipes/pyproject.toml index d4c9a90..77f81e2 100644 --- a/pipes/pyproject.toml +++ b/pipes/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-pipes" -version = "3.10.14" +version = "3.11.9" description = "Standard library pipes redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/pipes/tests/test_pipes.py b/pipes/tests/test_pipes.py index 6335e7c..09e2115 100644 --- a/pipes/tests/test_pipes.py +++ b/pipes/tests/test_pipes.py @@ -1,10 +1,12 @@ -import pipes import os import string import unittest import shutil from test.support import reap_children, unix_shell from test.support.os_helper import TESTFN, unlink +from test.support.warnings_helper import import_deprecated + +pipes = import_deprecated("pipes") if os.name != 'posix': diff --git a/scripts/update.py b/scripts/update.py index 96043e2..d1e4103 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -30,7 +30,8 @@ ADDITIONAL_RESOURCES = { "nntplib": [ - ("Lib/test/keycert3.pem", "tests/"), + # ("Lib/test/keycert3.pem", "tests/"), # 3.10 + ("Lib/test/certdata/keycert3.pem", "tests/certdata/"), # 3.11 ], } @@ -42,7 +43,7 @@ "3.9": "3.9.19", "3.10": "3.10.14", "3.11": "3.11.9", - "3.12": "3.12.3", + "3.12": "3.12.2", } @@ -120,6 +121,8 @@ def update(name, version): shutil.copy(f"{CPYTHON_SRC}/Doc/library/{name}.rst", f"{name}/Doc/{name}.rst") for src, dst in ADDITIONAL_RESOURCES.get(name, []): + if dst.endswith("/"): + os.makedirs(f"{name}/{dst}", exist_ok=True) shutil.copy(f"{CPYTHON_SRC}/{src}", f"{name}/{dst}") except Exception: remove_package(name) diff --git a/smtpd/Doc/smtpd.rst b/smtpd/Doc/smtpd.rst index ac48e1a..ac0c9ae 100644 --- a/smtpd/Doc/smtpd.rst +++ b/smtpd/Doc/smtpd.rst @@ -14,8 +14,8 @@ This module offers several classes to implement SMTP (email) servers. -.. deprecated:: 3.6 - :mod:`smtpd` will be removed in Python 3.12 +.. deprecated-removed:: 3.6 3.12 + The :mod:`smtpd` module is deprecated (see :pep:`PEP 594 <594#smtpd>` for details). The `aiosmtpd `_ package is a recommended replacement for this module. It is based on :mod:`asyncio` and provides a @@ -31,6 +31,7 @@ interaction behaviour with SMTP clients. The code supports :RFC:`5321`, plus the :rfc:`1870` SIZE and :rfc:`6531` SMTPUTF8 extensions. +.. include:: ../includes/wasm-notavail.rst SMTPServer Objects ------------------ @@ -144,24 +145,6 @@ PureProxy Objects chance to make you into an open relay, so please be careful. -MailmanProxy Objects --------------------- - - -.. class:: MailmanProxy(localaddr, remoteaddr) - - .. deprecated-removed:: 3.9 3.11 - - :class:`MailmanProxy` is deprecated, it depends on a ``Mailman`` - module which no longer exists and therefore is already broken. - - - Create a new pure proxy server. Arguments are as per :class:`SMTPServer`. - Everything will be relayed to *remoteaddr*, unless local mailman configurations - knows about an address, in which case it will be handled via mailman. Note that - running this has a good chance to make you into an open relay, so please be - careful. - SMTPChannel Objects ------------------- diff --git a/smtpd/pyproject.toml b/smtpd/pyproject.toml index 01ea48a..0f34bca 100644 --- a/smtpd/pyproject.toml +++ b/smtpd/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-smtpd" -version = "3.10.14" +version = "3.11.9" description = "Standard library smtpd redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/smtpd/smtpd/__init__.py b/smtpd/smtpd/__init__.py index 963e0a7..b23579f 100755 --- a/smtpd/smtpd/__init__.py +++ b/smtpd/smtpd/__init__.py @@ -60,13 +60,6 @@ # SMTP errors from the backend server at all. This should be fixed # (contributions are welcome!). # -# MailmanProxy - An experimental hack to work with GNU Mailman -# . Using this server as your real incoming smtpd, your -# mailhost will automatically recognize and accept mail destined to Mailman -# lists when those lists are created. Every message not destined for a list -# gets forwarded to a real backend smtpd, as with PureProxy. Again, errors -# are not handled correctly yet. -# # # Author: Barry Warsaw # @@ -84,20 +77,18 @@ import time import socket import collections -from warnings import warn +from warnings import _deprecated, warn from email._header_value_parser import get_addr_spec, get_angle_addr __all__ = [ "SMTPChannel", "SMTPServer", "DebuggingServer", "PureProxy", - "MailmanProxy", ] -warn( - 'The smtpd module is deprecated and unmaintained and will be removed ' - 'in Python 3.12. Please see aiosmtpd ' - '(https://aiosmtpd.readthedocs.io/) for the recommended replacement.', - DeprecationWarning, - stacklevel=2) +_DEPRECATION_MSG = ('The {name} module is deprecated and unmaintained and will ' + 'be removed in Python {remove}. Please see aiosmtpd ' + '(https://aiosmtpd.readthedocs.io/) for the recommended ' + 'replacement.') +_deprecated(__name__, _DEPRECATION_MSG, remove=(3, 12)) # These are imported after the above warning so that users get the correct @@ -789,91 +780,6 @@ def _deliver(self, mailfrom, rcpttos, data): return refused -class MailmanProxy(PureProxy): - def __init__(self, *args, **kwargs): - warn('MailmanProxy is deprecated and will be removed ' - 'in future', DeprecationWarning, 2) - if 'enable_SMTPUTF8' in kwargs and kwargs['enable_SMTPUTF8']: - raise ValueError("MailmanProxy does not support SMTPUTF8.") - super(PureProxy, self).__init__(*args, **kwargs) - - def process_message(self, peer, mailfrom, rcpttos, data): - from io import StringIO - from Mailman import Utils - from Mailman import Message - from Mailman import MailList - # If the message is to a Mailman mailing list, then we'll invoke the - # Mailman script directly, without going through the real smtpd. - # Otherwise we'll forward it to the local proxy for disposition. - listnames = [] - for rcpt in rcpttos: - local = rcpt.lower().split('@')[0] - # We allow the following variations on the theme - # listname - # listname-admin - # listname-owner - # listname-request - # listname-join - # listname-leave - parts = local.split('-') - if len(parts) > 2: - continue - listname = parts[0] - if len(parts) == 2: - command = parts[1] - else: - command = '' - if not Utils.list_exists(listname) or command not in ( - '', 'admin', 'owner', 'request', 'join', 'leave'): - continue - listnames.append((rcpt, listname, command)) - # Remove all list recipients from rcpttos and forward what we're not - # going to take care of ourselves. Linear removal should be fine - # since we don't expect a large number of recipients. - for rcpt, listname, command in listnames: - rcpttos.remove(rcpt) - # If there's any non-list destined recipients left, - print('forwarding recips:', ' '.join(rcpttos), file=DEBUGSTREAM) - if rcpttos: - refused = self._deliver(mailfrom, rcpttos, data) - # TBD: what to do with refused addresses? - print('we got refusals:', refused, file=DEBUGSTREAM) - # Now deliver directly to the list commands - mlists = {} - s = StringIO(data) - msg = Message.Message(s) - # These headers are required for the proper execution of Mailman. All - # MTAs in existence seem to add these if the original message doesn't - # have them. - if not msg.get('from'): - msg['From'] = mailfrom - if not msg.get('date'): - msg['Date'] = time.ctime(time.time()) - for rcpt, listname, command in listnames: - print('sending message to', rcpt, file=DEBUGSTREAM) - mlist = mlists.get(listname) - if not mlist: - mlist = MailList.MailList(listname, lock=0) - mlists[listname] = mlist - # dispatch on the type of command - if command == '': - # post - msg.Enqueue(mlist, tolist=1) - elif command == 'admin': - msg.Enqueue(mlist, toadmin=1) - elif command == 'owner': - msg.Enqueue(mlist, toowner=1) - elif command == 'request': - msg.Enqueue(mlist, torequest=1) - elif command in ('join', 'leave'): - # TBD: this is a hack! - if command == 'join': - msg['Subject'] = 'subscribe' - else: - msg['Subject'] = 'unsubscribe' - msg.Enqueue(mlist, torequest=1) - - class Options: setuid = True classname = 'PureProxy' diff --git a/smtpd/tests/test_smtpd.py b/smtpd/tests/test_smtpd.py index d2e150d..39ff879 100644 --- a/smtpd/tests/test_smtpd.py +++ b/smtpd/tests/test_smtpd.py @@ -6,11 +6,12 @@ import socket import io -import warnings -with warnings.catch_warnings(): - warnings.simplefilter('ignore', DeprecationWarning) - import smtpd - import asyncore + +smtpd = warnings_helper.import_deprecated('smtpd') +asyncore = warnings_helper.import_deprecated('asyncore') + +if not socket_helper.has_gethostname: + raise unittest.SkipTest("test requires gethostname()") class DummyServer(smtpd.SMTPServer): diff --git a/sndhdr/Doc/sndhdr.rst b/sndhdr/Doc/sndhdr.rst index 3ca36f2..fa9323e 100644 --- a/sndhdr/Doc/sndhdr.rst +++ b/sndhdr/Doc/sndhdr.rst @@ -14,7 +14,7 @@ single: A-LAW single: u-LAW -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`sndhdr` module is deprecated (see :pep:`PEP 594 <594#sndhdr>` for details and alternatives). @@ -54,3 +54,51 @@ be the sample size in bits or ``'A'`` for A-LAW or ``'U'`` for u-LAW. .. versionchanged:: 3.5 Result changed from a tuple to a namedtuple. +The following sound header types are recognized, as listed below with the return value +from :func:`whathdr`: and :func:`what`: + ++------------+------------------------------------+ +| Value | Sound header format | ++============+====================================+ +| ``'aifc'`` | Compressed Audio Interchange Files | ++------------+------------------------------------+ +| ``'aiff'`` | Audio Interchange Files | ++------------+------------------------------------+ +| ``'au'`` | Au Files | ++------------+------------------------------------+ +| ``'hcom'`` | HCOM Files | ++------------+------------------------------------+ +| ``'sndt'`` | Sndtool Sound Files | ++------------+------------------------------------+ +| ``'voc'`` | Creative Labs Audio Files | ++------------+------------------------------------+ +| ``'wav'`` | Waveform Audio File Format Files | ++------------+------------------------------------+ +| ``'8svx'`` | 8-Bit Sampled Voice Files | ++------------+------------------------------------+ +| ``'sb'`` | Signed Byte Audio Data Files | ++------------+------------------------------------+ +| ``'ub'`` | UB Files | ++------------+------------------------------------+ +| ``'ul'`` | uLAW Audio Files | ++------------+------------------------------------+ + +.. data:: tests + + A list of functions performing the individual tests. Each function takes two + arguments: the byte-stream and an open file-like object. When :func:`what` is + called with a byte-stream, the file-like object will be ``None``. + + The test function should return a string describing the image type if the test + succeeded, or ``None`` if it failed. + +Example: + +.. code-block:: pycon + + >>> import sndhdr + >>> imghdr.what('bass.wav') + 'wav' + >>> imghdr.whathdr('bass.wav') + 'wav' + diff --git a/sndhdr/pyproject.toml b/sndhdr/pyproject.toml index 508abb8..65f6096 100644 --- a/sndhdr/pyproject.toml +++ b/sndhdr/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-sndhdr" -version = "3.10.14" +version = "3.11.9" description = "Standard library sndhdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/sndhdr/sndhdr/__init__.py b/sndhdr/sndhdr/__init__.py index 96595c6..45def9a 100644 --- a/sndhdr/sndhdr/__init__.py +++ b/sndhdr/sndhdr/__init__.py @@ -27,6 +27,10 @@ explicitly given directories. """ +import warnings + +warnings._deprecated(__name__, remove=(3, 13)) + # The file structure is top-down except that the test program and its # subroutine come last. @@ -73,7 +77,10 @@ def whathdr(filename): tests = [] def test_aifc(h, f): - import aifc + """AIFC and AIFF files""" + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import aifc if not h.startswith(b'FORM'): return None if h[8:12] == b'AIFC': @@ -94,6 +101,7 @@ def test_aifc(h, f): def test_au(h, f): + """AU and SND files""" if h.startswith(b'.snd'): func = get_long_be elif h[:4] in (b'\0ds.', b'dns.'): @@ -127,6 +135,7 @@ def test_au(h, f): def test_hcom(h, f): + """HCOM file""" if h[65:69] != b'FSSD' or h[128:132] != b'HCOM': return None divisor = get_long_be(h[144:148]) @@ -140,6 +149,7 @@ def test_hcom(h, f): def test_voc(h, f): + """VOC file""" if not h.startswith(b'Creative Voice File\032'): return None sbseek = get_short_le(h[20:22]) @@ -154,6 +164,7 @@ def test_voc(h, f): def test_wav(h, f): + """WAV file""" import wave # 'RIFF' 'WAVE' 'fmt ' if not h.startswith(b'RIFF') or h[8:12] != b'WAVE' or h[12:16] != b'fmt ': @@ -170,6 +181,7 @@ def test_wav(h, f): def test_8svx(h, f): + """8SVX file""" if not h.startswith(b'FORM') or h[8:12] != b'8SVX': return None # Should decode it to get #channels -- assume always 1 @@ -179,6 +191,7 @@ def test_8svx(h, f): def test_sndt(h, f): + """SNDT file""" if h.startswith(b'SOUND'): nsamples = get_long_le(h[8:12]) rate = get_short_le(h[20:22]) @@ -188,6 +201,7 @@ def test_sndt(h, f): def test_sndr(h, f): + """SNDR file""" if h.startswith(b'\0\0'): rate = get_short_le(h[2:4]) if 4000 <= rate <= 25000: diff --git a/sndhdr/tests/test_sndhdr.py b/sndhdr/tests/test_sndhdr.py index 426417c..4d97437 100644 --- a/sndhdr/tests/test_sndhdr.py +++ b/sndhdr/tests/test_sndhdr.py @@ -1,7 +1,10 @@ -import sndhdr import pickle import unittest from test.support import findfile +from test.support import warnings_helper + +sndhdr = warnings_helper.import_deprecated("sndhdr") + class TestFormats(unittest.TestCase): def test_data(self): diff --git a/sunau/Doc/sunau.rst b/sunau/Doc/sunau.rst index b4d996e..c7a38d9 100644 --- a/sunau/Doc/sunau.rst +++ b/sunau/Doc/sunau.rst @@ -9,7 +9,7 @@ **Source code:** :source:`Lib/sunau.py` -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`sunau` module is deprecated (see :pep:`PEP 594 <594#sunau>` for details). diff --git a/sunau/pyproject.toml b/sunau/pyproject.toml index f8800d1..9120c1e 100644 --- a/sunau/pyproject.toml +++ b/sunau/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-sunau" -version = "3.10.14" +version = "3.11.9" description = "Standard library sunau redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/sunau/sunau/__init__.py b/sunau/sunau/__init__.py index 79750a9..94c42f1 100644 --- a/sunau/sunau/__init__.py +++ b/sunau/sunau/__init__.py @@ -104,6 +104,9 @@ """ from collections import namedtuple +import warnings + +warnings._deprecated(__name__, remove=(3, 13)) _sunau_params = namedtuple('_sunau_params', @@ -275,7 +278,9 @@ def readframes(self, nframes): data = self._file.read(nframes * self._framesize) self._soundpos += len(data) // self._framesize if self._encoding == AUDIO_FILE_ENCODING_MULAW_8: - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop data = audioop.ulaw2lin(data, self._sampwidth) return data return None # XXX--not implemented yet @@ -421,7 +426,9 @@ def writeframesraw(self, data): data = memoryview(data).cast('B') self._ensure_header_written() if self._comptype == 'ULAW': - import audioop + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import audioop data = audioop.lin2ulaw(data, self._sampwidth) nframes = len(data) // self._framesize self._file.write(data) diff --git a/sunau/tests/test_sunau.py b/sunau/tests/test_sunau.py index 7f1c0a5..40408b0 100644 --- a/sunau/tests/test_sunau.py +++ b/sunau/tests/test_sunau.py @@ -1,10 +1,12 @@ import unittest from test import audiotests -from audioop import byteswap import io import struct import sys -import sunau +from test.support import warnings_helper + +sunau = warnings_helper.import_deprecated("sunau") +audioop = warnings_helper.import_deprecated("audioop") class SunauTest(audiotests.AudioWriteTests, @@ -116,7 +118,7 @@ class SunauULAWTest(SunauTest, unittest.TestCase): E5040CBC 617C0A3C 08BC0A3C 2C7C0B3C 517C0E3C 8A8410FC B6840EBC 457C0A3C \ """) if sys.byteorder != 'big': - frames = byteswap(frames, 2) + frames = audioop.byteswap(frames, 2) class SunauLowLevelTest(unittest.TestCase): diff --git a/telnetlib/Doc/telnetlib.rst b/telnetlib/Doc/telnetlib.rst index 48a927c..5a993dc 100644 --- a/telnetlib/Doc/telnetlib.rst +++ b/telnetlib/Doc/telnetlib.rst @@ -11,7 +11,7 @@ .. index:: single: protocol; Telnet -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`telnetlib` module is deprecated (see :pep:`PEP 594 <594#telnetlib>` for details and alternatives). @@ -30,6 +30,7 @@ SE (Subnegotiation End), NOP (No Operation), DM (Data Mark), BRK (Break), IP (Interrupt process), AO (Abort output), AYT (Are You There), EC (Erase Character), EL (Erase Line), GA (Go Ahead), SB (Subnegotiation Begin). +.. include:: ../includes/wasm-notavail.rst .. class:: Telnet(host=None, port=0[, timeout]) diff --git a/telnetlib/pyproject.toml b/telnetlib/pyproject.toml index 9576b23..64a1bf7 100644 --- a/telnetlib/pyproject.toml +++ b/telnetlib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-telnetlib" -version = "3.10.14" +version = "3.11.9" description = "Standard library telnetlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/telnetlib/telnetlib/__init__.py b/telnetlib/telnetlib/__init__.py index 8ce053e..62d6361 100644 --- a/telnetlib/telnetlib/__init__.py +++ b/telnetlib/telnetlib/__init__.py @@ -37,6 +37,9 @@ import socket import selectors from time import monotonic as _time +import warnings + +warnings._deprecated(__name__, remove=(3, 13)) __all__ = ["Telnet"] @@ -489,7 +492,6 @@ def process_rawq(self): except EOFError: # raised by self.rawq_getchar() self.iacseq = b'' # Reset on EOF self.sb = 0 - pass self.cookedq = self.cookedq + buf[0] self.sbdataq = self.sbdataq + buf[1] diff --git a/telnetlib/tests/test_telnetlib.py b/telnetlib/tests/test_telnetlib.py index 41c4fcd..a9cade2 100644 --- a/telnetlib/tests/test_telnetlib.py +++ b/telnetlib/tests/test_telnetlib.py @@ -1,13 +1,16 @@ import socket import selectors -import telnetlib import threading import contextlib from test import support -from test.support import socket_helper +from test.support import socket_helper, warnings_helper import unittest +support.requires_working_socket(module=True) + +telnetlib = warnings_helper.import_deprecated('telnetlib') + HOST = socket_helper.HOST def server(evt, serv): diff --git a/uu/Doc/uu.rst b/uu/Doc/uu.rst index 026ec41..83c4aec 100644 --- a/uu/Doc/uu.rst +++ b/uu/Doc/uu.rst @@ -9,7 +9,7 @@ **Source code:** :source:`Lib/uu.py` -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`uu` module is deprecated (see :pep:`PEP 594 <594#uu-and-the-uu-encoding>` for details). :mod:`base64` is a modern alternative. diff --git a/uu/pyproject.toml b/uu/pyproject.toml index 356c9d3..58195d8 100644 --- a/uu/pyproject.toml +++ b/uu/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-uu" -version = "3.10.14" +version = "3.11.9" description = "Standard library uu redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/uu/tests/test_uu.py b/uu/tests/test_uu.py index 8cc1c07..a189d6b 100644 --- a/uu/tests/test_uu.py +++ b/uu/tests/test_uu.py @@ -4,12 +4,13 @@ """ import unittest -from test.support import os_helper +from test.support import os_helper, warnings_helper + +uu = warnings_helper.import_deprecated("uu") import os import stat import sys -import uu import io plaintext = b"The symbols on top of your keyboard are !@#$%^&*()_+|~\n" @@ -73,6 +74,7 @@ def test_encode(self): with self.assertRaises(TypeError): uu.encode(inp, out, "t1", 0o644, True) + @os_helper.skip_unless_working_chmod def test_decode(self): for backtick in True, False: inp = io.BytesIO(encodedtextwrapped(0o666, "t1", backtick=backtick)) @@ -226,6 +228,8 @@ def test_encode(self): s = fout.read() self.assertEqual(s, encodedtextwrapped(0o644, self.tmpin)) + # decode() calls chmod() + @os_helper.skip_unless_working_chmod def test_decode(self): with open(self.tmpin, 'wb') as f: f.write(encodedtextwrapped(0o644, self.tmpout)) @@ -238,6 +242,7 @@ def test_decode(self): self.assertEqual(s, plaintext) # XXX is there an xp way to verify the mode? + @os_helper.skip_unless_working_chmod def test_decode_filename(self): with open(self.tmpin, 'wb') as f: f.write(encodedtextwrapped(0o644, self.tmpout)) @@ -248,6 +253,7 @@ def test_decode_filename(self): s = f.read() self.assertEqual(s, plaintext) + @os_helper.skip_unless_working_chmod def test_decodetwice(self): # Verify that decode() will refuse to overwrite an existing file with open(self.tmpin, 'wb') as f: @@ -258,6 +264,7 @@ def test_decodetwice(self): with open(self.tmpin, 'rb') as f: self.assertRaises(uu.Error, uu.decode, f) + @os_helper.skip_unless_working_chmod def test_decode_mode(self): # Verify that decode() will set the given mode for the out_file expected_mode = 0o444 diff --git a/uu/uu/__init__.py b/uu/uu/__init__.py index 9fe252a..26bb59a 100644 --- a/uu/uu/__init__.py +++ b/uu/uu/__init__.py @@ -33,6 +33,9 @@ import binascii import os import sys +import warnings + +warnings._deprecated(__name__, remove=(3, 13)) __all__ = ["Error", "encode", "decode"] diff --git a/xdrlib/Doc/xdrlib.rst b/xdrlib/Doc/xdrlib.rst index a3124a9..39e7557 100644 --- a/xdrlib/Doc/xdrlib.rst +++ b/xdrlib/Doc/xdrlib.rst @@ -11,7 +11,7 @@ single: XDR single: External Data Representation -.. deprecated:: 3.11 +.. deprecated-removed:: 3.11 3.13 The :mod:`xdrlib` module is deprecated (see :pep:`PEP 594 <594#xdrlib>` for details). diff --git a/xdrlib/pyproject.toml b/xdrlib/pyproject.toml index 4292901..8747cbe 100644 --- a/xdrlib/pyproject.toml +++ b/xdrlib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-xdrlib" -version = "3.10.14" +version = "3.11.9" description = "Standard library xdrlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/xdrlib/tests/test_xdrlib.py b/xdrlib/tests/test_xdrlib.py index 3df5f26..226b70a 100644 --- a/xdrlib/tests/test_xdrlib.py +++ b/xdrlib/tests/test_xdrlib.py @@ -1,6 +1,8 @@ import unittest +from test.support import warnings_helper + +xdrlib = warnings_helper.import_deprecated("xdrlib") -import xdrlib class XDRTest(unittest.TestCase): diff --git a/xdrlib/xdrlib/__init__.py b/xdrlib/xdrlib/__init__.py index d6e1aeb..b56ffa5 100644 --- a/xdrlib/xdrlib/__init__.py +++ b/xdrlib/xdrlib/__init__.py @@ -7,6 +7,9 @@ import struct from io import BytesIO from functools import wraps +import warnings + +warnings._deprecated(__name__, remove=(3, 13)) __all__ = ["Error", "Packer", "Unpacker", "ConversionError"] From bb2eb597f3a4cdd5da89bd661c067f8fc684ebc5 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Mon, 22 Apr 2024 04:22:59 +0900 Subject: [PATCH 02/47] 3.12.2 --- aifc/pyproject.toml | 2 +- cgi/pyproject.toml | 2 +- cgitb/cgitb/__init__.py | 2 +- cgitb/pyproject.toml | 2 +- chunk/pyproject.toml | 2 +- crypt/pyproject.toml | 2 +- imghdr/Doc/imghdr.rst | 4 ++-- imghdr/imghdr/__init__.py | 23 ++++++++++++++--------- imghdr/pyproject.toml | 2 +- mailcap/mailcap/__init__.py | 4 +--- mailcap/pyproject.toml | 2 +- mailcap/tests/test_mailcap.py | 1 - nntplib/Doc/nntplib.rst | 17 +++++++++++++++++ nntplib/pyproject.toml | 2 +- pipes/pyproject.toml | 2 +- scripts/run_test.py | 2 +- scripts/update.py | 17 +++++++++++------ sndhdr/pyproject.toml | 2 +- sunau/pyproject.toml | 2 +- sunau/sunau/__init__.py | 4 ++-- telnetlib/pyproject.toml | 2 +- uu/pyproject.toml | 2 +- xdrlib/pyproject.toml | 2 +- xdrlib/xdrlib/__init__.py | 4 +--- 24 files changed, 64 insertions(+), 42 deletions(-) diff --git a/aifc/pyproject.toml b/aifc/pyproject.toml index 9350b03..7d62d3f 100644 --- a/aifc/pyproject.toml +++ b/aifc/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-aifc" -version = "3.11.9" +version = "3.12.2" description = "Standard library aifc redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/cgi/pyproject.toml b/cgi/pyproject.toml index b7e4a54..6e2a356 100644 --- a/cgi/pyproject.toml +++ b/cgi/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-cgi" -version = "3.11.9" +version = "3.12.2" description = "Standard library cgi redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/cgitb/cgitb/__init__.py b/cgitb/cgitb/__init__.py index 8ce0e83..f6b97f2 100644 --- a/cgitb/cgitb/__init__.py +++ b/cgitb/cgitb/__init__.py @@ -74,7 +74,7 @@ def lookup(name, frame, locals): return 'global', frame.f_globals[name] if '__builtins__' in frame.f_globals: builtins = frame.f_globals['__builtins__'] - if type(builtins) is type({}): + if isinstance(builtins, dict): if name in builtins: return 'builtin', builtins[name] else: diff --git a/cgitb/pyproject.toml b/cgitb/pyproject.toml index cd8af5b..a3be026 100644 --- a/cgitb/pyproject.toml +++ b/cgitb/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-cgitb" -version = "3.11.9" +version = "3.12.2" description = "Standard library cgitb redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/chunk/pyproject.toml b/chunk/pyproject.toml index 20b8628..8e3c335 100644 --- a/chunk/pyproject.toml +++ b/chunk/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-chunk" -version = "3.11.9" +version = "3.12.2" description = "Standard library chunk redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index 2b74691..ddac35a 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-crypt" -version = "3.11.9" +version = "3.12.2" description = "Standard library crypt redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/imghdr/Doc/imghdr.rst b/imghdr/Doc/imghdr.rst index 318fe65..630fd70 100644 --- a/imghdr/Doc/imghdr.rst +++ b/imghdr/Doc/imghdr.rst @@ -21,8 +21,8 @@ The :mod:`imghdr` module defines the following function: .. function:: what(file, h=None) - Tests the image data contained in the file named by *file*, and returns a - string describing the image type. If optional *h* is provided, the *file* + Test the image data contained in the file named *file* and return a + string describing the image type. If *h* is provided, the *file* argument is ignored and *h* is assumed to contain the byte stream to test. .. versionchanged:: 3.6 diff --git a/imghdr/imghdr/__init__.py b/imghdr/imghdr/__init__.py index 6a372e6..3386888 100644 --- a/imghdr/imghdr/__init__.py +++ b/imghdr/imghdr/__init__.py @@ -14,6 +14,7 @@ #-------------------------# def what(file, h=None): + """Return the type of image contained in a file or byte stream.""" f = None try: if h is None: @@ -40,7 +41,7 @@ def what(file, h=None): tests = [] def test_jpeg(h, f): - """JPEG data with JFIF or Exif markers; and raw JPEG""" + """Test for JPEG data with JFIF or Exif markers; and raw JPEG.""" if h[6:10] in (b'JFIF', b'Exif'): return 'jpeg' elif h[:4] == b'\xff\xd8\xff\xdb': @@ -49,34 +50,35 @@ def test_jpeg(h, f): tests.append(test_jpeg) def test_png(h, f): + """Verify if the image is a PNG.""" if h.startswith(b'\211PNG\r\n\032\n'): return 'png' tests.append(test_png) def test_gif(h, f): - """GIF ('87 and '89 variants)""" + """Verify if the image is a GIF ('87 or '89 variants).""" if h[:6] in (b'GIF87a', b'GIF89a'): return 'gif' tests.append(test_gif) def test_tiff(h, f): - """TIFF (can be in Motorola or Intel byte order)""" + """Verify if the image is a TIFF (can be in Motorola or Intel byte order).""" if h[:2] in (b'MM', b'II'): return 'tiff' tests.append(test_tiff) def test_rgb(h, f): - """SGI image library""" + """test for the SGI image library.""" if h.startswith(b'\001\332'): return 'rgb' tests.append(test_rgb) def test_pbm(h, f): - """PBM (portable bitmap)""" + """Verify if the image is a PBM (portable bitmap).""" if len(h) >= 3 and \ h[0] == ord(b'P') and h[1] in b'14' and h[2] in b' \t\n\r': return 'pbm' @@ -84,7 +86,7 @@ def test_pbm(h, f): tests.append(test_pbm) def test_pgm(h, f): - """PGM (portable graymap)""" + """Verify if the image is a PGM (portable graymap).""" if len(h) >= 3 and \ h[0] == ord(b'P') and h[1] in b'25' and h[2] in b' \t\n\r': return 'pgm' @@ -92,7 +94,7 @@ def test_pgm(h, f): tests.append(test_pgm) def test_ppm(h, f): - """PPM (portable pixmap)""" + """Verify if the image is a PPM (portable pixmap).""" if len(h) >= 3 and \ h[0] == ord(b'P') and h[1] in b'36' and h[2] in b' \t\n\r': return 'ppm' @@ -100,32 +102,35 @@ def test_ppm(h, f): tests.append(test_ppm) def test_rast(h, f): - """Sun raster file""" + """test for the Sun raster file.""" if h.startswith(b'\x59\xA6\x6A\x95'): return 'rast' tests.append(test_rast) def test_xbm(h, f): - """X bitmap (X10 or X11)""" + """Verify if the image is a X bitmap (X10 or X11).""" if h.startswith(b'#define '): return 'xbm' tests.append(test_xbm) def test_bmp(h, f): + """Verify if the image is a BMP file.""" if h.startswith(b'BM'): return 'bmp' tests.append(test_bmp) def test_webp(h, f): + """Verify if the image is a WebP.""" if h.startswith(b'RIFF') and h[8:12] == b'WEBP': return 'webp' tests.append(test_webp) def test_exr(h, f): + """verify is the image ia a OpenEXR fileOpenEXR.""" if h.startswith(b'\x76\x2f\x31\x01'): return 'exr' diff --git a/imghdr/pyproject.toml b/imghdr/pyproject.toml index f4e25ab..a392b69 100644 --- a/imghdr/pyproject.toml +++ b/imghdr/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-imghdr" -version = "3.11.9" +version = "3.12.2" description = "Standard library imghdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/mailcap/mailcap/__init__.py b/mailcap/mailcap/__init__.py index 7278ea7..2f4656e 100644 --- a/mailcap/mailcap/__init__.py +++ b/mailcap/mailcap/__init__.py @@ -90,9 +90,7 @@ def _readmailcapfile(fp, lineno): the viewing command is stored with the key "view". """ caps = {} - while 1: - line = fp.readline() - if not line: break + while line := fp.readline(): # Ignore comments and blank lines if line[0] == '#' or line.strip() == '': continue diff --git a/mailcap/pyproject.toml b/mailcap/pyproject.toml index d90b16e..5491d68 100644 --- a/mailcap/pyproject.toml +++ b/mailcap/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-mailcap" -version = "3.11.9" +version = "3.12.2" description = "Standard library mailcap redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/mailcap/tests/test_mailcap.py b/mailcap/tests/test_mailcap.py index e80e340..8a94b0c 100644 --- a/mailcap/tests/test_mailcap.py +++ b/mailcap/tests/test_mailcap.py @@ -3,7 +3,6 @@ import sys import test.support import unittest -import warnings from test.support import os_helper from test.support import warnings_helper diff --git a/nntplib/Doc/nntplib.rst b/nntplib/Doc/nntplib.rst index a36c8a5..143e4e0 100644 --- a/nntplib/Doc/nntplib.rst +++ b/nntplib/Doc/nntplib.rst @@ -14,6 +14,23 @@ .. deprecated:: 3.11 The :mod:`nntplib` module is deprecated (see :pep:`594` for details). +.. testsetup:: + + import warnings + with warnings.catch_warnings(): + warnings.simplefilter('ignore', category=DeprecationWarning) + import nntplib + +.. testcleanup:: + + try: + s.quit() + except NameError: + pass + import sys + # Force a warning if any other file imports nntplib + sys.modules.pop('nntplib') + -------------- This module defines the class :class:`NNTP` which implements the client side of diff --git a/nntplib/pyproject.toml b/nntplib/pyproject.toml index 3a67875..390ee18 100644 --- a/nntplib/pyproject.toml +++ b/nntplib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-nntplib" -version = "3.11.9" +version = "3.12.2" description = "Standard library nntplib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/pipes/pyproject.toml b/pipes/pyproject.toml index 77f81e2..8e1d736 100644 --- a/pipes/pyproject.toml +++ b/pipes/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-pipes" -version = "3.11.9" +version = "3.12.2" description = "Standard library pipes redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/scripts/run_test.py b/scripts/run_test.py index 95c17b4..f143b34 100644 --- a/scripts/run_test.py +++ b/scripts/run_test.py @@ -8,7 +8,7 @@ else: names = [name] -for name in ALL_NAMES: +for name in names: if name == "chunk": continue run_test(name, version) diff --git a/scripts/update.py b/scripts/update.py index d1e4103..c4abb1e 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -6,8 +6,8 @@ ALL_NAMES = [ "aifc", - "asynchat", - "asyncore", + # "asynchat", # removed in 3.12 + # "asyncore", # removed in 3.12 "cgi", "cgitb", "chunk", @@ -19,7 +19,7 @@ # "nis", # cmodule # "ossaudiodev", # cmodule "pipes", - "smtpd", + # "smtpd", # removed in 3.12 "sndhdr", # "spwd", # cmodule "sunau", @@ -89,9 +89,9 @@ def update(name, version): if has_py == has_dir: if has_py: - raise ValueError(f"{name} not found in cpython source") - else: raise ValueError(f"both {name} and {name}.py found in cpython source") + else: + raise ValueError(f"neither {name} found in cpython source") update_pyproject(name, version) @@ -185,7 +185,12 @@ def action(module_name, version): if module_name == "ALL": for name in ALL_NAMES: - action(name, version) + try: + action(name, version) + except ValueError as e: + if 'neither' in e.args[0]: + continue + raise else: action(module_name, version) run_test(module_name, version) diff --git a/sndhdr/pyproject.toml b/sndhdr/pyproject.toml index 65f6096..e6f3c3d 100644 --- a/sndhdr/pyproject.toml +++ b/sndhdr/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-sndhdr" -version = "3.11.9" +version = "3.12.2" description = "Standard library sndhdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/sunau/pyproject.toml b/sunau/pyproject.toml index 9120c1e..24b2565 100644 --- a/sunau/pyproject.toml +++ b/sunau/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-sunau" -version = "3.11.9" +version = "3.12.2" description = "Standard library sunau redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/sunau/sunau/__init__.py b/sunau/sunau/__init__.py index 94c42f1..c6caab9 100644 --- a/sunau/sunau/__init__.py +++ b/sunau/sunau/__init__.py @@ -160,7 +160,7 @@ def _write_u32(file, x): class Au_read: def __init__(self, f): - if type(f) == type(''): + if isinstance(f, str): import builtins f = builtins.open(f, 'rb') self._opened = True @@ -312,7 +312,7 @@ def close(self): class Au_write: def __init__(self, f): - if type(f) == type(''): + if isinstance(f, str): import builtins f = builtins.open(f, 'wb') self._opened = True diff --git a/telnetlib/pyproject.toml b/telnetlib/pyproject.toml index 64a1bf7..c4cd5bc 100644 --- a/telnetlib/pyproject.toml +++ b/telnetlib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-telnetlib" -version = "3.11.9" +version = "3.12.2" description = "Standard library telnetlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/uu/pyproject.toml b/uu/pyproject.toml index 58195d8..ffa6a37 100644 --- a/uu/pyproject.toml +++ b/uu/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-uu" -version = "3.11.9" +version = "3.12.2" description = "Standard library uu redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/xdrlib/pyproject.toml b/xdrlib/pyproject.toml index 8747cbe..baf9cdb 100644 --- a/xdrlib/pyproject.toml +++ b/xdrlib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-xdrlib" -version = "3.11.9" +version = "3.12.2" description = "Standard library xdrlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/xdrlib/xdrlib/__init__.py b/xdrlib/xdrlib/__init__.py index b56ffa5..f8c2c18 100644 --- a/xdrlib/xdrlib/__init__.py +++ b/xdrlib/xdrlib/__init__.py @@ -224,9 +224,7 @@ def unpack_string(self): def unpack_list(self, unpack_item): list = [] - while 1: - x = self.unpack_uint() - if x == 0: break + while (x := self.unpack_uint()) != 0: if x != 1: raise ConversionError('0 or 1 expected, got %r' % (x,)) item = unpack_item() From 46e2bdf86202fec1e493afc399254878c87599e7 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Mon, 22 Apr 2024 04:29:12 +0900 Subject: [PATCH 03/47] List of dists --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 301b1ff..0e29d6a 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,25 @@ pip install standard-{name} # Don't forget to add `standard-` prefix! pip install standard-uu # e.g. `uu` can be installed by standard-uu ``` +- [aifc](https://pypi.org/project/standard-aifc/) +- [asynchat](https://pypi.org/project/standard-asynchat/) +- [asyncore](https://pypi.org/project/standard-asyncore/) +- [cgi](https://pypi.org/project/standard-cgi/) +- [cgitb](https://pypi.org/project/standard-cgitb/) +- [chunk](https://pypi.org/project/standard-chunk/) +- [crypt](https://pypi.org/project/standard-crypt/) +- [imghdr](https://pypi.org/project/standard-imghdr/) +- [mailcap](https://pypi.org/project/standard-mailcap/) +- [nntplib](https://pypi.org/project/standard-nntplib/) +- [pipes](https://pypi.org/project/standard-pipes/) +- [smtpd](https://pypi.org/project/standard-smtpd/) +- [sndhdr](https://pypi.org/project/standard-sndhdr/) +- [sunau](https://pypi.org/project/standard-sunau/) +- [telnetlib](https://pypi.org/project/standard-telnetlib/) +- [uu](https://pypi.org/project/standard-uu/) +- [xdrlib](https://pypi.org/project/standard-xdrlib/) + + ## Contribution guideline Please do *NOT* submit any new features or any compatibility work. From 5be77ce1e18156c159bf518bdfb72afc5a7f5bc6 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Mon, 29 Apr 2024 15:05:55 +0900 Subject: [PATCH 04/47] Fix typo --- aifc/pyproject.toml | 2 +- asynchat/pyproject.toml | 2 +- asyncore/pyproject.toml | 2 +- cgi/pyproject.toml | 2 +- cgitb/pyproject.toml | 2 +- chunk/pyproject.toml | 2 +- crypt/pyproject.toml | 2 +- imghdr/pyproject.toml | 2 +- mailcap/pyproject.toml | 2 +- nis/pyproject.toml | 2 +- nntplib/pyproject.toml | 2 +- ossaudiodev/pyproject.toml | 2 +- pipes/pyproject.toml | 2 +- smtpd/pyproject.toml | 2 +- sndhdr/pyproject.toml | 2 +- spwd/pyproject.toml | 2 +- sunau/pyproject.toml | 2 +- telnetlib/pyproject.toml | 2 +- template/pyproject.toml | 2 +- uu/pyproject.toml | 2 +- xdrlib/pyproject.toml | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) diff --git a/aifc/pyproject.toml b/aifc/pyproject.toml index 7d62d3f..bc56653 100644 --- a/aifc/pyproject.toml +++ b/aifc/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library aifc redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/asynchat/pyproject.toml b/asynchat/pyproject.toml index be651e2..d9bf532 100644 --- a/asynchat/pyproject.toml +++ b/asynchat/pyproject.toml @@ -4,7 +4,7 @@ version = "3.11.9" description = "Standard library asynchat redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/asyncore/pyproject.toml b/asyncore/pyproject.toml index 79dcd95..51b8d7f 100644 --- a/asyncore/pyproject.toml +++ b/asyncore/pyproject.toml @@ -4,7 +4,7 @@ version = "3.11.9" description = "Standard library asyncore redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/cgi/pyproject.toml b/cgi/pyproject.toml index 6e2a356..519bd92 100644 --- a/cgi/pyproject.toml +++ b/cgi/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library cgi redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/cgitb/pyproject.toml b/cgitb/pyproject.toml index a3be026..c92ab8c 100644 --- a/cgitb/pyproject.toml +++ b/cgitb/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library cgitb redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/chunk/pyproject.toml b/chunk/pyproject.toml index 8e3c335..cc2a48a 100644 --- a/chunk/pyproject.toml +++ b/chunk/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library chunk redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index ddac35a..5c6b19e 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library crypt redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/imghdr/pyproject.toml b/imghdr/pyproject.toml index a392b69..38c6de1 100644 --- a/imghdr/pyproject.toml +++ b/imghdr/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library imghdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/mailcap/pyproject.toml b/mailcap/pyproject.toml index 5491d68..12b7498 100644 --- a/mailcap/pyproject.toml +++ b/mailcap/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library mailcap redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/nis/pyproject.toml b/nis/pyproject.toml index 65b1269..a53200a 100644 --- a/nis/pyproject.toml +++ b/nis/pyproject.toml @@ -4,7 +4,7 @@ version = "{version}" description = "The removed dead batteries" keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-dead-batteries@youknowone.org" } + { name = "Python Developers", email = "python-dead-batteries@youknowone.org" } ] readme = "README.md" license = {text = "PSF", file = "LICENSE"} diff --git a/nntplib/pyproject.toml b/nntplib/pyproject.toml index 390ee18..e1377e8 100644 --- a/nntplib/pyproject.toml +++ b/nntplib/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library nntplib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/ossaudiodev/pyproject.toml b/ossaudiodev/pyproject.toml index 2fe7332..2dbdbf0 100644 --- a/ossaudiodev/pyproject.toml +++ b/ossaudiodev/pyproject.toml @@ -4,7 +4,7 @@ version = "{version}" description = "The removed dead batteries" keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-dead-batteries@youknowone.org" } + { name = "Python Developers", email = "python-dead-batteries@youknowone.org" } ] readme = "README.md" license = {text = "PSF", file = "LICENSE"} diff --git a/pipes/pyproject.toml b/pipes/pyproject.toml index 8e1d736..3eccaba 100644 --- a/pipes/pyproject.toml +++ b/pipes/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library pipes redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/smtpd/pyproject.toml b/smtpd/pyproject.toml index 0f34bca..70079d8 100644 --- a/smtpd/pyproject.toml +++ b/smtpd/pyproject.toml @@ -4,7 +4,7 @@ version = "3.11.9" description = "Standard library smtpd redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/sndhdr/pyproject.toml b/sndhdr/pyproject.toml index e6f3c3d..bba2b51 100644 --- a/sndhdr/pyproject.toml +++ b/sndhdr/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library sndhdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/spwd/pyproject.toml b/spwd/pyproject.toml index 8e904db..ab78e7f 100644 --- a/spwd/pyproject.toml +++ b/spwd/pyproject.toml @@ -4,7 +4,7 @@ version = "{version}" description = "The removed dead batteries" keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-dead-batteries@youknowone.org" } + { name = "Python Developers", email = "python-dead-batteries@youknowone.org" } ] readme = "README.md" license = {text = "PSF", file = "LICENSE"} diff --git a/sunau/pyproject.toml b/sunau/pyproject.toml index 24b2565..c9da8c7 100644 --- a/sunau/pyproject.toml +++ b/sunau/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library sunau redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/telnetlib/pyproject.toml b/telnetlib/pyproject.toml index c4cd5bc..ab5bedb 100644 --- a/telnetlib/pyproject.toml +++ b/telnetlib/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library telnetlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/template/pyproject.toml b/template/pyproject.toml index 682ac29..65072a7 100644 --- a/template/pyproject.toml +++ b/template/pyproject.toml @@ -4,7 +4,7 @@ version = "{version}" description = "Standard library {name} redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/uu/pyproject.toml b/uu/pyproject.toml index ffa6a37..4cfd2dd 100644 --- a/uu/pyproject.toml +++ b/uu/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library uu redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} diff --git a/xdrlib/pyproject.toml b/xdrlib/pyproject.toml index baf9cdb..8e0f149 100644 --- a/xdrlib/pyproject.toml +++ b/xdrlib/pyproject.toml @@ -4,7 +4,7 @@ version = "3.12.2" description = "Standard library xdrlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ - { name = "Python Devleopers", email = "python-deadlib@youknowone.org" } + { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" license = {name = "PSF", file = "LICENSE"} From 0f418a196c1c2219abf7f557305b80d51a3858a1 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Mon, 29 Apr 2024 15:15:48 +0900 Subject: [PATCH 05/47] Remove cmodules --- nis/LICENSE | 48 -------------------------------------- nis/pyproject.toml | 26 --------------------- ossaudiodev/LICENSE | 48 -------------------------------------- ossaudiodev/pyproject.toml | 26 --------------------- spwd/LICENSE | 48 -------------------------------------- spwd/pyproject.toml | 26 --------------------- 6 files changed, 222 deletions(-) delete mode 100644 nis/LICENSE delete mode 100644 nis/pyproject.toml delete mode 100644 ossaudiodev/LICENSE delete mode 100644 ossaudiodev/pyproject.toml delete mode 100644 spwd/LICENSE delete mode 100644 spwd/pyproject.toml diff --git a/nis/LICENSE b/nis/LICENSE deleted file mode 100644 index 6a0baed..0000000 --- a/nis/LICENSE +++ /dev/null @@ -1,48 +0,0 @@ -Copyright © 2001-2023 Python Software Foundation; All Rights Reserved - -This code originally taken from the Python 3.11.3 distribution -and it is therefore now released under the following Python-style -license: - -1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and - the Individual or Organization ("Licensee") accessing and - otherwise using nntplib software in source or binary form and - its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby - grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, - analyze, test, perform and/or display publicly, prepare derivative works, - distribute, and otherwise use nntplib alone or in any derivative - version, provided, however, that PSF's License Agreement and PSF's notice of - copyright, i.e., "Copyright © 2001-2023 Python Software Foundation; All Rights - Reserved" are retained in nntplib alone or in any derivative version - prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on or - incorporates nntplib or any part thereof, and wants to make the - derivative work available to others as provided herein, then Licensee hereby - agrees to include in any such work a brief summary of the - changes made to nntplib. - -4. PSF is making nntplib available to Licensee on an "AS IS" basis. - PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF - EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR - WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE - USE OF NNTPLIB WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF NNTPLIB - FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF - MODIFYING, DISTRIBUTING, OR OTHERWISE USING NNTPLIB, OR ANY DERIVATIVE - THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material breach of - its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any relationship - of agency, partnership, or joint venture between PSF and Licensee. This License - Agreement does not grant permission to use PSF trademarks or trade name in a - trademark sense to endorse or promote products or services of Licensee, or any - third party. - -8. By copying, installing or otherwise using nntplib, Licensee agrees - to be bound by the terms and conditions of this License Agreement. diff --git a/nis/pyproject.toml b/nis/pyproject.toml deleted file mode 100644 index a53200a..0000000 --- a/nis/pyproject.toml +++ /dev/null @@ -1,26 +0,0 @@ -[project] -name = "nis" -version = "{version}" -description = "The removed dead batteries" -keywords = ["stdlib"] -authors = [ - { name = "Python Developers", email = "python-dead-batteries@youknowone.org" } -] -readme = "README.md" -license = {text = "PSF", file = "LICENSE"} -classifiers = [ - "License :: OSI Approved :: Python Software Foundation License", - "Topic :: Software Development :: Libraries", - "Programming Language :: Python :: 3", -] - -# [tool.setuptools.packages.find] -# include = ["nis.py", "nis"] # package names should match these glob patterns (["*"] by default) -# namespaces = false - -[project.urls] -"Homepage" = "https://github.com/youknowone/python-deadlib" - -[build-system] -requires = ["setuptools>=61.0"] -build-backend = "setuptools.build_meta" diff --git a/ossaudiodev/LICENSE b/ossaudiodev/LICENSE deleted file mode 100644 index 6a0baed..0000000 --- a/ossaudiodev/LICENSE +++ /dev/null @@ -1,48 +0,0 @@ -Copyright © 2001-2023 Python Software Foundation; All Rights Reserved - -This code originally taken from the Python 3.11.3 distribution -and it is therefore now released under the following Python-style -license: - -1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and - the Individual or Organization ("Licensee") accessing and - otherwise using nntplib software in source or binary form and - its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby - grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, - analyze, test, perform and/or display publicly, prepare derivative works, - distribute, and otherwise use nntplib alone or in any derivative - version, provided, however, that PSF's License Agreement and PSF's notice of - copyright, i.e., "Copyright © 2001-2023 Python Software Foundation; All Rights - Reserved" are retained in nntplib alone or in any derivative version - prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on or - incorporates nntplib or any part thereof, and wants to make the - derivative work available to others as provided herein, then Licensee hereby - agrees to include in any such work a brief summary of the - changes made to nntplib. - -4. PSF is making nntplib available to Licensee on an "AS IS" basis. - PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF - EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR - WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE - USE OF NNTPLIB WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF NNTPLIB - FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF - MODIFYING, DISTRIBUTING, OR OTHERWISE USING NNTPLIB, OR ANY DERIVATIVE - THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material breach of - its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any relationship - of agency, partnership, or joint venture between PSF and Licensee. This License - Agreement does not grant permission to use PSF trademarks or trade name in a - trademark sense to endorse or promote products or services of Licensee, or any - third party. - -8. By copying, installing or otherwise using nntplib, Licensee agrees - to be bound by the terms and conditions of this License Agreement. diff --git a/ossaudiodev/pyproject.toml b/ossaudiodev/pyproject.toml deleted file mode 100644 index 2dbdbf0..0000000 --- a/ossaudiodev/pyproject.toml +++ /dev/null @@ -1,26 +0,0 @@ -[project] -name = "ossaudiodev" -version = "{version}" -description = "The removed dead batteries" -keywords = ["stdlib"] -authors = [ - { name = "Python Developers", email = "python-dead-batteries@youknowone.org" } -] -readme = "README.md" -license = {text = "PSF", file = "LICENSE"} -classifiers = [ - "License :: OSI Approved :: Python Software Foundation License", - "Topic :: Software Development :: Libraries", - "Programming Language :: Python :: 3", -] - -# [tool.setuptools.packages.find] -# include = ["ossaudiodev.py", "ossaudiodev"] # package names should match these glob patterns (["*"] by default) -# namespaces = false - -[project.urls] -"Homepage" = "https://github.com/youknowone/python-deadlib" - -[build-system] -requires = ["setuptools>=61.0"] -build-backend = "setuptools.build_meta" diff --git a/spwd/LICENSE b/spwd/LICENSE deleted file mode 100644 index 6a0baed..0000000 --- a/spwd/LICENSE +++ /dev/null @@ -1,48 +0,0 @@ -Copyright © 2001-2023 Python Software Foundation; All Rights Reserved - -This code originally taken from the Python 3.11.3 distribution -and it is therefore now released under the following Python-style -license: - -1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and - the Individual or Organization ("Licensee") accessing and - otherwise using nntplib software in source or binary form and - its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby - grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, - analyze, test, perform and/or display publicly, prepare derivative works, - distribute, and otherwise use nntplib alone or in any derivative - version, provided, however, that PSF's License Agreement and PSF's notice of - copyright, i.e., "Copyright © 2001-2023 Python Software Foundation; All Rights - Reserved" are retained in nntplib alone or in any derivative version - prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on or - incorporates nntplib or any part thereof, and wants to make the - derivative work available to others as provided herein, then Licensee hereby - agrees to include in any such work a brief summary of the - changes made to nntplib. - -4. PSF is making nntplib available to Licensee on an "AS IS" basis. - PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF - EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR - WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE - USE OF NNTPLIB WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF NNTPLIB - FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF - MODIFYING, DISTRIBUTING, OR OTHERWISE USING NNTPLIB, OR ANY DERIVATIVE - THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material breach of - its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any relationship - of agency, partnership, or joint venture between PSF and Licensee. This License - Agreement does not grant permission to use PSF trademarks or trade name in a - trademark sense to endorse or promote products or services of Licensee, or any - third party. - -8. By copying, installing or otherwise using nntplib, Licensee agrees - to be bound by the terms and conditions of this License Agreement. diff --git a/spwd/pyproject.toml b/spwd/pyproject.toml deleted file mode 100644 index ab78e7f..0000000 --- a/spwd/pyproject.toml +++ /dev/null @@ -1,26 +0,0 @@ -[project] -name = "spwd" -version = "{version}" -description = "The removed dead batteries" -keywords = ["stdlib"] -authors = [ - { name = "Python Developers", email = "python-dead-batteries@youknowone.org" } -] -readme = "README.md" -license = {text = "PSF", file = "LICENSE"} -classifiers = [ - "License :: OSI Approved :: Python Software Foundation License", - "Topic :: Software Development :: Libraries", - "Programming Language :: Python :: 3", -] - -# [tool.setuptools.packages.find] -# include = ["spwd.py", "spwd"] # package names should match these glob patterns (["*"] by default) -# namespaces = false - -[project.urls] -"Homepage" = "https://github.com/youknowone/python-deadlib" - -[build-system] -requires = ["setuptools>=61.0"] -build-backend = "setuptools.build_meta" From 68825a988848776f904310027683d7609366f2e2 Mon Sep 17 00:00:00 2001 From: "Jeong, YunWon" <69878+youknowone@users.noreply.github.com> Date: Mon, 29 Apr 2024 15:20:05 +0900 Subject: [PATCH 06/47] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e29d6a..3f510a6 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Python is moving forward! Python finally started to remove dead batteries. For more information, see [PEP 594](https://peps.python.org/pep-0594/). If your project depends on a module that has been removed from the standard, -here is the redistribution of the dead batteries. +here is the redistribution of the dead batteries in pure Python. ```shell pip install standard-{name} # Don't forget to add `standard-` prefix! From e6489cc6b6bcd4d32f22e25e7fa8fdd0367b8d75 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 12 May 2024 11:23:00 +0900 Subject: [PATCH 07/47] Fix single module init/delete --- requirements.txt | 2 ++ scripts/update.py | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..51e16c7 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +build +twine \ No newline at end of file diff --git a/scripts/update.py b/scripts/update.py index c4abb1e..8c3bb12 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -193,5 +193,6 @@ def action(module_name, version): raise else: action(module_name, version) - run_test(module_name, version) - build_package(module_name) + if version not in ["init", "delete"]: + run_test(module_name, version) + build_package(module_name) From f8ccfb9d0c10f0b45f9f5d5c6e507eaf85619fd9 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 12 May 2024 11:23:31 +0900 Subject: [PATCH 08/47] distutils 3.6.15 --- distutils/distutils/README | 13 + distutils/distutils/__init__.py | 13 + distutils/distutils/_msvccompiler.py | 574 ++++++++ distutils/distutils/archive_util.py | 256 ++++ distutils/distutils/bcppcompiler.py | 393 ++++++ distutils/distutils/ccompiler.py | 1115 +++++++++++++++ distutils/distutils/cmd.py | 434 ++++++ distutils/distutils/command/__init__.py | 31 + distutils/distutils/command/bdist.py | 143 ++ distutils/distutils/command/bdist_dumb.py | 123 ++ distutils/distutils/command/bdist_msi.py | 741 ++++++++++ distutils/distutils/command/bdist_rpm.py | 582 ++++++++ distutils/distutils/command/bdist_wininst.py | 364 +++++ distutils/distutils/command/build.py | 157 +++ distutils/distutils/command/build_clib.py | 209 +++ distutils/distutils/command/build_ext.py | 755 ++++++++++ distutils/distutils/command/build_py.py | 416 ++++++ distutils/distutils/command/build_scripts.py | 160 +++ distutils/distutils/command/check.py | 145 ++ distutils/distutils/command/clean.py | 76 + distutils/distutils/command/command_template | 33 + distutils/distutils/command/config.py | 347 +++++ distutils/distutils/command/install.py | 656 +++++++++ distutils/distutils/command/install_data.py | 79 ++ .../distutils/command/install_egg_info.py | 77 + .../distutils/command/install_headers.py | 47 + distutils/distutils/command/install_lib.py | 217 +++ .../distutils/command/install_scripts.py | 60 + distutils/distutils/command/register.py | 304 ++++ distutils/distutils/command/sdist.py | 456 ++++++ distutils/distutils/command/upload.py | 200 +++ .../distutils/command/wininst-10.0-amd64.exe | Bin 0 -> 222208 bytes distutils/distutils/command/wininst-10.0.exe | Bin 0 -> 190976 bytes .../distutils/command/wininst-14.0-amd64.exe | Bin 0 -> 587776 bytes distutils/distutils/command/wininst-14.0.exe | Bin 0 -> 458240 bytes distutils/distutils/command/wininst-6.0.exe | Bin 0 -> 61440 bytes distutils/distutils/command/wininst-7.1.exe | Bin 0 -> 65536 bytes distutils/distutils/command/wininst-8.0.exe | Bin 0 -> 61440 bytes .../distutils/command/wininst-9.0-amd64.exe | Bin 0 -> 224256 bytes distutils/distutils/command/wininst-9.0.exe | Bin 0 -> 196096 bytes distutils/distutils/config.py | 131 ++ distutils/distutils/core.py | 234 ++++ distutils/distutils/cygwinccompiler.py | 405 ++++++ distutils/distutils/debug.py | 5 + distutils/distutils/dep_util.py | 92 ++ distutils/distutils/dir_util.py | 210 +++ distutils/distutils/dist.py | 1236 +++++++++++++++++ distutils/distutils/errors.py | 97 ++ distutils/distutils/extension.py | 240 ++++ distutils/distutils/fancy_getopt.py | 457 ++++++ distutils/distutils/file_util.py | 238 ++++ distutils/distutils/filelist.py | 327 +++++ distutils/distutils/log.py | 77 + distutils/distutils/msvc9compiler.py | 791 +++++++++++ distutils/distutils/msvccompiler.py | 643 +++++++++ distutils/distutils/spawn.py | 192 +++ distutils/distutils/sysconfig.py | 532 +++++++ distutils/distutils/tests/Setup.sample | 67 + distutils/distutils/tests/__init__.py | 36 + distutils/distutils/tests/support.py | 210 +++ .../distutils/tests/test_archive_util.py | 394 ++++++ distutils/distutils/tests/test_bdist.py | 53 + distutils/distutils/tests/test_bdist_dumb.py | 97 ++ distutils/distutils/tests/test_bdist_msi.py | 25 + distutils/distutils/tests/test_bdist_rpm.py | 135 ++ .../distutils/tests/test_bdist_wininst.py | 33 + distutils/distutils/tests/test_build.py | 56 + distutils/distutils/tests/test_build_clib.py | 135 ++ distutils/distutils/tests/test_build_ext.py | 521 +++++++ distutils/distutils/tests/test_build_py.py | 179 +++ .../distutils/tests/test_build_scripts.py | 112 ++ distutils/distutils/tests/test_check.py | 149 ++ distutils/distutils/tests/test_clean.py | 49 + distutils/distutils/tests/test_cmd.py | 126 ++ distutils/distutils/tests/test_config.py | 140 ++ distutils/distutils/tests/test_config_cmd.py | 92 ++ distutils/distutils/tests/test_core.py | 140 ++ .../distutils/tests/test_cygwinccompiler.py | 154 ++ distutils/distutils/tests/test_dep_util.py | 80 ++ distutils/distutils/tests/test_dir_util.py | 139 ++ distutils/distutils/tests/test_dist.py | 456 ++++++ distutils/distutils/tests/test_extension.py | 69 + distutils/distutils/tests/test_file_util.py | 114 ++ distutils/distutils/tests/test_filelist.py | 340 +++++ distutils/distutils/tests/test_install.py | 248 ++++ .../distutils/tests/test_install_data.py | 75 + .../distutils/tests/test_install_headers.py | 39 + distutils/distutils/tests/test_install_lib.py | 115 ++ .../distutils/tests/test_install_scripts.py | 82 ++ distutils/distutils/tests/test_log.py | 46 + .../distutils/tests/test_msvc9compiler.py | 184 +++ .../distutils/tests/test_msvccompiler.py | 132 ++ distutils/distutils/tests/test_register.py | 323 +++++ distutils/distutils/tests/test_sdist.py | 492 +++++++ distutils/distutils/tests/test_spawn.py | 103 ++ distutils/distutils/tests/test_sysconfig.py | 198 +++ distutils/distutils/tests/test_text_file.py | 107 ++ .../distutils/tests/test_unixccompiler.py | 149 ++ distutils/distutils/tests/test_upload.py | 207 +++ distutils/distutils/tests/test_util.py | 300 ++++ distutils/distutils/tests/test_version.py | 71 + .../distutils/tests/test_versionpredicate.py | 13 + distutils/distutils/text_file.py | 286 ++++ distutils/distutils/unixccompiler.py | 322 +++++ distutils/distutils/util.py | 557 ++++++++ distutils/distutils/version.py | 343 +++++ distutils/distutils/versionpredicate.py | 166 +++ scripts/update.py | 1 + 108 files changed, 23743 insertions(+) create mode 100644 distutils/distutils/README create mode 100644 distutils/distutils/__init__.py create mode 100644 distutils/distutils/_msvccompiler.py create mode 100644 distutils/distutils/archive_util.py create mode 100644 distutils/distutils/bcppcompiler.py create mode 100644 distutils/distutils/ccompiler.py create mode 100644 distutils/distutils/cmd.py create mode 100644 distutils/distutils/command/__init__.py create mode 100644 distutils/distutils/command/bdist.py create mode 100644 distutils/distutils/command/bdist_dumb.py create mode 100644 distutils/distutils/command/bdist_msi.py create mode 100644 distutils/distutils/command/bdist_rpm.py create mode 100644 distutils/distutils/command/bdist_wininst.py create mode 100644 distutils/distutils/command/build.py create mode 100644 distutils/distutils/command/build_clib.py create mode 100644 distutils/distutils/command/build_ext.py create mode 100644 distutils/distutils/command/build_py.py create mode 100644 distutils/distutils/command/build_scripts.py create mode 100644 distutils/distutils/command/check.py create mode 100644 distutils/distutils/command/clean.py create mode 100644 distutils/distutils/command/command_template create mode 100644 distutils/distutils/command/config.py create mode 100644 distutils/distutils/command/install.py create mode 100644 distutils/distutils/command/install_data.py create mode 100644 distutils/distutils/command/install_egg_info.py create mode 100644 distutils/distutils/command/install_headers.py create mode 100644 distutils/distutils/command/install_lib.py create mode 100644 distutils/distutils/command/install_scripts.py create mode 100644 distutils/distutils/command/register.py create mode 100644 distutils/distutils/command/sdist.py create mode 100644 distutils/distutils/command/upload.py create mode 100644 distutils/distutils/command/wininst-10.0-amd64.exe create mode 100644 distutils/distutils/command/wininst-10.0.exe create mode 100644 distutils/distutils/command/wininst-14.0-amd64.exe create mode 100644 distutils/distutils/command/wininst-14.0.exe create mode 100644 distutils/distutils/command/wininst-6.0.exe create mode 100644 distutils/distutils/command/wininst-7.1.exe create mode 100644 distutils/distutils/command/wininst-8.0.exe create mode 100644 distutils/distutils/command/wininst-9.0-amd64.exe create mode 100644 distutils/distutils/command/wininst-9.0.exe create mode 100644 distutils/distutils/config.py create mode 100644 distutils/distutils/core.py create mode 100644 distutils/distutils/cygwinccompiler.py create mode 100644 distutils/distutils/debug.py create mode 100644 distutils/distutils/dep_util.py create mode 100644 distutils/distutils/dir_util.py create mode 100644 distutils/distutils/dist.py create mode 100644 distutils/distutils/errors.py create mode 100644 distutils/distutils/extension.py create mode 100644 distutils/distutils/fancy_getopt.py create mode 100644 distutils/distutils/file_util.py create mode 100644 distutils/distutils/filelist.py create mode 100644 distutils/distutils/log.py create mode 100644 distutils/distutils/msvc9compiler.py create mode 100644 distutils/distutils/msvccompiler.py create mode 100644 distutils/distutils/spawn.py create mode 100644 distutils/distutils/sysconfig.py create mode 100644 distutils/distutils/tests/Setup.sample create mode 100644 distutils/distutils/tests/__init__.py create mode 100644 distutils/distutils/tests/support.py create mode 100644 distutils/distutils/tests/test_archive_util.py create mode 100644 distutils/distutils/tests/test_bdist.py create mode 100644 distutils/distutils/tests/test_bdist_dumb.py create mode 100644 distutils/distutils/tests/test_bdist_msi.py create mode 100644 distutils/distutils/tests/test_bdist_rpm.py create mode 100644 distutils/distutils/tests/test_bdist_wininst.py create mode 100644 distutils/distutils/tests/test_build.py create mode 100644 distutils/distutils/tests/test_build_clib.py create mode 100644 distutils/distutils/tests/test_build_ext.py create mode 100644 distutils/distutils/tests/test_build_py.py create mode 100644 distutils/distutils/tests/test_build_scripts.py create mode 100644 distutils/distutils/tests/test_check.py create mode 100644 distutils/distutils/tests/test_clean.py create mode 100644 distutils/distutils/tests/test_cmd.py create mode 100644 distutils/distutils/tests/test_config.py create mode 100644 distutils/distutils/tests/test_config_cmd.py create mode 100644 distutils/distutils/tests/test_core.py create mode 100644 distutils/distutils/tests/test_cygwinccompiler.py create mode 100644 distutils/distutils/tests/test_dep_util.py create mode 100644 distutils/distutils/tests/test_dir_util.py create mode 100644 distutils/distutils/tests/test_dist.py create mode 100644 distutils/distutils/tests/test_extension.py create mode 100644 distutils/distutils/tests/test_file_util.py create mode 100644 distutils/distutils/tests/test_filelist.py create mode 100644 distutils/distutils/tests/test_install.py create mode 100644 distutils/distutils/tests/test_install_data.py create mode 100644 distutils/distutils/tests/test_install_headers.py create mode 100644 distutils/distutils/tests/test_install_lib.py create mode 100644 distutils/distutils/tests/test_install_scripts.py create mode 100644 distutils/distutils/tests/test_log.py create mode 100644 distutils/distutils/tests/test_msvc9compiler.py create mode 100644 distutils/distutils/tests/test_msvccompiler.py create mode 100644 distutils/distutils/tests/test_register.py create mode 100644 distutils/distutils/tests/test_sdist.py create mode 100644 distutils/distutils/tests/test_spawn.py create mode 100644 distutils/distutils/tests/test_sysconfig.py create mode 100644 distutils/distutils/tests/test_text_file.py create mode 100644 distutils/distutils/tests/test_unixccompiler.py create mode 100644 distutils/distutils/tests/test_upload.py create mode 100644 distutils/distutils/tests/test_util.py create mode 100644 distutils/distutils/tests/test_version.py create mode 100644 distutils/distutils/tests/test_versionpredicate.py create mode 100644 distutils/distutils/text_file.py create mode 100644 distutils/distutils/unixccompiler.py create mode 100644 distutils/distutils/util.py create mode 100644 distutils/distutils/version.py create mode 100644 distutils/distutils/versionpredicate.py diff --git a/distutils/distutils/README b/distutils/distutils/README new file mode 100644 index 0000000..408a203 --- /dev/null +++ b/distutils/distutils/README @@ -0,0 +1,13 @@ +This directory contains the Distutils package. + +There's a full documentation available at: + + http://docs.python.org/distutils/ + +The Distutils-SIG web page is also a good starting point: + + http://www.python.org/sigs/distutils-sig/ + +WARNING : Distutils must remain compatible with 2.3 + +$Id$ diff --git a/distutils/distutils/__init__.py b/distutils/distutils/__init__.py new file mode 100644 index 0000000..d823d04 --- /dev/null +++ b/distutils/distutils/__init__.py @@ -0,0 +1,13 @@ +"""distutils + +The main package for the Python Module Distribution Utilities. Normally +used from a setup script as + + from distutils.core import setup + + setup (...) +""" + +import sys + +__version__ = sys.version[:sys.version.index(' ')] diff --git a/distutils/distutils/_msvccompiler.py b/distutils/distutils/_msvccompiler.py new file mode 100644 index 0000000..30b3b47 --- /dev/null +++ b/distutils/distutils/_msvccompiler.py @@ -0,0 +1,574 @@ +"""distutils._msvccompiler + +Contains MSVCCompiler, an implementation of the abstract CCompiler class +for Microsoft Visual Studio 2015. + +The module is compatible with VS 2015 and later. You can find legacy support +for older versions in distutils.msvc9compiler and distutils.msvccompiler. +""" + +# Written by Perry Stoll +# hacked by Robin Becker and Thomas Heller to do a better job of +# finding DevStudio (through the registry) +# ported to VS 2005 and VS 2008 by Christian Heimes +# ported to VS 2015 by Steve Dower + +import os +import shutil +import stat +import subprocess +import winreg + +from distutils.errors import DistutilsExecError, DistutilsPlatformError, \ + CompileError, LibError, LinkError +from distutils.ccompiler import CCompiler, gen_lib_options +from distutils import log +from distutils.util import get_platform + +from itertools import count + +def _find_vc2015(): + try: + key = winreg.OpenKeyEx( + winreg.HKEY_LOCAL_MACHINE, + r"Software\Microsoft\VisualStudio\SxS\VC7", + access=winreg.KEY_READ | winreg.KEY_WOW64_32KEY + ) + except OSError: + log.debug("Visual C++ is not registered") + return None, None + + best_version = 0 + best_dir = None + with key: + for i in count(): + try: + v, vc_dir, vt = winreg.EnumValue(key, i) + except OSError: + break + if v and vt == winreg.REG_SZ and os.path.isdir(vc_dir): + try: + version = int(float(v)) + except (ValueError, TypeError): + continue + if version >= 14 and version > best_version: + best_version, best_dir = version, vc_dir + return best_version, best_dir + +def _find_vc2017(): + import _distutils_findvs + import threading + + best_version = 0, # tuple for full version comparisons + best_dir = None + + # We need to call findall() on its own thread because it will + # initialize COM. + all_packages = [] + def _getall(): + all_packages.extend(_distutils_findvs.findall()) + t = threading.Thread(target=_getall) + t.start() + t.join() + + for name, version_str, path, packages in all_packages: + if 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64' in packages: + vc_dir = os.path.join(path, 'VC', 'Auxiliary', 'Build') + if not os.path.isdir(vc_dir): + continue + try: + version = tuple(int(i) for i in version_str.split('.')) + except (ValueError, TypeError): + continue + if version > best_version: + best_version, best_dir = version, vc_dir + try: + best_version = best_version[0] + except IndexError: + best_version = None + return best_version, best_dir + +def _find_vcvarsall(plat_spec): + best_version, best_dir = _find_vc2017() + vcruntime = None + vcruntime_plat = 'x64' if 'amd64' in plat_spec else 'x86' + if best_version: + vcredist = os.path.join(best_dir, "..", "..", "redist", "MSVC", "**", + "Microsoft.VC141.CRT", "vcruntime140.dll") + try: + import glob + vcruntime = glob.glob(vcredist, recursive=True)[-1] + except (ImportError, OSError, LookupError): + vcruntime = None + + if not best_version: + best_version, best_dir = _find_vc2015() + if best_version: + vcruntime = os.path.join(best_dir, 'redist', vcruntime_plat, + "Microsoft.VC140.CRT", "vcruntime140.dll") + + if not best_version: + log.debug("No suitable Visual C++ version found") + return None, None + + vcvarsall = os.path.join(best_dir, "vcvarsall.bat") + if not os.path.isfile(vcvarsall): + log.debug("%s cannot be found", vcvarsall) + return None, None + + if not vcruntime or not os.path.isfile(vcruntime): + log.debug("%s cannot be found", vcruntime) + vcruntime = None + + return vcvarsall, vcruntime + +def _get_vc_env(plat_spec): + if os.getenv("DISTUTILS_USE_SDK"): + return { + key.lower(): value + for key, value in os.environ.items() + } + + vcvarsall, vcruntime = _find_vcvarsall(plat_spec) + if not vcvarsall: + raise DistutilsPlatformError("Unable to find vcvarsall.bat") + + try: + out = subprocess.check_output( + 'cmd /u /c "{}" {} && set'.format(vcvarsall, plat_spec), + stderr=subprocess.STDOUT, + ).decode('utf-16le', errors='replace') + except subprocess.CalledProcessError as exc: + log.error(exc.output) + raise DistutilsPlatformError("Error executing {}" + .format(exc.cmd)) + + env = { + key.lower(): value + for key, _, value in + (line.partition('=') for line in out.splitlines()) + if key and value + } + + if vcruntime: + env['py_vcruntime_redist'] = vcruntime + return env + +def _find_exe(exe, paths=None): + """Return path to an MSVC executable program. + + Tries to find the program in several places: first, one of the + MSVC program search paths from the registry; next, the directories + in the PATH environment variable. If any of those work, return an + absolute path that is known to exist. If none of them work, just + return the original program name, 'exe'. + """ + if not paths: + paths = os.getenv('path').split(os.pathsep) + for p in paths: + fn = os.path.join(os.path.abspath(p), exe) + if os.path.isfile(fn): + return fn + return exe + +# A map keyed by get_platform() return values to values accepted by +# 'vcvarsall.bat'. Always cross-compile from x86 to work with the +# lighter-weight MSVC installs that do not include native 64-bit tools. +PLAT_TO_VCVARS = { + 'win32' : 'x86', + 'win-amd64' : 'x86_amd64', +} + +# A set containing the DLLs that are guaranteed to be available for +# all micro versions of this Python version. Known extension +# dependencies that are not in this set will be copied to the output +# path. +_BUNDLED_DLLS = frozenset(['vcruntime140.dll']) + +class MSVCCompiler(CCompiler) : + """Concrete class that implements an interface to Microsoft Visual C++, + as defined by the CCompiler abstract class.""" + + compiler_type = 'msvc' + + # Just set this so CCompiler's constructor doesn't barf. We currently + # don't use the 'set_executables()' bureaucracy provided by CCompiler, + # as it really isn't necessary for this sort of single-compiler class. + # Would be nice to have a consistent interface with UnixCCompiler, + # though, so it's worth thinking about. + executables = {} + + # Private class data (need to distinguish C from C++ source for compiler) + _c_extensions = ['.c'] + _cpp_extensions = ['.cc', '.cpp', '.cxx'] + _rc_extensions = ['.rc'] + _mc_extensions = ['.mc'] + + # Needed for the filename generation methods provided by the + # base class, CCompiler. + src_extensions = (_c_extensions + _cpp_extensions + + _rc_extensions + _mc_extensions) + res_extension = '.res' + obj_extension = '.obj' + static_lib_extension = '.lib' + shared_lib_extension = '.dll' + static_lib_format = shared_lib_format = '%s%s' + exe_extension = '.exe' + + + def __init__(self, verbose=0, dry_run=0, force=0): + CCompiler.__init__ (self, verbose, dry_run, force) + # target platform (.plat_name is consistent with 'bdist') + self.plat_name = None + self.initialized = False + + def initialize(self, plat_name=None): + # multi-init means we would need to check platform same each time... + assert not self.initialized, "don't init multiple times" + if plat_name is None: + plat_name = get_platform() + # sanity check for platforms to prevent obscure errors later. + if plat_name not in PLAT_TO_VCVARS: + raise DistutilsPlatformError("--plat-name must be one of {}" + .format(tuple(PLAT_TO_VCVARS))) + + # Get the vcvarsall.bat spec for the requested platform. + plat_spec = PLAT_TO_VCVARS[plat_name] + + vc_env = _get_vc_env(plat_spec) + if not vc_env: + raise DistutilsPlatformError("Unable to find a compatible " + "Visual Studio installation.") + + self._paths = vc_env.get('path', '') + paths = self._paths.split(os.pathsep) + self.cc = _find_exe("cl.exe", paths) + self.linker = _find_exe("link.exe", paths) + self.lib = _find_exe("lib.exe", paths) + self.rc = _find_exe("rc.exe", paths) # resource compiler + self.mc = _find_exe("mc.exe", paths) # message compiler + self.mt = _find_exe("mt.exe", paths) # message compiler + self._vcruntime_redist = vc_env.get('py_vcruntime_redist', '') + + for dir in vc_env.get('include', '').split(os.pathsep): + if dir: + self.add_include_dir(dir.rstrip(os.sep)) + + for dir in vc_env.get('lib', '').split(os.pathsep): + if dir: + self.add_library_dir(dir.rstrip(os.sep)) + + self.preprocess_options = None + # If vcruntime_redist is available, link against it dynamically. Otherwise, + # use /MT[d] to build statically, then switch from libucrt[d].lib to ucrt[d].lib + # later to dynamically link to ucrtbase but not vcruntime. + self.compile_options = [ + '/nologo', '/Ox', '/W3', '/GL', '/DNDEBUG' + ] + self.compile_options.append('/MD' if self._vcruntime_redist else '/MT') + + self.compile_options_debug = [ + '/nologo', '/Od', '/MDd', '/Zi', '/W3', '/D_DEBUG' + ] + + ldflags = [ + '/nologo', '/INCREMENTAL:NO', '/LTCG' + ] + if not self._vcruntime_redist: + ldflags.extend(('/nodefaultlib:libucrt.lib', 'ucrt.lib')) + + ldflags_debug = [ + '/nologo', '/INCREMENTAL:NO', '/LTCG', '/DEBUG:FULL' + ] + + self.ldflags_exe = [*ldflags, '/MANIFEST:EMBED,ID=1'] + self.ldflags_exe_debug = [*ldflags_debug, '/MANIFEST:EMBED,ID=1'] + self.ldflags_shared = [*ldflags, '/DLL', '/MANIFEST:EMBED,ID=2', '/MANIFESTUAC:NO'] + self.ldflags_shared_debug = [*ldflags_debug, '/DLL', '/MANIFEST:EMBED,ID=2', '/MANIFESTUAC:NO'] + self.ldflags_static = [*ldflags] + self.ldflags_static_debug = [*ldflags_debug] + + self._ldflags = { + (CCompiler.EXECUTABLE, None): self.ldflags_exe, + (CCompiler.EXECUTABLE, False): self.ldflags_exe, + (CCompiler.EXECUTABLE, True): self.ldflags_exe_debug, + (CCompiler.SHARED_OBJECT, None): self.ldflags_shared, + (CCompiler.SHARED_OBJECT, False): self.ldflags_shared, + (CCompiler.SHARED_OBJECT, True): self.ldflags_shared_debug, + (CCompiler.SHARED_LIBRARY, None): self.ldflags_static, + (CCompiler.SHARED_LIBRARY, False): self.ldflags_static, + (CCompiler.SHARED_LIBRARY, True): self.ldflags_static_debug, + } + + self.initialized = True + + # -- Worker methods ------------------------------------------------ + + def object_filenames(self, + source_filenames, + strip_dir=0, + output_dir=''): + ext_map = { + **{ext: self.obj_extension for ext in self.src_extensions}, + **{ext: self.res_extension for ext in self._rc_extensions + self._mc_extensions}, + } + + output_dir = output_dir or '' + + def make_out_path(p): + base, ext = os.path.splitext(p) + if strip_dir: + base = os.path.basename(base) + else: + _, base = os.path.splitdrive(base) + if base.startswith((os.path.sep, os.path.altsep)): + base = base[1:] + try: + # XXX: This may produce absurdly long paths. We should check + # the length of the result and trim base until we fit within + # 260 characters. + return os.path.join(output_dir, base + ext_map[ext]) + except LookupError: + # Better to raise an exception instead of silently continuing + # and later complain about sources and targets having + # different lengths + raise CompileError("Don't know how to compile {}".format(p)) + + return list(map(make_out_path, source_filenames)) + + + def compile(self, sources, + output_dir=None, macros=None, include_dirs=None, debug=0, + extra_preargs=None, extra_postargs=None, depends=None): + + if not self.initialized: + self.initialize() + compile_info = self._setup_compile(output_dir, macros, include_dirs, + sources, depends, extra_postargs) + macros, objects, extra_postargs, pp_opts, build = compile_info + + compile_opts = extra_preargs or [] + compile_opts.append('/c') + if debug: + compile_opts.extend(self.compile_options_debug) + else: + compile_opts.extend(self.compile_options) + + + add_cpp_opts = False + + for obj in objects: + try: + src, ext = build[obj] + except KeyError: + continue + if debug: + # pass the full pathname to MSVC in debug mode, + # this allows the debugger to find the source file + # without asking the user to browse for it + src = os.path.abspath(src) + + if ext in self._c_extensions: + input_opt = "/Tc" + src + elif ext in self._cpp_extensions: + input_opt = "/Tp" + src + add_cpp_opts = True + elif ext in self._rc_extensions: + # compile .RC to .RES file + input_opt = src + output_opt = "/fo" + obj + try: + self.spawn([self.rc] + pp_opts + [output_opt, input_opt]) + except DistutilsExecError as msg: + raise CompileError(msg) + continue + elif ext in self._mc_extensions: + # Compile .MC to .RC file to .RES file. + # * '-h dir' specifies the directory for the + # generated include file + # * '-r dir' specifies the target directory of the + # generated RC file and the binary message resource + # it includes + # + # For now (since there are no options to change this), + # we use the source-directory for the include file and + # the build directory for the RC file and message + # resources. This works at least for win32all. + h_dir = os.path.dirname(src) + rc_dir = os.path.dirname(obj) + try: + # first compile .MC to .RC and .H file + self.spawn([self.mc, '-h', h_dir, '-r', rc_dir, src]) + base, _ = os.path.splitext(os.path.basename (src)) + rc_file = os.path.join(rc_dir, base + '.rc') + # then compile .RC to .RES file + self.spawn([self.rc, "/fo" + obj, rc_file]) + + except DistutilsExecError as msg: + raise CompileError(msg) + continue + else: + # how to handle this file? + raise CompileError("Don't know how to compile {} to {}" + .format(src, obj)) + + args = [self.cc] + compile_opts + pp_opts + if add_cpp_opts: + args.append('/EHsc') + args.append(input_opt) + args.append("/Fo" + obj) + args.extend(extra_postargs) + + try: + self.spawn(args) + except DistutilsExecError as msg: + raise CompileError(msg) + + return objects + + + def create_static_lib(self, + objects, + output_libname, + output_dir=None, + debug=0, + target_lang=None): + + if not self.initialized: + self.initialize() + objects, output_dir = self._fix_object_args(objects, output_dir) + output_filename = self.library_filename(output_libname, + output_dir=output_dir) + + if self._need_link(objects, output_filename): + lib_args = objects + ['/OUT:' + output_filename] + if debug: + pass # XXX what goes here? + try: + log.debug('Executing "%s" %s', self.lib, ' '.join(lib_args)) + self.spawn([self.lib] + lib_args) + except DistutilsExecError as msg: + raise LibError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + + def link(self, + target_desc, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + + if not self.initialized: + self.initialize() + objects, output_dir = self._fix_object_args(objects, output_dir) + fixed_args = self._fix_lib_args(libraries, library_dirs, + runtime_library_dirs) + libraries, library_dirs, runtime_library_dirs = fixed_args + + if runtime_library_dirs: + self.warn("I don't know what to do with 'runtime_library_dirs': " + + str(runtime_library_dirs)) + + lib_opts = gen_lib_options(self, + library_dirs, runtime_library_dirs, + libraries) + if output_dir is not None: + output_filename = os.path.join(output_dir, output_filename) + + if self._need_link(objects, output_filename): + ldflags = self._ldflags[target_desc, debug] + + export_opts = ["/EXPORT:" + sym for sym in (export_symbols or [])] + + ld_args = (ldflags + lib_opts + export_opts + + objects + ['/OUT:' + output_filename]) + + # The MSVC linker generates .lib and .exp files, which cannot be + # suppressed by any linker switches. The .lib files may even be + # needed! Make sure they are generated in the temporary build + # directory. Since they have different names for debug and release + # builds, they can go into the same directory. + build_temp = os.path.dirname(objects[0]) + if export_symbols is not None: + (dll_name, dll_ext) = os.path.splitext( + os.path.basename(output_filename)) + implib_file = os.path.join( + build_temp, + self.library_filename(dll_name)) + ld_args.append ('/IMPLIB:' + implib_file) + + if extra_preargs: + ld_args[:0] = extra_preargs + if extra_postargs: + ld_args.extend(extra_postargs) + + output_dir = os.path.dirname(os.path.abspath(output_filename)) + self.mkpath(output_dir) + try: + log.debug('Executing "%s" %s', self.linker, ' '.join(ld_args)) + self.spawn([self.linker] + ld_args) + self._copy_vcruntime(output_dir) + except DistutilsExecError as msg: + raise LinkError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + def _copy_vcruntime(self, output_dir): + vcruntime = self._vcruntime_redist + if not vcruntime or not os.path.isfile(vcruntime): + return + + if os.path.basename(vcruntime).lower() in _BUNDLED_DLLS: + return + + log.debug('Copying "%s"', vcruntime) + vcruntime = shutil.copy(vcruntime, output_dir) + os.chmod(vcruntime, stat.S_IWRITE) + + def spawn(self, cmd): + old_path = os.getenv('path') + try: + os.environ['path'] = self._paths + return super().spawn(cmd) + finally: + os.environ['path'] = old_path + + # -- Miscellaneous methods ----------------------------------------- + # These are all used by the 'gen_lib_options() function, in + # ccompiler.py. + + def library_dir_option(self, dir): + return "/LIBPATH:" + dir + + def runtime_library_dir_option(self, dir): + raise DistutilsPlatformError( + "don't know how to set runtime library search path for MSVC") + + def library_option(self, lib): + return self.library_filename(lib) + + def find_library_file(self, dirs, lib, debug=0): + # Prefer a debugging library if found (and requested), but deal + # with it if we don't have one. + if debug: + try_names = [lib + "_d", lib] + else: + try_names = [lib] + for dir in dirs: + for name in try_names: + libfile = os.path.join(dir, self.library_filename(name)) + if os.path.isfile(libfile): + return libfile + else: + # Oops, didn't find it in *any* of 'dirs' + return None diff --git a/distutils/distutils/archive_util.py b/distutils/distutils/archive_util.py new file mode 100644 index 0000000..b002dc3 --- /dev/null +++ b/distutils/distutils/archive_util.py @@ -0,0 +1,256 @@ +"""distutils.archive_util + +Utility functions for creating archive files (tarballs, zip files, +that sort of thing).""" + +import os +from warnings import warn +import sys + +try: + import zipfile +except ImportError: + zipfile = None + + +from distutils.errors import DistutilsExecError +from distutils.spawn import spawn +from distutils.dir_util import mkpath +from distutils import log + +try: + from pwd import getpwnam +except ImportError: + getpwnam = None + +try: + from grp import getgrnam +except ImportError: + getgrnam = None + +def _get_gid(name): + """Returns a gid, given a group name.""" + if getgrnam is None or name is None: + return None + try: + result = getgrnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def _get_uid(name): + """Returns an uid, given a user name.""" + if getpwnam is None or name is None: + return None + try: + result = getpwnam(name) + except KeyError: + result = None + if result is not None: + return result[2] + return None + +def make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0, + owner=None, group=None): + """Create a (possibly compressed) tar file from all the files under + 'base_dir'. + + 'compress' must be "gzip" (the default), "bzip2", "xz", "compress", or + None. ("compress" will be deprecated in Python 3.2) + + 'owner' and 'group' can be used to define an owner and a group for the + archive that is being built. If not provided, the current owner and group + will be used. + + The output tar file will be named 'base_dir' + ".tar", possibly plus + the appropriate compression extension (".gz", ".bz2", ".xz" or ".Z"). + + Returns the output filename. + """ + tar_compression = {'gzip': 'gz', 'bzip2': 'bz2', 'xz': 'xz', None: '', + 'compress': ''} + compress_ext = {'gzip': '.gz', 'bzip2': '.bz2', 'xz': '.xz', + 'compress': '.Z'} + + # flags for compression program, each element of list will be an argument + if compress is not None and compress not in compress_ext.keys(): + raise ValueError( + "bad value for 'compress': must be None, 'gzip', 'bzip2', " + "'xz' or 'compress'") + + archive_name = base_name + '.tar' + if compress != 'compress': + archive_name += compress_ext.get(compress, '') + + mkpath(os.path.dirname(archive_name), dry_run=dry_run) + + # creating the tarball + import tarfile # late import so Python build itself doesn't break + + log.info('Creating tar archive') + + uid = _get_uid(owner) + gid = _get_gid(group) + + def _set_uid_gid(tarinfo): + if gid is not None: + tarinfo.gid = gid + tarinfo.gname = group + if uid is not None: + tarinfo.uid = uid + tarinfo.uname = owner + return tarinfo + + if not dry_run: + tar = tarfile.open(archive_name, 'w|%s' % tar_compression[compress]) + try: + tar.add(base_dir, filter=_set_uid_gid) + finally: + tar.close() + + # compression using `compress` + if compress == 'compress': + warn("'compress' will be deprecated.", PendingDeprecationWarning) + # the option varies depending on the platform + compressed_name = archive_name + compress_ext[compress] + if sys.platform == 'win32': + cmd = [compress, archive_name, compressed_name] + else: + cmd = [compress, '-f', archive_name] + spawn(cmd, dry_run=dry_run) + return compressed_name + + return archive_name + +def make_zipfile(base_name, base_dir, verbose=0, dry_run=0): + """Create a zip file from all the files under 'base_dir'. + + The output zip file will be named 'base_name' + ".zip". Uses either the + "zipfile" Python module (if available) or the InfoZIP "zip" utility + (if installed and found on the default search path). If neither tool is + available, raises DistutilsExecError. Returns the name of the output zip + file. + """ + zip_filename = base_name + ".zip" + mkpath(os.path.dirname(zip_filename), dry_run=dry_run) + + # If zipfile module is not available, try spawning an external + # 'zip' command. + if zipfile is None: + if verbose: + zipoptions = "-r" + else: + zipoptions = "-rq" + + try: + spawn(["zip", zipoptions, zip_filename, base_dir], + dry_run=dry_run) + except DistutilsExecError: + # XXX really should distinguish between "couldn't find + # external 'zip' command" and "zip failed". + raise DistutilsExecError(("unable to create zip file '%s': " + "could neither import the 'zipfile' module nor " + "find a standalone zip utility") % zip_filename) + + else: + log.info("creating '%s' and adding '%s' to it", + zip_filename, base_dir) + + if not dry_run: + try: + zip = zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_DEFLATED) + except RuntimeError: + zip = zipfile.ZipFile(zip_filename, "w", + compression=zipfile.ZIP_STORED) + + if base_dir != os.curdir: + path = os.path.normpath(os.path.join(base_dir, '')) + zip.write(path, path) + log.info("adding '%s'", path) + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in dirnames: + path = os.path.normpath(os.path.join(dirpath, name, '')) + zip.write(path, path) + log.info("adding '%s'", path) + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zip.write(path, path) + log.info("adding '%s'", path) + zip.close() + + return zip_filename + +ARCHIVE_FORMATS = { + 'gztar': (make_tarball, [('compress', 'gzip')], "gzip'ed tar-file"), + 'bztar': (make_tarball, [('compress', 'bzip2')], "bzip2'ed tar-file"), + 'xztar': (make_tarball, [('compress', 'xz')], "xz'ed tar-file"), + 'ztar': (make_tarball, [('compress', 'compress')], "compressed tar file"), + 'tar': (make_tarball, [('compress', None)], "uncompressed tar file"), + 'zip': (make_zipfile, [],"ZIP file") + } + +def check_archive_formats(formats): + """Returns the first format from the 'format' list that is unknown. + + If all formats are known, returns None + """ + for format in formats: + if format not in ARCHIVE_FORMATS: + return format + return None + +def make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, + dry_run=0, owner=None, group=None): + """Create an archive file (eg. zip or tar). + + 'base_name' is the name of the file to create, minus any format-specific + extension; 'format' is the archive format: one of "zip", "tar", "gztar", + "bztar", "xztar", or "ztar". + + 'root_dir' is a directory that will be the root directory of the + archive; ie. we typically chdir into 'root_dir' before creating the + archive. 'base_dir' is the directory where we start archiving from; + ie. 'base_dir' will be the common prefix of all files and + directories in the archive. 'root_dir' and 'base_dir' both default + to the current directory. Returns the name of the archive file. + + 'owner' and 'group' are used when creating a tar archive. By default, + uses the current owner and group. + """ + save_cwd = os.getcwd() + if root_dir is not None: + log.debug("changing into '%s'", root_dir) + base_name = os.path.abspath(base_name) + if not dry_run: + os.chdir(root_dir) + + if base_dir is None: + base_dir = os.curdir + + kwargs = {'dry_run': dry_run} + + try: + format_info = ARCHIVE_FORMATS[format] + except KeyError: + raise ValueError("unknown archive format '%s'" % format) + + func = format_info[0] + for arg, val in format_info[1]: + kwargs[arg] = val + + if format != 'zip': + kwargs['owner'] = owner + kwargs['group'] = group + + try: + filename = func(base_name, base_dir, **kwargs) + finally: + if root_dir is not None: + log.debug("changing back to '%s'", save_cwd) + os.chdir(save_cwd) + + return filename diff --git a/distutils/distutils/bcppcompiler.py b/distutils/distutils/bcppcompiler.py new file mode 100644 index 0000000..9f4c432 --- /dev/null +++ b/distutils/distutils/bcppcompiler.py @@ -0,0 +1,393 @@ +"""distutils.bcppcompiler + +Contains BorlandCCompiler, an implementation of the abstract CCompiler class +for the Borland C++ compiler. +""" + +# This implementation by Lyle Johnson, based on the original msvccompiler.py +# module and using the directions originally published by Gordon Williams. + +# XXX looks like there's a LOT of overlap between these two classes: +# someone should sit down and factor out the common code as +# WindowsCCompiler! --GPW + + +import os +from distutils.errors import \ + DistutilsExecError, DistutilsPlatformError, \ + CompileError, LibError, LinkError, UnknownFileError +from distutils.ccompiler import \ + CCompiler, gen_preprocess_options, gen_lib_options +from distutils.file_util import write_file +from distutils.dep_util import newer +from distutils import log + +class BCPPCompiler(CCompiler) : + """Concrete class that implements an interface to the Borland C/C++ + compiler, as defined by the CCompiler abstract class. + """ + + compiler_type = 'bcpp' + + # Just set this so CCompiler's constructor doesn't barf. We currently + # don't use the 'set_executables()' bureaucracy provided by CCompiler, + # as it really isn't necessary for this sort of single-compiler class. + # Would be nice to have a consistent interface with UnixCCompiler, + # though, so it's worth thinking about. + executables = {} + + # Private class data (need to distinguish C from C++ source for compiler) + _c_extensions = ['.c'] + _cpp_extensions = ['.cc', '.cpp', '.cxx'] + + # Needed for the filename generation methods provided by the + # base class, CCompiler. + src_extensions = _c_extensions + _cpp_extensions + obj_extension = '.obj' + static_lib_extension = '.lib' + shared_lib_extension = '.dll' + static_lib_format = shared_lib_format = '%s%s' + exe_extension = '.exe' + + + def __init__ (self, + verbose=0, + dry_run=0, + force=0): + + CCompiler.__init__ (self, verbose, dry_run, force) + + # These executables are assumed to all be in the path. + # Borland doesn't seem to use any special registry settings to + # indicate their installation locations. + + self.cc = "bcc32.exe" + self.linker = "ilink32.exe" + self.lib = "tlib.exe" + + self.preprocess_options = None + self.compile_options = ['/tWM', '/O2', '/q', '/g0'] + self.compile_options_debug = ['/tWM', '/Od', '/q', '/g0'] + + self.ldflags_shared = ['/Tpd', '/Gn', '/q', '/x'] + self.ldflags_shared_debug = ['/Tpd', '/Gn', '/q', '/x'] + self.ldflags_static = [] + self.ldflags_exe = ['/Gn', '/q', '/x'] + self.ldflags_exe_debug = ['/Gn', '/q', '/x','/r'] + + + # -- Worker methods ------------------------------------------------ + + def compile(self, sources, + output_dir=None, macros=None, include_dirs=None, debug=0, + extra_preargs=None, extra_postargs=None, depends=None): + + macros, objects, extra_postargs, pp_opts, build = \ + self._setup_compile(output_dir, macros, include_dirs, sources, + depends, extra_postargs) + compile_opts = extra_preargs or [] + compile_opts.append ('-c') + if debug: + compile_opts.extend (self.compile_options_debug) + else: + compile_opts.extend (self.compile_options) + + for obj in objects: + try: + src, ext = build[obj] + except KeyError: + continue + # XXX why do the normpath here? + src = os.path.normpath(src) + obj = os.path.normpath(obj) + # XXX _setup_compile() did a mkpath() too but before the normpath. + # Is it possible to skip the normpath? + self.mkpath(os.path.dirname(obj)) + + if ext == '.res': + # This is already a binary file -- skip it. + continue # the 'for' loop + if ext == '.rc': + # This needs to be compiled to a .res file -- do it now. + try: + self.spawn (["brcc32", "-fo", obj, src]) + except DistutilsExecError as msg: + raise CompileError(msg) + continue # the 'for' loop + + # The next two are both for the real compiler. + if ext in self._c_extensions: + input_opt = "" + elif ext in self._cpp_extensions: + input_opt = "-P" + else: + # Unknown file type -- no extra options. The compiler + # will probably fail, but let it just in case this is a + # file the compiler recognizes even if we don't. + input_opt = "" + + output_opt = "-o" + obj + + # Compiler command line syntax is: "bcc32 [options] file(s)". + # Note that the source file names must appear at the end of + # the command line. + try: + self.spawn ([self.cc] + compile_opts + pp_opts + + [input_opt, output_opt] + + extra_postargs + [src]) + except DistutilsExecError as msg: + raise CompileError(msg) + + return objects + + # compile () + + + def create_static_lib (self, + objects, + output_libname, + output_dir=None, + debug=0, + target_lang=None): + + (objects, output_dir) = self._fix_object_args (objects, output_dir) + output_filename = \ + self.library_filename (output_libname, output_dir=output_dir) + + if self._need_link (objects, output_filename): + lib_args = [output_filename, '/u'] + objects + if debug: + pass # XXX what goes here? + try: + self.spawn ([self.lib] + lib_args) + except DistutilsExecError as msg: + raise LibError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + # create_static_lib () + + + def link (self, + target_desc, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + + # XXX this ignores 'build_temp'! should follow the lead of + # msvccompiler.py + + (objects, output_dir) = self._fix_object_args (objects, output_dir) + (libraries, library_dirs, runtime_library_dirs) = \ + self._fix_lib_args (libraries, library_dirs, runtime_library_dirs) + + if runtime_library_dirs: + log.warn("I don't know what to do with 'runtime_library_dirs': %s", + str(runtime_library_dirs)) + + if output_dir is not None: + output_filename = os.path.join (output_dir, output_filename) + + if self._need_link (objects, output_filename): + + # Figure out linker args based on type of target. + if target_desc == CCompiler.EXECUTABLE: + startup_obj = 'c0w32' + if debug: + ld_args = self.ldflags_exe_debug[:] + else: + ld_args = self.ldflags_exe[:] + else: + startup_obj = 'c0d32' + if debug: + ld_args = self.ldflags_shared_debug[:] + else: + ld_args = self.ldflags_shared[:] + + + # Create a temporary exports file for use by the linker + if export_symbols is None: + def_file = '' + else: + head, tail = os.path.split (output_filename) + modname, ext = os.path.splitext (tail) + temp_dir = os.path.dirname(objects[0]) # preserve tree structure + def_file = os.path.join (temp_dir, '%s.def' % modname) + contents = ['EXPORTS'] + for sym in (export_symbols or []): + contents.append(' %s=_%s' % (sym, sym)) + self.execute(write_file, (def_file, contents), + "writing %s" % def_file) + + # Borland C++ has problems with '/' in paths + objects2 = map(os.path.normpath, objects) + # split objects in .obj and .res files + # Borland C++ needs them at different positions in the command line + objects = [startup_obj] + resources = [] + for file in objects2: + (base, ext) = os.path.splitext(os.path.normcase(file)) + if ext == '.res': + resources.append(file) + else: + objects.append(file) + + + for l in library_dirs: + ld_args.append("/L%s" % os.path.normpath(l)) + ld_args.append("/L.") # we sometimes use relative paths + + # list of object files + ld_args.extend(objects) + + # XXX the command-line syntax for Borland C++ is a bit wonky; + # certain filenames are jammed together in one big string, but + # comma-delimited. This doesn't mesh too well with the + # Unix-centric attitude (with a DOS/Windows quoting hack) of + # 'spawn()', so constructing the argument list is a bit + # awkward. Note that doing the obvious thing and jamming all + # the filenames and commas into one argument would be wrong, + # because 'spawn()' would quote any filenames with spaces in + # them. Arghghh!. Apparently it works fine as coded... + + # name of dll/exe file + ld_args.extend([',',output_filename]) + # no map file and start libraries + ld_args.append(',,') + + for lib in libraries: + # see if we find it and if there is a bcpp specific lib + # (xxx_bcpp.lib) + libfile = self.find_library_file(library_dirs, lib, debug) + if libfile is None: + ld_args.append(lib) + # probably a BCPP internal library -- don't warn + else: + # full name which prefers bcpp_xxx.lib over xxx.lib + ld_args.append(libfile) + + # some default libraries + ld_args.append ('import32') + ld_args.append ('cw32mt') + + # def file for export symbols + ld_args.extend([',',def_file]) + # add resource files + ld_args.append(',') + ld_args.extend(resources) + + + if extra_preargs: + ld_args[:0] = extra_preargs + if extra_postargs: + ld_args.extend(extra_postargs) + + self.mkpath (os.path.dirname (output_filename)) + try: + self.spawn ([self.linker] + ld_args) + except DistutilsExecError as msg: + raise LinkError(msg) + + else: + log.debug("skipping %s (up-to-date)", output_filename) + + # link () + + # -- Miscellaneous methods ----------------------------------------- + + + def find_library_file (self, dirs, lib, debug=0): + # List of effective library names to try, in order of preference: + # xxx_bcpp.lib is better than xxx.lib + # and xxx_d.lib is better than xxx.lib if debug is set + # + # The "_bcpp" suffix is to handle a Python installation for people + # with multiple compilers (primarily Distutils hackers, I suspect + # ;-). The idea is they'd have one static library for each + # compiler they care about, since (almost?) every Windows compiler + # seems to have a different format for static libraries. + if debug: + dlib = (lib + "_d") + try_names = (dlib + "_bcpp", lib + "_bcpp", dlib, lib) + else: + try_names = (lib + "_bcpp", lib) + + for dir in dirs: + for name in try_names: + libfile = os.path.join(dir, self.library_filename(name)) + if os.path.exists(libfile): + return libfile + else: + # Oops, didn't find it in *any* of 'dirs' + return None + + # overwrite the one from CCompiler to support rc and res-files + def object_filenames (self, + source_filenames, + strip_dir=0, + output_dir=''): + if output_dir is None: output_dir = '' + obj_names = [] + for src_name in source_filenames: + # use normcase to make sure '.rc' is really '.rc' and not '.RC' + (base, ext) = os.path.splitext (os.path.normcase(src_name)) + if ext not in (self.src_extensions + ['.rc','.res']): + raise UnknownFileError("unknown file type '%s' (from '%s')" % \ + (ext, src_name)) + if strip_dir: + base = os.path.basename (base) + if ext == '.res': + # these can go unchanged + obj_names.append (os.path.join (output_dir, base + ext)) + elif ext == '.rc': + # these need to be compiled to .res-files + obj_names.append (os.path.join (output_dir, base + '.res')) + else: + obj_names.append (os.path.join (output_dir, + base + self.obj_extension)) + return obj_names + + # object_filenames () + + def preprocess (self, + source, + output_file=None, + macros=None, + include_dirs=None, + extra_preargs=None, + extra_postargs=None): + + (_, macros, include_dirs) = \ + self._fix_compile_args(None, macros, include_dirs) + pp_opts = gen_preprocess_options(macros, include_dirs) + pp_args = ['cpp32.exe'] + pp_opts + if output_file is not None: + pp_args.append('-o' + output_file) + if extra_preargs: + pp_args[:0] = extra_preargs + if extra_postargs: + pp_args.extend(extra_postargs) + pp_args.append(source) + + # We need to preprocess: either we're being forced to, or the + # source file is newer than the target (or the target doesn't + # exist). + if self.force or output_file is None or newer(source, output_file): + if output_file: + self.mkpath(os.path.dirname(output_file)) + try: + self.spawn(pp_args) + except DistutilsExecError as msg: + print(msg) + raise CompileError(msg) + + # preprocess() diff --git a/distutils/distutils/ccompiler.py b/distutils/distutils/ccompiler.py new file mode 100644 index 0000000..b71d1d3 --- /dev/null +++ b/distutils/distutils/ccompiler.py @@ -0,0 +1,1115 @@ +"""distutils.ccompiler + +Contains CCompiler, an abstract base class that defines the interface +for the Distutils compiler abstraction model.""" + +import sys, os, re +from distutils.errors import * +from distutils.spawn import spawn +from distutils.file_util import move_file +from distutils.dir_util import mkpath +from distutils.dep_util import newer_pairwise, newer_group +from distutils.util import split_quoted, execute +from distutils import log + +class CCompiler: + """Abstract base class to define the interface that must be implemented + by real compiler classes. Also has some utility methods used by + several compiler classes. + + The basic idea behind a compiler abstraction class is that each + instance can be used for all the compile/link steps in building a + single project. Thus, attributes common to all of those compile and + link steps -- include directories, macros to define, libraries to link + against, etc. -- are attributes of the compiler instance. To allow for + variability in how individual files are treated, most of those + attributes may be varied on a per-compilation or per-link basis. + """ + + # 'compiler_type' is a class attribute that identifies this class. It + # keeps code that wants to know what kind of compiler it's dealing with + # from having to import all possible compiler classes just to do an + # 'isinstance'. In concrete CCompiler subclasses, 'compiler_type' + # should really, really be one of the keys of the 'compiler_class' + # dictionary (see below -- used by the 'new_compiler()' factory + # function) -- authors of new compiler interface classes are + # responsible for updating 'compiler_class'! + compiler_type = None + + # XXX things not handled by this compiler abstraction model: + # * client can't provide additional options for a compiler, + # e.g. warning, optimization, debugging flags. Perhaps this + # should be the domain of concrete compiler abstraction classes + # (UnixCCompiler, MSVCCompiler, etc.) -- or perhaps the base + # class should have methods for the common ones. + # * can't completely override the include or library searchg + # path, ie. no "cc -I -Idir1 -Idir2" or "cc -L -Ldir1 -Ldir2". + # I'm not sure how widely supported this is even by Unix + # compilers, much less on other platforms. And I'm even less + # sure how useful it is; maybe for cross-compiling, but + # support for that is a ways off. (And anyways, cross + # compilers probably have a dedicated binary with the + # right paths compiled in. I hope.) + # * can't do really freaky things with the library list/library + # dirs, e.g. "-Ldir1 -lfoo -Ldir2 -lfoo" to link against + # different versions of libfoo.a in different locations. I + # think this is useless without the ability to null out the + # library search path anyways. + + + # Subclasses that rely on the standard filename generation methods + # implemented below should override these; see the comment near + # those methods ('object_filenames()' et. al.) for details: + src_extensions = None # list of strings + obj_extension = None # string + static_lib_extension = None + shared_lib_extension = None # string + static_lib_format = None # format string + shared_lib_format = None # prob. same as static_lib_format + exe_extension = None # string + + # Default language settings. language_map is used to detect a source + # file or Extension target language, checking source filenames. + # language_order is used to detect the language precedence, when deciding + # what language to use when mixing source types. For example, if some + # extension has two files with ".c" extension, and one with ".cpp", it + # is still linked as c++. + language_map = {".c" : "c", + ".cc" : "c++", + ".cpp" : "c++", + ".cxx" : "c++", + ".m" : "objc", + } + language_order = ["c++", "objc", "c"] + + def __init__(self, verbose=0, dry_run=0, force=0): + self.dry_run = dry_run + self.force = force + self.verbose = verbose + + # 'output_dir': a common output directory for object, library, + # shared object, and shared library files + self.output_dir = None + + # 'macros': a list of macro definitions (or undefinitions). A + # macro definition is a 2-tuple (name, value), where the value is + # either a string or None (no explicit value). A macro + # undefinition is a 1-tuple (name,). + self.macros = [] + + # 'include_dirs': a list of directories to search for include files + self.include_dirs = [] + + # 'libraries': a list of libraries to include in any link + # (library names, not filenames: eg. "foo" not "libfoo.a") + self.libraries = [] + + # 'library_dirs': a list of directories to search for libraries + self.library_dirs = [] + + # 'runtime_library_dirs': a list of directories to search for + # shared libraries/objects at runtime + self.runtime_library_dirs = [] + + # 'objects': a list of object files (or similar, such as explicitly + # named library files) to include on any link + self.objects = [] + + for key in self.executables.keys(): + self.set_executable(key, self.executables[key]) + + def set_executables(self, **kwargs): + """Define the executables (and options for them) that will be run + to perform the various stages of compilation. The exact set of + executables that may be specified here depends on the compiler + class (via the 'executables' class attribute), but most will have: + compiler the C/C++ compiler + linker_so linker used to create shared objects and libraries + linker_exe linker used to create binary executables + archiver static library creator + + On platforms with a command-line (Unix, DOS/Windows), each of these + is a string that will be split into executable name and (optional) + list of arguments. (Splitting the string is done similarly to how + Unix shells operate: words are delimited by spaces, but quotes and + backslashes can override this. See + 'distutils.util.split_quoted()'.) + """ + + # Note that some CCompiler implementation classes will define class + # attributes 'cpp', 'cc', etc. with hard-coded executable names; + # this is appropriate when a compiler class is for exactly one + # compiler/OS combination (eg. MSVCCompiler). Other compiler + # classes (UnixCCompiler, in particular) are driven by information + # discovered at run-time, since there are many different ways to do + # basically the same things with Unix C compilers. + + for key in kwargs: + if key not in self.executables: + raise ValueError("unknown executable '%s' for class %s" % + (key, self.__class__.__name__)) + self.set_executable(key, kwargs[key]) + + def set_executable(self, key, value): + if isinstance(value, str): + setattr(self, key, split_quoted(value)) + else: + setattr(self, key, value) + + def _find_macro(self, name): + i = 0 + for defn in self.macros: + if defn[0] == name: + return i + i += 1 + return None + + def _check_macro_definitions(self, definitions): + """Ensures that every element of 'definitions' is a valid macro + definition, ie. either (name,value) 2-tuple or a (name,) tuple. Do + nothing if all definitions are OK, raise TypeError otherwise. + """ + for defn in definitions: + if not (isinstance(defn, tuple) and + (len(defn) in (1, 2) and + (isinstance (defn[1], str) or defn[1] is None)) and + isinstance (defn[0], str)): + raise TypeError(("invalid macro definition '%s': " % defn) + \ + "must be tuple (string,), (string, string), or " + \ + "(string, None)") + + + # -- Bookkeeping methods ------------------------------------------- + + def define_macro(self, name, value=None): + """Define a preprocessor macro for all compilations driven by this + compiler object. The optional parameter 'value' should be a + string; if it is not supplied, then the macro will be defined + without an explicit value and the exact outcome depends on the + compiler used (XXX true? does ANSI say anything about this?) + """ + # Delete from the list of macro definitions/undefinitions if + # already there (so that this one will take precedence). + i = self._find_macro (name) + if i is not None: + del self.macros[i] + + self.macros.append((name, value)) + + def undefine_macro(self, name): + """Undefine a preprocessor macro for all compilations driven by + this compiler object. If the same macro is defined by + 'define_macro()' and undefined by 'undefine_macro()' the last call + takes precedence (including multiple redefinitions or + undefinitions). If the macro is redefined/undefined on a + per-compilation basis (ie. in the call to 'compile()'), then that + takes precedence. + """ + # Delete from the list of macro definitions/undefinitions if + # already there (so that this one will take precedence). + i = self._find_macro (name) + if i is not None: + del self.macros[i] + + undefn = (name,) + self.macros.append(undefn) + + def add_include_dir(self, dir): + """Add 'dir' to the list of directories that will be searched for + header files. The compiler is instructed to search directories in + the order in which they are supplied by successive calls to + 'add_include_dir()'. + """ + self.include_dirs.append(dir) + + def set_include_dirs(self, dirs): + """Set the list of directories that will be searched to 'dirs' (a + list of strings). Overrides any preceding calls to + 'add_include_dir()'; subsequence calls to 'add_include_dir()' add + to the list passed to 'set_include_dirs()'. This does not affect + any list of standard include directories that the compiler may + search by default. + """ + self.include_dirs = dirs[:] + + def add_library(self, libname): + """Add 'libname' to the list of libraries that will be included in + all links driven by this compiler object. Note that 'libname' + should *not* be the name of a file containing a library, but the + name of the library itself: the actual filename will be inferred by + the linker, the compiler, or the compiler class (depending on the + platform). + + The linker will be instructed to link against libraries in the + order they were supplied to 'add_library()' and/or + 'set_libraries()'. It is perfectly valid to duplicate library + names; the linker will be instructed to link against libraries as + many times as they are mentioned. + """ + self.libraries.append(libname) + + def set_libraries(self, libnames): + """Set the list of libraries to be included in all links driven by + this compiler object to 'libnames' (a list of strings). This does + not affect any standard system libraries that the linker may + include by default. + """ + self.libraries = libnames[:] + + def add_library_dir(self, dir): + """Add 'dir' to the list of directories that will be searched for + libraries specified to 'add_library()' and 'set_libraries()'. The + linker will be instructed to search for libraries in the order they + are supplied to 'add_library_dir()' and/or 'set_library_dirs()'. + """ + self.library_dirs.append(dir) + + def set_library_dirs(self, dirs): + """Set the list of library search directories to 'dirs' (a list of + strings). This does not affect any standard library search path + that the linker may search by default. + """ + self.library_dirs = dirs[:] + + def add_runtime_library_dir(self, dir): + """Add 'dir' to the list of directories that will be searched for + shared libraries at runtime. + """ + self.runtime_library_dirs.append(dir) + + def set_runtime_library_dirs(self, dirs): + """Set the list of directories to search for shared libraries at + runtime to 'dirs' (a list of strings). This does not affect any + standard search path that the runtime linker may search by + default. + """ + self.runtime_library_dirs = dirs[:] + + def add_link_object(self, object): + """Add 'object' to the list of object files (or analogues, such as + explicitly named library files or the output of "resource + compilers") to be included in every link driven by this compiler + object. + """ + self.objects.append(object) + + def set_link_objects(self, objects): + """Set the list of object files (or analogues) to be included in + every link to 'objects'. This does not affect any standard object + files that the linker may include by default (such as system + libraries). + """ + self.objects = objects[:] + + + # -- Private utility methods -------------------------------------- + # (here for the convenience of subclasses) + + # Helper method to prep compiler in subclass compile() methods + + def _setup_compile(self, outdir, macros, incdirs, sources, depends, + extra): + """Process arguments and decide which source files to compile.""" + if outdir is None: + outdir = self.output_dir + elif not isinstance(outdir, str): + raise TypeError("'output_dir' must be a string or None") + + if macros is None: + macros = self.macros + elif isinstance(macros, list): + macros = macros + (self.macros or []) + else: + raise TypeError("'macros' (if supplied) must be a list of tuples") + + if incdirs is None: + incdirs = self.include_dirs + elif isinstance(incdirs, (list, tuple)): + incdirs = list(incdirs) + (self.include_dirs or []) + else: + raise TypeError( + "'include_dirs' (if supplied) must be a list of strings") + + if extra is None: + extra = [] + + # Get the list of expected output (object) files + objects = self.object_filenames(sources, strip_dir=0, + output_dir=outdir) + assert len(objects) == len(sources) + + pp_opts = gen_preprocess_options(macros, incdirs) + + build = {} + for i in range(len(sources)): + src = sources[i] + obj = objects[i] + ext = os.path.splitext(src)[1] + self.mkpath(os.path.dirname(obj)) + build[obj] = (src, ext) + + return macros, objects, extra, pp_opts, build + + def _get_cc_args(self, pp_opts, debug, before): + # works for unixccompiler, cygwinccompiler + cc_args = pp_opts + ['-c'] + if debug: + cc_args[:0] = ['-g'] + if before: + cc_args[:0] = before + return cc_args + + def _fix_compile_args(self, output_dir, macros, include_dirs): + """Typecheck and fix-up some of the arguments to the 'compile()' + method, and return fixed-up values. Specifically: if 'output_dir' + is None, replaces it with 'self.output_dir'; ensures that 'macros' + is a list, and augments it with 'self.macros'; ensures that + 'include_dirs' is a list, and augments it with 'self.include_dirs'. + Guarantees that the returned values are of the correct type, + i.e. for 'output_dir' either string or None, and for 'macros' and + 'include_dirs' either list or None. + """ + if output_dir is None: + output_dir = self.output_dir + elif not isinstance(output_dir, str): + raise TypeError("'output_dir' must be a string or None") + + if macros is None: + macros = self.macros + elif isinstance(macros, list): + macros = macros + (self.macros or []) + else: + raise TypeError("'macros' (if supplied) must be a list of tuples") + + if include_dirs is None: + include_dirs = self.include_dirs + elif isinstance(include_dirs, (list, tuple)): + include_dirs = list(include_dirs) + (self.include_dirs or []) + else: + raise TypeError( + "'include_dirs' (if supplied) must be a list of strings") + + return output_dir, macros, include_dirs + + def _prep_compile(self, sources, output_dir, depends=None): + """Decide which souce files must be recompiled. + + Determine the list of object files corresponding to 'sources', + and figure out which ones really need to be recompiled. + Return a list of all object files and a dictionary telling + which source files can be skipped. + """ + # Get the list of expected output (object) files + objects = self.object_filenames(sources, output_dir=output_dir) + assert len(objects) == len(sources) + + # Return an empty dict for the "which source files can be skipped" + # return value to preserve API compatibility. + return objects, {} + + def _fix_object_args(self, objects, output_dir): + """Typecheck and fix up some arguments supplied to various methods. + Specifically: ensure that 'objects' is a list; if output_dir is + None, replace with self.output_dir. Return fixed versions of + 'objects' and 'output_dir'. + """ + if not isinstance(objects, (list, tuple)): + raise TypeError("'objects' must be a list or tuple of strings") + objects = list(objects) + + if output_dir is None: + output_dir = self.output_dir + elif not isinstance(output_dir, str): + raise TypeError("'output_dir' must be a string or None") + + return (objects, output_dir) + + def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs): + """Typecheck and fix up some of the arguments supplied to the + 'link_*' methods. Specifically: ensure that all arguments are + lists, and augment them with their permanent versions + (eg. 'self.libraries' augments 'libraries'). Return a tuple with + fixed versions of all arguments. + """ + if libraries is None: + libraries = self.libraries + elif isinstance(libraries, (list, tuple)): + libraries = list (libraries) + (self.libraries or []) + else: + raise TypeError( + "'libraries' (if supplied) must be a list of strings") + + if library_dirs is None: + library_dirs = self.library_dirs + elif isinstance(library_dirs, (list, tuple)): + library_dirs = list (library_dirs) + (self.library_dirs or []) + else: + raise TypeError( + "'library_dirs' (if supplied) must be a list of strings") + + if runtime_library_dirs is None: + runtime_library_dirs = self.runtime_library_dirs + elif isinstance(runtime_library_dirs, (list, tuple)): + runtime_library_dirs = (list(runtime_library_dirs) + + (self.runtime_library_dirs or [])) + else: + raise TypeError("'runtime_library_dirs' (if supplied) " + "must be a list of strings") + + return (libraries, library_dirs, runtime_library_dirs) + + def _need_link(self, objects, output_file): + """Return true if we need to relink the files listed in 'objects' + to recreate 'output_file'. + """ + if self.force: + return True + else: + if self.dry_run: + newer = newer_group (objects, output_file, missing='newer') + else: + newer = newer_group (objects, output_file) + return newer + + def detect_language(self, sources): + """Detect the language of a given file, or list of files. Uses + language_map, and language_order to do the job. + """ + if not isinstance(sources, list): + sources = [sources] + lang = None + index = len(self.language_order) + for source in sources: + base, ext = os.path.splitext(source) + extlang = self.language_map.get(ext) + try: + extindex = self.language_order.index(extlang) + if extindex < index: + lang = extlang + index = extindex + except ValueError: + pass + return lang + + + # -- Worker methods ------------------------------------------------ + # (must be implemented by subclasses) + + def preprocess(self, source, output_file=None, macros=None, + include_dirs=None, extra_preargs=None, extra_postargs=None): + """Preprocess a single C/C++ source file, named in 'source'. + Output will be written to file named 'output_file', or stdout if + 'output_file' not supplied. 'macros' is a list of macro + definitions as for 'compile()', which will augment the macros set + with 'define_macro()' and 'undefine_macro()'. 'include_dirs' is a + list of directory names that will be added to the default list. + + Raises PreprocessError on failure. + """ + pass + + def compile(self, sources, output_dir=None, macros=None, + include_dirs=None, debug=0, extra_preargs=None, + extra_postargs=None, depends=None): + """Compile one or more source files. + + 'sources' must be a list of filenames, most likely C/C++ + files, but in reality anything that can be handled by a + particular compiler and compiler class (eg. MSVCCompiler can + handle resource files in 'sources'). Return a list of object + filenames, one per source filename in 'sources'. Depending on + the implementation, not all source files will necessarily be + compiled, but all corresponding object filenames will be + returned. + + If 'output_dir' is given, object files will be put under it, while + retaining their original path component. That is, "foo/bar.c" + normally compiles to "foo/bar.o" (for a Unix implementation); if + 'output_dir' is "build", then it would compile to + "build/foo/bar.o". + + 'macros', if given, must be a list of macro definitions. A macro + definition is either a (name, value) 2-tuple or a (name,) 1-tuple. + The former defines a macro; if the value is None, the macro is + defined without an explicit value. The 1-tuple case undefines a + macro. Later definitions/redefinitions/ undefinitions take + precedence. + + 'include_dirs', if given, must be a list of strings, the + directories to add to the default include file search path for this + compilation only. + + 'debug' is a boolean; if true, the compiler will be instructed to + output debug symbols in (or alongside) the object file(s). + + 'extra_preargs' and 'extra_postargs' are implementation- dependent. + On platforms that have the notion of a command-line (e.g. Unix, + DOS/Windows), they are most likely lists of strings: extra + command-line arguments to prepand/append to the compiler command + line. On other platforms, consult the implementation class + documentation. In any event, they are intended as an escape hatch + for those occasions when the abstract compiler framework doesn't + cut the mustard. + + 'depends', if given, is a list of filenames that all targets + depend on. If a source file is older than any file in + depends, then the source file will be recompiled. This + supports dependency tracking, but only at a coarse + granularity. + + Raises CompileError on failure. + """ + # A concrete compiler class can either override this method + # entirely or implement _compile(). + macros, objects, extra_postargs, pp_opts, build = \ + self._setup_compile(output_dir, macros, include_dirs, sources, + depends, extra_postargs) + cc_args = self._get_cc_args(pp_opts, debug, extra_preargs) + + for obj in objects: + try: + src, ext = build[obj] + except KeyError: + continue + self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts) + + # Return *all* object filenames, not just the ones we just built. + return objects + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + """Compile 'src' to product 'obj'.""" + # A concrete compiler class that does not override compile() + # should implement _compile(). + pass + + def create_static_lib(self, objects, output_libname, output_dir=None, + debug=0, target_lang=None): + """Link a bunch of stuff together to create a static library file. + The "bunch of stuff" consists of the list of object files supplied + as 'objects', the extra object files supplied to + 'add_link_object()' and/or 'set_link_objects()', the libraries + supplied to 'add_library()' and/or 'set_libraries()', and the + libraries supplied as 'libraries' (if any). + + 'output_libname' should be a library name, not a filename; the + filename will be inferred from the library name. 'output_dir' is + the directory where the library file will be put. + + 'debug' is a boolean; if true, debugging information will be + included in the library (note that on most platforms, it is the + compile step where this matters: the 'debug' flag is included here + just for consistency). + + 'target_lang' is the target language for which the given objects + are being compiled. This allows specific linkage time treatment of + certain languages. + + Raises LibError on failure. + """ + pass + + + # values for target_desc parameter in link() + SHARED_OBJECT = "shared_object" + SHARED_LIBRARY = "shared_library" + EXECUTABLE = "executable" + + def link(self, + target_desc, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + """Link a bunch of stuff together to create an executable or + shared library file. + + The "bunch of stuff" consists of the list of object files supplied + as 'objects'. 'output_filename' should be a filename. If + 'output_dir' is supplied, 'output_filename' is relative to it + (i.e. 'output_filename' can provide directory components if + needed). + + 'libraries' is a list of libraries to link against. These are + library names, not filenames, since they're translated into + filenames in a platform-specific way (eg. "foo" becomes "libfoo.a" + on Unix and "foo.lib" on DOS/Windows). However, they can include a + directory component, which means the linker will look in that + specific directory rather than searching all the normal locations. + + 'library_dirs', if supplied, should be a list of directories to + search for libraries that were specified as bare library names + (ie. no directory component). These are on top of the system + default and those supplied to 'add_library_dir()' and/or + 'set_library_dirs()'. 'runtime_library_dirs' is a list of + directories that will be embedded into the shared library and used + to search for other shared libraries that *it* depends on at + run-time. (This may only be relevant on Unix.) + + 'export_symbols' is a list of symbols that the shared library will + export. (This appears to be relevant only on Windows.) + + 'debug' is as for 'compile()' and 'create_static_lib()', with the + slight distinction that it actually matters on most platforms (as + opposed to 'create_static_lib()', which includes a 'debug' flag + mostly for form's sake). + + 'extra_preargs' and 'extra_postargs' are as for 'compile()' (except + of course that they supply command-line arguments for the + particular linker being used). + + 'target_lang' is the target language for which the given objects + are being compiled. This allows specific linkage time treatment of + certain languages. + + Raises LinkError on failure. + """ + raise NotImplementedError + + + # Old 'link_*()' methods, rewritten to use the new 'link()' method. + + def link_shared_lib(self, + objects, + output_libname, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + self.link(CCompiler.SHARED_LIBRARY, objects, + self.library_filename(output_libname, lib_type='shared'), + output_dir, + libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, + extra_preargs, extra_postargs, build_temp, target_lang) + + + def link_shared_object(self, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + self.link(CCompiler.SHARED_OBJECT, objects, + output_filename, output_dir, + libraries, library_dirs, runtime_library_dirs, + export_symbols, debug, + extra_preargs, extra_postargs, build_temp, target_lang) + + + def link_executable(self, + objects, + output_progname, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + target_lang=None): + self.link(CCompiler.EXECUTABLE, objects, + self.executable_filename(output_progname), output_dir, + libraries, library_dirs, runtime_library_dirs, None, + debug, extra_preargs, extra_postargs, None, target_lang) + + + # -- Miscellaneous methods ----------------------------------------- + # These are all used by the 'gen_lib_options() function; there is + # no appropriate default implementation so subclasses should + # implement all of these. + + def library_dir_option(self, dir): + """Return the compiler option to add 'dir' to the list of + directories searched for libraries. + """ + raise NotImplementedError + + def runtime_library_dir_option(self, dir): + """Return the compiler option to add 'dir' to the list of + directories searched for runtime libraries. + """ + raise NotImplementedError + + def library_option(self, lib): + """Return the compiler option to add 'lib' to the list of libraries + linked into the shared library or executable. + """ + raise NotImplementedError + + def has_function(self, funcname, includes=None, include_dirs=None, + libraries=None, library_dirs=None): + """Return a boolean indicating whether funcname is supported on + the current platform. The optional arguments can be used to + augment the compilation environment. + """ + # this can't be included at module scope because it tries to + # import math which might not be available at that point - maybe + # the necessary logic should just be inlined? + import tempfile + if includes is None: + includes = [] + if include_dirs is None: + include_dirs = [] + if libraries is None: + libraries = [] + if library_dirs is None: + library_dirs = [] + fd, fname = tempfile.mkstemp(".c", funcname, text=True) + f = os.fdopen(fd, "w") + try: + for incl in includes: + f.write("""#include "%s"\n""" % incl) + f.write("""\ +main (int argc, char **argv) { + %s(); +} +""" % funcname) + finally: + f.close() + try: + objects = self.compile([fname], include_dirs=include_dirs) + except CompileError: + return False + + try: + self.link_executable(objects, "a.out", + libraries=libraries, + library_dirs=library_dirs) + except (LinkError, TypeError): + return False + return True + + def find_library_file (self, dirs, lib, debug=0): + """Search the specified list of directories for a static or shared + library file 'lib' and return the full path to that file. If + 'debug' true, look for a debugging version (if that makes sense on + the current platform). Return None if 'lib' wasn't found in any of + the specified directories. + """ + raise NotImplementedError + + # -- Filename generation methods ----------------------------------- + + # The default implementation of the filename generating methods are + # prejudiced towards the Unix/DOS/Windows view of the world: + # * object files are named by replacing the source file extension + # (eg. .c/.cpp -> .o/.obj) + # * library files (shared or static) are named by plugging the + # library name and extension into a format string, eg. + # "lib%s.%s" % (lib_name, ".a") for Unix static libraries + # * executables are named by appending an extension (possibly + # empty) to the program name: eg. progname + ".exe" for + # Windows + # + # To reduce redundant code, these methods expect to find + # several attributes in the current object (presumably defined + # as class attributes): + # * src_extensions - + # list of C/C++ source file extensions, eg. ['.c', '.cpp'] + # * obj_extension - + # object file extension, eg. '.o' or '.obj' + # * static_lib_extension - + # extension for static library files, eg. '.a' or '.lib' + # * shared_lib_extension - + # extension for shared library/object files, eg. '.so', '.dll' + # * static_lib_format - + # format string for generating static library filenames, + # eg. 'lib%s.%s' or '%s.%s' + # * shared_lib_format + # format string for generating shared library filenames + # (probably same as static_lib_format, since the extension + # is one of the intended parameters to the format string) + # * exe_extension - + # extension for executable files, eg. '' or '.exe' + + def object_filenames(self, source_filenames, strip_dir=0, output_dir=''): + if output_dir is None: + output_dir = '' + obj_names = [] + for src_name in source_filenames: + base, ext = os.path.splitext(src_name) + base = os.path.splitdrive(base)[1] # Chop off the drive + base = base[os.path.isabs(base):] # If abs, chop off leading / + if ext not in self.src_extensions: + raise UnknownFileError( + "unknown file type '%s' (from '%s')" % (ext, src_name)) + if strip_dir: + base = os.path.basename(base) + obj_names.append(os.path.join(output_dir, + base + self.obj_extension)) + return obj_names + + def shared_object_filename(self, basename, strip_dir=0, output_dir=''): + assert output_dir is not None + if strip_dir: + basename = os.path.basename(basename) + return os.path.join(output_dir, basename + self.shared_lib_extension) + + def executable_filename(self, basename, strip_dir=0, output_dir=''): + assert output_dir is not None + if strip_dir: + basename = os.path.basename(basename) + return os.path.join(output_dir, basename + (self.exe_extension or '')) + + def library_filename(self, libname, lib_type='static', # or 'shared' + strip_dir=0, output_dir=''): + assert output_dir is not None + if lib_type not in ("static", "shared", "dylib", "xcode_stub"): + raise ValueError( + "'lib_type' must be \"static\", \"shared\", \"dylib\", or \"xcode_stub\"") + fmt = getattr(self, lib_type + "_lib_format") + ext = getattr(self, lib_type + "_lib_extension") + + dir, base = os.path.split(libname) + filename = fmt % (base, ext) + if strip_dir: + dir = '' + + return os.path.join(output_dir, dir, filename) + + + # -- Utility methods ----------------------------------------------- + + def announce(self, msg, level=1): + log.debug(msg) + + def debug_print(self, msg): + from distutils.debug import DEBUG + if DEBUG: + print(msg) + + def warn(self, msg): + sys.stderr.write("warning: %s\n" % msg) + + def execute(self, func, args, msg=None, level=1): + execute(func, args, msg, self.dry_run) + + def spawn(self, cmd): + spawn(cmd, dry_run=self.dry_run) + + def move_file(self, src, dst): + return move_file(src, dst, dry_run=self.dry_run) + + def mkpath (self, name, mode=0o777): + mkpath(name, mode, dry_run=self.dry_run) + + +# Map a sys.platform/os.name ('posix', 'nt') to the default compiler +# type for that platform. Keys are interpreted as re match +# patterns. Order is important; platform mappings are preferred over +# OS names. +_default_compilers = ( + + # Platform string mappings + + # on a cygwin built python we can use gcc like an ordinary UNIXish + # compiler + ('cygwin.*', 'unix'), + + # OS name mappings + ('posix', 'unix'), + ('nt', 'msvc'), + + ) + +def get_default_compiler(osname=None, platform=None): + """Determine the default compiler to use for the given platform. + + osname should be one of the standard Python OS names (i.e. the + ones returned by os.name) and platform the common value + returned by sys.platform for the platform in question. + + The default values are os.name and sys.platform in case the + parameters are not given. + """ + if osname is None: + osname = os.name + if platform is None: + platform = sys.platform + for pattern, compiler in _default_compilers: + if re.match(pattern, platform) is not None or \ + re.match(pattern, osname) is not None: + return compiler + # Default to Unix compiler + return 'unix' + +# Map compiler types to (module_name, class_name) pairs -- ie. where to +# find the code that implements an interface to this compiler. (The module +# is assumed to be in the 'distutils' package.) +compiler_class = { 'unix': ('unixccompiler', 'UnixCCompiler', + "standard UNIX-style compiler"), + 'msvc': ('_msvccompiler', 'MSVCCompiler', + "Microsoft Visual C++"), + 'cygwin': ('cygwinccompiler', 'CygwinCCompiler', + "Cygwin port of GNU C Compiler for Win32"), + 'mingw32': ('cygwinccompiler', 'Mingw32CCompiler', + "Mingw32 port of GNU C Compiler for Win32"), + 'bcpp': ('bcppcompiler', 'BCPPCompiler', + "Borland C++ Compiler"), + } + +def show_compilers(): + """Print list of available compilers (used by the "--help-compiler" + options to "build", "build_ext", "build_clib"). + """ + # XXX this "knows" that the compiler option it's describing is + # "--compiler", which just happens to be the case for the three + # commands that use it. + from distutils.fancy_getopt import FancyGetopt + compilers = [] + for compiler in compiler_class.keys(): + compilers.append(("compiler="+compiler, None, + compiler_class[compiler][2])) + compilers.sort() + pretty_printer = FancyGetopt(compilers) + pretty_printer.print_help("List of available compilers:") + + +def new_compiler(plat=None, compiler=None, verbose=0, dry_run=0, force=0): + """Generate an instance of some CCompiler subclass for the supplied + platform/compiler combination. 'plat' defaults to 'os.name' + (eg. 'posix', 'nt'), and 'compiler' defaults to the default compiler + for that platform. Currently only 'posix' and 'nt' are supported, and + the default compilers are "traditional Unix interface" (UnixCCompiler + class) and Visual C++ (MSVCCompiler class). Note that it's perfectly + possible to ask for a Unix compiler object under Windows, and a + Microsoft compiler object under Unix -- if you supply a value for + 'compiler', 'plat' is ignored. + """ + if plat is None: + plat = os.name + + try: + if compiler is None: + compiler = get_default_compiler(plat) + + (module_name, class_name, long_description) = compiler_class[compiler] + except KeyError: + msg = "don't know how to compile C/C++ code on platform '%s'" % plat + if compiler is not None: + msg = msg + " with '%s' compiler" % compiler + raise DistutilsPlatformError(msg) + + try: + module_name = "distutils." + module_name + __import__ (module_name) + module = sys.modules[module_name] + klass = vars(module)[class_name] + except ImportError: + raise DistutilsModuleError( + "can't compile C/C++ code: unable to load module '%s'" % \ + module_name) + except KeyError: + raise DistutilsModuleError( + "can't compile C/C++ code: unable to find class '%s' " + "in module '%s'" % (class_name, module_name)) + + # XXX The None is necessary to preserve backwards compatibility + # with classes that expect verbose to be the first positional + # argument. + return klass(None, dry_run, force) + + +def gen_preprocess_options(macros, include_dirs): + """Generate C pre-processor options (-D, -U, -I) as used by at least + two types of compilers: the typical Unix compiler and Visual C++. + 'macros' is the usual thing, a list of 1- or 2-tuples, where (name,) + means undefine (-U) macro 'name', and (name,value) means define (-D) + macro 'name' to 'value'. 'include_dirs' is just a list of directory + names to be added to the header file search path (-I). Returns a list + of command-line options suitable for either Unix compilers or Visual + C++. + """ + # XXX it would be nice (mainly aesthetic, and so we don't generate + # stupid-looking command lines) to go over 'macros' and eliminate + # redundant definitions/undefinitions (ie. ensure that only the + # latest mention of a particular macro winds up on the command + # line). I don't think it's essential, though, since most (all?) + # Unix C compilers only pay attention to the latest -D or -U + # mention of a macro on their command line. Similar situation for + # 'include_dirs'. I'm punting on both for now. Anyways, weeding out + # redundancies like this should probably be the province of + # CCompiler, since the data structures used are inherited from it + # and therefore common to all CCompiler classes. + pp_opts = [] + for macro in macros: + if not (isinstance(macro, tuple) and 1 <= len(macro) <= 2): + raise TypeError( + "bad macro definition '%s': " + "each element of 'macros' list must be a 1- or 2-tuple" + % macro) + + if len(macro) == 1: # undefine this macro + pp_opts.append("-U%s" % macro[0]) + elif len(macro) == 2: + if macro[1] is None: # define with no explicit value + pp_opts.append("-D%s" % macro[0]) + else: + # XXX *don't* need to be clever about quoting the + # macro value here, because we're going to avoid the + # shell at all costs when we spawn the command! + pp_opts.append("-D%s=%s" % macro) + + for dir in include_dirs: + pp_opts.append("-I%s" % dir) + return pp_opts + + +def gen_lib_options (compiler, library_dirs, runtime_library_dirs, libraries): + """Generate linker options for searching library directories and + linking with specific libraries. 'libraries' and 'library_dirs' are, + respectively, lists of library names (not filenames!) and search + directories. Returns a list of command-line options suitable for use + with some compiler (depending on the two format strings passed in). + """ + lib_opts = [] + + for dir in library_dirs: + lib_opts.append(compiler.library_dir_option(dir)) + + for dir in runtime_library_dirs: + opt = compiler.runtime_library_dir_option(dir) + if isinstance(opt, list): + lib_opts = lib_opts + opt + else: + lib_opts.append(opt) + + # XXX it's important that we *not* remove redundant library mentions! + # sometimes you really do have to say "-lfoo -lbar -lfoo" in order to + # resolve all symbols. I just hope we never have to say "-lfoo obj.o + # -lbar" to get things to work -- that's certainly a possibility, but a + # pretty nasty way to arrange your C code. + + for lib in libraries: + (lib_dir, lib_name) = os.path.split(lib) + if lib_dir: + lib_file = compiler.find_library_file([lib_dir], lib_name) + if lib_file: + lib_opts.append(lib_file) + else: + compiler.warn("no library file corresponding to " + "'%s' found (skipping)" % lib) + else: + lib_opts.append(compiler.library_option (lib)) + return lib_opts diff --git a/distutils/distutils/cmd.py b/distutils/distutils/cmd.py new file mode 100644 index 0000000..939f795 --- /dev/null +++ b/distutils/distutils/cmd.py @@ -0,0 +1,434 @@ +"""distutils.cmd + +Provides the Command class, the base class for the command classes +in the distutils.command package. +""" + +import sys, os, re +from distutils.errors import DistutilsOptionError +from distutils import util, dir_util, file_util, archive_util, dep_util +from distutils import log + +class Command: + """Abstract base class for defining command classes, the "worker bees" + of the Distutils. A useful analogy for command classes is to think of + them as subroutines with local variables called "options". The options + are "declared" in 'initialize_options()' and "defined" (given their + final values, aka "finalized") in 'finalize_options()', both of which + must be defined by every command class. The distinction between the + two is necessary because option values might come from the outside + world (command line, config file, ...), and any options dependent on + other options must be computed *after* these outside influences have + been processed -- hence 'finalize_options()'. The "body" of the + subroutine, where it does all its work based on the values of its + options, is the 'run()' method, which must also be implemented by every + command class. + """ + + # 'sub_commands' formalizes the notion of a "family" of commands, + # eg. "install" as the parent with sub-commands "install_lib", + # "install_headers", etc. The parent of a family of commands + # defines 'sub_commands' as a class attribute; it's a list of + # (command_name : string, predicate : unbound_method | string | None) + # tuples, where 'predicate' is a method of the parent command that + # determines whether the corresponding command is applicable in the + # current situation. (Eg. we "install_headers" is only applicable if + # we have any C header files to install.) If 'predicate' is None, + # that command is always applicable. + # + # 'sub_commands' is usually defined at the *end* of a class, because + # predicates can be unbound methods, so they must already have been + # defined. The canonical example is the "install" command. + sub_commands = [] + + + # -- Creation/initialization methods ------------------------------- + + def __init__(self, dist): + """Create and initialize a new Command object. Most importantly, + invokes the 'initialize_options()' method, which is the real + initializer and depends on the actual command being + instantiated. + """ + # late import because of mutual dependence between these classes + from distutils.dist import Distribution + + if not isinstance(dist, Distribution): + raise TypeError("dist must be a Distribution instance") + if self.__class__ is Command: + raise RuntimeError("Command is an abstract class") + + self.distribution = dist + self.initialize_options() + + # Per-command versions of the global flags, so that the user can + # customize Distutils' behaviour command-by-command and let some + # commands fall back on the Distribution's behaviour. None means + # "not defined, check self.distribution's copy", while 0 or 1 mean + # false and true (duh). Note that this means figuring out the real + # value of each flag is a touch complicated -- hence "self._dry_run" + # will be handled by __getattr__, below. + # XXX This needs to be fixed. + self._dry_run = None + + # verbose is largely ignored, but needs to be set for + # backwards compatibility (I think)? + self.verbose = dist.verbose + + # Some commands define a 'self.force' option to ignore file + # timestamps, but methods defined *here* assume that + # 'self.force' exists for all commands. So define it here + # just to be safe. + self.force = None + + # The 'help' flag is just used for command-line parsing, so + # none of that complicated bureaucracy is needed. + self.help = 0 + + # 'finalized' records whether or not 'finalize_options()' has been + # called. 'finalize_options()' itself should not pay attention to + # this flag: it is the business of 'ensure_finalized()', which + # always calls 'finalize_options()', to respect/update it. + self.finalized = 0 + + # XXX A more explicit way to customize dry_run would be better. + def __getattr__(self, attr): + if attr == 'dry_run': + myval = getattr(self, "_" + attr) + if myval is None: + return getattr(self.distribution, attr) + else: + return myval + else: + raise AttributeError(attr) + + def ensure_finalized(self): + if not self.finalized: + self.finalize_options() + self.finalized = 1 + + # Subclasses must define: + # initialize_options() + # provide default values for all options; may be customized by + # setup script, by options from config file(s), or by command-line + # options + # finalize_options() + # decide on the final values for all options; this is called + # after all possible intervention from the outside world + # (command-line, option file, etc.) has been processed + # run() + # run the command: do whatever it is we're here to do, + # controlled by the command's various option values + + def initialize_options(self): + """Set default values for all the options that this command + supports. Note that these defaults may be overridden by other + commands, by the setup script, by config files, or by the + command-line. Thus, this is not the place to code dependencies + between options; generally, 'initialize_options()' implementations + are just a bunch of "self.foo = None" assignments. + + This method must be implemented by all command classes. + """ + raise RuntimeError("abstract method -- subclass %s must override" + % self.__class__) + + def finalize_options(self): + """Set final values for all the options that this command supports. + This is always called as late as possible, ie. after any option + assignments from the command-line or from other commands have been + done. Thus, this is the place to code option dependencies: if + 'foo' depends on 'bar', then it is safe to set 'foo' from 'bar' as + long as 'foo' still has the same value it was assigned in + 'initialize_options()'. + + This method must be implemented by all command classes. + """ + raise RuntimeError("abstract method -- subclass %s must override" + % self.__class__) + + + def dump_options(self, header=None, indent=""): + from distutils.fancy_getopt import longopt_xlate + if header is None: + header = "command options for '%s':" % self.get_command_name() + self.announce(indent + header, level=log.INFO) + indent = indent + " " + for (option, _, _) in self.user_options: + option = option.translate(longopt_xlate) + if option[-1] == "=": + option = option[:-1] + value = getattr(self, option) + self.announce(indent + "%s = %s" % (option, value), + level=log.INFO) + + def run(self): + """A command's raison d'etre: carry out the action it exists to + perform, controlled by the options initialized in + 'initialize_options()', customized by other commands, the setup + script, the command-line, and config files, and finalized in + 'finalize_options()'. All terminal output and filesystem + interaction should be done by 'run()'. + + This method must be implemented by all command classes. + """ + raise RuntimeError("abstract method -- subclass %s must override" + % self.__class__) + + def announce(self, msg, level=1): + """If the current verbosity level is of greater than or equal to + 'level' print 'msg' to stdout. + """ + log.log(level, msg) + + def debug_print(self, msg): + """Print 'msg' to stdout if the global DEBUG (taken from the + DISTUTILS_DEBUG environment variable) flag is true. + """ + from distutils.debug import DEBUG + if DEBUG: + print(msg) + sys.stdout.flush() + + + # -- Option validation methods ------------------------------------- + # (these are very handy in writing the 'finalize_options()' method) + # + # NB. the general philosophy here is to ensure that a particular option + # value meets certain type and value constraints. If not, we try to + # force it into conformance (eg. if we expect a list but have a string, + # split the string on comma and/or whitespace). If we can't force the + # option into conformance, raise DistutilsOptionError. Thus, command + # classes need do nothing more than (eg.) + # self.ensure_string_list('foo') + # and they can be guaranteed that thereafter, self.foo will be + # a list of strings. + + def _ensure_stringlike(self, option, what, default=None): + val = getattr(self, option) + if val is None: + setattr(self, option, default) + return default + elif not isinstance(val, str): + raise DistutilsOptionError("'%s' must be a %s (got `%s`)" + % (option, what, val)) + return val + + def ensure_string(self, option, default=None): + """Ensure that 'option' is a string; if not defined, set it to + 'default'. + """ + self._ensure_stringlike(option, "string", default) + + def ensure_string_list(self, option): + r"""Ensure that 'option' is a list of strings. If 'option' is + currently a string, we split it either on /,\s*/ or /\s+/, so + "foo bar baz", "foo,bar,baz", and "foo, bar baz" all become + ["foo", "bar", "baz"]. + """ + val = getattr(self, option) + if val is None: + return + elif isinstance(val, str): + setattr(self, option, re.split(r',\s*|\s+', val)) + else: + if isinstance(val, list): + ok = all(isinstance(v, str) for v in val) + else: + ok = False + if not ok: + raise DistutilsOptionError( + "'%s' must be a list of strings (got %r)" + % (option, val)) + + def _ensure_tested_string(self, option, tester, what, error_fmt, + default=None): + val = self._ensure_stringlike(option, what, default) + if val is not None and not tester(val): + raise DistutilsOptionError(("error in '%s' option: " + error_fmt) + % (option, val)) + + def ensure_filename(self, option): + """Ensure that 'option' is the name of an existing file.""" + self._ensure_tested_string(option, os.path.isfile, + "filename", + "'%s' does not exist or is not a file") + + def ensure_dirname(self, option): + self._ensure_tested_string(option, os.path.isdir, + "directory name", + "'%s' does not exist or is not a directory") + + + # -- Convenience methods for commands ------------------------------ + + def get_command_name(self): + if hasattr(self, 'command_name'): + return self.command_name + else: + return self.__class__.__name__ + + def set_undefined_options(self, src_cmd, *option_pairs): + """Set the values of any "undefined" options from corresponding + option values in some other command object. "Undefined" here means + "is None", which is the convention used to indicate that an option + has not been changed between 'initialize_options()' and + 'finalize_options()'. Usually called from 'finalize_options()' for + options that depend on some other command rather than another + option of the same command. 'src_cmd' is the other command from + which option values will be taken (a command object will be created + for it if necessary); the remaining arguments are + '(src_option,dst_option)' tuples which mean "take the value of + 'src_option' in the 'src_cmd' command object, and copy it to + 'dst_option' in the current command object". + """ + # Option_pairs: list of (src_option, dst_option) tuples + src_cmd_obj = self.distribution.get_command_obj(src_cmd) + src_cmd_obj.ensure_finalized() + for (src_option, dst_option) in option_pairs: + if getattr(self, dst_option) is None: + setattr(self, dst_option, getattr(src_cmd_obj, src_option)) + + def get_finalized_command(self, command, create=1): + """Wrapper around Distribution's 'get_command_obj()' method: find + (create if necessary and 'create' is true) the command object for + 'command', call its 'ensure_finalized()' method, and return the + finalized command object. + """ + cmd_obj = self.distribution.get_command_obj(command, create) + cmd_obj.ensure_finalized() + return cmd_obj + + # XXX rename to 'get_reinitialized_command()'? (should do the + # same in dist.py, if so) + def reinitialize_command(self, command, reinit_subcommands=0): + return self.distribution.reinitialize_command(command, + reinit_subcommands) + + def run_command(self, command): + """Run some other command: uses the 'run_command()' method of + Distribution, which creates and finalizes the command object if + necessary and then invokes its 'run()' method. + """ + self.distribution.run_command(command) + + def get_sub_commands(self): + """Determine the sub-commands that are relevant in the current + distribution (ie., that need to be run). This is based on the + 'sub_commands' class attribute: each tuple in that list may include + a method that we call to determine if the subcommand needs to be + run for the current distribution. Return a list of command names. + """ + commands = [] + for (cmd_name, method) in self.sub_commands: + if method is None or method(self): + commands.append(cmd_name) + return commands + + + # -- External world manipulation ----------------------------------- + + def warn(self, msg): + log.warn("warning: %s: %s\n", self.get_command_name(), msg) + + def execute(self, func, args, msg=None, level=1): + util.execute(func, args, msg, dry_run=self.dry_run) + + def mkpath(self, name, mode=0o777): + dir_util.mkpath(name, mode, dry_run=self.dry_run) + + def copy_file(self, infile, outfile, preserve_mode=1, preserve_times=1, + link=None, level=1): + """Copy a file respecting verbose, dry-run and force flags. (The + former two default to whatever is in the Distribution object, and + the latter defaults to false for commands that don't define it.)""" + return file_util.copy_file(infile, outfile, preserve_mode, + preserve_times, not self.force, link, + dry_run=self.dry_run) + + def copy_tree(self, infile, outfile, preserve_mode=1, preserve_times=1, + preserve_symlinks=0, level=1): + """Copy an entire directory tree respecting verbose, dry-run, + and force flags. + """ + return dir_util.copy_tree(infile, outfile, preserve_mode, + preserve_times, preserve_symlinks, + not self.force, dry_run=self.dry_run) + + def move_file (self, src, dst, level=1): + """Move a file respecting dry-run flag.""" + return file_util.move_file(src, dst, dry_run=self.dry_run) + + def spawn(self, cmd, search_path=1, level=1): + """Spawn an external command respecting dry-run flag.""" + from distutils.spawn import spawn + spawn(cmd, search_path, dry_run=self.dry_run) + + def make_archive(self, base_name, format, root_dir=None, base_dir=None, + owner=None, group=None): + return archive_util.make_archive(base_name, format, root_dir, base_dir, + dry_run=self.dry_run, + owner=owner, group=group) + + def make_file(self, infiles, outfile, func, args, + exec_msg=None, skip_msg=None, level=1): + """Special case of 'execute()' for operations that process one or + more input files and generate one output file. Works just like + 'execute()', except the operation is skipped and a different + message printed if 'outfile' already exists and is newer than all + files listed in 'infiles'. If the command defined 'self.force', + and it is true, then the command is unconditionally run -- does no + timestamp checks. + """ + if skip_msg is None: + skip_msg = "skipping %s (inputs unchanged)" % outfile + + # Allow 'infiles' to be a single string + if isinstance(infiles, str): + infiles = (infiles,) + elif not isinstance(infiles, (list, tuple)): + raise TypeError( + "'infiles' must be a string, or a list or tuple of strings") + + if exec_msg is None: + exec_msg = "generating %s from %s" % (outfile, ', '.join(infiles)) + + # If 'outfile' must be regenerated (either because it doesn't + # exist, is out-of-date, or the 'force' flag is true) then + # perform the action that presumably regenerates it + if self.force or dep_util.newer_group(infiles, outfile): + self.execute(func, args, exec_msg, level) + # Otherwise, print the "skip" message + else: + log.debug(skip_msg) + +# XXX 'install_misc' class not currently used -- it was the base class for +# both 'install_scripts' and 'install_data', but they outgrew it. It might +# still be useful for 'install_headers', though, so I'm keeping it around +# for the time being. + +class install_misc(Command): + """Common base class for installing some files in a subdirectory. + Currently used by install_data and install_scripts. + """ + + user_options = [('install-dir=', 'd', "directory to install the files to")] + + def initialize_options (self): + self.install_dir = None + self.outfiles = [] + + def _install_dir_from(self, dirname): + self.set_undefined_options('install', (dirname, 'install_dir')) + + def _copy_files(self, filelist): + self.outfiles = [] + if not filelist: + return + self.mkpath(self.install_dir) + for f in filelist: + self.copy_file(f, self.install_dir) + self.outfiles.append(os.path.join(self.install_dir, f)) + + def get_outputs(self): + return self.outfiles diff --git a/distutils/distutils/command/__init__.py b/distutils/distutils/command/__init__.py new file mode 100644 index 0000000..481eea9 --- /dev/null +++ b/distutils/distutils/command/__init__.py @@ -0,0 +1,31 @@ +"""distutils.command + +Package containing implementation of all the standard Distutils +commands.""" + +__all__ = ['build', + 'build_py', + 'build_ext', + 'build_clib', + 'build_scripts', + 'clean', + 'install', + 'install_lib', + 'install_headers', + 'install_scripts', + 'install_data', + 'sdist', + 'register', + 'bdist', + 'bdist_dumb', + 'bdist_rpm', + 'bdist_wininst', + 'check', + 'upload', + # These two are reserved for future use: + #'bdist_sdux', + #'bdist_pkgtool', + # Note: + # bdist_packager is not included because it only provides + # an abstract base class + ] diff --git a/distutils/distutils/command/bdist.py b/distutils/distutils/command/bdist.py new file mode 100644 index 0000000..014871d --- /dev/null +++ b/distutils/distutils/command/bdist.py @@ -0,0 +1,143 @@ +"""distutils.command.bdist + +Implements the Distutils 'bdist' command (create a built [binary] +distribution).""" + +import os +from distutils.core import Command +from distutils.errors import * +from distutils.util import get_platform + + +def show_formats(): + """Print list of available formats (arguments to "--format" option). + """ + from distutils.fancy_getopt import FancyGetopt + formats = [] + for format in bdist.format_commands: + formats.append(("formats=" + format, None, + bdist.format_command[format][1])) + pretty_printer = FancyGetopt(formats) + pretty_printer.print_help("List of available distribution formats:") + + +class bdist(Command): + + description = "create a built (binary) distribution" + + user_options = [('bdist-base=', 'b', + "temporary directory for creating built distributions"), + ('plat-name=', 'p', + "platform name to embed in generated filenames " + "(default: %s)" % get_platform()), + ('formats=', None, + "formats for distribution (comma-separated list)"), + ('dist-dir=', 'd', + "directory to put final built distributions in " + "[default: dist]"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ('owner=', 'u', + "Owner name used when creating a tar file" + " [default: current user]"), + ('group=', 'g', + "Group name used when creating a tar file" + " [default: current group]"), + ] + + boolean_options = ['skip-build'] + + help_options = [ + ('help-formats', None, + "lists available distribution formats", show_formats), + ] + + # The following commands do not take a format option from bdist + no_format_option = ('bdist_rpm',) + + # This won't do in reality: will need to distinguish RPM-ish Linux, + # Debian-ish Linux, Solaris, FreeBSD, ..., Windows, Mac OS. + default_format = {'posix': 'gztar', + 'nt': 'zip'} + + # Establish the preferred order (for the --help-formats option). + format_commands = ['rpm', 'gztar', 'bztar', 'xztar', 'ztar', 'tar', + 'wininst', 'zip', 'msi'] + + # And the real information. + format_command = {'rpm': ('bdist_rpm', "RPM distribution"), + 'gztar': ('bdist_dumb', "gzip'ed tar file"), + 'bztar': ('bdist_dumb', "bzip2'ed tar file"), + 'xztar': ('bdist_dumb', "xz'ed tar file"), + 'ztar': ('bdist_dumb', "compressed tar file"), + 'tar': ('bdist_dumb', "tar file"), + 'wininst': ('bdist_wininst', + "Windows executable installer"), + 'zip': ('bdist_dumb', "ZIP file"), + 'msi': ('bdist_msi', "Microsoft Installer") + } + + + def initialize_options(self): + self.bdist_base = None + self.plat_name = None + self.formats = None + self.dist_dir = None + self.skip_build = 0 + self.group = None + self.owner = None + + def finalize_options(self): + # have to finalize 'plat_name' before 'bdist_base' + if self.plat_name is None: + if self.skip_build: + self.plat_name = get_platform() + else: + self.plat_name = self.get_finalized_command('build').plat_name + + # 'bdist_base' -- parent of per-built-distribution-format + # temporary directories (eg. we'll probably have + # "build/bdist./dumb", "build/bdist./rpm", etc.) + if self.bdist_base is None: + build_base = self.get_finalized_command('build').build_base + self.bdist_base = os.path.join(build_base, + 'bdist.' + self.plat_name) + + self.ensure_string_list('formats') + if self.formats is None: + try: + self.formats = [self.default_format[os.name]] + except KeyError: + raise DistutilsPlatformError( + "don't know how to create built distributions " + "on platform %s" % os.name) + + if self.dist_dir is None: + self.dist_dir = "dist" + + def run(self): + # Figure out which sub-commands we need to run. + commands = [] + for format in self.formats: + try: + commands.append(self.format_command[format][0]) + except KeyError: + raise DistutilsOptionError("invalid format '%s'" % format) + + # Reinitialize and run each command. + for i in range(len(self.formats)): + cmd_name = commands[i] + sub_cmd = self.reinitialize_command(cmd_name) + if cmd_name not in self.no_format_option: + sub_cmd.format = self.formats[i] + + # passing the owner and group names for tar archiving + if cmd_name == 'bdist_dumb': + sub_cmd.owner = self.owner + sub_cmd.group = self.group + + # If we're going to need to run this command again, tell it to + # keep its temporary files around so subsequent runs go faster. + if cmd_name in commands[i+1:]: + sub_cmd.keep_temp = 1 + self.run_command(cmd_name) diff --git a/distutils/distutils/command/bdist_dumb.py b/distutils/distutils/command/bdist_dumb.py new file mode 100644 index 0000000..f0d6b5b --- /dev/null +++ b/distutils/distutils/command/bdist_dumb.py @@ -0,0 +1,123 @@ +"""distutils.command.bdist_dumb + +Implements the Distutils 'bdist_dumb' command (create a "dumb" built +distribution -- i.e., just an archive to be unpacked under $prefix or +$exec_prefix).""" + +import os +from distutils.core import Command +from distutils.util import get_platform +from distutils.dir_util import remove_tree, ensure_relative +from distutils.errors import * +from distutils.sysconfig import get_python_version +from distutils import log + +class bdist_dumb(Command): + + description = "create a \"dumb\" built distribution" + + user_options = [('bdist-dir=', 'd', + "temporary directory for creating the distribution"), + ('plat-name=', 'p', + "platform name to embed in generated filenames " + "(default: %s)" % get_platform()), + ('format=', 'f', + "archive format to create (tar, gztar, bztar, xztar, " + "ztar, zip)"), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ('relative', None, + "build the archive using relative paths " + "(default: false)"), + ('owner=', 'u', + "Owner name used when creating a tar file" + " [default: current user]"), + ('group=', 'g', + "Group name used when creating a tar file" + " [default: current group]"), + ] + + boolean_options = ['keep-temp', 'skip-build', 'relative'] + + default_format = { 'posix': 'gztar', + 'nt': 'zip' } + + def initialize_options(self): + self.bdist_dir = None + self.plat_name = None + self.format = None + self.keep_temp = 0 + self.dist_dir = None + self.skip_build = None + self.relative = 0 + self.owner = None + self.group = None + + def finalize_options(self): + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'dumb') + + if self.format is None: + try: + self.format = self.default_format[os.name] + except KeyError: + raise DistutilsPlatformError( + "don't know how to create dumb built distributions " + "on platform %s" % os.name) + + self.set_undefined_options('bdist', + ('dist_dir', 'dist_dir'), + ('plat_name', 'plat_name'), + ('skip_build', 'skip_build')) + + def run(self): + if not self.skip_build: + self.run_command('build') + + install = self.reinitialize_command('install', reinit_subcommands=1) + install.root = self.bdist_dir + install.skip_build = self.skip_build + install.warn_dir = 0 + + log.info("installing to %s", self.bdist_dir) + self.run_command('install') + + # And make an archive relative to the root of the + # pseudo-installation tree. + archive_basename = "%s.%s" % (self.distribution.get_fullname(), + self.plat_name) + + pseudoinstall_root = os.path.join(self.dist_dir, archive_basename) + if not self.relative: + archive_root = self.bdist_dir + else: + if (self.distribution.has_ext_modules() and + (install.install_base != install.install_platbase)): + raise DistutilsPlatformError( + "can't make a dumb built distribution where " + "base and platbase are different (%s, %s)" + % (repr(install.install_base), + repr(install.install_platbase))) + else: + archive_root = os.path.join(self.bdist_dir, + ensure_relative(install.install_base)) + + # Make the archive + filename = self.make_archive(pseudoinstall_root, + self.format, root_dir=archive_root, + owner=self.owner, group=self.group) + if self.distribution.has_ext_modules(): + pyversion = get_python_version() + else: + pyversion = 'any' + self.distribution.dist_files.append(('bdist_dumb', pyversion, + filename)) + + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) diff --git a/distutils/distutils/command/bdist_msi.py b/distutils/distutils/command/bdist_msi.py new file mode 100644 index 0000000..80104c3 --- /dev/null +++ b/distutils/distutils/command/bdist_msi.py @@ -0,0 +1,741 @@ +# Copyright (C) 2005, 2006 Martin von Löwis +# Licensed to PSF under a Contributor Agreement. +# The bdist_wininst command proper +# based on bdist_wininst +""" +Implements the bdist_msi command. +""" + +import sys, os +from distutils.core import Command +from distutils.dir_util import remove_tree +from distutils.sysconfig import get_python_version +from distutils.version import StrictVersion +from distutils.errors import DistutilsOptionError +from distutils.util import get_platform +from distutils import log +import msilib +from msilib import schema, sequence, text +from msilib import Directory, Feature, Dialog, add_data + +class PyDialog(Dialog): + """Dialog class with a fixed layout: controls at the top, then a ruler, + then a list of buttons: back, next, cancel. Optionally a bitmap at the + left.""" + def __init__(self, *args, **kw): + """Dialog(database, name, x, y, w, h, attributes, title, first, + default, cancel, bitmap=true)""" + Dialog.__init__(self, *args) + ruler = self.h - 36 + bmwidth = 152*ruler/328 + #if kw.get("bitmap", True): + # self.bitmap("Bitmap", 0, 0, bmwidth, ruler, "PythonWin") + self.line("BottomLine", 0, ruler, self.w, 0) + + def title(self, title): + "Set the title text of the dialog at the top." + # name, x, y, w, h, flags=Visible|Enabled|Transparent|NoPrefix, + # text, in VerdanaBold10 + self.text("Title", 15, 10, 320, 60, 0x30003, + r"{\VerdanaBold10}%s" % title) + + def back(self, title, next, name = "Back", active = 1): + """Add a back button with a given title, the tab-next button, + its name in the Control table, possibly initially disabled. + + Return the button, so that events can be associated""" + if active: + flags = 3 # Visible|Enabled + else: + flags = 1 # Visible + return self.pushbutton(name, 180, self.h-27 , 56, 17, flags, title, next) + + def cancel(self, title, next, name = "Cancel", active = 1): + """Add a cancel button with a given title, the tab-next button, + its name in the Control table, possibly initially disabled. + + Return the button, so that events can be associated""" + if active: + flags = 3 # Visible|Enabled + else: + flags = 1 # Visible + return self.pushbutton(name, 304, self.h-27, 56, 17, flags, title, next) + + def next(self, title, next, name = "Next", active = 1): + """Add a Next button with a given title, the tab-next button, + its name in the Control table, possibly initially disabled. + + Return the button, so that events can be associated""" + if active: + flags = 3 # Visible|Enabled + else: + flags = 1 # Visible + return self.pushbutton(name, 236, self.h-27, 56, 17, flags, title, next) + + def xbutton(self, name, title, next, xpos): + """Add a button with a given title, the tab-next button, + its name in the Control table, giving its x position; the + y-position is aligned with the other buttons. + + Return the button, so that events can be associated""" + return self.pushbutton(name, int(self.w*xpos - 28), self.h-27, 56, 17, 3, title, next) + +class bdist_msi(Command): + + description = "create a Microsoft Installer (.msi) binary distribution" + + user_options = [('bdist-dir=', None, + "temporary directory for creating the distribution"), + ('plat-name=', 'p', + "platform name to embed in generated filenames " + "(default: %s)" % get_platform()), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('target-version=', None, + "require a specific python version" + + " on the target system"), + ('no-target-compile', 'c', + "do not compile .py to .pyc on the target system"), + ('no-target-optimize', 'o', + "do not compile .py to .pyo (optimized) " + "on the target system"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ('install-script=', None, + "basename of installation script to be run after " + "installation or before deinstallation"), + ('pre-install-script=', None, + "Fully qualified filename of a script to be run before " + "any files are installed. This script need not be in the " + "distribution"), + ] + + boolean_options = ['keep-temp', 'no-target-compile', 'no-target-optimize', + 'skip-build'] + + all_versions = ['2.0', '2.1', '2.2', '2.3', '2.4', + '2.5', '2.6', '2.7', '2.8', '2.9', + '3.0', '3.1', '3.2', '3.3', '3.4', + '3.5', '3.6', '3.7', '3.8', '3.9'] + other_version = 'X' + + def initialize_options(self): + self.bdist_dir = None + self.plat_name = None + self.keep_temp = 0 + self.no_target_compile = 0 + self.no_target_optimize = 0 + self.target_version = None + self.dist_dir = None + self.skip_build = None + self.install_script = None + self.pre_install_script = None + self.versions = None + + def finalize_options(self): + self.set_undefined_options('bdist', ('skip_build', 'skip_build')) + + if self.bdist_dir is None: + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'msi') + + short_version = get_python_version() + if (not self.target_version) and self.distribution.has_ext_modules(): + self.target_version = short_version + + if self.target_version: + self.versions = [self.target_version] + if not self.skip_build and self.distribution.has_ext_modules()\ + and self.target_version != short_version: + raise DistutilsOptionError( + "target version can only be %s, or the '--skip-build'" + " option must be specified" % (short_version,)) + else: + self.versions = list(self.all_versions) + + self.set_undefined_options('bdist', + ('dist_dir', 'dist_dir'), + ('plat_name', 'plat_name'), + ) + + if self.pre_install_script: + raise DistutilsOptionError( + "the pre-install-script feature is not yet implemented") + + if self.install_script: + for script in self.distribution.scripts: + if self.install_script == os.path.basename(script): + break + else: + raise DistutilsOptionError( + "install_script '%s' not found in scripts" + % self.install_script) + self.install_script_key = None + + def run(self): + if not self.skip_build: + self.run_command('build') + + install = self.reinitialize_command('install', reinit_subcommands=1) + install.prefix = self.bdist_dir + install.skip_build = self.skip_build + install.warn_dir = 0 + + install_lib = self.reinitialize_command('install_lib') + # we do not want to include pyc or pyo files + install_lib.compile = 0 + install_lib.optimize = 0 + + if self.distribution.has_ext_modules(): + # If we are building an installer for a Python version other + # than the one we are currently running, then we need to ensure + # our build_lib reflects the other Python version rather than ours. + # Note that for target_version!=sys.version, we must have skipped the + # build step, so there is no issue with enforcing the build of this + # version. + target_version = self.target_version + if not target_version: + assert self.skip_build, "Should have already checked this" + target_version = '%d.%d' % sys.version_info[:2] + plat_specifier = ".%s-%s" % (self.plat_name, target_version) + build = self.get_finalized_command('build') + build.build_lib = os.path.join(build.build_base, + 'lib' + plat_specifier) + + log.info("installing to %s", self.bdist_dir) + install.ensure_finalized() + + # avoid warning of 'install_lib' about installing + # into a directory not in sys.path + sys.path.insert(0, os.path.join(self.bdist_dir, 'PURELIB')) + + install.run() + + del sys.path[0] + + self.mkpath(self.dist_dir) + fullname = self.distribution.get_fullname() + installer_name = self.get_installer_filename(fullname) + installer_name = os.path.abspath(installer_name) + if os.path.exists(installer_name): os.unlink(installer_name) + + metadata = self.distribution.metadata + author = metadata.author + if not author: + author = metadata.maintainer + if not author: + author = "UNKNOWN" + version = metadata.get_version() + # ProductVersion must be strictly numeric + # XXX need to deal with prerelease versions + sversion = "%d.%d.%d" % StrictVersion(version).version + # Prefix ProductName with Python x.y, so that + # it sorts together with the other Python packages + # in Add-Remove-Programs (APR) + fullname = self.distribution.get_fullname() + if self.target_version: + product_name = "Python %s %s" % (self.target_version, fullname) + else: + product_name = "Python %s" % (fullname) + self.db = msilib.init_database(installer_name, schema, + product_name, msilib.gen_uuid(), + sversion, author) + msilib.add_tables(self.db, sequence) + props = [('DistVersion', version)] + email = metadata.author_email or metadata.maintainer_email + if email: + props.append(("ARPCONTACT", email)) + if metadata.url: + props.append(("ARPURLINFOABOUT", metadata.url)) + if props: + add_data(self.db, 'Property', props) + + self.add_find_python() + self.add_files() + self.add_scripts() + self.add_ui() + self.db.Commit() + + if hasattr(self.distribution, 'dist_files'): + tup = 'bdist_msi', self.target_version or 'any', fullname + self.distribution.dist_files.append(tup) + + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) + + def add_files(self): + db = self.db + cab = msilib.CAB("distfiles") + rootdir = os.path.abspath(self.bdist_dir) + + root = Directory(db, cab, None, rootdir, "TARGETDIR", "SourceDir") + f = Feature(db, "Python", "Python", "Everything", + 0, 1, directory="TARGETDIR") + + items = [(f, root, '')] + for version in self.versions + [self.other_version]: + target = "TARGETDIR" + version + name = default = "Python" + version + desc = "Everything" + if version is self.other_version: + title = "Python from another location" + level = 2 + else: + title = "Python %s from registry" % version + level = 1 + f = Feature(db, name, title, desc, 1, level, directory=target) + dir = Directory(db, cab, root, rootdir, target, default) + items.append((f, dir, version)) + db.Commit() + + seen = {} + for feature, dir, version in items: + todo = [dir] + while todo: + dir = todo.pop() + for file in os.listdir(dir.absolute): + afile = os.path.join(dir.absolute, file) + if os.path.isdir(afile): + short = "%s|%s" % (dir.make_short(file), file) + default = file + version + newdir = Directory(db, cab, dir, file, default, short) + todo.append(newdir) + else: + if not dir.component: + dir.start_component(dir.logical, feature, 0) + if afile not in seen: + key = seen[afile] = dir.add_file(file) + if file==self.install_script: + if self.install_script_key: + raise DistutilsOptionError( + "Multiple files with name %s" % file) + self.install_script_key = '[#%s]' % key + else: + key = seen[afile] + add_data(self.db, "DuplicateFile", + [(key + version, dir.component, key, None, dir.logical)]) + db.Commit() + cab.commit(db) + + def add_find_python(self): + """Adds code to the installer to compute the location of Python. + + Properties PYTHON.MACHINE.X.Y and PYTHON.USER.X.Y will be set from the + registry for each version of Python. + + Properties TARGETDIRX.Y will be set from PYTHON.USER.X.Y if defined, + else from PYTHON.MACHINE.X.Y. + + Properties PYTHONX.Y will be set to TARGETDIRX.Y\\python.exe""" + + start = 402 + for ver in self.versions: + install_path = r"SOFTWARE\Python\PythonCore\%s\InstallPath" % ver + machine_reg = "python.machine." + ver + user_reg = "python.user." + ver + machine_prop = "PYTHON.MACHINE." + ver + user_prop = "PYTHON.USER." + ver + machine_action = "PythonFromMachine" + ver + user_action = "PythonFromUser" + ver + exe_action = "PythonExe" + ver + target_dir_prop = "TARGETDIR" + ver + exe_prop = "PYTHON" + ver + if msilib.Win64: + # type: msidbLocatorTypeRawValue + msidbLocatorType64bit + Type = 2+16 + else: + Type = 2 + add_data(self.db, "RegLocator", + [(machine_reg, 2, install_path, None, Type), + (user_reg, 1, install_path, None, Type)]) + add_data(self.db, "AppSearch", + [(machine_prop, machine_reg), + (user_prop, user_reg)]) + add_data(self.db, "CustomAction", + [(machine_action, 51+256, target_dir_prop, "[" + machine_prop + "]"), + (user_action, 51+256, target_dir_prop, "[" + user_prop + "]"), + (exe_action, 51+256, exe_prop, "[" + target_dir_prop + "]\\python.exe"), + ]) + add_data(self.db, "InstallExecuteSequence", + [(machine_action, machine_prop, start), + (user_action, user_prop, start + 1), + (exe_action, None, start + 2), + ]) + add_data(self.db, "InstallUISequence", + [(machine_action, machine_prop, start), + (user_action, user_prop, start + 1), + (exe_action, None, start + 2), + ]) + add_data(self.db, "Condition", + [("Python" + ver, 0, "NOT TARGETDIR" + ver)]) + start += 4 + assert start < 500 + + def add_scripts(self): + if self.install_script: + start = 6800 + for ver in self.versions + [self.other_version]: + install_action = "install_script." + ver + exe_prop = "PYTHON" + ver + add_data(self.db, "CustomAction", + [(install_action, 50, exe_prop, self.install_script_key)]) + add_data(self.db, "InstallExecuteSequence", + [(install_action, "&Python%s=3" % ver, start)]) + start += 1 + # XXX pre-install scripts are currently refused in finalize_options() + # but if this feature is completed, it will also need to add + # entries for each version as the above code does + if self.pre_install_script: + scriptfn = os.path.join(self.bdist_dir, "preinstall.bat") + f = open(scriptfn, "w") + # The batch file will be executed with [PYTHON], so that %1 + # is the path to the Python interpreter; %0 will be the path + # of the batch file. + # rem =""" + # %1 %0 + # exit + # """ + # + f.write('rem ="""\n%1 %0\nexit\n"""\n') + f.write(open(self.pre_install_script).read()) + f.close() + add_data(self.db, "Binary", + [("PreInstall", msilib.Binary(scriptfn)) + ]) + add_data(self.db, "CustomAction", + [("PreInstall", 2, "PreInstall", None) + ]) + add_data(self.db, "InstallExecuteSequence", + [("PreInstall", "NOT Installed", 450)]) + + + def add_ui(self): + db = self.db + x = y = 50 + w = 370 + h = 300 + title = "[ProductName] Setup" + + # see "Dialog Style Bits" + modal = 3 # visible | modal + modeless = 1 # visible + track_disk_space = 32 + + # UI customization properties + add_data(db, "Property", + # See "DefaultUIFont Property" + [("DefaultUIFont", "DlgFont8"), + # See "ErrorDialog Style Bit" + ("ErrorDialog", "ErrorDlg"), + ("Progress1", "Install"), # modified in maintenance type dlg + ("Progress2", "installs"), + ("MaintenanceForm_Action", "Repair"), + # possible values: ALL, JUSTME + ("WhichUsers", "ALL") + ]) + + # Fonts, see "TextStyle Table" + add_data(db, "TextStyle", + [("DlgFont8", "Tahoma", 9, None, 0), + ("DlgFontBold8", "Tahoma", 8, None, 1), #bold + ("VerdanaBold10", "Verdana", 10, None, 1), + ("VerdanaRed9", "Verdana", 9, 255, 0), + ]) + + # UI Sequences, see "InstallUISequence Table", "Using a Sequence Table" + # Numbers indicate sequence; see sequence.py for how these action integrate + add_data(db, "InstallUISequence", + [("PrepareDlg", "Not Privileged or Windows9x or Installed", 140), + ("WhichUsersDlg", "Privileged and not Windows9x and not Installed", 141), + # In the user interface, assume all-users installation if privileged. + ("SelectFeaturesDlg", "Not Installed", 1230), + # XXX no support for resume installations yet + #("ResumeDlg", "Installed AND (RESUME OR Preselected)", 1240), + ("MaintenanceTypeDlg", "Installed AND NOT RESUME AND NOT Preselected", 1250), + ("ProgressDlg", None, 1280)]) + + add_data(db, 'ActionText', text.ActionText) + add_data(db, 'UIText', text.UIText) + ##################################################################### + # Standard dialogs: FatalError, UserExit, ExitDialog + fatal=PyDialog(db, "FatalError", x, y, w, h, modal, title, + "Finish", "Finish", "Finish") + fatal.title("[ProductName] Installer ended prematurely") + fatal.back("< Back", "Finish", active = 0) + fatal.cancel("Cancel", "Back", active = 0) + fatal.text("Description1", 15, 70, 320, 80, 0x30003, + "[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.") + fatal.text("Description2", 15, 155, 320, 20, 0x30003, + "Click the Finish button to exit the Installer.") + c=fatal.next("Finish", "Cancel", name="Finish") + c.event("EndDialog", "Exit") + + user_exit=PyDialog(db, "UserExit", x, y, w, h, modal, title, + "Finish", "Finish", "Finish") + user_exit.title("[ProductName] Installer was interrupted") + user_exit.back("< Back", "Finish", active = 0) + user_exit.cancel("Cancel", "Back", active = 0) + user_exit.text("Description1", 15, 70, 320, 80, 0x30003, + "[ProductName] setup was interrupted. Your system has not been modified. " + "To install this program at a later time, please run the installation again.") + user_exit.text("Description2", 15, 155, 320, 20, 0x30003, + "Click the Finish button to exit the Installer.") + c = user_exit.next("Finish", "Cancel", name="Finish") + c.event("EndDialog", "Exit") + + exit_dialog = PyDialog(db, "ExitDialog", x, y, w, h, modal, title, + "Finish", "Finish", "Finish") + exit_dialog.title("Completing the [ProductName] Installer") + exit_dialog.back("< Back", "Finish", active = 0) + exit_dialog.cancel("Cancel", "Back", active = 0) + exit_dialog.text("Description", 15, 235, 320, 20, 0x30003, + "Click the Finish button to exit the Installer.") + c = exit_dialog.next("Finish", "Cancel", name="Finish") + c.event("EndDialog", "Return") + + ##################################################################### + # Required dialog: FilesInUse, ErrorDlg + inuse = PyDialog(db, "FilesInUse", + x, y, w, h, + 19, # KeepModeless|Modal|Visible + title, + "Retry", "Retry", "Retry", bitmap=False) + inuse.text("Title", 15, 6, 200, 15, 0x30003, + r"{\DlgFontBold8}Files in Use") + inuse.text("Description", 20, 23, 280, 20, 0x30003, + "Some files that need to be updated are currently in use.") + inuse.text("Text", 20, 55, 330, 50, 3, + "The following applications are using files that need to be updated by this setup. Close these applications and then click Retry to continue the installation or Cancel to exit it.") + inuse.control("List", "ListBox", 20, 107, 330, 130, 7, "FileInUseProcess", + None, None, None) + c=inuse.back("Exit", "Ignore", name="Exit") + c.event("EndDialog", "Exit") + c=inuse.next("Ignore", "Retry", name="Ignore") + c.event("EndDialog", "Ignore") + c=inuse.cancel("Retry", "Exit", name="Retry") + c.event("EndDialog","Retry") + + # See "Error Dialog". See "ICE20" for the required names of the controls. + error = Dialog(db, "ErrorDlg", + 50, 10, 330, 101, + 65543, # Error|Minimize|Modal|Visible + title, + "ErrorText", None, None) + error.text("ErrorText", 50,9,280,48,3, "") + #error.control("ErrorIcon", "Icon", 15, 9, 24, 24, 5242881, None, "py.ico", None, None) + error.pushbutton("N",120,72,81,21,3,"No",None).event("EndDialog","ErrorNo") + error.pushbutton("Y",240,72,81,21,3,"Yes",None).event("EndDialog","ErrorYes") + error.pushbutton("A",0,72,81,21,3,"Abort",None).event("EndDialog","ErrorAbort") + error.pushbutton("C",42,72,81,21,3,"Cancel",None).event("EndDialog","ErrorCancel") + error.pushbutton("I",81,72,81,21,3,"Ignore",None).event("EndDialog","ErrorIgnore") + error.pushbutton("O",159,72,81,21,3,"Ok",None).event("EndDialog","ErrorOk") + error.pushbutton("R",198,72,81,21,3,"Retry",None).event("EndDialog","ErrorRetry") + + ##################################################################### + # Global "Query Cancel" dialog + cancel = Dialog(db, "CancelDlg", 50, 10, 260, 85, 3, title, + "No", "No", "No") + cancel.text("Text", 48, 15, 194, 30, 3, + "Are you sure you want to cancel [ProductName] installation?") + #cancel.control("Icon", "Icon", 15, 15, 24, 24, 5242881, None, + # "py.ico", None, None) + c=cancel.pushbutton("Yes", 72, 57, 56, 17, 3, "Yes", "No") + c.event("EndDialog", "Exit") + + c=cancel.pushbutton("No", 132, 57, 56, 17, 3, "No", "Yes") + c.event("EndDialog", "Return") + + ##################################################################### + # Global "Wait for costing" dialog + costing = Dialog(db, "WaitForCostingDlg", 50, 10, 260, 85, modal, title, + "Return", "Return", "Return") + costing.text("Text", 48, 15, 194, 30, 3, + "Please wait while the installer finishes determining your disk space requirements.") + c = costing.pushbutton("Return", 102, 57, 56, 17, 3, "Return", None) + c.event("EndDialog", "Exit") + + ##################################################################### + # Preparation dialog: no user input except cancellation + prep = PyDialog(db, "PrepareDlg", x, y, w, h, modeless, title, + "Cancel", "Cancel", "Cancel") + prep.text("Description", 15, 70, 320, 40, 0x30003, + "Please wait while the Installer prepares to guide you through the installation.") + prep.title("Welcome to the [ProductName] Installer") + c=prep.text("ActionText", 15, 110, 320, 20, 0x30003, "Pondering...") + c.mapping("ActionText", "Text") + c=prep.text("ActionData", 15, 135, 320, 30, 0x30003, None) + c.mapping("ActionData", "Text") + prep.back("Back", None, active=0) + prep.next("Next", None, active=0) + c=prep.cancel("Cancel", None) + c.event("SpawnDialog", "CancelDlg") + + ##################################################################### + # Feature (Python directory) selection + seldlg = PyDialog(db, "SelectFeaturesDlg", x, y, w, h, modal, title, + "Next", "Next", "Cancel") + seldlg.title("Select Python Installations") + + seldlg.text("Hint", 15, 30, 300, 20, 3, + "Select the Python locations where %s should be installed." + % self.distribution.get_fullname()) + + seldlg.back("< Back", None, active=0) + c = seldlg.next("Next >", "Cancel") + order = 1 + c.event("[TARGETDIR]", "[SourceDir]", ordering=order) + for version in self.versions + [self.other_version]: + order += 1 + c.event("[TARGETDIR]", "[TARGETDIR%s]" % version, + "FEATURE_SELECTED AND &Python%s=3" % version, + ordering=order) + c.event("SpawnWaitDialog", "WaitForCostingDlg", ordering=order + 1) + c.event("EndDialog", "Return", ordering=order + 2) + c = seldlg.cancel("Cancel", "Features") + c.event("SpawnDialog", "CancelDlg") + + c = seldlg.control("Features", "SelectionTree", 15, 60, 300, 120, 3, + "FEATURE", None, "PathEdit", None) + c.event("[FEATURE_SELECTED]", "1") + ver = self.other_version + install_other_cond = "FEATURE_SELECTED AND &Python%s=3" % ver + dont_install_other_cond = "FEATURE_SELECTED AND &Python%s<>3" % ver + + c = seldlg.text("Other", 15, 200, 300, 15, 3, + "Provide an alternate Python location") + c.condition("Enable", install_other_cond) + c.condition("Show", install_other_cond) + c.condition("Disable", dont_install_other_cond) + c.condition("Hide", dont_install_other_cond) + + c = seldlg.control("PathEdit", "PathEdit", 15, 215, 300, 16, 1, + "TARGETDIR" + ver, None, "Next", None) + c.condition("Enable", install_other_cond) + c.condition("Show", install_other_cond) + c.condition("Disable", dont_install_other_cond) + c.condition("Hide", dont_install_other_cond) + + ##################################################################### + # Disk cost + cost = PyDialog(db, "DiskCostDlg", x, y, w, h, modal, title, + "OK", "OK", "OK", bitmap=False) + cost.text("Title", 15, 6, 200, 15, 0x30003, + r"{\DlgFontBold8}Disk Space Requirements") + cost.text("Description", 20, 20, 280, 20, 0x30003, + "The disk space required for the installation of the selected features.") + cost.text("Text", 20, 53, 330, 60, 3, + "The highlighted volumes (if any) do not have enough disk space " + "available for the currently selected features. You can either " + "remove some files from the highlighted volumes, or choose to " + "install less features onto local drive(s), or select different " + "destination drive(s).") + cost.control("VolumeList", "VolumeCostList", 20, 100, 330, 150, 393223, + None, "{120}{70}{70}{70}{70}", None, None) + cost.xbutton("OK", "Ok", None, 0.5).event("EndDialog", "Return") + + ##################################################################### + # WhichUsers Dialog. Only available on NT, and for privileged users. + # This must be run before FindRelatedProducts, because that will + # take into account whether the previous installation was per-user + # or per-machine. We currently don't support going back to this + # dialog after "Next" was selected; to support this, we would need to + # find how to reset the ALLUSERS property, and how to re-run + # FindRelatedProducts. + # On Windows9x, the ALLUSERS property is ignored on the command line + # and in the Property table, but installer fails according to the documentation + # if a dialog attempts to set ALLUSERS. + whichusers = PyDialog(db, "WhichUsersDlg", x, y, w, h, modal, title, + "AdminInstall", "Next", "Cancel") + whichusers.title("Select whether to install [ProductName] for all users of this computer.") + # A radio group with two options: allusers, justme + g = whichusers.radiogroup("AdminInstall", 15, 60, 260, 50, 3, + "WhichUsers", "", "Next") + g.add("ALL", 0, 5, 150, 20, "Install for all users") + g.add("JUSTME", 0, 25, 150, 20, "Install just for me") + + whichusers.back("Back", None, active=0) + + c = whichusers.next("Next >", "Cancel") + c.event("[ALLUSERS]", "1", 'WhichUsers="ALL"', 1) + c.event("EndDialog", "Return", ordering = 2) + + c = whichusers.cancel("Cancel", "AdminInstall") + c.event("SpawnDialog", "CancelDlg") + + ##################################################################### + # Installation Progress dialog (modeless) + progress = PyDialog(db, "ProgressDlg", x, y, w, h, modeless, title, + "Cancel", "Cancel", "Cancel", bitmap=False) + progress.text("Title", 20, 15, 200, 15, 0x30003, + r"{\DlgFontBold8}[Progress1] [ProductName]") + progress.text("Text", 35, 65, 300, 30, 3, + "Please wait while the Installer [Progress2] [ProductName]. " + "This may take several minutes.") + progress.text("StatusLabel", 35, 100, 35, 20, 3, "Status:") + + c=progress.text("ActionText", 70, 100, w-70, 20, 3, "Pondering...") + c.mapping("ActionText", "Text") + + #c=progress.text("ActionData", 35, 140, 300, 20, 3, None) + #c.mapping("ActionData", "Text") + + c=progress.control("ProgressBar", "ProgressBar", 35, 120, 300, 10, 65537, + None, "Progress done", None, None) + c.mapping("SetProgress", "Progress") + + progress.back("< Back", "Next", active=False) + progress.next("Next >", "Cancel", active=False) + progress.cancel("Cancel", "Back").event("SpawnDialog", "CancelDlg") + + ################################################################### + # Maintenance type: repair/uninstall + maint = PyDialog(db, "MaintenanceTypeDlg", x, y, w, h, modal, title, + "Next", "Next", "Cancel") + maint.title("Welcome to the [ProductName] Setup Wizard") + maint.text("BodyText", 15, 63, 330, 42, 3, + "Select whether you want to repair or remove [ProductName].") + g=maint.radiogroup("RepairRadioGroup", 15, 108, 330, 60, 3, + "MaintenanceForm_Action", "", "Next") + #g.add("Change", 0, 0, 200, 17, "&Change [ProductName]") + g.add("Repair", 0, 18, 200, 17, "&Repair [ProductName]") + g.add("Remove", 0, 36, 200, 17, "Re&move [ProductName]") + + maint.back("< Back", None, active=False) + c=maint.next("Finish", "Cancel") + # Change installation: Change progress dialog to "Change", then ask + # for feature selection + #c.event("[Progress1]", "Change", 'MaintenanceForm_Action="Change"', 1) + #c.event("[Progress2]", "changes", 'MaintenanceForm_Action="Change"', 2) + + # Reinstall: Change progress dialog to "Repair", then invoke reinstall + # Also set list of reinstalled features to "ALL" + c.event("[REINSTALL]", "ALL", 'MaintenanceForm_Action="Repair"', 5) + c.event("[Progress1]", "Repairing", 'MaintenanceForm_Action="Repair"', 6) + c.event("[Progress2]", "repairs", 'MaintenanceForm_Action="Repair"', 7) + c.event("Reinstall", "ALL", 'MaintenanceForm_Action="Repair"', 8) + + # Uninstall: Change progress to "Remove", then invoke uninstall + # Also set list of removed features to "ALL" + c.event("[REMOVE]", "ALL", 'MaintenanceForm_Action="Remove"', 11) + c.event("[Progress1]", "Removing", 'MaintenanceForm_Action="Remove"', 12) + c.event("[Progress2]", "removes", 'MaintenanceForm_Action="Remove"', 13) + c.event("Remove", "ALL", 'MaintenanceForm_Action="Remove"', 14) + + # Close dialog when maintenance action scheduled + c.event("EndDialog", "Return", 'MaintenanceForm_Action<>"Change"', 20) + #c.event("NewDialog", "SelectFeaturesDlg", 'MaintenanceForm_Action="Change"', 21) + + maint.cancel("Cancel", "RepairRadioGroup").event("SpawnDialog", "CancelDlg") + + def get_installer_filename(self, fullname): + # Factored out to allow overriding in subclasses + if self.target_version: + base_name = "%s.%s-py%s.msi" % (fullname, self.plat_name, + self.target_version) + else: + base_name = "%s.%s.msi" % (fullname, self.plat_name) + installer_name = os.path.join(self.dist_dir, base_name) + return installer_name diff --git a/distutils/distutils/command/bdist_rpm.py b/distutils/distutils/command/bdist_rpm.py new file mode 100644 index 0000000..02f10dd --- /dev/null +++ b/distutils/distutils/command/bdist_rpm.py @@ -0,0 +1,582 @@ +"""distutils.command.bdist_rpm + +Implements the Distutils 'bdist_rpm' command (create RPM source and binary +distributions).""" + +import subprocess, sys, os +from distutils.core import Command +from distutils.debug import DEBUG +from distutils.util import get_platform +from distutils.file_util import write_file +from distutils.errors import * +from distutils.sysconfig import get_python_version +from distutils import log + +class bdist_rpm(Command): + + description = "create an RPM distribution" + + user_options = [ + ('bdist-base=', None, + "base directory for creating built distributions"), + ('rpm-base=', None, + "base directory for creating RPMs (defaults to \"rpm\" under " + "--bdist-base; must be specified for RPM 2)"), + ('dist-dir=', 'd', + "directory to put final RPM files in " + "(and .spec files if --spec-only)"), + ('python=', None, + "path to Python interpreter to hard-code in the .spec file " + "(default: \"python\")"), + ('fix-python', None, + "hard-code the exact path to the current Python interpreter in " + "the .spec file"), + ('spec-only', None, + "only regenerate spec file"), + ('source-only', None, + "only generate source RPM"), + ('binary-only', None, + "only generate binary RPM"), + ('use-bzip2', None, + "use bzip2 instead of gzip to create source distribution"), + + # More meta-data: too RPM-specific to put in the setup script, + # but needs to go in the .spec file -- so we make these options + # to "bdist_rpm". The idea is that packagers would put this + # info in setup.cfg, although they are of course free to + # supply it on the command line. + ('distribution-name=', None, + "name of the (Linux) distribution to which this " + "RPM applies (*not* the name of the module distribution!)"), + ('group=', None, + "package classification [default: \"Development/Libraries\"]"), + ('release=', None, + "RPM release number"), + ('serial=', None, + "RPM serial number"), + ('vendor=', None, + "RPM \"vendor\" (eg. \"Joe Blow \") " + "[default: maintainer or author from setup script]"), + ('packager=', None, + "RPM packager (eg. \"Jane Doe \") " + "[default: vendor]"), + ('doc-files=', None, + "list of documentation files (space or comma-separated)"), + ('changelog=', None, + "RPM changelog"), + ('icon=', None, + "name of icon file"), + ('provides=', None, + "capabilities provided by this package"), + ('requires=', None, + "capabilities required by this package"), + ('conflicts=', None, + "capabilities which conflict with this package"), + ('build-requires=', None, + "capabilities required to build this package"), + ('obsoletes=', None, + "capabilities made obsolete by this package"), + ('no-autoreq', None, + "do not automatically calculate dependencies"), + + # Actions to take when building RPM + ('keep-temp', 'k', + "don't clean up RPM build directory"), + ('no-keep-temp', None, + "clean up RPM build directory [default]"), + ('use-rpm-opt-flags', None, + "compile with RPM_OPT_FLAGS when building from source RPM"), + ('no-rpm-opt-flags', None, + "do not pass any RPM CFLAGS to compiler"), + ('rpm3-mode', None, + "RPM 3 compatibility mode (default)"), + ('rpm2-mode', None, + "RPM 2 compatibility mode"), + + # Add the hooks necessary for specifying custom scripts + ('prep-script=', None, + "Specify a script for the PREP phase of RPM building"), + ('build-script=', None, + "Specify a script for the BUILD phase of RPM building"), + + ('pre-install=', None, + "Specify a script for the pre-INSTALL phase of RPM building"), + ('install-script=', None, + "Specify a script for the INSTALL phase of RPM building"), + ('post-install=', None, + "Specify a script for the post-INSTALL phase of RPM building"), + + ('pre-uninstall=', None, + "Specify a script for the pre-UNINSTALL phase of RPM building"), + ('post-uninstall=', None, + "Specify a script for the post-UNINSTALL phase of RPM building"), + + ('clean-script=', None, + "Specify a script for the CLEAN phase of RPM building"), + + ('verify-script=', None, + "Specify a script for the VERIFY phase of the RPM build"), + + # Allow a packager to explicitly force an architecture + ('force-arch=', None, + "Force an architecture onto the RPM build process"), + + ('quiet', 'q', + "Run the INSTALL phase of RPM building in quiet mode"), + ] + + boolean_options = ['keep-temp', 'use-rpm-opt-flags', 'rpm3-mode', + 'no-autoreq', 'quiet'] + + negative_opt = {'no-keep-temp': 'keep-temp', + 'no-rpm-opt-flags': 'use-rpm-opt-flags', + 'rpm2-mode': 'rpm3-mode'} + + + def initialize_options(self): + self.bdist_base = None + self.rpm_base = None + self.dist_dir = None + self.python = None + self.fix_python = None + self.spec_only = None + self.binary_only = None + self.source_only = None + self.use_bzip2 = None + + self.distribution_name = None + self.group = None + self.release = None + self.serial = None + self.vendor = None + self.packager = None + self.doc_files = None + self.changelog = None + self.icon = None + + self.prep_script = None + self.build_script = None + self.install_script = None + self.clean_script = None + self.verify_script = None + self.pre_install = None + self.post_install = None + self.pre_uninstall = None + self.post_uninstall = None + self.prep = None + self.provides = None + self.requires = None + self.conflicts = None + self.build_requires = None + self.obsoletes = None + + self.keep_temp = 0 + self.use_rpm_opt_flags = 1 + self.rpm3_mode = 1 + self.no_autoreq = 0 + + self.force_arch = None + self.quiet = 0 + + def finalize_options(self): + self.set_undefined_options('bdist', ('bdist_base', 'bdist_base')) + if self.rpm_base is None: + if not self.rpm3_mode: + raise DistutilsOptionError( + "you must specify --rpm-base in RPM 2 mode") + self.rpm_base = os.path.join(self.bdist_base, "rpm") + + if self.python is None: + if self.fix_python: + self.python = sys.executable + else: + self.python = "python3" + elif self.fix_python: + raise DistutilsOptionError( + "--python and --fix-python are mutually exclusive options") + + if os.name != 'posix': + raise DistutilsPlatformError("don't know how to create RPM " + "distributions on platform %s" % os.name) + if self.binary_only and self.source_only: + raise DistutilsOptionError( + "cannot supply both '--source-only' and '--binary-only'") + + # don't pass CFLAGS to pure python distributions + if not self.distribution.has_ext_modules(): + self.use_rpm_opt_flags = 0 + + self.set_undefined_options('bdist', ('dist_dir', 'dist_dir')) + self.finalize_package_data() + + def finalize_package_data(self): + self.ensure_string('group', "Development/Libraries") + self.ensure_string('vendor', + "%s <%s>" % (self.distribution.get_contact(), + self.distribution.get_contact_email())) + self.ensure_string('packager') + self.ensure_string_list('doc_files') + if isinstance(self.doc_files, list): + for readme in ('README', 'README.txt'): + if os.path.exists(readme) and readme not in self.doc_files: + self.doc_files.append(readme) + + self.ensure_string('release', "1") + self.ensure_string('serial') # should it be an int? + + self.ensure_string('distribution_name') + + self.ensure_string('changelog') + # Format changelog correctly + self.changelog = self._format_changelog(self.changelog) + + self.ensure_filename('icon') + + self.ensure_filename('prep_script') + self.ensure_filename('build_script') + self.ensure_filename('install_script') + self.ensure_filename('clean_script') + self.ensure_filename('verify_script') + self.ensure_filename('pre_install') + self.ensure_filename('post_install') + self.ensure_filename('pre_uninstall') + self.ensure_filename('post_uninstall') + + # XXX don't forget we punted on summaries and descriptions -- they + # should be handled here eventually! + + # Now *this* is some meta-data that belongs in the setup script... + self.ensure_string_list('provides') + self.ensure_string_list('requires') + self.ensure_string_list('conflicts') + self.ensure_string_list('build_requires') + self.ensure_string_list('obsoletes') + + self.ensure_string('force_arch') + + def run(self): + if DEBUG: + print("before _get_package_data():") + print("vendor =", self.vendor) + print("packager =", self.packager) + print("doc_files =", self.doc_files) + print("changelog =", self.changelog) + + # make directories + if self.spec_only: + spec_dir = self.dist_dir + self.mkpath(spec_dir) + else: + rpm_dir = {} + for d in ('SOURCES', 'SPECS', 'BUILD', 'RPMS', 'SRPMS'): + rpm_dir[d] = os.path.join(self.rpm_base, d) + self.mkpath(rpm_dir[d]) + spec_dir = rpm_dir['SPECS'] + + # Spec file goes into 'dist_dir' if '--spec-only specified', + # build/rpm. otherwise. + spec_path = os.path.join(spec_dir, + "%s.spec" % self.distribution.get_name()) + self.execute(write_file, + (spec_path, + self._make_spec_file()), + "writing '%s'" % spec_path) + + if self.spec_only: # stop if requested + return + + # Make a source distribution and copy to SOURCES directory with + # optional icon. + saved_dist_files = self.distribution.dist_files[:] + sdist = self.reinitialize_command('sdist') + if self.use_bzip2: + sdist.formats = ['bztar'] + else: + sdist.formats = ['gztar'] + self.run_command('sdist') + self.distribution.dist_files = saved_dist_files + + source = sdist.get_archive_files()[0] + source_dir = rpm_dir['SOURCES'] + self.copy_file(source, source_dir) + + if self.icon: + if os.path.exists(self.icon): + self.copy_file(self.icon, source_dir) + else: + raise DistutilsFileError( + "icon file '%s' does not exist" % self.icon) + + # build package + log.info("building RPMs") + rpm_cmd = ['rpm'] + if os.path.exists('/usr/bin/rpmbuild') or \ + os.path.exists('/bin/rpmbuild'): + rpm_cmd = ['rpmbuild'] + + if self.source_only: # what kind of RPMs? + rpm_cmd.append('-bs') + elif self.binary_only: + rpm_cmd.append('-bb') + else: + rpm_cmd.append('-ba') + rpm_cmd.extend(['--define', '__python %s' % self.python]) + if self.rpm3_mode: + rpm_cmd.extend(['--define', + '_topdir %s' % os.path.abspath(self.rpm_base)]) + if not self.keep_temp: + rpm_cmd.append('--clean') + + if self.quiet: + rpm_cmd.append('--quiet') + + rpm_cmd.append(spec_path) + # Determine the binary rpm names that should be built out of this spec + # file + # Note that some of these may not be really built (if the file + # list is empty) + nvr_string = "%{name}-%{version}-%{release}" + src_rpm = nvr_string + ".src.rpm" + non_src_rpm = "%{arch}/" + nvr_string + ".%{arch}.rpm" + q_cmd = r"rpm -q --qf '%s %s\n' --specfile '%s'" % ( + src_rpm, non_src_rpm, spec_path) + + out = os.popen(q_cmd) + try: + binary_rpms = [] + source_rpm = None + while True: + line = out.readline() + if not line: + break + l = line.strip().split() + assert(len(l) == 2) + binary_rpms.append(l[1]) + # The source rpm is named after the first entry in the spec file + if source_rpm is None: + source_rpm = l[0] + + status = out.close() + if status: + raise DistutilsExecError("Failed to execute: %s" % repr(q_cmd)) + + finally: + out.close() + + self.spawn(rpm_cmd) + + if not self.dry_run: + if self.distribution.has_ext_modules(): + pyversion = get_python_version() + else: + pyversion = 'any' + + if not self.binary_only: + srpm = os.path.join(rpm_dir['SRPMS'], source_rpm) + assert(os.path.exists(srpm)) + self.move_file(srpm, self.dist_dir) + filename = os.path.join(self.dist_dir, source_rpm) + self.distribution.dist_files.append( + ('bdist_rpm', pyversion, filename)) + + if not self.source_only: + for rpm in binary_rpms: + rpm = os.path.join(rpm_dir['RPMS'], rpm) + if os.path.exists(rpm): + self.move_file(rpm, self.dist_dir) + filename = os.path.join(self.dist_dir, + os.path.basename(rpm)) + self.distribution.dist_files.append( + ('bdist_rpm', pyversion, filename)) + + def _dist_path(self, path): + return os.path.join(self.dist_dir, os.path.basename(path)) + + def _make_spec_file(self): + """Generate the text of an RPM spec file and return it as a + list of strings (one per line). + """ + # definitions and headers + spec_file = [ + '%define name ' + self.distribution.get_name(), + '%define version ' + self.distribution.get_version().replace('-','_'), + '%define unmangled_version ' + self.distribution.get_version(), + '%define release ' + self.release.replace('-','_'), + '', + 'Summary: ' + self.distribution.get_description(), + ] + + # Workaround for #14443 which affects some RPM based systems such as + # RHEL6 (and probably derivatives) + vendor_hook = subprocess.getoutput('rpm --eval %{__os_install_post}') + # Generate a potential replacement value for __os_install_post (whilst + # normalizing the whitespace to simplify the test for whether the + # invocation of brp-python-bytecompile passes in __python): + vendor_hook = '\n'.join([' %s \\' % line.strip() + for line in vendor_hook.splitlines()]) + problem = "brp-python-bytecompile \\\n" + fixed = "brp-python-bytecompile %{__python} \\\n" + fixed_hook = vendor_hook.replace(problem, fixed) + if fixed_hook != vendor_hook: + spec_file.append('# Workaround for http://bugs.python.org/issue14443') + spec_file.append('%define __os_install_post ' + fixed_hook + '\n') + + # put locale summaries into spec file + # XXX not supported for now (hard to put a dictionary + # in a config file -- arg!) + #for locale in self.summaries.keys(): + # spec_file.append('Summary(%s): %s' % (locale, + # self.summaries[locale])) + + spec_file.extend([ + 'Name: %{name}', + 'Version: %{version}', + 'Release: %{release}',]) + + # XXX yuck! this filename is available from the "sdist" command, + # but only after it has run: and we create the spec file before + # running "sdist", in case of --spec-only. + if self.use_bzip2: + spec_file.append('Source0: %{name}-%{unmangled_version}.tar.bz2') + else: + spec_file.append('Source0: %{name}-%{unmangled_version}.tar.gz') + + spec_file.extend([ + 'License: ' + self.distribution.get_license(), + 'Group: ' + self.group, + 'BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot', + 'Prefix: %{_prefix}', ]) + + if not self.force_arch: + # noarch if no extension modules + if not self.distribution.has_ext_modules(): + spec_file.append('BuildArch: noarch') + else: + spec_file.append( 'BuildArch: %s' % self.force_arch ) + + for field in ('Vendor', + 'Packager', + 'Provides', + 'Requires', + 'Conflicts', + 'Obsoletes', + ): + val = getattr(self, field.lower()) + if isinstance(val, list): + spec_file.append('%s: %s' % (field, ' '.join(val))) + elif val is not None: + spec_file.append('%s: %s' % (field, val)) + + + if self.distribution.get_url() != 'UNKNOWN': + spec_file.append('Url: ' + self.distribution.get_url()) + + if self.distribution_name: + spec_file.append('Distribution: ' + self.distribution_name) + + if self.build_requires: + spec_file.append('BuildRequires: ' + + ' '.join(self.build_requires)) + + if self.icon: + spec_file.append('Icon: ' + os.path.basename(self.icon)) + + if self.no_autoreq: + spec_file.append('AutoReq: 0') + + spec_file.extend([ + '', + '%description', + self.distribution.get_long_description() + ]) + + # put locale descriptions into spec file + # XXX again, suppressed because config file syntax doesn't + # easily support this ;-( + #for locale in self.descriptions.keys(): + # spec_file.extend([ + # '', + # '%description -l ' + locale, + # self.descriptions[locale], + # ]) + + # rpm scripts + # figure out default build script + def_setup_call = "%s %s" % (self.python,os.path.basename(sys.argv[0])) + def_build = "%s build" % def_setup_call + if self.use_rpm_opt_flags: + def_build = 'env CFLAGS="$RPM_OPT_FLAGS" ' + def_build + + # insert contents of files + + # XXX this is kind of misleading: user-supplied options are files + # that we open and interpolate into the spec file, but the defaults + # are just text that we drop in as-is. Hmmm. + + install_cmd = ('%s install -O1 --root=$RPM_BUILD_ROOT ' + '--record=INSTALLED_FILES') % def_setup_call + + script_options = [ + ('prep', 'prep_script', "%setup -n %{name}-%{unmangled_version}"), + ('build', 'build_script', def_build), + ('install', 'install_script', install_cmd), + ('clean', 'clean_script', "rm -rf $RPM_BUILD_ROOT"), + ('verifyscript', 'verify_script', None), + ('pre', 'pre_install', None), + ('post', 'post_install', None), + ('preun', 'pre_uninstall', None), + ('postun', 'post_uninstall', None), + ] + + for (rpm_opt, attr, default) in script_options: + # Insert contents of file referred to, if no file is referred to + # use 'default' as contents of script + val = getattr(self, attr) + if val or default: + spec_file.extend([ + '', + '%' + rpm_opt,]) + if val: + spec_file.extend(open(val, 'r').read().split('\n')) + else: + spec_file.append(default) + + + # files section + spec_file.extend([ + '', + '%files -f INSTALLED_FILES', + '%defattr(-,root,root)', + ]) + + if self.doc_files: + spec_file.append('%doc ' + ' '.join(self.doc_files)) + + if self.changelog: + spec_file.extend([ + '', + '%changelog',]) + spec_file.extend(self.changelog) + + return spec_file + + def _format_changelog(self, changelog): + """Format the changelog correctly and convert it to a list of strings + """ + if not changelog: + return changelog + new_changelog = [] + for line in changelog.strip().split('\n'): + line = line.strip() + if line[0] == '*': + new_changelog.extend(['', line]) + elif line[0] == '-': + new_changelog.append(line) + else: + new_changelog.append(' ' + line) + + # strip trailing newline inserted by first changelog entry + if not new_changelog[0]: + del new_changelog[0] + + return new_changelog diff --git a/distutils/distutils/command/bdist_wininst.py b/distutils/distutils/command/bdist_wininst.py new file mode 100644 index 0000000..fde5675 --- /dev/null +++ b/distutils/distutils/command/bdist_wininst.py @@ -0,0 +1,364 @@ +"""distutils.command.bdist_wininst + +Implements the Distutils 'bdist_wininst' command: create a windows installer +exe-program.""" + +import sys, os +from distutils.core import Command +from distutils.util import get_platform +from distutils.dir_util import create_tree, remove_tree +from distutils.errors import * +from distutils.sysconfig import get_python_version +from distutils import log + +class bdist_wininst(Command): + + description = "create an executable installer for MS Windows" + + user_options = [('bdist-dir=', None, + "temporary directory for creating the distribution"), + ('plat-name=', 'p', + "platform name to embed in generated filenames " + "(default: %s)" % get_platform()), + ('keep-temp', 'k', + "keep the pseudo-installation tree around after " + + "creating the distribution archive"), + ('target-version=', None, + "require a specific python version" + + " on the target system"), + ('no-target-compile', 'c', + "do not compile .py to .pyc on the target system"), + ('no-target-optimize', 'o', + "do not compile .py to .pyo (optimized) " + "on the target system"), + ('dist-dir=', 'd', + "directory to put final built distributions in"), + ('bitmap=', 'b', + "bitmap to use for the installer instead of python-powered logo"), + ('title=', 't', + "title to display on the installer background instead of default"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + ('install-script=', None, + "basename of installation script to be run after " + "installation or before deinstallation"), + ('pre-install-script=', None, + "Fully qualified filename of a script to be run before " + "any files are installed. This script need not be in the " + "distribution"), + ('user-access-control=', None, + "specify Vista's UAC handling - 'none'/default=no " + "handling, 'auto'=use UAC if target Python installed for " + "all users, 'force'=always use UAC"), + ] + + boolean_options = ['keep-temp', 'no-target-compile', 'no-target-optimize', + 'skip-build'] + + def initialize_options(self): + self.bdist_dir = None + self.plat_name = None + self.keep_temp = 0 + self.no_target_compile = 0 + self.no_target_optimize = 0 + self.target_version = None + self.dist_dir = None + self.bitmap = None + self.title = None + self.skip_build = None + self.install_script = None + self.pre_install_script = None + self.user_access_control = None + + + def finalize_options(self): + self.set_undefined_options('bdist', ('skip_build', 'skip_build')) + + if self.bdist_dir is None: + if self.skip_build and self.plat_name: + # If build is skipped and plat_name is overridden, bdist will + # not see the correct 'plat_name' - so set that up manually. + bdist = self.distribution.get_command_obj('bdist') + bdist.plat_name = self.plat_name + # next the command will be initialized using that name + bdist_base = self.get_finalized_command('bdist').bdist_base + self.bdist_dir = os.path.join(bdist_base, 'wininst') + + if not self.target_version: + self.target_version = "" + + if not self.skip_build and self.distribution.has_ext_modules(): + short_version = get_python_version() + if self.target_version and self.target_version != short_version: + raise DistutilsOptionError( + "target version can only be %s, or the '--skip-build'" \ + " option must be specified" % (short_version,)) + self.target_version = short_version + + self.set_undefined_options('bdist', + ('dist_dir', 'dist_dir'), + ('plat_name', 'plat_name'), + ) + + if self.install_script: + for script in self.distribution.scripts: + if self.install_script == os.path.basename(script): + break + else: + raise DistutilsOptionError( + "install_script '%s' not found in scripts" + % self.install_script) + + def run(self): + if (sys.platform != "win32" and + (self.distribution.has_ext_modules() or + self.distribution.has_c_libraries())): + raise DistutilsPlatformError \ + ("distribution contains extensions and/or C libraries; " + "must be compiled on a Windows 32 platform") + + if not self.skip_build: + self.run_command('build') + + install = self.reinitialize_command('install', reinit_subcommands=1) + install.root = self.bdist_dir + install.skip_build = self.skip_build + install.warn_dir = 0 + install.plat_name = self.plat_name + + install_lib = self.reinitialize_command('install_lib') + # we do not want to include pyc or pyo files + install_lib.compile = 0 + install_lib.optimize = 0 + + if self.distribution.has_ext_modules(): + # If we are building an installer for a Python version other + # than the one we are currently running, then we need to ensure + # our build_lib reflects the other Python version rather than ours. + # Note that for target_version!=sys.version, we must have skipped the + # build step, so there is no issue with enforcing the build of this + # version. + target_version = self.target_version + if not target_version: + assert self.skip_build, "Should have already checked this" + target_version = '%d.%d' % sys.version_info[:2] + plat_specifier = ".%s-%s" % (self.plat_name, target_version) + build = self.get_finalized_command('build') + build.build_lib = os.path.join(build.build_base, + 'lib' + plat_specifier) + + # Use a custom scheme for the zip-file, because we have to decide + # at installation time which scheme to use. + for key in ('purelib', 'platlib', 'headers', 'scripts', 'data'): + value = key.upper() + if key == 'headers': + value = value + '/Include/$dist_name' + setattr(install, + 'install_' + key, + value) + + log.info("installing to %s", self.bdist_dir) + install.ensure_finalized() + + # avoid warning of 'install_lib' about installing + # into a directory not in sys.path + sys.path.insert(0, os.path.join(self.bdist_dir, 'PURELIB')) + + install.run() + + del sys.path[0] + + # And make an archive relative to the root of the + # pseudo-installation tree. + from tempfile import mktemp + archive_basename = mktemp() + fullname = self.distribution.get_fullname() + arcname = self.make_archive(archive_basename, "zip", + root_dir=self.bdist_dir) + # create an exe containing the zip-file + self.create_exe(arcname, fullname, self.bitmap) + if self.distribution.has_ext_modules(): + pyversion = get_python_version() + else: + pyversion = 'any' + self.distribution.dist_files.append(('bdist_wininst', pyversion, + self.get_installer_filename(fullname))) + # remove the zip-file again + log.debug("removing temporary file '%s'", arcname) + os.remove(arcname) + + if not self.keep_temp: + remove_tree(self.bdist_dir, dry_run=self.dry_run) + + def get_inidata(self): + # Return data describing the installation. + lines = [] + metadata = self.distribution.metadata + + # Write the [metadata] section. + lines.append("[metadata]") + + # 'info' will be displayed in the installer's dialog box, + # describing the items to be installed. + info = (metadata.long_description or '') + '\n' + + # Escape newline characters + def escape(s): + return s.replace("\n", "\\n") + + for name in ["author", "author_email", "description", "maintainer", + "maintainer_email", "name", "url", "version"]: + data = getattr(metadata, name, "") + if data: + info = info + ("\n %s: %s" % \ + (name.capitalize(), escape(data))) + lines.append("%s=%s" % (name, escape(data))) + + # The [setup] section contains entries controlling + # the installer runtime. + lines.append("\n[Setup]") + if self.install_script: + lines.append("install_script=%s" % self.install_script) + lines.append("info=%s" % escape(info)) + lines.append("target_compile=%d" % (not self.no_target_compile)) + lines.append("target_optimize=%d" % (not self.no_target_optimize)) + if self.target_version: + lines.append("target_version=%s" % self.target_version) + if self.user_access_control: + lines.append("user_access_control=%s" % self.user_access_control) + + title = self.title or self.distribution.get_fullname() + lines.append("title=%s" % escape(title)) + import time + import distutils + build_info = "Built %s with distutils-%s" % \ + (time.ctime(time.time()), distutils.__version__) + lines.append("build_info=%s" % build_info) + return "\n".join(lines) + + def create_exe(self, arcname, fullname, bitmap=None): + import struct + + self.mkpath(self.dist_dir) + + cfgdata = self.get_inidata() + + installer_name = self.get_installer_filename(fullname) + self.announce("creating %s" % installer_name) + + if bitmap: + bitmapdata = open(bitmap, "rb").read() + bitmaplen = len(bitmapdata) + else: + bitmaplen = 0 + + file = open(installer_name, "wb") + file.write(self.get_exe_bytes()) + if bitmap: + file.write(bitmapdata) + + # Convert cfgdata from unicode to ascii, mbcs encoded + if isinstance(cfgdata, str): + cfgdata = cfgdata.encode("mbcs") + + # Append the pre-install script + cfgdata = cfgdata + b"\0" + if self.pre_install_script: + # We need to normalize newlines, so we open in text mode and + # convert back to bytes. "latin-1" simply avoids any possible + # failures. + with open(self.pre_install_script, "r", + encoding="latin-1") as script: + script_data = script.read().encode("latin-1") + cfgdata = cfgdata + script_data + b"\n\0" + else: + # empty pre-install script + cfgdata = cfgdata + b"\0" + file.write(cfgdata) + + # The 'magic number' 0x1234567B is used to make sure that the + # binary layout of 'cfgdata' is what the wininst.exe binary + # expects. If the layout changes, increment that number, make + # the corresponding changes to the wininst.exe sources, and + # recompile them. + header = struct.pack("' under the base build directory. We only use one of + # them for a given distribution, though -- + if self.build_purelib is None: + self.build_purelib = os.path.join(self.build_base, 'lib') + if self.build_platlib is None: + self.build_platlib = os.path.join(self.build_base, + 'lib' + plat_specifier) + + # 'build_lib' is the actual directory that we will use for this + # particular module distribution -- if user didn't supply it, pick + # one of 'build_purelib' or 'build_platlib'. + if self.build_lib is None: + if self.distribution.ext_modules: + self.build_lib = self.build_platlib + else: + self.build_lib = self.build_purelib + + # 'build_temp' -- temporary directory for compiler turds, + # "build/temp." + if self.build_temp is None: + self.build_temp = os.path.join(self.build_base, + 'temp' + plat_specifier) + if self.build_scripts is None: + self.build_scripts = os.path.join(self.build_base, + 'scripts-%d.%d' % sys.version_info[:2]) + + if self.executable is None: + self.executable = os.path.normpath(sys.executable) + + if isinstance(self.parallel, str): + try: + self.parallel = int(self.parallel) + except ValueError: + raise DistutilsOptionError("parallel should be an integer") + + def run(self): + # Run all relevant sub-commands. This will be some subset of: + # - build_py - pure Python modules + # - build_clib - standalone C libraries + # - build_ext - Python extensions + # - build_scripts - (Python) scripts + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + + # -- Predicates for the sub-command list --------------------------- + + def has_pure_modules(self): + return self.distribution.has_pure_modules() + + def has_c_libraries(self): + return self.distribution.has_c_libraries() + + def has_ext_modules(self): + return self.distribution.has_ext_modules() + + def has_scripts(self): + return self.distribution.has_scripts() + + + sub_commands = [('build_py', has_pure_modules), + ('build_clib', has_c_libraries), + ('build_ext', has_ext_modules), + ('build_scripts', has_scripts), + ] diff --git a/distutils/distutils/command/build_clib.py b/distutils/distutils/command/build_clib.py new file mode 100644 index 0000000..3e20ef2 --- /dev/null +++ b/distutils/distutils/command/build_clib.py @@ -0,0 +1,209 @@ +"""distutils.command.build_clib + +Implements the Distutils 'build_clib' command, to build a C/C++ library +that is included in the module distribution and needed by an extension +module.""" + + +# XXX this module has *lots* of code ripped-off quite transparently from +# build_ext.py -- not surprisingly really, as the work required to build +# a static library from a collection of C source files is not really all +# that different from what's required to build a shared object file from +# a collection of C source files. Nevertheless, I haven't done the +# necessary refactoring to account for the overlap in code between the +# two modules, mainly because a number of subtle details changed in the +# cut 'n paste. Sigh. + +import os +from distutils.core import Command +from distutils.errors import * +from distutils.sysconfig import customize_compiler +from distutils import log + +def show_compilers(): + from distutils.ccompiler import show_compilers + show_compilers() + + +class build_clib(Command): + + description = "build C/C++ libraries used by Python extensions" + + user_options = [ + ('build-clib=', 'b', + "directory to build C/C++ libraries to"), + ('build-temp=', 't', + "directory to put temporary build by-products"), + ('debug', 'g', + "compile with debugging information"), + ('force', 'f', + "forcibly build everything (ignore file timestamps)"), + ('compiler=', 'c', + "specify the compiler type"), + ] + + boolean_options = ['debug', 'force'] + + help_options = [ + ('help-compiler', None, + "list available compilers", show_compilers), + ] + + def initialize_options(self): + self.build_clib = None + self.build_temp = None + + # List of libraries to build + self.libraries = None + + # Compilation options for all libraries + self.include_dirs = None + self.define = None + self.undef = None + self.debug = None + self.force = 0 + self.compiler = None + + + def finalize_options(self): + # This might be confusing: both build-clib and build-temp default + # to build-temp as defined by the "build" command. This is because + # I think that C libraries are really just temporary build + # by-products, at least from the point of view of building Python + # extensions -- but I want to keep my options open. + self.set_undefined_options('build', + ('build_temp', 'build_clib'), + ('build_temp', 'build_temp'), + ('compiler', 'compiler'), + ('debug', 'debug'), + ('force', 'force')) + + self.libraries = self.distribution.libraries + if self.libraries: + self.check_library_list(self.libraries) + + if self.include_dirs is None: + self.include_dirs = self.distribution.include_dirs or [] + if isinstance(self.include_dirs, str): + self.include_dirs = self.include_dirs.split(os.pathsep) + + # XXX same as for build_ext -- what about 'self.define' and + # 'self.undef' ? + + + def run(self): + if not self.libraries: + return + + # Yech -- this is cut 'n pasted from build_ext.py! + from distutils.ccompiler import new_compiler + self.compiler = new_compiler(compiler=self.compiler, + dry_run=self.dry_run, + force=self.force) + customize_compiler(self.compiler) + + if self.include_dirs is not None: + self.compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name,value) in self.define: + self.compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + self.compiler.undefine_macro(macro) + + self.build_libraries(self.libraries) + + + def check_library_list(self, libraries): + """Ensure that the list of libraries is valid. + + `library` is presumably provided as a command option 'libraries'. + This method checks that it is a list of 2-tuples, where the tuples + are (library_name, build_info_dict). + + Raise DistutilsSetupError if the structure is invalid anywhere; + just returns otherwise. + """ + if not isinstance(libraries, list): + raise DistutilsSetupError( + "'libraries' option must be a list of tuples") + + for lib in libraries: + if not isinstance(lib, tuple) and len(lib) != 2: + raise DistutilsSetupError( + "each element of 'libraries' must a 2-tuple") + + name, build_info = lib + + if not isinstance(name, str): + raise DistutilsSetupError( + "first element of each tuple in 'libraries' " + "must be a string (the library name)") + + if '/' in name or (os.sep != '/' and os.sep in name): + raise DistutilsSetupError("bad library name '%s': " + "may not contain directory separators" % lib[0]) + + if not isinstance(build_info, dict): + raise DistutilsSetupError( + "second element of each tuple in 'libraries' " + "must be a dictionary (build info)") + + + def get_library_names(self): + # Assume the library list is valid -- 'check_library_list()' is + # called from 'finalize_options()', so it should be! + if not self.libraries: + return None + + lib_names = [] + for (lib_name, build_info) in self.libraries: + lib_names.append(lib_name) + return lib_names + + + def get_source_files(self): + self.check_library_list(self.libraries) + filenames = [] + for (lib_name, build_info) in self.libraries: + sources = build_info.get('sources') + if sources is None or not isinstance(sources, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'sources' must be present and must be " + "a list of source filenames" % lib_name) + + filenames.extend(sources) + return filenames + + + def build_libraries(self, libraries): + for (lib_name, build_info) in libraries: + sources = build_info.get('sources') + if sources is None or not isinstance(sources, (list, tuple)): + raise DistutilsSetupError( + "in 'libraries' option (library '%s'), " + "'sources' must be present and must be " + "a list of source filenames" % lib_name) + sources = list(sources) + + log.info("building '%s' library", lib_name) + + # First, compile the source code to object files in the library + # directory. (This should probably change to putting object + # files in a temporary build directory.) + macros = build_info.get('macros') + include_dirs = build_info.get('include_dirs') + objects = self.compiler.compile(sources, + output_dir=self.build_temp, + macros=macros, + include_dirs=include_dirs, + debug=self.debug) + + # Now "link" the object files together into a static library. + # (On Unix at least, this isn't really linking -- it just + # builds an archive. Whatever.) + self.compiler.create_static_lib(objects, lib_name, + output_dir=self.build_clib, + debug=self.debug) diff --git a/distutils/distutils/command/build_ext.py b/distutils/distutils/command/build_ext.py new file mode 100644 index 0000000..8ed4065 --- /dev/null +++ b/distutils/distutils/command/build_ext.py @@ -0,0 +1,755 @@ +"""distutils.command.build_ext + +Implements the Distutils 'build_ext' command, for building extension +modules (currently limited to C extensions, should accommodate C++ +extensions ASAP).""" + +import contextlib +import os +import re +import sys +from distutils.core import Command +from distutils.errors import * +from distutils.sysconfig import customize_compiler, get_python_version +from distutils.sysconfig import get_config_h_filename +from distutils.dep_util import newer_group +from distutils.extension import Extension +from distutils.util import get_platform +from distutils import log + +from site import USER_BASE + +# An extension name is just a dot-separated list of Python NAMEs (ie. +# the same as a fully-qualified module name). +extension_name_re = re.compile \ + (r'^[a-zA-Z_][a-zA-Z_0-9]*(\.[a-zA-Z_][a-zA-Z_0-9]*)*$') + + +def show_compilers (): + from distutils.ccompiler import show_compilers + show_compilers() + + +class build_ext(Command): + + description = "build C/C++ extensions (compile/link to build directory)" + + # XXX thoughts on how to deal with complex command-line options like + # these, i.e. how to make it so fancy_getopt can suck them off the + # command line and make it look like setup.py defined the appropriate + # lists of tuples of what-have-you. + # - each command needs a callback to process its command-line options + # - Command.__init__() needs access to its share of the whole + # command line (must ultimately come from + # Distribution.parse_command_line()) + # - it then calls the current command class' option-parsing + # callback to deal with weird options like -D, which have to + # parse the option text and churn out some custom data + # structure + # - that data structure (in this case, a list of 2-tuples) + # will then be present in the command object by the time + # we get to finalize_options() (i.e. the constructor + # takes care of both command-line and client options + # in between initialize_options() and finalize_options()) + + sep_by = " (separated by '%s')" % os.pathsep + user_options = [ + ('build-lib=', 'b', + "directory for compiled extension modules"), + ('build-temp=', 't', + "directory for temporary files (build by-products)"), + ('plat-name=', 'p', + "platform name to cross-compile for, if supported " + "(default: %s)" % get_platform()), + ('inplace', 'i', + "ignore build-lib and put compiled extensions into the source " + + "directory alongside your pure Python modules"), + ('include-dirs=', 'I', + "list of directories to search for header files" + sep_by), + ('define=', 'D', + "C preprocessor macros to define"), + ('undef=', 'U', + "C preprocessor macros to undefine"), + ('libraries=', 'l', + "external C libraries to link with"), + ('library-dirs=', 'L', + "directories to search for external C libraries" + sep_by), + ('rpath=', 'R', + "directories to search for shared C libraries at runtime"), + ('link-objects=', 'O', + "extra explicit link objects to include in the link"), + ('debug', 'g', + "compile/link with debugging information"), + ('force', 'f', + "forcibly build everything (ignore file timestamps)"), + ('compiler=', 'c', + "specify the compiler type"), + ('parallel=', 'j', + "number of parallel build jobs"), + ('swig-cpp', None, + "make SWIG create C++ files (default is C)"), + ('swig-opts=', None, + "list of SWIG command line options"), + ('swig=', None, + "path to the SWIG executable"), + ('user', None, + "add user include, library and rpath") + ] + + boolean_options = ['inplace', 'debug', 'force', 'swig-cpp', 'user'] + + help_options = [ + ('help-compiler', None, + "list available compilers", show_compilers), + ] + + def initialize_options(self): + self.extensions = None + self.build_lib = None + self.plat_name = None + self.build_temp = None + self.inplace = 0 + self.package = None + + self.include_dirs = None + self.define = None + self.undef = None + self.libraries = None + self.library_dirs = None + self.rpath = None + self.link_objects = None + self.debug = None + self.force = None + self.compiler = None + self.swig = None + self.swig_cpp = None + self.swig_opts = None + self.user = None + self.parallel = None + + def finalize_options(self): + from distutils import sysconfig + + self.set_undefined_options('build', + ('build_lib', 'build_lib'), + ('build_temp', 'build_temp'), + ('compiler', 'compiler'), + ('debug', 'debug'), + ('force', 'force'), + ('parallel', 'parallel'), + ('plat_name', 'plat_name'), + ) + + if self.package is None: + self.package = self.distribution.ext_package + + self.extensions = self.distribution.ext_modules + + # Make sure Python's include directories (for Python.h, pyconfig.h, + # etc.) are in the include search path. + py_include = sysconfig.get_python_inc() + plat_py_include = sysconfig.get_python_inc(plat_specific=1) + if self.include_dirs is None: + self.include_dirs = self.distribution.include_dirs or [] + if isinstance(self.include_dirs, str): + self.include_dirs = self.include_dirs.split(os.pathsep) + + # If in a virtualenv, add its include directory + # Issue 16116 + if sys.exec_prefix != sys.base_exec_prefix: + self.include_dirs.append(os.path.join(sys.exec_prefix, 'include')) + + # Put the Python "system" include dir at the end, so that + # any local include dirs take precedence. + self.include_dirs.append(py_include) + if plat_py_include != py_include: + self.include_dirs.append(plat_py_include) + + self.ensure_string_list('libraries') + self.ensure_string_list('link_objects') + + # Life is easier if we're not forever checking for None, so + # simplify these options to empty lists if unset + if self.libraries is None: + self.libraries = [] + if self.library_dirs is None: + self.library_dirs = [] + elif isinstance(self.library_dirs, str): + self.library_dirs = self.library_dirs.split(os.pathsep) + + if self.rpath is None: + self.rpath = [] + elif isinstance(self.rpath, str): + self.rpath = self.rpath.split(os.pathsep) + + # for extensions under windows use different directories + # for Release and Debug builds. + # also Python's library directory must be appended to library_dirs + if os.name == 'nt': + # the 'libs' directory is for binary installs - we assume that + # must be the *native* platform. But we don't really support + # cross-compiling via a binary install anyway, so we let it go. + self.library_dirs.append(os.path.join(sys.exec_prefix, 'libs')) + if sys.base_exec_prefix != sys.prefix: # Issue 16116 + self.library_dirs.append(os.path.join(sys.base_exec_prefix, 'libs')) + if self.debug: + self.build_temp = os.path.join(self.build_temp, "Debug") + else: + self.build_temp = os.path.join(self.build_temp, "Release") + + # Append the source distribution include and library directories, + # this allows distutils on windows to work in the source tree + self.include_dirs.append(os.path.dirname(get_config_h_filename())) + _sys_home = getattr(sys, '_home', None) + if _sys_home: + self.library_dirs.append(_sys_home) + + # Use the .lib files for the correct architecture + if self.plat_name == 'win32': + suffix = 'win32' + else: + # win-amd64 or win-ia64 + suffix = self.plat_name[4:] + new_lib = os.path.join(sys.exec_prefix, 'PCbuild') + if suffix: + new_lib = os.path.join(new_lib, suffix) + self.library_dirs.append(new_lib) + + # for extensions under Cygwin and AtheOS Python's library directory must be + # appended to library_dirs + if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos': + if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): + # building third party extensions + self.library_dirs.append(os.path.join(sys.prefix, "lib", + "python" + get_python_version(), + "config")) + else: + # building python standard extensions + self.library_dirs.append('.') + + # For building extensions with a shared Python library, + # Python's library directory must be appended to library_dirs + # See Issues: #1600860, #4366 + if (sysconfig.get_config_var('Py_ENABLE_SHARED')): + if not sysconfig.python_build: + # building third party extensions + self.library_dirs.append(sysconfig.get_config_var('LIBDIR')) + else: + # building python standard extensions + self.library_dirs.append('.') + + # The argument parsing will result in self.define being a string, but + # it has to be a list of 2-tuples. All the preprocessor symbols + # specified by the 'define' option will be set to '1'. Multiple + # symbols can be separated with commas. + + if self.define: + defines = self.define.split(',') + self.define = [(symbol, '1') for symbol in defines] + + # The option for macros to undefine is also a string from the + # option parsing, but has to be a list. Multiple symbols can also + # be separated with commas here. + if self.undef: + self.undef = self.undef.split(',') + + if self.swig_opts is None: + self.swig_opts = [] + else: + self.swig_opts = self.swig_opts.split(' ') + + # Finally add the user include and library directories if requested + if self.user: + user_include = os.path.join(USER_BASE, "include") + user_lib = os.path.join(USER_BASE, "lib") + if os.path.isdir(user_include): + self.include_dirs.append(user_include) + if os.path.isdir(user_lib): + self.library_dirs.append(user_lib) + self.rpath.append(user_lib) + + if isinstance(self.parallel, str): + try: + self.parallel = int(self.parallel) + except ValueError: + raise DistutilsOptionError("parallel should be an integer") + + def run(self): + from distutils.ccompiler import new_compiler + + # 'self.extensions', as supplied by setup.py, is a list of + # Extension instances. See the documentation for Extension (in + # distutils.extension) for details. + # + # For backwards compatibility with Distutils 0.8.2 and earlier, we + # also allow the 'extensions' list to be a list of tuples: + # (ext_name, build_info) + # where build_info is a dictionary containing everything that + # Extension instances do except the name, with a few things being + # differently named. We convert these 2-tuples to Extension + # instances as needed. + + if not self.extensions: + return + + # If we were asked to build any C/C++ libraries, make sure that the + # directory where we put them is in the library search path for + # linking extensions. + if self.distribution.has_c_libraries(): + build_clib = self.get_finalized_command('build_clib') + self.libraries.extend(build_clib.get_library_names() or []) + self.library_dirs.append(build_clib.build_clib) + + # Setup the CCompiler object that we'll use to do all the + # compiling and linking + self.compiler = new_compiler(compiler=self.compiler, + verbose=self.verbose, + dry_run=self.dry_run, + force=self.force) + customize_compiler(self.compiler) + # If we are cross-compiling, init the compiler now (if we are not + # cross-compiling, init would not hurt, but people may rely on + # late initialization of compiler even if they shouldn't...) + if os.name == 'nt' and self.plat_name != get_platform(): + self.compiler.initialize(self.plat_name) + + # And make sure that any compile/link-related options (which might + # come from the command-line or from the setup script) are set in + # that CCompiler object -- that way, they automatically apply to + # all compiling and linking done here. + if self.include_dirs is not None: + self.compiler.set_include_dirs(self.include_dirs) + if self.define is not None: + # 'define' option is a list of (name,value) tuples + for (name, value) in self.define: + self.compiler.define_macro(name, value) + if self.undef is not None: + for macro in self.undef: + self.compiler.undefine_macro(macro) + if self.libraries is not None: + self.compiler.set_libraries(self.libraries) + if self.library_dirs is not None: + self.compiler.set_library_dirs(self.library_dirs) + if self.rpath is not None: + self.compiler.set_runtime_library_dirs(self.rpath) + if self.link_objects is not None: + self.compiler.set_link_objects(self.link_objects) + + # Now actually compile and link everything. + self.build_extensions() + + def check_extensions_list(self, extensions): + """Ensure that the list of extensions (presumably provided as a + command option 'extensions') is valid, i.e. it is a list of + Extension objects. We also support the old-style list of 2-tuples, + where the tuples are (ext_name, build_info), which are converted to + Extension instances here. + + Raise DistutilsSetupError if the structure is invalid anywhere; + just returns otherwise. + """ + if not isinstance(extensions, list): + raise DistutilsSetupError( + "'ext_modules' option must be a list of Extension instances") + + for i, ext in enumerate(extensions): + if isinstance(ext, Extension): + continue # OK! (assume type-checking done + # by Extension constructor) + + if not isinstance(ext, tuple) or len(ext) != 2: + raise DistutilsSetupError( + "each element of 'ext_modules' option must be an " + "Extension instance or 2-tuple") + + ext_name, build_info = ext + + log.warn("old-style (ext_name, build_info) tuple found in " + "ext_modules for extension '%s' " + "-- please convert to Extension instance", ext_name) + + if not (isinstance(ext_name, str) and + extension_name_re.match(ext_name)): + raise DistutilsSetupError( + "first element of each tuple in 'ext_modules' " + "must be the extension name (a string)") + + if not isinstance(build_info, dict): + raise DistutilsSetupError( + "second element of each tuple in 'ext_modules' " + "must be a dictionary (build info)") + + # OK, the (ext_name, build_info) dict is type-safe: convert it + # to an Extension instance. + ext = Extension(ext_name, build_info['sources']) + + # Easy stuff: one-to-one mapping from dict elements to + # instance attributes. + for key in ('include_dirs', 'library_dirs', 'libraries', + 'extra_objects', 'extra_compile_args', + 'extra_link_args'): + val = build_info.get(key) + if val is not None: + setattr(ext, key, val) + + # Medium-easy stuff: same syntax/semantics, different names. + ext.runtime_library_dirs = build_info.get('rpath') + if 'def_file' in build_info: + log.warn("'def_file' element of build info dict " + "no longer supported") + + # Non-trivial stuff: 'macros' split into 'define_macros' + # and 'undef_macros'. + macros = build_info.get('macros') + if macros: + ext.define_macros = [] + ext.undef_macros = [] + for macro in macros: + if not (isinstance(macro, tuple) and len(macro) in (1, 2)): + raise DistutilsSetupError( + "'macros' element of build info dict " + "must be 1- or 2-tuple") + if len(macro) == 1: + ext.undef_macros.append(macro[0]) + elif len(macro) == 2: + ext.define_macros.append(macro) + + extensions[i] = ext + + def get_source_files(self): + self.check_extensions_list(self.extensions) + filenames = [] + + # Wouldn't it be neat if we knew the names of header files too... + for ext in self.extensions: + filenames.extend(ext.sources) + return filenames + + def get_outputs(self): + # Sanity check the 'extensions' list -- can't assume this is being + # done in the same run as a 'build_extensions()' call (in fact, we + # can probably assume that it *isn't*!). + self.check_extensions_list(self.extensions) + + # And build the list of output (built) filenames. Note that this + # ignores the 'inplace' flag, and assumes everything goes in the + # "build" tree. + outputs = [] + for ext in self.extensions: + outputs.append(self.get_ext_fullpath(ext.name)) + return outputs + + def build_extensions(self): + # First, sanity-check the 'extensions' list + self.check_extensions_list(self.extensions) + if self.parallel: + self._build_extensions_parallel() + else: + self._build_extensions_serial() + + def _build_extensions_parallel(self): + workers = self.parallel + if self.parallel is True: + workers = os.cpu_count() # may return None + try: + from concurrent.futures import ThreadPoolExecutor + except ImportError: + workers = None + + if workers is None: + self._build_extensions_serial() + return + + with ThreadPoolExecutor(max_workers=workers) as executor: + futures = [executor.submit(self.build_extension, ext) + for ext in self.extensions] + for ext, fut in zip(self.extensions, futures): + with self._filter_build_errors(ext): + fut.result() + + def _build_extensions_serial(self): + for ext in self.extensions: + with self._filter_build_errors(ext): + self.build_extension(ext) + + @contextlib.contextmanager + def _filter_build_errors(self, ext): + try: + yield + except (CCompilerError, DistutilsError, CompileError) as e: + if not ext.optional: + raise + self.warn('building extension "%s" failed: %s' % + (ext.name, e)) + + def build_extension(self, ext): + sources = ext.sources + if sources is None or not isinstance(sources, (list, tuple)): + raise DistutilsSetupError( + "in 'ext_modules' option (extension '%s'), " + "'sources' must be present and must be " + "a list of source filenames" % ext.name) + sources = list(sources) + + ext_path = self.get_ext_fullpath(ext.name) + depends = sources + ext.depends + if not (self.force or newer_group(depends, ext_path, 'newer')): + log.debug("skipping '%s' extension (up-to-date)", ext.name) + return + else: + log.info("building '%s' extension", ext.name) + + # First, scan the sources for SWIG definition files (.i), run + # SWIG on 'em to create .c files, and modify the sources list + # accordingly. + sources = self.swig_sources(sources, ext) + + # Next, compile the source code to object files. + + # XXX not honouring 'define_macros' or 'undef_macros' -- the + # CCompiler API needs to change to accommodate this, and I + # want to do one thing at a time! + + # Two possible sources for extra compiler arguments: + # - 'extra_compile_args' in Extension object + # - CFLAGS environment variable (not particularly + # elegant, but people seem to expect it and I + # guess it's useful) + # The environment variable should take precedence, and + # any sensible compiler will give precedence to later + # command line args. Hence we combine them in order: + extra_args = ext.extra_compile_args or [] + + macros = ext.define_macros[:] + for undef in ext.undef_macros: + macros.append((undef,)) + + objects = self.compiler.compile(sources, + output_dir=self.build_temp, + macros=macros, + include_dirs=ext.include_dirs, + debug=self.debug, + extra_postargs=extra_args, + depends=ext.depends) + + # XXX outdated variable, kept here in case third-part code + # needs it. + self._built_objects = objects[:] + + # Now link the object files together into a "shared object" -- + # of course, first we have to figure out all the other things + # that go into the mix. + if ext.extra_objects: + objects.extend(ext.extra_objects) + extra_args = ext.extra_link_args or [] + + # Detect target language, if not provided + language = ext.language or self.compiler.detect_language(sources) + + self.compiler.link_shared_object( + objects, ext_path, + libraries=self.get_libraries(ext), + library_dirs=ext.library_dirs, + runtime_library_dirs=ext.runtime_library_dirs, + extra_postargs=extra_args, + export_symbols=self.get_export_symbols(ext), + debug=self.debug, + build_temp=self.build_temp, + target_lang=language) + + def swig_sources(self, sources, extension): + """Walk the list of source files in 'sources', looking for SWIG + interface (.i) files. Run SWIG on all that are found, and + return a modified 'sources' list with SWIG source files replaced + by the generated C (or C++) files. + """ + new_sources = [] + swig_sources = [] + swig_targets = {} + + # XXX this drops generated C/C++ files into the source tree, which + # is fine for developers who want to distribute the generated + # source -- but there should be an option to put SWIG output in + # the temp dir. + + if self.swig_cpp: + log.warn("--swig-cpp is deprecated - use --swig-opts=-c++") + + if self.swig_cpp or ('-c++' in self.swig_opts) or \ + ('-c++' in extension.swig_opts): + target_ext = '.cpp' + else: + target_ext = '.c' + + for source in sources: + (base, ext) = os.path.splitext(source) + if ext == ".i": # SWIG interface file + new_sources.append(base + '_wrap' + target_ext) + swig_sources.append(source) + swig_targets[source] = new_sources[-1] + else: + new_sources.append(source) + + if not swig_sources: + return new_sources + + swig = self.swig or self.find_swig() + swig_cmd = [swig, "-python"] + swig_cmd.extend(self.swig_opts) + if self.swig_cpp: + swig_cmd.append("-c++") + + # Do not override commandline arguments + if not self.swig_opts: + for o in extension.swig_opts: + swig_cmd.append(o) + + for source in swig_sources: + target = swig_targets[source] + log.info("swigging %s to %s", source, target) + self.spawn(swig_cmd + ["-o", target, source]) + + return new_sources + + def find_swig(self): + """Return the name of the SWIG executable. On Unix, this is + just "swig" -- it should be in the PATH. Tries a bit harder on + Windows. + """ + if os.name == "posix": + return "swig" + elif os.name == "nt": + # Look for SWIG in its standard installation directory on + # Windows (or so I presume!). If we find it there, great; + # if not, act like Unix and assume it's in the PATH. + for vers in ("1.3", "1.2", "1.1"): + fn = os.path.join("c:\\swig%s" % vers, "swig.exe") + if os.path.isfile(fn): + return fn + else: + return "swig.exe" + else: + raise DistutilsPlatformError( + "I don't know how to find (much less run) SWIG " + "on platform '%s'" % os.name) + + # -- Name generators ----------------------------------------------- + # (extension names, filenames, whatever) + def get_ext_fullpath(self, ext_name): + """Returns the path of the filename for a given extension. + + The file is located in `build_lib` or directly in the package + (inplace option). + """ + fullname = self.get_ext_fullname(ext_name) + modpath = fullname.split('.') + filename = self.get_ext_filename(modpath[-1]) + + if not self.inplace: + # no further work needed + # returning : + # build_dir/package/path/filename + filename = os.path.join(*modpath[:-1]+[filename]) + return os.path.join(self.build_lib, filename) + + # the inplace option requires to find the package directory + # using the build_py command for that + package = '.'.join(modpath[0:-1]) + build_py = self.get_finalized_command('build_py') + package_dir = os.path.abspath(build_py.get_package_dir(package)) + + # returning + # package_dir/filename + return os.path.join(package_dir, filename) + + def get_ext_fullname(self, ext_name): + """Returns the fullname of a given extension name. + + Adds the `package.` prefix""" + if self.package is None: + return ext_name + else: + return self.package + '.' + ext_name + + def get_ext_filename(self, ext_name): + r"""Convert the name of an extension (eg. "foo.bar") into the name + of the file from which it will be loaded (eg. "foo/bar.so", or + "foo\bar.pyd"). + """ + from distutils.sysconfig import get_config_var + ext_path = ext_name.split('.') + ext_suffix = get_config_var('EXT_SUFFIX') + return os.path.join(*ext_path) + ext_suffix + + def get_export_symbols(self, ext): + """Return the list of symbols that a shared extension has to + export. This either uses 'ext.export_symbols' or, if it's not + provided, "PyInit_" + module_name. Only relevant on Windows, where + the .pyd file (DLL) must export the module "PyInit_" function. + """ + initfunc_name = "PyInit_" + ext.name.split('.')[-1] + if initfunc_name not in ext.export_symbols: + ext.export_symbols.append(initfunc_name) + return ext.export_symbols + + def get_libraries(self, ext): + """Return the list of libraries to link against when building a + shared extension. On most platforms, this is just 'ext.libraries'; + on Windows, we add the Python library (eg. python20.dll). + """ + # The python library is always needed on Windows. For MSVC, this + # is redundant, since the library is mentioned in a pragma in + # pyconfig.h that MSVC groks. The other Windows compilers all seem + # to need it mentioned explicitly, though, so that's what we do. + # Append '_d' to the python import library on debug builds. + if sys.platform == "win32": + from distutils._msvccompiler import MSVCCompiler + if not isinstance(self.compiler, MSVCCompiler): + template = "python%d%d" + if self.debug: + template = template + '_d' + pythonlib = (template % + (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + # don't extend ext.libraries, it may be shared with other + # extensions, it is a reference to the original list + return ext.libraries + [pythonlib] + else: + return ext.libraries + elif sys.platform[:6] == "cygwin": + template = "python%d.%d" + pythonlib = (template % + (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + # don't extend ext.libraries, it may be shared with other + # extensions, it is a reference to the original list + return ext.libraries + [pythonlib] + elif sys.platform[:6] == "atheos": + from distutils import sysconfig + + template = "python%d.%d" + pythonlib = (template % + (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) + # Get SHLIBS from Makefile + extra = [] + for lib in sysconfig.get_config_var('SHLIBS').split(): + if lib.startswith('-l'): + extra.append(lib[2:]) + else: + extra.append(lib) + # don't extend ext.libraries, it may be shared with other + # extensions, it is a reference to the original list + return ext.libraries + [pythonlib, "m"] + extra + elif sys.platform == 'darwin': + # Don't use the default code below + return ext.libraries + elif sys.platform[:3] == 'aix': + # Don't use the default code below + return ext.libraries + else: + from distutils import sysconfig + if sysconfig.get_config_var('Py_ENABLE_SHARED'): + pythonlib = 'python{}.{}{}'.format( + sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff, + sysconfig.get_config_var('ABIFLAGS')) + return ext.libraries + [pythonlib] + else: + return ext.libraries diff --git a/distutils/distutils/command/build_py.py b/distutils/distutils/command/build_py.py new file mode 100644 index 0000000..cf0ca57 --- /dev/null +++ b/distutils/distutils/command/build_py.py @@ -0,0 +1,416 @@ +"""distutils.command.build_py + +Implements the Distutils 'build_py' command.""" + +import os +import importlib.util +import sys +from glob import glob + +from distutils.core import Command +from distutils.errors import * +from distutils.util import convert_path, Mixin2to3 +from distutils import log + +class build_py (Command): + + description = "\"build\" pure Python modules (copy to build directory)" + + user_options = [ + ('build-lib=', 'd', "directory to \"build\" (copy) to"), + ('compile', 'c', "compile .py to .pyc"), + ('no-compile', None, "don't compile .py files [default]"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + ('force', 'f', "forcibly build everything (ignore file timestamps)"), + ] + + boolean_options = ['compile', 'force'] + negative_opt = {'no-compile' : 'compile'} + + def initialize_options(self): + self.build_lib = None + self.py_modules = None + self.package = None + self.package_data = None + self.package_dir = None + self.compile = 0 + self.optimize = 0 + self.force = None + + def finalize_options(self): + self.set_undefined_options('build', + ('build_lib', 'build_lib'), + ('force', 'force')) + + # Get the distribution options that are aliases for build_py + # options -- list of packages and list of modules. + self.packages = self.distribution.packages + self.py_modules = self.distribution.py_modules + self.package_data = self.distribution.package_data + self.package_dir = {} + if self.distribution.package_dir: + for name, path in self.distribution.package_dir.items(): + self.package_dir[name] = convert_path(path) + self.data_files = self.get_data_files() + + # Ick, copied straight from install_lib.py (fancy_getopt needs a + # type system! Hell, *everything* needs a type system!!!) + if not isinstance(self.optimize, int): + try: + self.optimize = int(self.optimize) + assert 0 <= self.optimize <= 2 + except (ValueError, AssertionError): + raise DistutilsOptionError("optimize must be 0, 1, or 2") + + def run(self): + # XXX copy_file by default preserves atime and mtime. IMHO this is + # the right thing to do, but perhaps it should be an option -- in + # particular, a site administrator might want installed files to + # reflect the time of installation rather than the last + # modification time before the installed release. + + # XXX copy_file by default preserves mode, which appears to be the + # wrong thing to do: if a file is read-only in the working + # directory, we want it to be installed read/write so that the next + # installation of the same module distribution can overwrite it + # without problems. (This might be a Unix-specific issue.) Thus + # we turn off 'preserve_mode' when copying to the build directory, + # since the build directory is supposed to be exactly what the + # installation will look like (ie. we preserve mode when + # installing). + + # Two options control which modules will be installed: 'packages' + # and 'py_modules'. The former lets us work with whole packages, not + # specifying individual modules at all; the latter is for + # specifying modules one-at-a-time. + + if self.py_modules: + self.build_modules() + if self.packages: + self.build_packages() + self.build_package_data() + + self.byte_compile(self.get_outputs(include_bytecode=0)) + + def get_data_files(self): + """Generate list of '(package,src_dir,build_dir,filenames)' tuples""" + data = [] + if not self.packages: + return data + for package in self.packages: + # Locate package source directory + src_dir = self.get_package_dir(package) + + # Compute package build directory + build_dir = os.path.join(*([self.build_lib] + package.split('.'))) + + # Length of path to strip from found files + plen = 0 + if src_dir: + plen = len(src_dir)+1 + + # Strip directory from globbed filenames + filenames = [ + file[plen:] for file in self.find_data_files(package, src_dir) + ] + data.append((package, src_dir, build_dir, filenames)) + return data + + def find_data_files(self, package, src_dir): + """Return filenames for package's data files in 'src_dir'""" + globs = (self.package_data.get('', []) + + self.package_data.get(package, [])) + files = [] + for pattern in globs: + # Each pattern has to be converted to a platform-specific path + filelist = glob(os.path.join(src_dir, convert_path(pattern))) + # Files that match more than one pattern are only added once + files.extend([fn for fn in filelist if fn not in files + and os.path.isfile(fn)]) + return files + + def build_package_data(self): + """Copy data files into build directory""" + lastdir = None + for package, src_dir, build_dir, filenames in self.data_files: + for filename in filenames: + target = os.path.join(build_dir, filename) + self.mkpath(os.path.dirname(target)) + self.copy_file(os.path.join(src_dir, filename), target, + preserve_mode=False) + + def get_package_dir(self, package): + """Return the directory, relative to the top of the source + distribution, where package 'package' should be found + (at least according to the 'package_dir' option, if any).""" + path = package.split('.') + + if not self.package_dir: + if path: + return os.path.join(*path) + else: + return '' + else: + tail = [] + while path: + try: + pdir = self.package_dir['.'.join(path)] + except KeyError: + tail.insert(0, path[-1]) + del path[-1] + else: + tail.insert(0, pdir) + return os.path.join(*tail) + else: + # Oops, got all the way through 'path' without finding a + # match in package_dir. If package_dir defines a directory + # for the root (nameless) package, then fallback on it; + # otherwise, we might as well have not consulted + # package_dir at all, as we just use the directory implied + # by 'tail' (which should be the same as the original value + # of 'path' at this point). + pdir = self.package_dir.get('') + if pdir is not None: + tail.insert(0, pdir) + + if tail: + return os.path.join(*tail) + else: + return '' + + def check_package(self, package, package_dir): + # Empty dir name means current directory, which we can probably + # assume exists. Also, os.path.exists and isdir don't know about + # my "empty string means current dir" convention, so we have to + # circumvent them. + if package_dir != "": + if not os.path.exists(package_dir): + raise DistutilsFileError( + "package directory '%s' does not exist" % package_dir) + if not os.path.isdir(package_dir): + raise DistutilsFileError( + "supposed package directory '%s' exists, " + "but is not a directory" % package_dir) + + # Require __init__.py for all but the "root package" + if package: + init_py = os.path.join(package_dir, "__init__.py") + if os.path.isfile(init_py): + return init_py + else: + log.warn(("package init file '%s' not found " + + "(or not a regular file)"), init_py) + + # Either not in a package at all (__init__.py not expected), or + # __init__.py doesn't exist -- so don't return the filename. + return None + + def check_module(self, module, module_file): + if not os.path.isfile(module_file): + log.warn("file %s (for module %s) not found", module_file, module) + return False + else: + return True + + def find_package_modules(self, package, package_dir): + self.check_package(package, package_dir) + module_files = glob(os.path.join(package_dir, "*.py")) + modules = [] + setup_script = os.path.abspath(self.distribution.script_name) + + for f in module_files: + abs_f = os.path.abspath(f) + if abs_f != setup_script: + module = os.path.splitext(os.path.basename(f))[0] + modules.append((package, module, f)) + else: + self.debug_print("excluding %s" % setup_script) + return modules + + def find_modules(self): + """Finds individually-specified Python modules, ie. those listed by + module name in 'self.py_modules'. Returns a list of tuples (package, + module_base, filename): 'package' is a tuple of the path through + package-space to the module; 'module_base' is the bare (no + packages, no dots) module name, and 'filename' is the path to the + ".py" file (relative to the distribution root) that implements the + module. + """ + # Map package names to tuples of useful info about the package: + # (package_dir, checked) + # package_dir - the directory where we'll find source files for + # this package + # checked - true if we have checked that the package directory + # is valid (exists, contains __init__.py, ... ?) + packages = {} + + # List of (package, module, filename) tuples to return + modules = [] + + # We treat modules-in-packages almost the same as toplevel modules, + # just the "package" for a toplevel is empty (either an empty + # string or empty list, depending on context). Differences: + # - don't check for __init__.py in directory for empty package + for module in self.py_modules: + path = module.split('.') + package = '.'.join(path[0:-1]) + module_base = path[-1] + + try: + (package_dir, checked) = packages[package] + except KeyError: + package_dir = self.get_package_dir(package) + checked = 0 + + if not checked: + init_py = self.check_package(package, package_dir) + packages[package] = (package_dir, 1) + if init_py: + modules.append((package, "__init__", init_py)) + + # XXX perhaps we should also check for just .pyc files + # (so greedy closed-source bastards can distribute Python + # modules too) + module_file = os.path.join(package_dir, module_base + ".py") + if not self.check_module(module, module_file): + continue + + modules.append((package, module_base, module_file)) + + return modules + + def find_all_modules(self): + """Compute the list of all modules that will be built, whether + they are specified one-module-at-a-time ('self.py_modules') or + by whole packages ('self.packages'). Return a list of tuples + (package, module, module_file), just like 'find_modules()' and + 'find_package_modules()' do.""" + modules = [] + if self.py_modules: + modules.extend(self.find_modules()) + if self.packages: + for package in self.packages: + package_dir = self.get_package_dir(package) + m = self.find_package_modules(package, package_dir) + modules.extend(m) + return modules + + def get_source_files(self): + return [module[-1] for module in self.find_all_modules()] + + def get_module_outfile(self, build_dir, package, module): + outfile_path = [build_dir] + list(package) + [module + ".py"] + return os.path.join(*outfile_path) + + def get_outputs(self, include_bytecode=1): + modules = self.find_all_modules() + outputs = [] + for (package, module, module_file) in modules: + package = package.split('.') + filename = self.get_module_outfile(self.build_lib, package, module) + outputs.append(filename) + if include_bytecode: + if self.compile: + outputs.append(importlib.util.cache_from_source( + filename, optimization='')) + if self.optimize > 0: + outputs.append(importlib.util.cache_from_source( + filename, optimization=self.optimize)) + + outputs += [ + os.path.join(build_dir, filename) + for package, src_dir, build_dir, filenames in self.data_files + for filename in filenames + ] + + return outputs + + def build_module(self, module, module_file, package): + if isinstance(package, str): + package = package.split('.') + elif not isinstance(package, (list, tuple)): + raise TypeError( + "'package' must be a string (dot-separated), list, or tuple") + + # Now put the module source file into the "build" area -- this is + # easy, we just copy it somewhere under self.build_lib (the build + # directory for Python source). + outfile = self.get_module_outfile(self.build_lib, package, module) + dir = os.path.dirname(outfile) + self.mkpath(dir) + return self.copy_file(module_file, outfile, preserve_mode=0) + + def build_modules(self): + modules = self.find_modules() + for (package, module, module_file) in modules: + # Now "build" the module -- ie. copy the source file to + # self.build_lib (the build directory for Python source). + # (Actually, it gets copied to the directory for this package + # under self.build_lib.) + self.build_module(module, module_file, package) + + def build_packages(self): + for package in self.packages: + # Get list of (package, module, module_file) tuples based on + # scanning the package directory. 'package' is only included + # in the tuple so that 'find_modules()' and + # 'find_package_tuples()' have a consistent interface; it's + # ignored here (apart from a sanity check). Also, 'module' is + # the *unqualified* module name (ie. no dots, no package -- we + # already know its package!), and 'module_file' is the path to + # the .py file, relative to the current directory + # (ie. including 'package_dir'). + package_dir = self.get_package_dir(package) + modules = self.find_package_modules(package, package_dir) + + # Now loop over the modules we found, "building" each one (just + # copy it to self.build_lib). + for (package_, module, module_file) in modules: + assert package == package_ + self.build_module(module, module_file, package) + + def byte_compile(self, files): + if sys.dont_write_bytecode: + self.warn('byte-compiling is disabled, skipping.') + return + + from distutils.util import byte_compile + prefix = self.build_lib + if prefix[-1] != os.sep: + prefix = prefix + os.sep + + # XXX this code is essentially the same as the 'byte_compile() + # method of the "install_lib" command, except for the determination + # of the 'prefix' string. Hmmm. + if self.compile: + byte_compile(files, optimize=0, + force=self.force, prefix=prefix, dry_run=self.dry_run) + if self.optimize > 0: + byte_compile(files, optimize=self.optimize, + force=self.force, prefix=prefix, dry_run=self.dry_run) + +class build_py_2to3(build_py, Mixin2to3): + def run(self): + self.updated_files = [] + + # Base class code + if self.py_modules: + self.build_modules() + if self.packages: + self.build_packages() + self.build_package_data() + + # 2to3 + self.run_2to3(self.updated_files) + + # Remaining base class code + self.byte_compile(self.get_outputs(include_bytecode=0)) + + def build_module(self, module, module_file, package): + res = build_py.build_module(self, module, module_file, package) + if res[1]: + # file was copied + self.updated_files.append(res[0]) + return res diff --git a/distutils/distutils/command/build_scripts.py b/distutils/distutils/command/build_scripts.py new file mode 100644 index 0000000..ccc70e6 --- /dev/null +++ b/distutils/distutils/command/build_scripts.py @@ -0,0 +1,160 @@ +"""distutils.command.build_scripts + +Implements the Distutils 'build_scripts' command.""" + +import os, re +from stat import ST_MODE +from distutils import sysconfig +from distutils.core import Command +from distutils.dep_util import newer +from distutils.util import convert_path, Mixin2to3 +from distutils import log +import tokenize + +# check if Python is called on the first line with this expression +first_line_re = re.compile(b'^#!.*python[0-9.]*([ \t].*)?$') + +class build_scripts(Command): + + description = "\"build\" scripts (copy and fixup #! line)" + + user_options = [ + ('build-dir=', 'd', "directory to \"build\" (copy) to"), + ('force', 'f', "forcibly build everything (ignore file timestamps"), + ('executable=', 'e', "specify final destination interpreter path"), + ] + + boolean_options = ['force'] + + + def initialize_options(self): + self.build_dir = None + self.scripts = None + self.force = None + self.executable = None + self.outfiles = None + + def finalize_options(self): + self.set_undefined_options('build', + ('build_scripts', 'build_dir'), + ('force', 'force'), + ('executable', 'executable')) + self.scripts = self.distribution.scripts + + def get_source_files(self): + return self.scripts + + def run(self): + if not self.scripts: + return + self.copy_scripts() + + + def copy_scripts(self): + r"""Copy each script listed in 'self.scripts'; if it's marked as a + Python script in the Unix way (first line matches 'first_line_re', + ie. starts with "\#!" and contains "python"), then adjust the first + line to refer to the current Python interpreter as we copy. + """ + self.mkpath(self.build_dir) + outfiles = [] + updated_files = [] + for script in self.scripts: + adjust = False + script = convert_path(script) + outfile = os.path.join(self.build_dir, os.path.basename(script)) + outfiles.append(outfile) + + if not self.force and not newer(script, outfile): + log.debug("not copying %s (up-to-date)", script) + continue + + # Always open the file, but ignore failures in dry-run mode -- + # that way, we'll get accurate feedback if we can read the + # script. + try: + f = open(script, "rb") + except OSError: + if not self.dry_run: + raise + f = None + else: + encoding, lines = tokenize.detect_encoding(f.readline) + f.seek(0) + first_line = f.readline() + if not first_line: + self.warn("%s is an empty file (skipping)" % script) + continue + + match = first_line_re.match(first_line) + if match: + adjust = True + post_interp = match.group(1) or b'' + + if adjust: + log.info("copying and adjusting %s -> %s", script, + self.build_dir) + updated_files.append(outfile) + if not self.dry_run: + if not sysconfig.python_build: + executable = self.executable + else: + executable = os.path.join( + sysconfig.get_config_var("BINDIR"), + "python%s%s" % (sysconfig.get_config_var("VERSION"), + sysconfig.get_config_var("EXE"))) + executable = os.fsencode(executable) + shebang = b"#!" + executable + post_interp + b"\n" + # Python parser starts to read a script using UTF-8 until + # it gets a #coding:xxx cookie. The shebang has to be the + # first line of a file, the #coding:xxx cookie cannot be + # written before. So the shebang has to be decodable from + # UTF-8. + try: + shebang.decode('utf-8') + except UnicodeDecodeError: + raise ValueError( + "The shebang ({!r}) is not decodable " + "from utf-8".format(shebang)) + # If the script is encoded to a custom encoding (use a + # #coding:xxx cookie), the shebang has to be decodable from + # the script encoding too. + try: + shebang.decode(encoding) + except UnicodeDecodeError: + raise ValueError( + "The shebang ({!r}) is not decodable " + "from the script encoding ({})" + .format(shebang, encoding)) + with open(outfile, "wb") as outf: + outf.write(shebang) + outf.writelines(f.readlines()) + if f: + f.close() + else: + if f: + f.close() + updated_files.append(outfile) + self.copy_file(script, outfile) + + if os.name == 'posix': + for file in outfiles: + if self.dry_run: + log.info("changing mode of %s", file) + else: + oldmode = os.stat(file)[ST_MODE] & 0o7777 + newmode = (oldmode | 0o555) & 0o7777 + if newmode != oldmode: + log.info("changing mode of %s from %o to %o", + file, oldmode, newmode) + os.chmod(file, newmode) + # XXX should we modify self.outfiles? + return outfiles, updated_files + +class build_scripts_2to3(build_scripts, Mixin2to3): + + def copy_scripts(self): + outfiles, updated_files = build_scripts.copy_scripts(self) + if not self.dry_run: + self.run_2to3(updated_files) + return outfiles, updated_files diff --git a/distutils/distutils/command/check.py b/distutils/distutils/command/check.py new file mode 100644 index 0000000..7ebe707 --- /dev/null +++ b/distutils/distutils/command/check.py @@ -0,0 +1,145 @@ +"""distutils.command.check + +Implements the Distutils 'check' command. +""" +from distutils.core import Command +from distutils.errors import DistutilsSetupError + +try: + # docutils is installed + from docutils.utils import Reporter + from docutils.parsers.rst import Parser + from docutils import frontend + from docutils import nodes + from io import StringIO + + class SilentReporter(Reporter): + + def __init__(self, source, report_level, halt_level, stream=None, + debug=0, encoding='ascii', error_handler='replace'): + self.messages = [] + Reporter.__init__(self, source, report_level, halt_level, stream, + debug, encoding, error_handler) + + def system_message(self, level, message, *children, **kwargs): + self.messages.append((level, message, children, kwargs)) + return nodes.system_message(message, level=level, + type=self.levels[level], + *children, **kwargs) + + HAS_DOCUTILS = True +except Exception: + # Catch all exceptions because exceptions besides ImportError probably + # indicate that docutils is not ported to Py3k. + HAS_DOCUTILS = False + +class check(Command): + """This command checks the meta-data of the package. + """ + description = ("perform some checks on the package") + user_options = [('metadata', 'm', 'Verify meta-data'), + ('restructuredtext', 'r', + ('Checks if long string meta-data syntax ' + 'are reStructuredText-compliant')), + ('strict', 's', + 'Will exit with an error if a check fails')] + + boolean_options = ['metadata', 'restructuredtext', 'strict'] + + def initialize_options(self): + """Sets default values for options.""" + self.restructuredtext = 0 + self.metadata = 1 + self.strict = 0 + self._warnings = 0 + + def finalize_options(self): + pass + + def warn(self, msg): + """Counts the number of warnings that occurs.""" + self._warnings += 1 + return Command.warn(self, msg) + + def run(self): + """Runs the command.""" + # perform the various tests + if self.metadata: + self.check_metadata() + if self.restructuredtext: + if HAS_DOCUTILS: + self.check_restructuredtext() + elif self.strict: + raise DistutilsSetupError('The docutils package is needed.') + + # let's raise an error in strict mode, if we have at least + # one warning + if self.strict and self._warnings > 0: + raise DistutilsSetupError('Please correct your package.') + + def check_metadata(self): + """Ensures that all required elements of meta-data are supplied. + + name, version, URL, (author and author_email) or + (maintainer and maintainer_email)). + + Warns if any are missing. + """ + metadata = self.distribution.metadata + + missing = [] + for attr in ('name', 'version', 'url'): + if not (hasattr(metadata, attr) and getattr(metadata, attr)): + missing.append(attr) + + if missing: + self.warn("missing required meta-data: %s" % ', '.join(missing)) + if metadata.author: + if not metadata.author_email: + self.warn("missing meta-data: if 'author' supplied, " + + "'author_email' must be supplied too") + elif metadata.maintainer: + if not metadata.maintainer_email: + self.warn("missing meta-data: if 'maintainer' supplied, " + + "'maintainer_email' must be supplied too") + else: + self.warn("missing meta-data: either (author and author_email) " + + "or (maintainer and maintainer_email) " + + "must be supplied") + + def check_restructuredtext(self): + """Checks if the long string fields are reST-compliant.""" + data = self.distribution.get_long_description() + for warning in self._check_rst_data(data): + line = warning[-1].get('line') + if line is None: + warning = warning[1] + else: + warning = '%s (line %s)' % (warning[1], line) + self.warn(warning) + + def _check_rst_data(self, data): + """Returns warnings when the provided data doesn't compile.""" + source_path = StringIO() + parser = Parser() + settings = frontend.OptionParser(components=(Parser,)).get_default_values() + settings.tab_width = 4 + settings.pep_references = None + settings.rfc_references = None + reporter = SilentReporter(source_path, + settings.report_level, + settings.halt_level, + stream=settings.warning_stream, + debug=settings.debug, + encoding=settings.error_encoding, + error_handler=settings.error_encoding_error_handler) + + document = nodes.document(settings, reporter, source=source_path) + document.note_source(source_path, -1) + try: + parser.parse(data, document) + except AttributeError as e: + reporter.messages.append( + (-1, 'Could not finish the parsing: %s.' % e, '', {})) + + return reporter.messages diff --git a/distutils/distutils/command/clean.py b/distutils/distutils/command/clean.py new file mode 100644 index 0000000..0cb2701 --- /dev/null +++ b/distutils/distutils/command/clean.py @@ -0,0 +1,76 @@ +"""distutils.command.clean + +Implements the Distutils 'clean' command.""" + +# contributed by Bastian Kleineidam , added 2000-03-18 + +import os +from distutils.core import Command +from distutils.dir_util import remove_tree +from distutils import log + +class clean(Command): + + description = "clean up temporary files from 'build' command" + user_options = [ + ('build-base=', 'b', + "base build directory (default: 'build.build-base')"), + ('build-lib=', None, + "build directory for all modules (default: 'build.build-lib')"), + ('build-temp=', 't', + "temporary build directory (default: 'build.build-temp')"), + ('build-scripts=', None, + "build directory for scripts (default: 'build.build-scripts')"), + ('bdist-base=', None, + "temporary directory for built distributions"), + ('all', 'a', + "remove all build output, not just temporary by-products") + ] + + boolean_options = ['all'] + + def initialize_options(self): + self.build_base = None + self.build_lib = None + self.build_temp = None + self.build_scripts = None + self.bdist_base = None + self.all = None + + def finalize_options(self): + self.set_undefined_options('build', + ('build_base', 'build_base'), + ('build_lib', 'build_lib'), + ('build_scripts', 'build_scripts'), + ('build_temp', 'build_temp')) + self.set_undefined_options('bdist', + ('bdist_base', 'bdist_base')) + + def run(self): + # remove the build/temp. directory (unless it's already + # gone) + if os.path.exists(self.build_temp): + remove_tree(self.build_temp, dry_run=self.dry_run) + else: + log.debug("'%s' does not exist -- can't clean it", + self.build_temp) + + if self.all: + # remove build directories + for directory in (self.build_lib, + self.bdist_base, + self.build_scripts): + if os.path.exists(directory): + remove_tree(directory, dry_run=self.dry_run) + else: + log.warn("'%s' does not exist -- can't clean it", + directory) + + # just for the heck of it, try to remove the base build directory: + # we might have emptied it right now, but if not we don't care + if not self.dry_run: + try: + os.rmdir(self.build_base) + log.info("removing '%s'", self.build_base) + except OSError: + pass diff --git a/distutils/distutils/command/command_template b/distutils/distutils/command/command_template new file mode 100644 index 0000000..6106819 --- /dev/null +++ b/distutils/distutils/command/command_template @@ -0,0 +1,33 @@ +"""distutils.command.x + +Implements the Distutils 'x' command. +""" + +# created 2000/mm/dd, John Doe + +__revision__ = "$Id$" + +from distutils.core import Command + + +class x(Command): + + # Brief (40-50 characters) description of the command + description = "" + + # List of option tuples: long name, short name (None if no short + # name), and help string. + user_options = [('', '', + ""), + ] + + def initialize_options(self): + self. = None + self. = None + self. = None + + def finalize_options(self): + if self.x is None: + self.x = + + def run(self): diff --git a/distutils/distutils/command/config.py b/distutils/distutils/command/config.py new file mode 100644 index 0000000..4ae153d --- /dev/null +++ b/distutils/distutils/command/config.py @@ -0,0 +1,347 @@ +"""distutils.command.config + +Implements the Distutils 'config' command, a (mostly) empty command class +that exists mainly to be sub-classed by specific module distributions and +applications. The idea is that while every "config" command is different, +at least they're all named the same, and users always see "config" in the +list of standard commands. Also, this is a good place to put common +configure-like tasks: "try to compile this C code", or "figure out where +this header file lives". +""" + +import os, re + +from distutils.core import Command +from distutils.errors import DistutilsExecError +from distutils.sysconfig import customize_compiler +from distutils import log + +LANG_EXT = {"c": ".c", "c++": ".cxx"} + +class config(Command): + + description = "prepare to build" + + user_options = [ + ('compiler=', None, + "specify the compiler type"), + ('cc=', None, + "specify the compiler executable"), + ('include-dirs=', 'I', + "list of directories to search for header files"), + ('define=', 'D', + "C preprocessor macros to define"), + ('undef=', 'U', + "C preprocessor macros to undefine"), + ('libraries=', 'l', + "external C libraries to link with"), + ('library-dirs=', 'L', + "directories to search for external C libraries"), + + ('noisy', None, + "show every action (compile, link, run, ...) taken"), + ('dump-source', None, + "dump generated source files before attempting to compile them"), + ] + + + # The three standard command methods: since the "config" command + # does nothing by default, these are empty. + + def initialize_options(self): + self.compiler = None + self.cc = None + self.include_dirs = None + self.libraries = None + self.library_dirs = None + + # maximal output for now + self.noisy = 1 + self.dump_source = 1 + + # list of temporary files generated along-the-way that we have + # to clean at some point + self.temp_files = [] + + def finalize_options(self): + if self.include_dirs is None: + self.include_dirs = self.distribution.include_dirs or [] + elif isinstance(self.include_dirs, str): + self.include_dirs = self.include_dirs.split(os.pathsep) + + if self.libraries is None: + self.libraries = [] + elif isinstance(self.libraries, str): + self.libraries = [self.libraries] + + if self.library_dirs is None: + self.library_dirs = [] + elif isinstance(self.library_dirs, str): + self.library_dirs = self.library_dirs.split(os.pathsep) + + def run(self): + pass + + # Utility methods for actual "config" commands. The interfaces are + # loosely based on Autoconf macros of similar names. Sub-classes + # may use these freely. + + def _check_compiler(self): + """Check that 'self.compiler' really is a CCompiler object; + if not, make it one. + """ + # We do this late, and only on-demand, because this is an expensive + # import. + from distutils.ccompiler import CCompiler, new_compiler + if not isinstance(self.compiler, CCompiler): + self.compiler = new_compiler(compiler=self.compiler, + dry_run=self.dry_run, force=1) + customize_compiler(self.compiler) + if self.include_dirs: + self.compiler.set_include_dirs(self.include_dirs) + if self.libraries: + self.compiler.set_libraries(self.libraries) + if self.library_dirs: + self.compiler.set_library_dirs(self.library_dirs) + + def _gen_temp_sourcefile(self, body, headers, lang): + filename = "_configtest" + LANG_EXT[lang] + file = open(filename, "w") + if headers: + for header in headers: + file.write("#include <%s>\n" % header) + file.write("\n") + file.write(body) + if body[-1] != "\n": + file.write("\n") + file.close() + return filename + + def _preprocess(self, body, headers, include_dirs, lang): + src = self._gen_temp_sourcefile(body, headers, lang) + out = "_configtest.i" + self.temp_files.extend([src, out]) + self.compiler.preprocess(src, out, include_dirs=include_dirs) + return (src, out) + + def _compile(self, body, headers, include_dirs, lang): + src = self._gen_temp_sourcefile(body, headers, lang) + if self.dump_source: + dump_file(src, "compiling '%s':" % src) + (obj,) = self.compiler.object_filenames([src]) + self.temp_files.extend([src, obj]) + self.compiler.compile([src], include_dirs=include_dirs) + return (src, obj) + + def _link(self, body, headers, include_dirs, libraries, library_dirs, + lang): + (src, obj) = self._compile(body, headers, include_dirs, lang) + prog = os.path.splitext(os.path.basename(src))[0] + self.compiler.link_executable([obj], prog, + libraries=libraries, + library_dirs=library_dirs, + target_lang=lang) + + if self.compiler.exe_extension is not None: + prog = prog + self.compiler.exe_extension + self.temp_files.append(prog) + + return (src, obj, prog) + + def _clean(self, *filenames): + if not filenames: + filenames = self.temp_files + self.temp_files = [] + log.info("removing: %s", ' '.join(filenames)) + for filename in filenames: + try: + os.remove(filename) + except OSError: + pass + + + # XXX these ignore the dry-run flag: what to do, what to do? even if + # you want a dry-run build, you still need some sort of configuration + # info. My inclination is to make it up to the real config command to + # consult 'dry_run', and assume a default (minimal) configuration if + # true. The problem with trying to do it here is that you'd have to + # return either true or false from all the 'try' methods, neither of + # which is correct. + + # XXX need access to the header search path and maybe default macros. + + def try_cpp(self, body=None, headers=None, include_dirs=None, lang="c"): + """Construct a source file from 'body' (a string containing lines + of C/C++ code) and 'headers' (a list of header files to include) + and run it through the preprocessor. Return true if the + preprocessor succeeded, false if there were any errors. + ('body' probably isn't of much use, but what the heck.) + """ + from distutils.ccompiler import CompileError + self._check_compiler() + ok = True + try: + self._preprocess(body, headers, include_dirs, lang) + except CompileError: + ok = False + + self._clean() + return ok + + def search_cpp(self, pattern, body=None, headers=None, include_dirs=None, + lang="c"): + """Construct a source file (just like 'try_cpp()'), run it through + the preprocessor, and return true if any line of the output matches + 'pattern'. 'pattern' should either be a compiled regex object or a + string containing a regex. If both 'body' and 'headers' are None, + preprocesses an empty file -- which can be useful to determine the + symbols the preprocessor and compiler set by default. + """ + self._check_compiler() + src, out = self._preprocess(body, headers, include_dirs, lang) + + if isinstance(pattern, str): + pattern = re.compile(pattern) + + file = open(out) + match = False + while True: + line = file.readline() + if line == '': + break + if pattern.search(line): + match = True + break + + file.close() + self._clean() + return match + + def try_compile(self, body, headers=None, include_dirs=None, lang="c"): + """Try to compile a source file built from 'body' and 'headers'. + Return true on success, false otherwise. + """ + from distutils.ccompiler import CompileError + self._check_compiler() + try: + self._compile(body, headers, include_dirs, lang) + ok = True + except CompileError: + ok = False + + log.info(ok and "success!" or "failure.") + self._clean() + return ok + + def try_link(self, body, headers=None, include_dirs=None, libraries=None, + library_dirs=None, lang="c"): + """Try to compile and link a source file, built from 'body' and + 'headers', to executable form. Return true on success, false + otherwise. + """ + from distutils.ccompiler import CompileError, LinkError + self._check_compiler() + try: + self._link(body, headers, include_dirs, + libraries, library_dirs, lang) + ok = True + except (CompileError, LinkError): + ok = False + + log.info(ok and "success!" or "failure.") + self._clean() + return ok + + def try_run(self, body, headers=None, include_dirs=None, libraries=None, + library_dirs=None, lang="c"): + """Try to compile, link to an executable, and run a program + built from 'body' and 'headers'. Return true on success, false + otherwise. + """ + from distutils.ccompiler import CompileError, LinkError + self._check_compiler() + try: + src, obj, exe = self._link(body, headers, include_dirs, + libraries, library_dirs, lang) + self.spawn([exe]) + ok = True + except (CompileError, LinkError, DistutilsExecError): + ok = False + + log.info(ok and "success!" or "failure.") + self._clean() + return ok + + + # -- High-level methods -------------------------------------------- + # (these are the ones that are actually likely to be useful + # when implementing a real-world config command!) + + def check_func(self, func, headers=None, include_dirs=None, + libraries=None, library_dirs=None, decl=0, call=0): + """Determine if function 'func' is available by constructing a + source file that refers to 'func', and compiles and links it. + If everything succeeds, returns true; otherwise returns false. + + The constructed source file starts out by including the header + files listed in 'headers'. If 'decl' is true, it then declares + 'func' (as "int func()"); you probably shouldn't supply 'headers' + and set 'decl' true in the same call, or you might get errors about + a conflicting declarations for 'func'. Finally, the constructed + 'main()' function either references 'func' or (if 'call' is true) + calls it. 'libraries' and 'library_dirs' are used when + linking. + """ + self._check_compiler() + body = [] + if decl: + body.append("int %s ();" % func) + body.append("int main () {") + if call: + body.append(" %s();" % func) + else: + body.append(" %s;" % func) + body.append("}") + body = "\n".join(body) + "\n" + + return self.try_link(body, headers, include_dirs, + libraries, library_dirs) + + def check_lib(self, library, library_dirs=None, headers=None, + include_dirs=None, other_libraries=[]): + """Determine if 'library' is available to be linked against, + without actually checking that any particular symbols are provided + by it. 'headers' will be used in constructing the source file to + be compiled, but the only effect of this is to check if all the + header files listed are available. Any libraries listed in + 'other_libraries' will be included in the link, in case 'library' + has symbols that depend on other libraries. + """ + self._check_compiler() + return self.try_link("int main (void) { }", headers, include_dirs, + [library] + other_libraries, library_dirs) + + def check_header(self, header, include_dirs=None, library_dirs=None, + lang="c"): + """Determine if the system header file named by 'header_file' + exists and can be found by the preprocessor; return true if so, + false otherwise. + """ + return self.try_cpp(body="/* No body */", headers=[header], + include_dirs=include_dirs) + + +def dump_file(filename, head=None): + """Dumps a file content into log.info. + + If head is not None, will be dumped before the file content. + """ + if head is None: + log.info('%s', filename) + else: + log.info(head) + file = open(filename) + try: + log.info(file.read()) + finally: + file.close() diff --git a/distutils/distutils/command/install.py b/distutils/distutils/command/install.py new file mode 100644 index 0000000..0258d3d --- /dev/null +++ b/distutils/distutils/command/install.py @@ -0,0 +1,656 @@ +"""distutils.command.install + +Implements the Distutils 'install' command.""" + +import sys +import os + +from distutils import log +from distutils.core import Command +from distutils.debug import DEBUG +from distutils.sysconfig import get_config_vars +from distutils.errors import DistutilsPlatformError +from distutils.file_util import write_file +from distutils.util import convert_path, subst_vars, change_root +from distutils.util import get_platform +from distutils.errors import DistutilsOptionError + +from site import USER_BASE +from site import USER_SITE +HAS_USER_SITE = True + +WINDOWS_SCHEME = { + 'purelib': '$base/Lib/site-packages', + 'platlib': '$base/Lib/site-packages', + 'headers': '$base/Include/$dist_name', + 'scripts': '$base/Scripts', + 'data' : '$base', +} + +INSTALL_SCHEMES = { + 'unix_prefix': { + 'purelib': '$base/lib/python$py_version_short/site-packages', + 'platlib': '$platbase/lib/python$py_version_short/site-packages', + 'headers': '$base/include/python$py_version_short$abiflags/$dist_name', + 'scripts': '$base/bin', + 'data' : '$base', + }, + 'unix_home': { + 'purelib': '$base/lib/python', + 'platlib': '$base/lib/python', + 'headers': '$base/include/python/$dist_name', + 'scripts': '$base/bin', + 'data' : '$base', + }, + 'nt': WINDOWS_SCHEME, + } + +# user site schemes +if HAS_USER_SITE: + INSTALL_SCHEMES['nt_user'] = { + 'purelib': '$usersite', + 'platlib': '$usersite', + 'headers': '$userbase/Python$py_version_nodot/Include/$dist_name', + 'scripts': '$userbase/Python$py_version_nodot/Scripts', + 'data' : '$userbase', + } + + INSTALL_SCHEMES['unix_user'] = { + 'purelib': '$usersite', + 'platlib': '$usersite', + 'headers': + '$userbase/include/python$py_version_short$abiflags/$dist_name', + 'scripts': '$userbase/bin', + 'data' : '$userbase', + } + +# The keys to an installation scheme; if any new types of files are to be +# installed, be sure to add an entry to every installation scheme above, +# and to SCHEME_KEYS here. +SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data') + + +class install(Command): + + description = "install everything from build directory" + + user_options = [ + # Select installation scheme and set base director(y|ies) + ('prefix=', None, + "installation prefix"), + ('exec-prefix=', None, + "(Unix only) prefix for platform-specific files"), + ('home=', None, + "(Unix only) home directory to install under"), + + # Or, just set the base director(y|ies) + ('install-base=', None, + "base installation directory (instead of --prefix or --home)"), + ('install-platbase=', None, + "base installation directory for platform-specific files " + + "(instead of --exec-prefix or --home)"), + ('root=', None, + "install everything relative to this alternate root directory"), + + # Or, explicitly set the installation scheme + ('install-purelib=', None, + "installation directory for pure Python module distributions"), + ('install-platlib=', None, + "installation directory for non-pure module distributions"), + ('install-lib=', None, + "installation directory for all module distributions " + + "(overrides --install-purelib and --install-platlib)"), + + ('install-headers=', None, + "installation directory for C/C++ headers"), + ('install-scripts=', None, + "installation directory for Python scripts"), + ('install-data=', None, + "installation directory for data files"), + + # Byte-compilation options -- see install_lib.py for details, as + # these are duplicated from there (but only install_lib does + # anything with them). + ('compile', 'c', "compile .py to .pyc [default]"), + ('no-compile', None, "don't compile .py files"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + + # Miscellaneous control options + ('force', 'f', + "force installation (overwrite any existing files)"), + ('skip-build', None, + "skip rebuilding everything (for testing/debugging)"), + + # Where to install documentation (eventually!) + #('doc-format=', None, "format of documentation to generate"), + #('install-man=', None, "directory for Unix man pages"), + #('install-html=', None, "directory for HTML documentation"), + #('install-info=', None, "directory for GNU info files"), + + ('record=', None, + "filename in which to record list of installed files"), + ] + + boolean_options = ['compile', 'force', 'skip-build'] + + if HAS_USER_SITE: + user_options.append(('user', None, + "install in user site-package '%s'" % USER_SITE)) + boolean_options.append('user') + + negative_opt = {'no-compile' : 'compile'} + + + def initialize_options(self): + """Initializes options.""" + # High-level options: these select both an installation base + # and scheme. + self.prefix = None + self.exec_prefix = None + self.home = None + self.user = 0 + + # These select only the installation base; it's up to the user to + # specify the installation scheme (currently, that means supplying + # the --install-{platlib,purelib,scripts,data} options). + self.install_base = None + self.install_platbase = None + self.root = None + + # These options are the actual installation directories; if not + # supplied by the user, they are filled in using the installation + # scheme implied by prefix/exec-prefix/home and the contents of + # that installation scheme. + self.install_purelib = None # for pure module distributions + self.install_platlib = None # non-pure (dists w/ extensions) + self.install_headers = None # for C/C++ headers + self.install_lib = None # set to either purelib or platlib + self.install_scripts = None + self.install_data = None + self.install_userbase = USER_BASE + self.install_usersite = USER_SITE + + self.compile = None + self.optimize = None + + # Deprecated + # These two are for putting non-packagized distributions into their + # own directory and creating a .pth file if it makes sense. + # 'extra_path' comes from the setup file; 'install_path_file' can + # be turned off if it makes no sense to install a .pth file. (But + # better to install it uselessly than to guess wrong and not + # install it when it's necessary and would be used!) Currently, + # 'install_path_file' is always true unless some outsider meddles + # with it. + self.extra_path = None + self.install_path_file = 1 + + # 'force' forces installation, even if target files are not + # out-of-date. 'skip_build' skips running the "build" command, + # handy if you know it's not necessary. 'warn_dir' (which is *not* + # a user option, it's just there so the bdist_* commands can turn + # it off) determines whether we warn about installing to a + # directory not in sys.path. + self.force = 0 + self.skip_build = 0 + self.warn_dir = 1 + + # These are only here as a conduit from the 'build' command to the + # 'install_*' commands that do the real work. ('build_base' isn't + # actually used anywhere, but it might be useful in future.) They + # are not user options, because if the user told the install + # command where the build directory is, that wouldn't affect the + # build command. + self.build_base = None + self.build_lib = None + + # Not defined yet because we don't know anything about + # documentation yet. + #self.install_man = None + #self.install_html = None + #self.install_info = None + + self.record = None + + + # -- Option finalizing methods ------------------------------------- + # (This is rather more involved than for most commands, + # because this is where the policy for installing third- + # party Python modules on various platforms given a wide + # array of user input is decided. Yes, it's quite complex!) + + def finalize_options(self): + """Finalizes options.""" + # This method (and its pliant slaves, like 'finalize_unix()', + # 'finalize_other()', and 'select_scheme()') is where the default + # installation directories for modules, extension modules, and + # anything else we care to install from a Python module + # distribution. Thus, this code makes a pretty important policy + # statement about how third-party stuff is added to a Python + # installation! Note that the actual work of installation is done + # by the relatively simple 'install_*' commands; they just take + # their orders from the installation directory options determined + # here. + + # Check for errors/inconsistencies in the options; first, stuff + # that's wrong on any platform. + + if ((self.prefix or self.exec_prefix or self.home) and + (self.install_base or self.install_platbase)): + raise DistutilsOptionError( + "must supply either prefix/exec-prefix/home or " + + "install-base/install-platbase -- not both") + + if self.home and (self.prefix or self.exec_prefix): + raise DistutilsOptionError( + "must supply either home or prefix/exec-prefix -- not both") + + if self.user and (self.prefix or self.exec_prefix or self.home or + self.install_base or self.install_platbase): + raise DistutilsOptionError("can't combine user with prefix, " + "exec_prefix/home, or install_(plat)base") + + # Next, stuff that's wrong (or dubious) only on certain platforms. + if os.name != "posix": + if self.exec_prefix: + self.warn("exec-prefix option ignored on this platform") + self.exec_prefix = None + + # Now the interesting logic -- so interesting that we farm it out + # to other methods. The goal of these methods is to set the final + # values for the install_{lib,scripts,data,...} options, using as + # input a heady brew of prefix, exec_prefix, home, install_base, + # install_platbase, user-supplied versions of + # install_{purelib,platlib,lib,scripts,data,...}, and the + # INSTALL_SCHEME dictionary above. Phew! + + self.dump_dirs("pre-finalize_{unix,other}") + + if os.name == 'posix': + self.finalize_unix() + else: + self.finalize_other() + + self.dump_dirs("post-finalize_{unix,other}()") + + # Expand configuration variables, tilde, etc. in self.install_base + # and self.install_platbase -- that way, we can use $base or + # $platbase in the other installation directories and not worry + # about needing recursive variable expansion (shudder). + + py_version = sys.version.split()[0] + (prefix, exec_prefix) = get_config_vars('prefix', 'exec_prefix') + try: + abiflags = sys.abiflags + except AttributeError: + # sys.abiflags may not be defined on all platforms. + abiflags = '' + self.config_vars = {'dist_name': self.distribution.get_name(), + 'dist_version': self.distribution.get_version(), + 'dist_fullname': self.distribution.get_fullname(), + 'py_version': py_version, + 'py_version_short': '%d.%d' % sys.version_info[:2], + 'py_version_nodot': '%d%d' % sys.version_info[:2], + 'sys_prefix': prefix, + 'prefix': prefix, + 'sys_exec_prefix': exec_prefix, + 'exec_prefix': exec_prefix, + 'abiflags': abiflags, + } + + if HAS_USER_SITE: + self.config_vars['userbase'] = self.install_userbase + self.config_vars['usersite'] = self.install_usersite + + self.expand_basedirs() + + self.dump_dirs("post-expand_basedirs()") + + # Now define config vars for the base directories so we can expand + # everything else. + self.config_vars['base'] = self.install_base + self.config_vars['platbase'] = self.install_platbase + + if DEBUG: + from pprint import pprint + print("config vars:") + pprint(self.config_vars) + + # Expand "~" and configuration variables in the installation + # directories. + self.expand_dirs() + + self.dump_dirs("post-expand_dirs()") + + # Create directories in the home dir: + if self.user: + self.create_home_path() + + # Pick the actual directory to install all modules to: either + # install_purelib or install_platlib, depending on whether this + # module distribution is pure or not. Of course, if the user + # already specified install_lib, use their selection. + if self.install_lib is None: + if self.distribution.ext_modules: # has extensions: non-pure + self.install_lib = self.install_platlib + else: + self.install_lib = self.install_purelib + + + # Convert directories from Unix /-separated syntax to the local + # convention. + self.convert_paths('lib', 'purelib', 'platlib', + 'scripts', 'data', 'headers', + 'userbase', 'usersite') + + # Deprecated + # Well, we're not actually fully completely finalized yet: we still + # have to deal with 'extra_path', which is the hack for allowing + # non-packagized module distributions (hello, Numerical Python!) to + # get their own directories. + self.handle_extra_path() + self.install_libbase = self.install_lib # needed for .pth file + self.install_lib = os.path.join(self.install_lib, self.extra_dirs) + + # If a new root directory was supplied, make all the installation + # dirs relative to it. + if self.root is not None: + self.change_roots('libbase', 'lib', 'purelib', 'platlib', + 'scripts', 'data', 'headers') + + self.dump_dirs("after prepending root") + + # Find out the build directories, ie. where to install from. + self.set_undefined_options('build', + ('build_base', 'build_base'), + ('build_lib', 'build_lib')) + + # Punt on doc directories for now -- after all, we're punting on + # documentation completely! + + def dump_dirs(self, msg): + """Dumps the list of user options.""" + if not DEBUG: + return + from distutils.fancy_getopt import longopt_xlate + log.debug(msg + ":") + for opt in self.user_options: + opt_name = opt[0] + if opt_name[-1] == "=": + opt_name = opt_name[0:-1] + if opt_name in self.negative_opt: + opt_name = self.negative_opt[opt_name] + opt_name = opt_name.translate(longopt_xlate) + val = not getattr(self, opt_name) + else: + opt_name = opt_name.translate(longopt_xlate) + val = getattr(self, opt_name) + log.debug(" %s: %s", opt_name, val) + + def finalize_unix(self): + """Finalizes options for posix platforms.""" + if self.install_base is not None or self.install_platbase is not None: + if ((self.install_lib is None and + self.install_purelib is None and + self.install_platlib is None) or + self.install_headers is None or + self.install_scripts is None or + self.install_data is None): + raise DistutilsOptionError( + "install-base or install-platbase supplied, but " + "installation scheme is incomplete") + return + + if self.user: + if self.install_userbase is None: + raise DistutilsPlatformError( + "User base directory is not specified") + self.install_base = self.install_platbase = self.install_userbase + self.select_scheme("unix_user") + elif self.home is not None: + self.install_base = self.install_platbase = self.home + self.select_scheme("unix_home") + else: + if self.prefix is None: + if self.exec_prefix is not None: + raise DistutilsOptionError( + "must not supply exec-prefix without prefix") + + self.prefix = os.path.normpath(sys.prefix) + self.exec_prefix = os.path.normpath(sys.exec_prefix) + + else: + if self.exec_prefix is None: + self.exec_prefix = self.prefix + + self.install_base = self.prefix + self.install_platbase = self.exec_prefix + self.select_scheme("unix_prefix") + + def finalize_other(self): + """Finalizes options for non-posix platforms""" + if self.user: + if self.install_userbase is None: + raise DistutilsPlatformError( + "User base directory is not specified") + self.install_base = self.install_platbase = self.install_userbase + self.select_scheme(os.name + "_user") + elif self.home is not None: + self.install_base = self.install_platbase = self.home + self.select_scheme("unix_home") + else: + if self.prefix is None: + self.prefix = os.path.normpath(sys.prefix) + + self.install_base = self.install_platbase = self.prefix + try: + self.select_scheme(os.name) + except KeyError: + raise DistutilsPlatformError( + "I don't know how to install stuff on '%s'" % os.name) + + def select_scheme(self, name): + """Sets the install directories by applying the install schemes.""" + # it's the caller's problem if they supply a bad name! + scheme = INSTALL_SCHEMES[name] + for key in SCHEME_KEYS: + attrname = 'install_' + key + if getattr(self, attrname) is None: + setattr(self, attrname, scheme[key]) + + def _expand_attrs(self, attrs): + for attr in attrs: + val = getattr(self, attr) + if val is not None: + if os.name == 'posix' or os.name == 'nt': + val = os.path.expanduser(val) + val = subst_vars(val, self.config_vars) + setattr(self, attr, val) + + def expand_basedirs(self): + """Calls `os.path.expanduser` on install_base, install_platbase and + root.""" + self._expand_attrs(['install_base', 'install_platbase', 'root']) + + def expand_dirs(self): + """Calls `os.path.expanduser` on install dirs.""" + self._expand_attrs(['install_purelib', 'install_platlib', + 'install_lib', 'install_headers', + 'install_scripts', 'install_data',]) + + def convert_paths(self, *names): + """Call `convert_path` over `names`.""" + for name in names: + attr = "install_" + name + setattr(self, attr, convert_path(getattr(self, attr))) + + def handle_extra_path(self): + """Set `path_file` and `extra_dirs` using `extra_path`.""" + if self.extra_path is None: + self.extra_path = self.distribution.extra_path + + if self.extra_path is not None: + log.warn( + "Distribution option extra_path is deprecated. " + "See issue27919 for details." + ) + if isinstance(self.extra_path, str): + self.extra_path = self.extra_path.split(',') + + if len(self.extra_path) == 1: + path_file = extra_dirs = self.extra_path[0] + elif len(self.extra_path) == 2: + path_file, extra_dirs = self.extra_path + else: + raise DistutilsOptionError( + "'extra_path' option must be a list, tuple, or " + "comma-separated string with 1 or 2 elements") + + # convert to local form in case Unix notation used (as it + # should be in setup scripts) + extra_dirs = convert_path(extra_dirs) + else: + path_file = None + extra_dirs = '' + + # XXX should we warn if path_file and not extra_dirs? (in which + # case the path file would be harmless but pointless) + self.path_file = path_file + self.extra_dirs = extra_dirs + + def change_roots(self, *names): + """Change the install directories pointed by name using root.""" + for name in names: + attr = "install_" + name + setattr(self, attr, change_root(self.root, getattr(self, attr))) + + def create_home_path(self): + """Create directories under ~.""" + if not self.user: + return + home = convert_path(os.path.expanduser("~")) + for name, path in self.config_vars.items(): + if path.startswith(home) and not os.path.isdir(path): + self.debug_print("os.makedirs('%s', 0o700)" % path) + os.makedirs(path, 0o700) + + # -- Command execution methods ------------------------------------- + + def run(self): + """Runs the command.""" + # Obviously have to build before we can install + if not self.skip_build: + self.run_command('build') + # If we built for any other platform, we can't install. + build_plat = self.distribution.get_command_obj('build').plat_name + # check warn_dir - it is a clue that the 'install' is happening + # internally, and not to sys.path, so we don't check the platform + # matches what we are running. + if self.warn_dir and build_plat != get_platform(): + raise DistutilsPlatformError("Can't install when " + "cross-compiling") + + # Run all sub-commands (at least those that need to be run) + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + if self.path_file: + self.create_path_file() + + # write list of installed files, if requested. + if self.record: + outputs = self.get_outputs() + if self.root: # strip any package prefix + root_len = len(self.root) + for counter in range(len(outputs)): + outputs[counter] = outputs[counter][root_len:] + self.execute(write_file, + (self.record, outputs), + "writing list of installed files to '%s'" % + self.record) + + sys_path = map(os.path.normpath, sys.path) + sys_path = map(os.path.normcase, sys_path) + install_lib = os.path.normcase(os.path.normpath(self.install_lib)) + if (self.warn_dir and + not (self.path_file and self.install_path_file) and + install_lib not in sys_path): + log.debug(("modules installed to '%s', which is not in " + "Python's module search path (sys.path) -- " + "you'll have to change the search path yourself"), + self.install_lib) + + def create_path_file(self): + """Creates the .pth file""" + filename = os.path.join(self.install_libbase, + self.path_file + ".pth") + if self.install_path_file: + self.execute(write_file, + (filename, [self.extra_dirs]), + "creating %s" % filename) + else: + self.warn("path file '%s' not created" % filename) + + + # -- Reporting methods --------------------------------------------- + + def get_outputs(self): + """Assembles the outputs of all the sub-commands.""" + outputs = [] + for cmd_name in self.get_sub_commands(): + cmd = self.get_finalized_command(cmd_name) + # Add the contents of cmd.get_outputs(), ensuring + # that outputs doesn't contain duplicate entries + for filename in cmd.get_outputs(): + if filename not in outputs: + outputs.append(filename) + + if self.path_file and self.install_path_file: + outputs.append(os.path.join(self.install_libbase, + self.path_file + ".pth")) + + return outputs + + def get_inputs(self): + """Returns the inputs of all the sub-commands""" + # XXX gee, this looks familiar ;-( + inputs = [] + for cmd_name in self.get_sub_commands(): + cmd = self.get_finalized_command(cmd_name) + inputs.extend(cmd.get_inputs()) + + return inputs + + # -- Predicates for sub-command list ------------------------------- + + def has_lib(self): + """Returns true if the current distribution has any Python + modules to install.""" + return (self.distribution.has_pure_modules() or + self.distribution.has_ext_modules()) + + def has_headers(self): + """Returns true if the current distribution has any headers to + install.""" + return self.distribution.has_headers() + + def has_scripts(self): + """Returns true if the current distribution has any scripts to. + install.""" + return self.distribution.has_scripts() + + def has_data(self): + """Returns true if the current distribution has any data to. + install.""" + return self.distribution.has_data_files() + + # 'sub_commands': a list of commands this command might have to run to + # get its work done. See cmd.py for more info. + sub_commands = [('install_lib', has_lib), + ('install_headers', has_headers), + ('install_scripts', has_scripts), + ('install_data', has_data), + ('install_egg_info', lambda self:True), + ] diff --git a/distutils/distutils/command/install_data.py b/distutils/distutils/command/install_data.py new file mode 100644 index 0000000..947cd76 --- /dev/null +++ b/distutils/distutils/command/install_data.py @@ -0,0 +1,79 @@ +"""distutils.command.install_data + +Implements the Distutils 'install_data' command, for installing +platform-independent data files.""" + +# contributed by Bastian Kleineidam + +import os +from distutils.core import Command +from distutils.util import change_root, convert_path + +class install_data(Command): + + description = "install data files" + + user_options = [ + ('install-dir=', 'd', + "base directory for installing data files " + "(default: installation base dir)"), + ('root=', None, + "install everything relative to this alternate root directory"), + ('force', 'f', "force installation (overwrite existing files)"), + ] + + boolean_options = ['force'] + + def initialize_options(self): + self.install_dir = None + self.outfiles = [] + self.root = None + self.force = 0 + self.data_files = self.distribution.data_files + self.warn_dir = 1 + + def finalize_options(self): + self.set_undefined_options('install', + ('install_data', 'install_dir'), + ('root', 'root'), + ('force', 'force'), + ) + + def run(self): + self.mkpath(self.install_dir) + for f in self.data_files: + if isinstance(f, str): + # it's a simple file, so copy it + f = convert_path(f) + if self.warn_dir: + self.warn("setup script did not provide a directory for " + "'%s' -- installing right in '%s'" % + (f, self.install_dir)) + (out, _) = self.copy_file(f, self.install_dir) + self.outfiles.append(out) + else: + # it's a tuple with path to install to and a list of files + dir = convert_path(f[0]) + if not os.path.isabs(dir): + dir = os.path.join(self.install_dir, dir) + elif self.root: + dir = change_root(self.root, dir) + self.mkpath(dir) + + if f[1] == []: + # If there are no files listed, the user must be + # trying to create an empty directory, so add the + # directory to the list of output files. + self.outfiles.append(dir) + else: + # Copy files, adding them to the list of output files. + for data in f[1]: + data = convert_path(data) + (out, _) = self.copy_file(data, dir) + self.outfiles.append(out) + + def get_inputs(self): + return self.data_files or [] + + def get_outputs(self): + return self.outfiles diff --git a/distutils/distutils/command/install_egg_info.py b/distutils/distutils/command/install_egg_info.py new file mode 100644 index 0000000..0ddc736 --- /dev/null +++ b/distutils/distutils/command/install_egg_info.py @@ -0,0 +1,77 @@ +"""distutils.command.install_egg_info + +Implements the Distutils 'install_egg_info' command, for installing +a package's PKG-INFO metadata.""" + + +from distutils.cmd import Command +from distutils import log, dir_util +import os, sys, re + +class install_egg_info(Command): + """Install an .egg-info file for the package""" + + description = "Install package's PKG-INFO metadata as an .egg-info file" + user_options = [ + ('install-dir=', 'd', "directory to install to"), + ] + + def initialize_options(self): + self.install_dir = None + + def finalize_options(self): + self.set_undefined_options('install_lib',('install_dir','install_dir')) + basename = "%s-%s-py%d.%d.egg-info" % ( + to_filename(safe_name(self.distribution.get_name())), + to_filename(safe_version(self.distribution.get_version())), + *sys.version_info[:2] + ) + self.target = os.path.join(self.install_dir, basename) + self.outputs = [self.target] + + def run(self): + target = self.target + if os.path.isdir(target) and not os.path.islink(target): + dir_util.remove_tree(target, dry_run=self.dry_run) + elif os.path.exists(target): + self.execute(os.unlink,(self.target,),"Removing "+target) + elif not os.path.isdir(self.install_dir): + self.execute(os.makedirs, (self.install_dir,), + "Creating "+self.install_dir) + log.info("Writing %s", target) + if not self.dry_run: + with open(target, 'w', encoding='UTF-8') as f: + self.distribution.metadata.write_pkg_file(f) + + def get_outputs(self): + return self.outputs + + +# The following routines are taken from setuptools' pkg_resources module and +# can be replaced by importing them from pkg_resources once it is included +# in the stdlib. + +def safe_name(name): + """Convert an arbitrary string to a standard distribution name + + Any runs of non-alphanumeric/. characters are replaced with a single '-'. + """ + return re.sub('[^A-Za-z0-9.]+', '-', name) + + +def safe_version(version): + """Convert an arbitrary string to a standard version string + + Spaces become dots, and all other non-alphanumeric characters become + dashes, with runs of multiple dashes condensed to a single dash. + """ + version = version.replace(' ','.') + return re.sub('[^A-Za-z0-9.]+', '-', version) + + +def to_filename(name): + """Convert a project or version name to its filename-escaped form + + Any '-' characters are currently replaced with '_'. + """ + return name.replace('-','_') diff --git a/distutils/distutils/command/install_headers.py b/distutils/distutils/command/install_headers.py new file mode 100644 index 0000000..9bb0b18 --- /dev/null +++ b/distutils/distutils/command/install_headers.py @@ -0,0 +1,47 @@ +"""distutils.command.install_headers + +Implements the Distutils 'install_headers' command, to install C/C++ header +files to the Python include directory.""" + +from distutils.core import Command + + +# XXX force is never used +class install_headers(Command): + + description = "install C/C++ header files" + + user_options = [('install-dir=', 'd', + "directory to install header files to"), + ('force', 'f', + "force installation (overwrite existing files)"), + ] + + boolean_options = ['force'] + + def initialize_options(self): + self.install_dir = None + self.force = 0 + self.outfiles = [] + + def finalize_options(self): + self.set_undefined_options('install', + ('install_headers', 'install_dir'), + ('force', 'force')) + + + def run(self): + headers = self.distribution.headers + if not headers: + return + + self.mkpath(self.install_dir) + for header in headers: + (out, _) = self.copy_file(header, self.install_dir) + self.outfiles.append(out) + + def get_inputs(self): + return self.distribution.headers or [] + + def get_outputs(self): + return self.outfiles diff --git a/distutils/distutils/command/install_lib.py b/distutils/distutils/command/install_lib.py new file mode 100644 index 0000000..6154cf0 --- /dev/null +++ b/distutils/distutils/command/install_lib.py @@ -0,0 +1,217 @@ +"""distutils.command.install_lib + +Implements the Distutils 'install_lib' command +(install all Python modules).""" + +import os +import importlib.util +import sys + +from distutils.core import Command +from distutils.errors import DistutilsOptionError + + +# Extension for Python source files. +PYTHON_SOURCE_EXTENSION = ".py" + +class install_lib(Command): + + description = "install all Python modules (extensions and pure Python)" + + # The byte-compilation options are a tad confusing. Here are the + # possible scenarios: + # 1) no compilation at all (--no-compile --no-optimize) + # 2) compile .pyc only (--compile --no-optimize; default) + # 3) compile .pyc and "opt-1" .pyc (--compile --optimize) + # 4) compile "opt-1" .pyc only (--no-compile --optimize) + # 5) compile .pyc and "opt-2" .pyc (--compile --optimize-more) + # 6) compile "opt-2" .pyc only (--no-compile --optimize-more) + # + # The UI for this is two options, 'compile' and 'optimize'. + # 'compile' is strictly boolean, and only decides whether to + # generate .pyc files. 'optimize' is three-way (0, 1, or 2), and + # decides both whether to generate .pyc files and what level of + # optimization to use. + + user_options = [ + ('install-dir=', 'd', "directory to install to"), + ('build-dir=','b', "build directory (where to install from)"), + ('force', 'f', "force installation (overwrite existing files)"), + ('compile', 'c', "compile .py to .pyc [default]"), + ('no-compile', None, "don't compile .py files"), + ('optimize=', 'O', + "also compile with optimization: -O1 for \"python -O\", " + "-O2 for \"python -OO\", and -O0 to disable [default: -O0]"), + ('skip-build', None, "skip the build steps"), + ] + + boolean_options = ['force', 'compile', 'skip-build'] + negative_opt = {'no-compile' : 'compile'} + + def initialize_options(self): + # let the 'install' command dictate our installation directory + self.install_dir = None + self.build_dir = None + self.force = 0 + self.compile = None + self.optimize = None + self.skip_build = None + + def finalize_options(self): + # Get all the information we need to install pure Python modules + # from the umbrella 'install' command -- build (source) directory, + # install (target) directory, and whether to compile .py files. + self.set_undefined_options('install', + ('build_lib', 'build_dir'), + ('install_lib', 'install_dir'), + ('force', 'force'), + ('compile', 'compile'), + ('optimize', 'optimize'), + ('skip_build', 'skip_build'), + ) + + if self.compile is None: + self.compile = True + if self.optimize is None: + self.optimize = False + + if not isinstance(self.optimize, int): + try: + self.optimize = int(self.optimize) + if self.optimize not in (0, 1, 2): + raise AssertionError + except (ValueError, AssertionError): + raise DistutilsOptionError("optimize must be 0, 1, or 2") + + def run(self): + # Make sure we have built everything we need first + self.build() + + # Install everything: simply dump the entire contents of the build + # directory to the installation directory (that's the beauty of + # having a build directory!) + outfiles = self.install() + + # (Optionally) compile .py to .pyc + if outfiles is not None and self.distribution.has_pure_modules(): + self.byte_compile(outfiles) + + # -- Top-level worker functions ------------------------------------ + # (called from 'run()') + + def build(self): + if not self.skip_build: + if self.distribution.has_pure_modules(): + self.run_command('build_py') + if self.distribution.has_ext_modules(): + self.run_command('build_ext') + + def install(self): + if os.path.isdir(self.build_dir): + outfiles = self.copy_tree(self.build_dir, self.install_dir) + else: + self.warn("'%s' does not exist -- no Python modules to install" % + self.build_dir) + return + return outfiles + + def byte_compile(self, files): + if sys.dont_write_bytecode: + self.warn('byte-compiling is disabled, skipping.') + return + + from distutils.util import byte_compile + + # Get the "--root" directory supplied to the "install" command, + # and use it as a prefix to strip off the purported filename + # encoded in bytecode files. This is far from complete, but it + # should at least generate usable bytecode in RPM distributions. + install_root = self.get_finalized_command('install').root + + if self.compile: + byte_compile(files, optimize=0, + force=self.force, prefix=install_root, + dry_run=self.dry_run) + if self.optimize > 0: + byte_compile(files, optimize=self.optimize, + force=self.force, prefix=install_root, + verbose=self.verbose, dry_run=self.dry_run) + + + # -- Utility methods ----------------------------------------------- + + def _mutate_outputs(self, has_any, build_cmd, cmd_option, output_dir): + if not has_any: + return [] + + build_cmd = self.get_finalized_command(build_cmd) + build_files = build_cmd.get_outputs() + build_dir = getattr(build_cmd, cmd_option) + + prefix_len = len(build_dir) + len(os.sep) + outputs = [] + for file in build_files: + outputs.append(os.path.join(output_dir, file[prefix_len:])) + + return outputs + + def _bytecode_filenames(self, py_filenames): + bytecode_files = [] + for py_file in py_filenames: + # Since build_py handles package data installation, the + # list of outputs can contain more than just .py files. + # Make sure we only report bytecode for the .py files. + ext = os.path.splitext(os.path.normcase(py_file))[1] + if ext != PYTHON_SOURCE_EXTENSION: + continue + if self.compile: + bytecode_files.append(importlib.util.cache_from_source( + py_file, optimization='')) + if self.optimize > 0: + bytecode_files.append(importlib.util.cache_from_source( + py_file, optimization=self.optimize)) + + return bytecode_files + + + # -- External interface -------------------------------------------- + # (called by outsiders) + + def get_outputs(self): + """Return the list of files that would be installed if this command + were actually run. Not affected by the "dry-run" flag or whether + modules have actually been built yet. + """ + pure_outputs = \ + self._mutate_outputs(self.distribution.has_pure_modules(), + 'build_py', 'build_lib', + self.install_dir) + if self.compile: + bytecode_outputs = self._bytecode_filenames(pure_outputs) + else: + bytecode_outputs = [] + + ext_outputs = \ + self._mutate_outputs(self.distribution.has_ext_modules(), + 'build_ext', 'build_lib', + self.install_dir) + + return pure_outputs + bytecode_outputs + ext_outputs + + def get_inputs(self): + """Get the list of files that are input to this command, ie. the + files that get installed as they are named in the build tree. + The files in this list correspond one-to-one to the output + filenames returned by 'get_outputs()'. + """ + inputs = [] + + if self.distribution.has_pure_modules(): + build_py = self.get_finalized_command('build_py') + inputs.extend(build_py.get_outputs()) + + if self.distribution.has_ext_modules(): + build_ext = self.get_finalized_command('build_ext') + inputs.extend(build_ext.get_outputs()) + + return inputs diff --git a/distutils/distutils/command/install_scripts.py b/distutils/distutils/command/install_scripts.py new file mode 100644 index 0000000..31a1130 --- /dev/null +++ b/distutils/distutils/command/install_scripts.py @@ -0,0 +1,60 @@ +"""distutils.command.install_scripts + +Implements the Distutils 'install_scripts' command, for installing +Python scripts.""" + +# contributed by Bastian Kleineidam + +import os +from distutils.core import Command +from distutils import log +from stat import ST_MODE + + +class install_scripts(Command): + + description = "install scripts (Python or otherwise)" + + user_options = [ + ('install-dir=', 'd', "directory to install scripts to"), + ('build-dir=','b', "build directory (where to install from)"), + ('force', 'f', "force installation (overwrite existing files)"), + ('skip-build', None, "skip the build steps"), + ] + + boolean_options = ['force', 'skip-build'] + + def initialize_options(self): + self.install_dir = None + self.force = 0 + self.build_dir = None + self.skip_build = None + + def finalize_options(self): + self.set_undefined_options('build', ('build_scripts', 'build_dir')) + self.set_undefined_options('install', + ('install_scripts', 'install_dir'), + ('force', 'force'), + ('skip_build', 'skip_build'), + ) + + def run(self): + if not self.skip_build: + self.run_command('build_scripts') + self.outfiles = self.copy_tree(self.build_dir, self.install_dir) + if os.name == 'posix': + # Set the executable bits (owner, group, and world) on + # all the scripts we just installed. + for file in self.get_outputs(): + if self.dry_run: + log.info("changing mode of %s", file) + else: + mode = ((os.stat(file)[ST_MODE]) | 0o555) & 0o7777 + log.info("changing mode of %s to %o", file, mode) + os.chmod(file, mode) + + def get_inputs(self): + return self.distribution.scripts or [] + + def get_outputs(self): + return self.outfiles or [] diff --git a/distutils/distutils/command/register.py b/distutils/distutils/command/register.py new file mode 100644 index 0000000..0fac94e --- /dev/null +++ b/distutils/distutils/command/register.py @@ -0,0 +1,304 @@ +"""distutils.command.register + +Implements the Distutils 'register' command (register with the repository). +""" + +# created 2002/10/21, Richard Jones + +import getpass +import io +import urllib.parse, urllib.request +from warnings import warn + +from distutils.core import PyPIRCCommand +from distutils.errors import * +from distutils import log + +class register(PyPIRCCommand): + + description = ("register the distribution with the Python package index") + user_options = PyPIRCCommand.user_options + [ + ('list-classifiers', None, + 'list the valid Trove classifiers'), + ('strict', None , + 'Will stop the registering if the meta-data are not fully compliant') + ] + boolean_options = PyPIRCCommand.boolean_options + [ + 'verify', 'list-classifiers', 'strict'] + + sub_commands = [('check', lambda self: True)] + + def initialize_options(self): + PyPIRCCommand.initialize_options(self) + self.list_classifiers = 0 + self.strict = 0 + + def finalize_options(self): + PyPIRCCommand.finalize_options(self) + # setting options for the `check` subcommand + check_options = {'strict': ('register', self.strict), + 'restructuredtext': ('register', 1)} + self.distribution.command_options['check'] = check_options + + def run(self): + self.finalize_options() + self._set_config() + + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + if self.dry_run: + self.verify_metadata() + elif self.list_classifiers: + self.classifiers() + else: + self.send_metadata() + + def check_metadata(self): + """Deprecated API.""" + warn("distutils.command.register.check_metadata is deprecated, \ + use the check command instead", PendingDeprecationWarning) + check = self.distribution.get_command_obj('check') + check.ensure_finalized() + check.strict = self.strict + check.restructuredtext = 1 + check.run() + + def _set_config(self): + ''' Reads the configuration file and set attributes. + ''' + config = self._read_pypirc() + if config != {}: + self.username = config['username'] + self.password = config['password'] + self.repository = config['repository'] + self.realm = config['realm'] + self.has_config = True + else: + if self.repository not in ('pypi', self.DEFAULT_REPOSITORY): + raise ValueError('%s not found in .pypirc' % self.repository) + if self.repository == 'pypi': + self.repository = self.DEFAULT_REPOSITORY + self.has_config = False + + def classifiers(self): + ''' Fetch the list of classifiers from the server. + ''' + url = self.repository+'?:action=list_classifiers' + response = urllib.request.urlopen(url) + log.info(self._read_pypi_response(response)) + + def verify_metadata(self): + ''' Send the metadata to the package index server to be checked. + ''' + # send the info to the server and report the result + (code, result) = self.post_to_server(self.build_post_data('verify')) + log.info('Server response (%s): %s', code, result) + + def send_metadata(self): + ''' Send the metadata to the package index server. + + Well, do the following: + 1. figure who the user is, and then + 2. send the data as a Basic auth'ed POST. + + First we try to read the username/password from $HOME/.pypirc, + which is a ConfigParser-formatted file with a section + [distutils] containing username and password entries (both + in clear text). Eg: + + [distutils] + index-servers = + pypi + + [pypi] + username: fred + password: sekrit + + Otherwise, to figure who the user is, we offer the user three + choices: + + 1. use existing login, + 2. register as a new user, or + 3. set the password to a random string and email the user. + + ''' + # see if we can short-cut and get the username/password from the + # config + if self.has_config: + choice = '1' + username = self.username + password = self.password + else: + choice = 'x' + username = password = '' + + # get the user's login info + choices = '1 2 3 4'.split() + while choice not in choices: + self.announce('''\ +We need to know who you are, so please choose either: + 1. use your existing login, + 2. register as a new user, + 3. have the server generate a new password for you (and email it to you), or + 4. quit +Your selection [default 1]: ''', log.INFO) + choice = input() + if not choice: + choice = '1' + elif choice not in choices: + print('Please choose one of the four options!') + + if choice == '1': + # get the username and password + while not username: + username = input('Username: ') + while not password: + password = getpass.getpass('Password: ') + + # set up the authentication + auth = urllib.request.HTTPPasswordMgr() + host = urllib.parse.urlparse(self.repository)[1] + auth.add_password(self.realm, host, username, password) + # send the info to the server and report the result + code, result = self.post_to_server(self.build_post_data('submit'), + auth) + self.announce('Server response (%s): %s' % (code, result), + log.INFO) + + # possibly save the login + if code == 200: + if self.has_config: + # sharing the password in the distribution instance + # so the upload command can reuse it + self.distribution.password = password + else: + self.announce(('I can store your PyPI login so future ' + 'submissions will be faster.'), log.INFO) + self.announce('(the login will be stored in %s)' % \ + self._get_rc_file(), log.INFO) + choice = 'X' + while choice.lower() not in 'yn': + choice = input('Save your login (y/N)?') + if not choice: + choice = 'n' + if choice.lower() == 'y': + self._store_pypirc(username, password) + + elif choice == '2': + data = {':action': 'user'} + data['name'] = data['password'] = data['email'] = '' + data['confirm'] = None + while not data['name']: + data['name'] = input('Username: ') + while data['password'] != data['confirm']: + while not data['password']: + data['password'] = getpass.getpass('Password: ') + while not data['confirm']: + data['confirm'] = getpass.getpass(' Confirm: ') + if data['password'] != data['confirm']: + data['password'] = '' + data['confirm'] = None + print("Password and confirm don't match!") + while not data['email']: + data['email'] = input(' EMail: ') + code, result = self.post_to_server(data) + if code != 200: + log.info('Server response (%s): %s', code, result) + else: + log.info('You will receive an email shortly.') + log.info(('Follow the instructions in it to ' + 'complete registration.')) + elif choice == '3': + data = {':action': 'password_reset'} + data['email'] = '' + while not data['email']: + data['email'] = input('Your email address: ') + code, result = self.post_to_server(data) + log.info('Server response (%s): %s', code, result) + + def build_post_data(self, action): + # figure the data to send - the metadata plus some additional + # information used by the package server + meta = self.distribution.metadata + data = { + ':action': action, + 'metadata_version' : '1.0', + 'name': meta.get_name(), + 'version': meta.get_version(), + 'summary': meta.get_description(), + 'home_page': meta.get_url(), + 'author': meta.get_contact(), + 'author_email': meta.get_contact_email(), + 'license': meta.get_licence(), + 'description': meta.get_long_description(), + 'keywords': meta.get_keywords(), + 'platform': meta.get_platforms(), + 'classifiers': meta.get_classifiers(), + 'download_url': meta.get_download_url(), + # PEP 314 + 'provides': meta.get_provides(), + 'requires': meta.get_requires(), + 'obsoletes': meta.get_obsoletes(), + } + if data['provides'] or data['requires'] or data['obsoletes']: + data['metadata_version'] = '1.1' + return data + + def post_to_server(self, data, auth=None): + ''' Post a query to the server, and return a string response. + ''' + if 'name' in data: + self.announce('Registering %s to %s' % (data['name'], + self.repository), + log.INFO) + # Build up the MIME payload for the urllib2 POST data + boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = '\n--' + boundary + end_boundary = sep_boundary + '--' + body = io.StringIO() + for key, value in data.items(): + # handle multiple entries for the same name + if type(value) not in (type([]), type( () )): + value = [value] + for value in value: + value = str(value) + body.write(sep_boundary) + body.write('\nContent-Disposition: form-data; name="%s"'%key) + body.write("\n\n") + body.write(value) + if value and value[-1] == '\r': + body.write('\n') # write an extra newline (lurve Macs) + body.write(end_boundary) + body.write("\n") + body = body.getvalue().encode("utf-8") + + # build the Request + headers = { + 'Content-type': 'multipart/form-data; boundary=%s; charset=utf-8'%boundary, + 'Content-length': str(len(body)) + } + req = urllib.request.Request(self.repository, body, headers) + + # handle HTTP and include the Basic Auth handler + opener = urllib.request.build_opener( + urllib.request.HTTPBasicAuthHandler(password_mgr=auth) + ) + data = '' + try: + result = opener.open(req) + except urllib.error.HTTPError as e: + if self.show_response: + data = e.fp.read() + result = e.code, e.msg + except urllib.error.URLError as e: + result = 500, str(e) + else: + if self.show_response: + data = self._read_pypi_response(result) + result = 200, 'OK' + if self.show_response: + msg = '\n'.join(('-' * 75, data, '-' * 75)) + self.announce(msg, log.INFO) + return result diff --git a/distutils/distutils/command/sdist.py b/distutils/distutils/command/sdist.py new file mode 100644 index 0000000..4fd1d47 --- /dev/null +++ b/distutils/distutils/command/sdist.py @@ -0,0 +1,456 @@ +"""distutils.command.sdist + +Implements the Distutils 'sdist' command (create a source distribution).""" + +import os +import sys +from types import * +from glob import glob +from warnings import warn + +from distutils.core import Command +from distutils import dir_util, dep_util, file_util, archive_util +from distutils.text_file import TextFile +from distutils.errors import * +from distutils.filelist import FileList +from distutils import log +from distutils.util import convert_path + +def show_formats(): + """Print all possible values for the 'formats' option (used by + the "--help-formats" command-line option). + """ + from distutils.fancy_getopt import FancyGetopt + from distutils.archive_util import ARCHIVE_FORMATS + formats = [] + for format in ARCHIVE_FORMATS.keys(): + formats.append(("formats=" + format, None, + ARCHIVE_FORMATS[format][2])) + formats.sort() + FancyGetopt(formats).print_help( + "List of available source distribution formats:") + +class sdist(Command): + + description = "create a source distribution (tarball, zip file, etc.)" + + def checking_metadata(self): + """Callable used for the check sub-command. + + Placed here so user_options can view it""" + return self.metadata_check + + user_options = [ + ('template=', 't', + "name of manifest template file [default: MANIFEST.in]"), + ('manifest=', 'm', + "name of manifest file [default: MANIFEST]"), + ('use-defaults', None, + "include the default file set in the manifest " + "[default; disable with --no-defaults]"), + ('no-defaults', None, + "don't include the default file set"), + ('prune', None, + "specifically exclude files/directories that should not be " + "distributed (build tree, RCS/CVS dirs, etc.) " + "[default; disable with --no-prune]"), + ('no-prune', None, + "don't automatically exclude anything"), + ('manifest-only', 'o', + "just regenerate the manifest and then stop " + "(implies --force-manifest)"), + ('force-manifest', 'f', + "forcibly regenerate the manifest and carry on as usual. " + "Deprecated: now the manifest is always regenerated."), + ('formats=', None, + "formats for source distribution (comma-separated list)"), + ('keep-temp', 'k', + "keep the distribution tree around after creating " + + "archive file(s)"), + ('dist-dir=', 'd', + "directory to put the source distribution archive(s) in " + "[default: dist]"), + ('metadata-check', None, + "Ensure that all required elements of meta-data " + "are supplied. Warn if any missing. [default]"), + ('owner=', 'u', + "Owner name used when creating a tar file [default: current user]"), + ('group=', 'g', + "Group name used when creating a tar file [default: current group]"), + ] + + boolean_options = ['use-defaults', 'prune', + 'manifest-only', 'force-manifest', + 'keep-temp', 'metadata-check'] + + help_options = [ + ('help-formats', None, + "list available distribution formats", show_formats), + ] + + negative_opt = {'no-defaults': 'use-defaults', + 'no-prune': 'prune' } + + sub_commands = [('check', checking_metadata)] + + def initialize_options(self): + # 'template' and 'manifest' are, respectively, the names of + # the manifest template and manifest file. + self.template = None + self.manifest = None + + # 'use_defaults': if true, we will include the default file set + # in the manifest + self.use_defaults = 1 + self.prune = 1 + + self.manifest_only = 0 + self.force_manifest = 0 + + self.formats = ['gztar'] + self.keep_temp = 0 + self.dist_dir = None + + self.archive_files = None + self.metadata_check = 1 + self.owner = None + self.group = None + + def finalize_options(self): + if self.manifest is None: + self.manifest = "MANIFEST" + if self.template is None: + self.template = "MANIFEST.in" + + self.ensure_string_list('formats') + + bad_format = archive_util.check_archive_formats(self.formats) + if bad_format: + raise DistutilsOptionError( + "unknown archive format '%s'" % bad_format) + + if self.dist_dir is None: + self.dist_dir = "dist" + + def run(self): + # 'filelist' contains the list of files that will make up the + # manifest + self.filelist = FileList() + + # Run sub commands + for cmd_name in self.get_sub_commands(): + self.run_command(cmd_name) + + # Do whatever it takes to get the list of files to process + # (process the manifest template, read an existing manifest, + # whatever). File list is accumulated in 'self.filelist'. + self.get_file_list() + + # If user just wanted us to regenerate the manifest, stop now. + if self.manifest_only: + return + + # Otherwise, go ahead and create the source distribution tarball, + # or zipfile, or whatever. + self.make_distribution() + + def check_metadata(self): + """Deprecated API.""" + warn("distutils.command.sdist.check_metadata is deprecated, \ + use the check command instead", PendingDeprecationWarning) + check = self.distribution.get_command_obj('check') + check.ensure_finalized() + check.run() + + def get_file_list(self): + """Figure out the list of files to include in the source + distribution, and put it in 'self.filelist'. This might involve + reading the manifest template (and writing the manifest), or just + reading the manifest, or just using the default file set -- it all + depends on the user's options. + """ + # new behavior when using a template: + # the file list is recalculated every time because + # even if MANIFEST.in or setup.py are not changed + # the user might have added some files in the tree that + # need to be included. + # + # This makes --force the default and only behavior with templates. + template_exists = os.path.isfile(self.template) + if not template_exists and self._manifest_is_not_generated(): + self.read_manifest() + self.filelist.sort() + self.filelist.remove_duplicates() + return + + if not template_exists: + self.warn(("manifest template '%s' does not exist " + + "(using default file list)") % + self.template) + self.filelist.findall() + + if self.use_defaults: + self.add_defaults() + + if template_exists: + self.read_template() + + if self.prune: + self.prune_file_list() + + self.filelist.sort() + self.filelist.remove_duplicates() + self.write_manifest() + + def add_defaults(self): + """Add all the default files to self.filelist: + - README or README.txt + - setup.py + - test/test*.py + - all pure Python modules mentioned in setup script + - all files pointed by package_data (build_py) + - all files defined in data_files. + - all files defined as scripts. + - all C sources listed as part of extensions or C libraries + in the setup script (doesn't catch C headers!) + Warns if (README or README.txt) or setup.py are missing; everything + else is optional. + """ + standards = [('README', 'README.txt'), self.distribution.script_name] + for fn in standards: + if isinstance(fn, tuple): + alts = fn + got_it = False + for fn in alts: + if os.path.exists(fn): + got_it = True + self.filelist.append(fn) + break + + if not got_it: + self.warn("standard file not found: should have one of " + + ', '.join(alts)) + else: + if os.path.exists(fn): + self.filelist.append(fn) + else: + self.warn("standard file '%s' not found" % fn) + + optional = ['test/test*.py', 'setup.cfg'] + for pattern in optional: + files = filter(os.path.isfile, glob(pattern)) + self.filelist.extend(files) + + # build_py is used to get: + # - python modules + # - files defined in package_data + build_py = self.get_finalized_command('build_py') + + # getting python files + if self.distribution.has_pure_modules(): + self.filelist.extend(build_py.get_source_files()) + + # getting package_data files + # (computed in build_py.data_files by build_py.finalize_options) + for pkg, src_dir, build_dir, filenames in build_py.data_files: + for filename in filenames: + self.filelist.append(os.path.join(src_dir, filename)) + + # getting distribution.data_files + if self.distribution.has_data_files(): + for item in self.distribution.data_files: + if isinstance(item, str): # plain file + item = convert_path(item) + if os.path.isfile(item): + self.filelist.append(item) + else: # a (dirname, filenames) tuple + dirname, filenames = item + for f in filenames: + f = convert_path(f) + if os.path.isfile(f): + self.filelist.append(f) + + if self.distribution.has_ext_modules(): + build_ext = self.get_finalized_command('build_ext') + self.filelist.extend(build_ext.get_source_files()) + + if self.distribution.has_c_libraries(): + build_clib = self.get_finalized_command('build_clib') + self.filelist.extend(build_clib.get_source_files()) + + if self.distribution.has_scripts(): + build_scripts = self.get_finalized_command('build_scripts') + self.filelist.extend(build_scripts.get_source_files()) + + def read_template(self): + """Read and parse manifest template file named by self.template. + + (usually "MANIFEST.in") The parsing and processing is done by + 'self.filelist', which updates itself accordingly. + """ + log.info("reading manifest template '%s'", self.template) + template = TextFile(self.template, strip_comments=1, skip_blanks=1, + join_lines=1, lstrip_ws=1, rstrip_ws=1, + collapse_join=1) + + try: + while True: + line = template.readline() + if line is None: # end of file + break + + try: + self.filelist.process_template_line(line) + # the call above can raise a DistutilsTemplateError for + # malformed lines, or a ValueError from the lower-level + # convert_path function + except (DistutilsTemplateError, ValueError) as msg: + self.warn("%s, line %d: %s" % (template.filename, + template.current_line, + msg)) + finally: + template.close() + + def prune_file_list(self): + """Prune off branches that might slip into the file list as created + by 'read_template()', but really don't belong there: + * the build tree (typically "build") + * the release tree itself (only an issue if we ran "sdist" + previously with --keep-temp, or it aborted) + * any RCS, CVS, .svn, .hg, .git, .bzr, _darcs directories + """ + build = self.get_finalized_command('build') + base_dir = self.distribution.get_fullname() + + self.filelist.exclude_pattern(None, prefix=build.build_base) + self.filelist.exclude_pattern(None, prefix=base_dir) + + if sys.platform == 'win32': + seps = r'/|\\' + else: + seps = '/' + + vcs_dirs = ['RCS', 'CVS', r'\.svn', r'\.hg', r'\.git', r'\.bzr', + '_darcs'] + vcs_ptrn = r'(^|%s)(%s)(%s).*' % (seps, '|'.join(vcs_dirs), seps) + self.filelist.exclude_pattern(vcs_ptrn, is_regex=1) + + def write_manifest(self): + """Write the file list in 'self.filelist' (presumably as filled in + by 'add_defaults()' and 'read_template()') to the manifest file + named by 'self.manifest'. + """ + if self._manifest_is_not_generated(): + log.info("not writing to manually maintained " + "manifest file '%s'" % self.manifest) + return + + content = self.filelist.files[:] + content.insert(0, '# file GENERATED by distutils, do NOT edit') + self.execute(file_util.write_file, (self.manifest, content), + "writing manifest file '%s'" % self.manifest) + + def _manifest_is_not_generated(self): + # check for special comment used in 3.1.3 and higher + if not os.path.isfile(self.manifest): + return False + + fp = open(self.manifest) + try: + first_line = fp.readline() + finally: + fp.close() + return first_line != '# file GENERATED by distutils, do NOT edit\n' + + def read_manifest(self): + """Read the manifest file (named by 'self.manifest') and use it to + fill in 'self.filelist', the list of files to include in the source + distribution. + """ + log.info("reading manifest file '%s'", self.manifest) + manifest = open(self.manifest) + for line in manifest: + # ignore comments and blank lines + line = line.strip() + if line.startswith('#') or not line: + continue + self.filelist.append(line) + manifest.close() + + def make_release_tree(self, base_dir, files): + """Create the directory tree that will become the source + distribution archive. All directories implied by the filenames in + 'files' are created under 'base_dir', and then we hard link or copy + (if hard linking is unavailable) those files into place. + Essentially, this duplicates the developer's source tree, but in a + directory named after the distribution, containing only the files + to be distributed. + """ + # Create all the directories under 'base_dir' necessary to + # put 'files' there; the 'mkpath()' is just so we don't die + # if the manifest happens to be empty. + self.mkpath(base_dir) + dir_util.create_tree(base_dir, files, dry_run=self.dry_run) + + # And walk over the list of files, either making a hard link (if + # os.link exists) to each one that doesn't already exist in its + # corresponding location under 'base_dir', or copying each file + # that's out-of-date in 'base_dir'. (Usually, all files will be + # out-of-date, because by default we blow away 'base_dir' when + # we're done making the distribution archives.) + + if hasattr(os, 'link'): # can make hard links on this system + link = 'hard' + msg = "making hard links in %s..." % base_dir + else: # nope, have to copy + link = None + msg = "copying files to %s..." % base_dir + + if not files: + log.warn("no files to distribute -- empty manifest?") + else: + log.info(msg) + for file in files: + if not os.path.isfile(file): + log.warn("'%s' not a regular file -- skipping", file) + else: + dest = os.path.join(base_dir, file) + self.copy_file(file, dest, link=link) + + self.distribution.metadata.write_pkg_info(base_dir) + + def make_distribution(self): + """Create the source distribution(s). First, we create the release + tree with 'make_release_tree()'; then, we create all required + archive files (according to 'self.formats') from the release tree. + Finally, we clean up by blowing away the release tree (unless + 'self.keep_temp' is true). The list of archive files created is + stored so it can be retrieved later by 'get_archive_files()'. + """ + # Don't warn about missing meta-data here -- should be (and is!) + # done elsewhere. + base_dir = self.distribution.get_fullname() + base_name = os.path.join(self.dist_dir, base_dir) + + self.make_release_tree(base_dir, self.filelist.files) + archive_files = [] # remember names of files we create + # tar archive must be created last to avoid overwrite and remove + if 'tar' in self.formats: + self.formats.append(self.formats.pop(self.formats.index('tar'))) + + for fmt in self.formats: + file = self.make_archive(base_name, fmt, base_dir=base_dir, + owner=self.owner, group=self.group) + archive_files.append(file) + self.distribution.dist_files.append(('sdist', '', file)) + + self.archive_files = archive_files + + if not self.keep_temp: + dir_util.remove_tree(base_dir, dry_run=self.dry_run) + + def get_archive_files(self): + """Return the list of archive files created when the command + was run, or None if the command hasn't run yet. + """ + return self.archive_files diff --git a/distutils/distutils/command/upload.py b/distutils/distutils/command/upload.py new file mode 100644 index 0000000..32dda35 --- /dev/null +++ b/distutils/distutils/command/upload.py @@ -0,0 +1,200 @@ +""" +distutils.command.upload + +Implements the Distutils 'upload' subcommand (upload package to a package +index). +""" + +import os +import io +import platform +import hashlib +from base64 import standard_b64encode +from urllib.request import urlopen, Request, HTTPError +from urllib.parse import urlparse +from distutils.errors import DistutilsError, DistutilsOptionError +from distutils.core import PyPIRCCommand +from distutils.spawn import spawn +from distutils import log + +class upload(PyPIRCCommand): + + description = "upload binary package to PyPI" + + user_options = PyPIRCCommand.user_options + [ + ('sign', 's', + 'sign files to upload using gpg'), + ('identity=', 'i', 'GPG identity used to sign files'), + ] + + boolean_options = PyPIRCCommand.boolean_options + ['sign'] + + def initialize_options(self): + PyPIRCCommand.initialize_options(self) + self.username = '' + self.password = '' + self.show_response = 0 + self.sign = False + self.identity = None + + def finalize_options(self): + PyPIRCCommand.finalize_options(self) + if self.identity and not self.sign: + raise DistutilsOptionError( + "Must use --sign for --identity to have meaning" + ) + config = self._read_pypirc() + if config != {}: + self.username = config['username'] + self.password = config['password'] + self.repository = config['repository'] + self.realm = config['realm'] + + # getting the password from the distribution + # if previously set by the register command + if not self.password and self.distribution.password: + self.password = self.distribution.password + + def run(self): + if not self.distribution.dist_files: + msg = ("Must create and upload files in one command " + "(e.g. setup.py sdist upload)") + raise DistutilsOptionError(msg) + for command, pyversion, filename in self.distribution.dist_files: + self.upload_file(command, pyversion, filename) + + def upload_file(self, command, pyversion, filename): + # Makes sure the repository URL is compliant + schema, netloc, url, params, query, fragments = \ + urlparse(self.repository) + if params or query or fragments: + raise AssertionError("Incompatible url %s" % self.repository) + + if schema not in ('http', 'https'): + raise AssertionError("unsupported schema " + schema) + + # Sign if requested + if self.sign: + gpg_args = ["gpg", "--detach-sign", "-a", filename] + if self.identity: + gpg_args[2:2] = ["--local-user", self.identity] + spawn(gpg_args, + dry_run=self.dry_run) + + # Fill in the data - send all the meta-data in case we need to + # register a new release + f = open(filename,'rb') + try: + content = f.read() + finally: + f.close() + meta = self.distribution.metadata + data = { + # action + ':action': 'file_upload', + 'protocol_version': '1', + + # identify release + 'name': meta.get_name(), + 'version': meta.get_version(), + + # file content + 'content': (os.path.basename(filename),content), + 'filetype': command, + 'pyversion': pyversion, + 'md5_digest': hashlib.md5(content).hexdigest(), + + # additional meta-data + 'metadata_version': '1.0', + 'summary': meta.get_description(), + 'home_page': meta.get_url(), + 'author': meta.get_contact(), + 'author_email': meta.get_contact_email(), + 'license': meta.get_licence(), + 'description': meta.get_long_description(), + 'keywords': meta.get_keywords(), + 'platform': meta.get_platforms(), + 'classifiers': meta.get_classifiers(), + 'download_url': meta.get_download_url(), + # PEP 314 + 'provides': meta.get_provides(), + 'requires': meta.get_requires(), + 'obsoletes': meta.get_obsoletes(), + } + comment = '' + if command == 'bdist_rpm': + dist, version, id = platform.dist() + if dist: + comment = 'built for %s %s' % (dist, version) + elif command == 'bdist_dumb': + comment = 'built for %s' % platform.platform(terse=1) + data['comment'] = comment + + if self.sign: + data['gpg_signature'] = (os.path.basename(filename) + ".asc", + open(filename+".asc", "rb").read()) + + # set up the authentication + user_pass = (self.username + ":" + self.password).encode('ascii') + # The exact encoding of the authentication string is debated. + # Anyway PyPI only accepts ascii for both username or password. + auth = "Basic " + standard_b64encode(user_pass).decode('ascii') + + # Build up the MIME payload for the POST data + boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = b'\r\n--' + boundary.encode('ascii') + end_boundary = sep_boundary + b'--\r\n' + body = io.BytesIO() + for key, value in data.items(): + title = '\r\nContent-Disposition: form-data; name="%s"' % key + # handle multiple entries for the same name + if not isinstance(value, list): + value = [value] + for value in value: + if type(value) is tuple: + title += '; filename="%s"' % value[0] + value = value[1] + else: + value = str(value).encode('utf-8') + body.write(sep_boundary) + body.write(title.encode('utf-8')) + body.write(b"\r\n\r\n") + body.write(value) + body.write(end_boundary) + body = body.getvalue() + + msg = "Submitting %s to %s" % (filename, self.repository) + self.announce(msg, log.INFO) + + # build the Request + headers = { + 'Content-type': 'multipart/form-data; boundary=%s' % boundary, + 'Content-length': str(len(body)), + 'Authorization': auth, + } + + request = Request(self.repository, data=body, + headers=headers) + # send the data + try: + result = urlopen(request) + status = result.getcode() + reason = result.msg + except HTTPError as e: + status = e.code + reason = e.msg + except OSError as e: + self.announce(str(e), log.ERROR) + raise + + if status == 200: + self.announce('Server response (%s): %s' % (status, reason), + log.INFO) + if self.show_response: + text = self._read_pypi_response(result) + msg = '\n'.join(('-' * 75, text, '-' * 75)) + self.announce(msg, log.INFO) + else: + msg = 'Upload failed (%s): %s' % (status, reason) + self.announce(msg, log.ERROR) + raise DistutilsError(msg) diff --git a/distutils/distutils/command/wininst-10.0-amd64.exe b/distutils/distutils/command/wininst-10.0-amd64.exe new file mode 100644 index 0000000000000000000000000000000000000000..6fa0dce16315854223a9fefc3ac9f3cf71730a6a GIT binary patch literal 222208 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�?!H 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 N70sMIW8OSN{vUE=L&yLC literal 0 HcmV?d00001 diff --git a/distutils/distutils/command/wininst-10.0.exe b/distutils/distutils/command/wininst-10.0.exe new file mode 100644 index 0000000000000000000000000000000000000000..afc3bc6c14847283f32f53327184c6c2806efe0a GIT binary patch literal 190976 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

OPEHI2%PD3L3F4K9SA@F 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 literal 0 HcmV?d00001 diff --git a/distutils/distutils/command/wininst-14.0-amd64.exe b/distutils/distutils/command/wininst-14.0-amd64.exe new file mode 100644 index 0000000000000000000000000000000000000000..253c2e2eccefa79393827f44f85680536906574a GIT binary patch literal 587776 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 z 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

64S?Ez{~ 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 z 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 literal 0 HcmV?d00001 diff --git a/distutils/distutils/command/wininst-14.0.exe b/distutils/distutils/command/wininst-14.0.exe new file mode 100644 index 0000000000000000000000000000000000000000..46f5f356676c800f99742deb6bf4c0a96aa166c0 GIT binary patch literal 458240 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�VkkI>$}~d(uZJ57cs;^Uz@cHejzJwU6!4Wk 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%0A7`rF^n2GrI3(dH~ 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 literal 0 HcmV?d00001 diff --git a/distutils/distutils/command/wininst-7.1.exe b/distutils/distutils/command/wininst-7.1.exe new file mode 100644 index 0000000000000000000000000000000000000000..1433bc1ad3775ec9277e13ca8bdca3a5dbc23643 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/distutils/distutils/command/wininst-9.0-amd64.exe b/distutils/distutils/command/wininst-9.0-amd64.exe new file mode 100644 index 0000000000000000000000000000000000000000..94fbd4341b2a140fb0aa38ed1e10ff69600d4911 GIT binary patch literal 224256 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ÎsYM~fS}Xp>Y#7qtYq?Xvt~um=bn8Y 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 hJDV zLf$xIBRUNT2#eq05A|;1#`x9ZA*n-2DYcu)#w6oN(n6<*Z*DCS(*LxC&Lrua%j7vn zWTbSRkuA^l!s<(r3Oisv)L+^ zH2R`XAGln5+b1GSTY@E^*A>E_GFc}$;qXZahV`D+;Y0kDlDH!FErH)`Jhxx6m}{tC z&St;QwD$NiGwUuDmv=n}ckBEm&LdLK5neQ!kG07J< z`_=t{SI3U+ywy(r3gIqdhx5*d@f!{eVUG4*pKsd=+`zWm6}x6$^$=>|L?vU!U1n{% z(W7luIQ_=bvSY>iGES?_qFs#g^bnH@RSu1s&LvINgu6b-d5a@WM#3R=!=^-y^!Ejb z=Nair_}f*AvYI~>f>?XtuLTuk$@D$sRMxoUqoOb9?$~PG6vDRAyW1{(t7(c*=b$_K zhD2$bmf!hh?N0wm!)5XH+e|tO2G(D~^z*}Oj5ia6jW~bdn7Ak!-l^boTDry%u(~wOv>R8D9Y6 z+?OKtt7jr8w;Q&eGNe&e{3@&46a122hSJHrYDp0C54|SGqt9bTH}tC)f1={B$>pK`1gS!k(-gc%7e?kBMZ*I4- zDkXdoMbS|8HO@RuPjr4;@QTBoch9E9TKelbwjMx{kuDvJmeXJWKy|9C`J4UB`^5z> zA$<$-TUvB_S?dM-hlk`@=jF-|+!pS4zpxoBs<`V8m47|r!j@9;(3J;9OC^)v^edbe zl}SIk&YtTLCs#edR1Wo3dYLU)B~2Uq;`TX7n}*tO2#QZj%r5Qo9pX@f?d9tq(!#C6 z!pGiAEY^?4Aq~BRIAlJpl84>U_gaztGDC8p-DSJYeUPJ^mi655GC$XHrXKR4ip!6| z@6e=4*`fzdN8Pm7vQU~aEKS^5skHsj)Voev3?@cT?dOtM|a*BEJ<_DY%!)TtJv#(F=7+W7}8-XG#4 z?ekK07$PCd^{BBOG{YU_oNdllS8z%Hel+nX{;Rc?|E;&845TgW8jX0e9QoB-1B}EG zd4Y4)^x`(t54p#^6Ox=S?Mbrj;{<2KTPN_zL~thQf2mh6)g?Y45V)vOyim9^+WI?j z;WL7_`H}7u8k^7TuGntd%55*z`R3<-2Jl-be!S@*ll^oec<^VBh%JpzB$@lFvFMP| zl2)ar?jPA7>*-f2qar-0MYpJNgJcidrP-e`Z(L%1eA62qwK!cRWK{j?i$SC0%@1QH zN?QKae?HSqnoBY}z70nZz7X8_=o%Xv#PKEbO}zHcnxNHNcO>)$B#Pn)gD(j=uaSiH zKpP|qojPQf^6`$sdT3NQ`KrEastR7dw;P!WOHJqQ^kzz%z2Lp~QmtFLl6U+VtJ@xK zU9g{O!ieM&_c6{&P5Z#I^G(Bn4)6Q4zv)NwvDiEFjhnrMu{V4hHbiY9h*=aE0Ek!+ z_{48sOi$up6B_BB^| zXR#O^3=vRpk7Z`S`mU)j7PFQ4e;?_A!ZO;tLs5HC@LnGE04_=-QW^T^_z z0$Ysb0et-@pN}>?>7uX>Tg}_ejH#}=p9332iaF7A+oa|>>UIQDPqaHj*hS`26CYpW z<^8S2rrYv3bAA3O+SrXkc!}DpM1*$)7O7H(BeSO1797a5vY2r1w$Tqtl?{XAotx6> zjzRd$Z=}r>2BJnv{Y6Vgryjz^ocq{}{q8-gd;aR{l);55m!+JVbGzp+uBsLL1X2#! zO_zC**0%KK7-9Jjh(9g)9l%QU_=8Bc2vIDfwsV*@b&>R2x8AER^H-B6T2u&e1Gj6M z*HZFGRPHm>@LrT3msbAeY{0WI_oGkSCZTY+y5y24@rbW=i&^qK9{$c>j{~$*G1?^; zxP-U>UwwBbbKsHzt_}a6bPE?tv}?iN?T*01+1<>M&(X@+#?uzK{+^_Q3}?X<{aOtu zn1KQ%hn$CcKqv^niyNV?K=>gL!fpsT0q{tJngU@0oDE`h{s17dfEPhJK3LZW0$%Mz z7!RQ&03UdRg1Hk=F~BGYi~t7Kfr~$s18_BnK>^SRAj*KZfj%x+*9CGOLIqs``rKe0 zIJ!ZFLHY}zPXg9~n-`Q7a50F{`9pvx0A2_B=<>jH6euI$bjW!E9kA{PL<;Z>I36%h z9t!4uK(7LB1~D;^Xdvo<4}d=^ zr1ygI(fbSBYoNf-k1!X+SU>`SzyU9VboBm!2}w{oz=>z}_W>*pc>K)%c7TDm7GW)j z(fj)dhzj6uKp$<-n?R@_OZZqGYFK))r-JhT5pz%qd6 z&+HGJo1lDvJ3)*-pW=WZ0slU;|NrX$J)nHF{Y`-|f&4ijh5!iwA`5s4q@(Sx4}=zQ z!kPWO0gC}1JF~wnU=F}FAV%9O0*Er;9iWf4|NrX$FVF063G%Rl{3Rep=MMp*0C)rF zqsub_!U*{Bnf?6$O97rev%e$YtAJZTObjF%h&te(Kp$<-|JDEd&+Kmw@>~Y_3qXtw zBnXHc;156_Z4W~r^ng>&?C%R$0`TOS{p|sB0d4>>x;-O-r~>{D^wIYJU;Y2}nftR{4g-P!`~~Qv?Qa6)BH(9d_V))Y4fy?;{ha~x0`34YDUetont+f0fBJtP zC?CDQWG2fPB((feZngbr{LM*p8Uv%eik=LG3>AV%-+BOoe(cY!|I zp8u==51rZH3go#0@|S@a-Cm(U6ajAneYE|Jfm{ImSlz&wE4KuiK8 z28agWUqByi|Nqth2hZ$p0rIeb{6!!}=MM%V5BMX{N8A545C*_$XZF7jSQ7B`nf)CA za|3PyF%gg`AZmd3fj;_p{#XAWJ+r?J$ioiuSAiH^UpNpYz*|5c-JXB@f7Y4(|Mvfd zGyA)MJbWO37l_G#!~sD9{sSS$!-CM@VPR3?!5|EHSmZD~JO~{g7A_SY9C85PrJLS(_NljC6n{Xn2kht{Ws;Sr$q@u~34(E6t2 zc(`bNobz}BXnlSPJQB1%F*RP#sXhb-p+H|!AOsLX2tMQ-cnuj5c$q9Q1P4L_W+anB zz?)1#x}CFyi#vJ}GSlBX8Cxs#4bZ>aPo`s8oNfg^oZvPI%(e3QoBhO<{OlIW!^g?o z#SvWNPs%;@==^(s<-r7eU;nfH|K30SP5t-&${fr$INKxl6Mz1bQvXdy-*BB}_*WU^ zu?7CUR=^Y2-Ga%<&I3$Rw6HzV{CnSK?&t#iZqFt${bzqXz$|PlOQzH0(~3_HJ&vJvw*f#%X|Nf?<9cA6Y^c3`DE#PZw>tcDL{?8w# zzZ14kCSrpr1+G3P6Iqx9#Ko`ifZ2A}fZw{i0~6fR5gaZASQQso7#~<03haFj*qQ{` z7Y3n(&_Ea5+V=LfmlF1Ai7pHxi&p2VsT?K;RHFNFbyKf`t``g@uiUgN2KQj|Igd z#v;d}#bUzZ2ea)>|6BjxI{(&%u7w&bG+?0x3msVK!NLF*MzCA}i!4~sc5(tU$?d@G zWTt<-l+k|3*4ChbtWGAqf{K8@^S?8MPG?!7tB0JN<^SXYb8S7rw05U|_0X>8|I)wd z&S!RWwgP95rQOL~X)w7Ff@(N@PeAusEarX6)n}Z27RR5(-e@3t#KrZS1M4j^kOJPgaL-5sfG(#gKeo* z_O?4-YeKQ>Lt|C}Dx68b3oPU9!yl@Zlarp+KspxYD3!gV_{CVt?cJ4m;3qd4c za3TgLVQ?}AXJc><2BR=|41>opcmji$FnAe*S1@=LgFj&K8V0Xp@CF8d!r)B|{*1w2 zF?b7uw=sAJgTG<$E(Y&m@OKRUfx-J2e1O3}G58RJe_`+u2LHxj2-W{Rzj7{(L@^UG zkk|ZyyvHIQRu0HqiSWKQ3ahjO=QA&bdG-&}@>wzz?C}t!8#$$rmV4_5VHKQMIbxrB zn1mWZm9MdCBIvY&2x}+MCHaC{+_t=vPW}d4v-9#>f^QA|OJgI4=Q!5KU!dKY6;=eXYio*#E<>k+u&g2S9yK(DmJ1g2*`%Kk5gZamv&wLgdLD zB@y|DB6s$!Kq~lO5u~ll^CTIrzoeJpB(z(ANUVo_63(_S{)3cjM-M%QI zV2P>_rmDemjYX6m#N$8h+YO0_{+AaEE|LD1AzuEJ|K$%?cC41}lPkAA8+Usle|06k zb~6ff0|jf^1NBeie`YP*irpByt&rU0`D=tXhu&|#Pla;=1uOFa>3z}xHOt&HmU<{y zi8DGsUaqXU4CEmZ;QA(g>mUGwvq{=s>Af9=J@y3qKb>YSt12qB+BypBdI0j< zA-+N?yG9FX{yjg;*xMjp_9$4vHFWtX^J@Mauj6FE3a6Y6$5IN@9*4CxLQK={Bh;Cl zQWEYZj={iN&rQ=7Zojd>(6_|k9g%LFupAUDNEOt7TRs?Gc+19Z9t8_#IAtr0{7G}y z?ADow)jM0VRt9}JeQ$_~9ZVdJ!3tYW>%;YH-!u^zhc)t@vTSFnx={i+-U(2i>bj`x zhlJ{t;89o+<>~Q5!g23j+5+~D0Qu+3e?m6n_hc!+`E$mLyjnK`!1?p23>RrotK@d|YUQ*DF z4Lw(ejxpFHI`r|p5Q+ZrEs5d61T2pfuus`op}hsi^^|c~!xZ3IS``1zm8LBvdh&uD zY}4q>&GMWJ&F8OS323CwI(EIZp?^#o_1a&g=ZR`EOtZtPB|KhW=k zx-mz^2y%KIsimmLa|=GZRV|E>9-zzqEoeVMt|NIzBuQK1Gp}ggt*0a7uq;wwkAbis zt90d+m5-o`Elq7gFkly|I} z|Fi^-Ae*0NI21WievD+-LomR{VZrF@4>-QIT`m5G^ifz_5I8?NMu_S#xE_PaW0tU@ zG{#|}#wYD*18G=N5kXAA()K}lil{o{q>PA*X%uQL#H+y`AZ=uNu$Lw@V_e??{s=3mZ~goK zp_@|2$vk=tR{I*=-=kqn-A})?KtcaxLED$k{c|jPbeZ%REV}yC-kVh)$9Tc@EZX~o z>-SnssI{HI`A~71ZdoYhxk&=_!6!n{`t|-jg;qQuJ?=E!Q(sry+|2~h6wH+qj@$|i z>rkU6xv;2_Avx=ws?^&|aW2a!GX(|9%Lm5;WfLJUPD&O7*N=7tI3CC4@8s4kvX>ji zV0HC?osT~zXV@D^V~xRLgir0ix+lH#4g5b!r#`J;2zxhRp=lhJCwY23TW_O!tC2E+ ztlqoS&_YC`cBpP{>Xl!k6d5a_N|#Q{ZZ~>SI{H?s#xnzi0^Dm2fx^gl5iH=`z_ql^MF2zt1A5^ThUy-MGmIkpVu1e~C+3Im( zX|+w&qM-UpBSiLjRN7ZzCkr0Uqk9!obc%%*q8+#J149p@tmQR(YE{x+dU}OShct=7 znaL(<;#J#9*oV6N#WECs{Z@M*j4xZzSx#Ji%PmnpBZEVsQ%^RZLErb@^v9nFS)HaK zX!qA6 zIO2#duv@Egd^1u$>}Dh(uW-7rBTn$6Zgw@6$~Wfb}B=Ka`* zRIUm6IZOosG(V6XwA3E*{Z-WKfvnd$g|y{bLrn=@eHndbe2&+(KT`a0;L`(k+`Xt> z`3v9VlJIQii8zi};zAuwE|Z!nW&HjmMAPWz!5_FRbW!sjBG@op+(@#oZA;eB?^pJb zTDWTWx5bvjSXPa+`GHw!jjn_}MQx@Q8n2`Pr)_&Rg-3dMUNYEBq(zff79?aJ6vKaz z6gb!;A2eE+#CP>*s?CThCh0J1WBn@$C zMLy6JL-n<$DaD;1%H^y}Y;c>LQKNI3Q0`2VyUYY7mA~*LownieZN(7AGC$AN_eWvB zHX8}-q~IC*$lkJTzy5~9^MZP5>2hsmi6!%;3V$SMA*`Whzf^K(RK>YWx$^{w$0Fyr zQss*GS6wLtU%H!!Lb%i~&#N?#DUj@MU4MsKZtYnh7nbjQ@0&|>+4mWF*^Nw+g9VlH zW_kYaw%#}0$IS`O^;fIq1=&4#?fxWSuqSc;VXz%CuPtm%fJv35&h8b}SN-f=eJE5Z{WCrnO_4ZM{RPMcn1+Ets8u9kG6v`DnLd&h)7d#Vfz*lA^r_AQVc^;48 z<*|R~R*9nbzjv5Ewdyu&Hs5Z7jm#@?40>c@gd4xCAu2;*rI=tT{yfnHasP?B<@M%E z{KzMYKU`Vv_;lk+TzJqnPX$jI<>P$I$@G?aJO9Sr`z6X*4r<}KSw=U9U_E9u!PR77uQ)%U0bZ&Hbp zbtngkTXoM>TG!kMnJ#T{i5j0YN)>bXwP|xH3L9;ZU z{%ZfL>kaQT6Q><`BYTpCu@*x+cwrai(qj=Si={HG8m2t?Mh$l>ZcG%1?o~50 zyinXpiHACktF&9>DusTyS{F(kwNUd!ynzF0WOopv8Ed+8p~cT=Fx@*q4;gK)&}QL= z%MwsS$TqF=fLRI;`MC7B_oWizmOiOno!N$@Tw}PHbJvWZ_!Q35s+I>-s>zm=U0ID8 zT)%8QiCRM{RkNQ^HIb)PWumGdHBQ`XQxD(QHzp-sbT!3C&XXU;spTi*M={m15bP$4 z5-T>8%I9(RdGhzia1C_czpC)!oNB`1$dB(&k8^MrXQ#qnb1OX4GdZ`3ba7`8_nex& zL7*9|Y4b9SeD_(9G;_dlJ5oJ@rj6Z{!lvZ2EBE~VlO)xS>#Q=~fo~FRk1Ev4pHnMk zXKNUjI*>_ovkqVJ%g{y!Ec$YC{O*){GC=lv+3f=&HU9SNEWOgYzR-3j0%LdeBCm&^ zy$P=3w+L^kg%#bEZH*x2e)gy&ZZ9x!`Vq^jQi-W)d+(PdqL79mz50zxr5vW`3qsfC zmsfTNzQ98W;T5}%jM+`|N<=e3Go>HDsDw4GE$yFw{X3|4D|^wD6p`flDMDN7C}4Yk z2zT@Ll16)ce6Zs4fFGrnciM2b8#H4z*zVF<3#+FIIquh0O)C~;8LDjH$@}+o;9TCJ z50Z`M=Mc|=i>Y6B5E$CO(kvHAs7u0T$t)jidO*WYtEe^uXu(5$< zu}Vqaw~WB&>Dy;6{rW_{OSvjJ^CKRmmXWn5L7dxkV-`}6UMSLNbkbdx z{K&9kg`979`7K1WyZ2LicHe7(E-u{L81K z0pPdoSvq)%aT2;uBlHKHPD1x-gaA)jPD1x-gkU<2|IudxBj)JPeexHAU_OoiVK4xC z61q<##A)t-^Zy-Z{hJOx&3zL7GWjX~Qywu!I{Jf)=+J%g7lJ^K-J?VI$zKSf+ac>4 zv(^Z#lnRV-VsXk~VdUqR@E~U78i7@O0QXx8Uf03Xx|7g-8X>^bo0HIe8X<^ILry~XX@o#On?Q%|lfU42Fw(U!_zDJVV=yTOlVdRTX+8hcXX@~M zQqq8)ya7EP#M9-A5?HI@1xnHd%#38b+7|1IwbgHd+>H$D3~l$`S3C@f!R~vu{&Wcq0*v<@0k$QnkJoS_6|)(I zrJ~1w0sFq$8P!JHV(g~8x_XZ-K^u7a_D>n+5asXpVda9%Lp z0EHTGW9YMCup)-O5(X<{@GA+vxiCJ^p13FHPsR`i4`c9a3?9MYQ4EF-K1;o41b#1t zp~p+A_2%P!k~xOQVcGkTfIFdaH9Z*n(~ZFc7(9u=Z!mZSgKv_ExpT+l$%j&MJMW$s z-T=dhC!zZ^LiFX{(C4=rgEi)X{kwbr=iAB*E%94`b540Xp5k}M=qN0YADn+Z&Q|=B ziX>|HP_Ud=r+m&Qow|M*1*@(B?KktT@ZxBh-*@kESSm5#Jo>Qi;(B@_`*B!>$|<83 zwKK__K|0nc^M5^x?hr@8n#Um7tYtiH&F2N^c?(gn!hX=d@v9WOP1=LGTtI!#PwVTR z*DAa4A7=84_J8Jwf+fhDrppWx7alF5U};*X`X*~Ek-Y+7JdE+Q{3V&M!Lwleu|@Ed zmoeCN+pA&O|KIW;HW2EHaKN&s#}9FD=Vt4`Yo65}08U<=xZ955JP z1&*DL|K;u3K6)dXF<43`_`RL>3AupW9&!H-`bz=GZ!0=_RPICG!3oA^NKSZCj*1SY z>jPD3$FCJ3>QrovI28X}bo2?X+GyiaIN1&EV;qI%k? zTlo|Mo<|z=5hEmp;>}$xRyb4(Y)F~{@YkkiP|1@;G4~bg>PL)Q%ZVazsw*HH9RrH7 zoT#iMoh9hXr5PTn;u4KKekImt!nboelWzT4ysE6x&@UVKfc|xh;QI>Y0x4E_*-Asv z6@gj;D{G?PuNGTWa=f{X>SGcM-X7aVzPrSv9=!>-mTxEo{?ygD@yYE9sY`OHc@#I6 zorlIiq#=<`cTrEt)HNt0C{p7p@@Zbkwv{PFZ$E%e2(HKFp4 z3`>1B^&+O8{b;E3$|J>^JkNw;l}CB_IhEW`ilQ*a6T|jz&-*HY@uFv-y}|e*$%Dn< zJH!_7E_%~iPrQq=mG#SteKnxJ@PYOR&l`d{Cyi8+LH|XM_xV(8yTksdy!+&&kQhp3 zsZ%J=i1PT=Bk?&`t$`wXE+M>eEGuAm)R=Q!F6&56P3U>}n#cOq`!qXS%}zG)MxlyM zifJsicbRxca@o(gj+q-L_dPJmGr}YAP_1=P&bmS^ZQ#pM(h5s!P0|lnDq4cGyJ_Df zN)95YgX8{D4WK+c=RrjDX_(T0c~h?pS!Vd*@ct(*$DQfz3pTYJ8d2mF%YxVi&pF!v zWC!V5%XhL%2Y!sj@AWg|ZDS%FgJlqbuQu&Xtj(v#agzU6d`f~7=)^Z#Xbe2NN>sYJ~axk6{U zYpY0knztEa>IGK>RqL9B?|;3$;$TqdaUJzRPNS+@o4HlaDCRaoA@@0JO3s{D|;WY4G;PduPZS{lK@>(6+Vl*d3e_~J#EAR!}O?dB}vmmfCe z^IW%W?o)=V8#!KSp#8a~($Q0$&ve7w8_4+Bb z{a}}u2OOTz!WBsmjXJ0wZh>qU{Xq)ntjXv-)h>fi6PdX!{@f~qzOj9g^5Ju~9^MLn zT#IH#^i*Z8$|q^@e^UtFNAAJLr0l`-jrLOX`OP_3jr(0a6+Ewrk^%OCt$)y?o~xgB zHBpY0b{R4>qQ!po&h7G%=Xr&=rhW&!^5yByN*FYpNLM}6T{rrN3YLQ+$)eexI8)6; zO)JqxYKr$F-=d;F)8A1^PfnQhld^STcW)SHxt^ky)UCq(Mz`e!5I|ql5ygppn`4a3b2>+zsUa-7w z51GF+r(T&~W!Ze)yDY-pZ?fWztx_lUv(yy9SyTG)<24!TyDCqk3$qyVT!rPVVIq{% zX=+b`Jwr-RxI*WMbTnaWUg~+}@dBvJ91M0j_bw&>ESHUYL1?fZu0$TtI#a<7LBZn4 zKzoDdZ!hE*$UDLFnkeDZ@!$~k_HlQa8>)r4_lI`VueQM{<~%|#1}erPi!WXvi`L75 zMKzH-3NiBIM_mq#s8=%a4}MOOD+dcEJ7Re)D|xz|W7V0upjtTbCRys&@9UE( z-@IIS=ro%v1^J}i=^KpRe!;L%n@x_`ngW~~*tO(_BoaA-V=y@3i@9@YX z@k^?ub$L&o3Kz}Ztv6t6{@SD*M^NV-NTxiRM-hb0-ngL@ajQqp>ZT?#)Mq+rrY=Mw znAYa%`)uryDXW2>-+JlPyM%%-PhaEHo~PJ#`yw9?5AoX2aR|Cbq+cY-^Hpe4uI>IE zVSyP(?}3_>h)ea1>ILQ`x8$^fU8;Ov{Qh~(SD~VbiA5nnmL9Qg|WMs=8PYwE#hm?ONcU`1u?^Z~wMhw2Zo%xP`gHTx95VZdx=r6#Z<-yoI zyl%=&?(u_&0aCRK`l!|D>??<53JrdPHGM3LEeC87#V)krDy8$Eh_~Xp*0pI;Ew4el z<>P)&-V4(qwRGl}Rmhk|DMzg3vn8@W`BnLAe2RJ}S}|G}=T^E`?s#B2nRBrmc>lsd zZd7HRjYmXBzze1pYZ#82N2!E(w+3z1L`Ve!HUa?s25f{cFjbue{ZQ zE7yN}5>g^ZcZ;iqD_RSoZ4~A0bMpJcMk_-9r?{Eia3>Vm|sxrN1-0ITDj=ioZdRz zLDwc<7E)i0$XvRv3Z-<;(F2OvR2(Xm2+dz|#)8R`q>soUkHV$k746F38(?)+c#)gG zzIMtf1Zc`Wb5x|-P{8>AW2{?}+nZf4mj=zQZGG?cLS={jMbAwRjU*GjRlmwvk6&BP z!$0Kv5vg?AlWwUGA4pLPITYM;RO@0^oPRorlT&OzQ9*y#M={rW%H;<3a2v}|4U?^1 zi)PcCLMI5y?`x>VPq(S}6Ux~=mH6w`H-9k_3OOH)%PKXP@WRHFe6MDs&iz>WFr?T( zzjQk*ic?sWRbkE6@dh&a{ng*&Hd`&J@2|im7IENlu8Rf_0wkaIc?d;3>KcP}UIYG4 zHS{=3zg}kKE>5Y|e_f`)k}jcHG~0A{55tj9xchB&Ad1)T?oE`0UWAr%q8F_B_FOFC zQ$xmgk?Zps1v#b%TuhbwyUX?6%&i_uF|9%-FAjI)mi|uGoTO zu+nkxd#{I`ltK=#^4c|ih2SrfSf$nhYdAa~%3ptAQVaU?kpb3Oc_H41eac>a6c!T> z&Og)dU4w)a2KVpP%4M}Gd__=w8+0PKrEAz7Rd_@Sa~aAU*}*2oI^WT@4Ubs)lIO;3 z6%xv0j(^M6R3T=mn2x!gQEmTW5#)Sw_V(+Xf``SGSovwd5nJJ#3Crx1`FV znG;JtUy~0M3V1j!-21iMOm^FVT1K@**UPZrVRvvPxmeoclnAv<4d;#MlpAl+KO50M zG1238=&?QEy?hdsl_i{fN+wcp}}Wq$#)7`zy%o&1RWHt zEUeJq5I80Dd*|={A4Y=D@1T=)tX#pD2~IP@@7mn;@Pt5A?>e3ou6paIzl(PGI}562&L;@!Mb`xZ<)h1nfHKkL0dWTUJ`hkAx*W7V1n59? z%)kq-EkObZ2zR@)H3&r4_O83fKLp?-}cp;V$ zN3cL3re-*&Lr~_Yv92L{PeDC*ok6jnbWjPX3si}&8MK|5GdMJGgy2BI@q)t!M-LhS zv;}Aq&@$)-0zqB=j;@M^B0AQ*siAm7MIOENWIOn>k0SVvkHKG-*EP^mJb}}6d89h{ zC=S>Hbm8h?+QEN=`ogKd<=<_}gs0zil0DmQiab4z_VKgtK4EMRsXyJ$gt7f-tX{xjqL(zXI!5%A6*G{#DJbsWC6UYO9)A zbFPass*1U@OJ~iAx6#3=>MM#aFBzU*+T!Q9D)u@y+n+aaM#EA$U8Di~s2l~N_t4hI zmB?<(<+8iHPDi+Tkv=3O_WpHv<)!I;n`cKGcw=3B#D&gD7401nz0Gx0-rbeM95_Wq z_Hc&sDmd?2U+VHD>AQS*`eZ+c%(!H*N3wr*&8#Z@HJ{nUTW{;lIU#fn>^U6lkV9(x zEd<3;1Ns$o_UAXJ_UPc#^>)R)5-u5LhxP_`?q{=Zdp<~9TG>RJLnSB-jsft8n{Nvd zx@3n}!aKtH1eiv4IhM#MDM{00dA*r;kc0lh%NoONoMYq;X40FDH}oZnjj`K0zv+sCZGI;Ag zVnPykSH3|$mp8|G)OFYA?}`EawMT<*;O}kXFCrVnFKcd#c5v!KtdgWQbp(J(;Hug^61lHB#W_hO}R?^_2pY{Y|TF4?X8qUFtn_>(YlouNIX+)IfYhmtd|_E zAf=PsQpKGvC&oDEZYe6*9BtwS_@HRSZSj7@{lMj8J;}@TCfTMl;O}sw3UN(<^E%AQ zDvG$1spqot!=3UztI-?1woKSjD+`)v=Q7HYD! zMNSv9`4RWJT>Ev;Ch6uVvRLlLy>4%d>EvYZcaEasP>xtnCBaDd7t-3z+@iU$tyNA& z@Xu@3xh=os5;++`mkWo;Nv9}c8W-!?#3r-&Wk>y>AduG26)+N z{c68><|+%7jq6!ZN_<_}_aamoD;C7F56G~xdG zB=bj-%o~!-A5AiIIs)T}JL0V9@+%}#uF{HmrGZ%-lvj~FLoxUNxBm63M1|FQ0aANuh6k8Jqpz4zV!v5g;p;1ioZ z`QSsFKlSh206+?B}+B{;@CY_~Onl?fUZLPwf86e|~k(*S`K_*EgQ}uf6~M z&2R1d_IJL!|9jv6LH7?2{OI7*&;0n%PoDkh;h#PCe9zB+@yjE>df~;Rzy8f{kNxiW z?|WZ*`41=l_{yJ7{`u6ar(b*hjQU$2&<1`0drJ>!|Lpw#v*Z7p%m2+DkO#i6ACUjq z`R8mbX2FyBlA7m6nuImW0lC3e7HZ^pR91z8{)s&DENWO{KZ{ZAtsT*($+z*C+n^hg zF*hu3;|WwOwAr6@-ye5B+`6pcHl-q*ZyRl$j5iZa&9Mc*_T?cyDQ}w0VRtQY&z^}kkvMY;<*Z#AXEFPwe4pM%hMl{mJkT|= z&gaaO7pn=eW9(w~#K}C8a!m@4W9-@+!pjlJPh%j?7E9W*X=TNPNmdPzE;q6qbzWVGJwcbX)t+k5TTMP6@f|~4fp}9?JU9<_r z%@Up$<8C{1xMKxNH=I%F^wPScT$-XGmP$feD`Wl}Som#|Brk3YwKO)xqI2f6!n5uu zaLzmH^S3AzmdqM`mz0V=%VkrHSsVMzwm{tdSbLYl%HrC)yKmZcUpsd8(l+IC=3CKL zscdKF#MFfQXm9hPMIlp3asEVC<#PVWkly0JnJK7*`?lR0PuvN1u=B#?STX2!E=s|% zu|XDeS~-(a`D+Dl4_QE@qyk%>ipJudLDLsj>UUy+7%GTI{~@-+RKOzr3D2MNq=X|Z1NY0nN9rlG4u5%KQXiUp!Zf#`#B~*6Jll)zCX#FXU#X(nDqLr`MNTbzBFqtuQd5p&b+{s-^pH6Ue5i| zBy*27x?(QVC@?=b1>a`zXQ`rVUc-eJuy{>@3|_0}AyHs!z8nrr60LzmYIYhF-l z%B#tm-(mH&F6n+{()}W9uB|ot=E~RQ*KhATv(K7cdAjm<=8TLn8AE(mq-LZ|PEAS8 z@cGil$xe%EZh1hJB6DK%k2wkR4^A|-zkSZvJNeWw0cUhl*vrAi=CspUeLowDkJX8fwCs58*Hmete33#SI=ce0+!qH7?qmKgnooohSsrC4@tYHCVL z8?qu2SssZbthbiWoil6B1RQa}=iXR5LDkL)FZ4S3D7R zRwHXisgWh@M)dNqNd85`)aa6H)M!tM^7W4B$>>h+N{bAs9~@v$-w!Lbo=kW$2dm85 zG?iI0L}eBai+Bcm)!<@pktaP>r4wIz@!*I_Lpo^~N*YK@wJ(x??jSY1WRe>0xmXRR zP9?nQgqJ@yMGf`TDKAPTc00VpF~p;WtmdBfa}$2%#r$lR``LtDk|B9ZNM-(2!!Nib z$_JCd(P~@?yBnRK^>TV|TF>C_)Gn{h!wQPeQ;?wwf+JNyZI&u1@u`9hdA+$kwoJxl zsBzI@YFsc~jU)ZzNdLIv{GQR>IbHde3{&~kaem49D&JF}M)vr+M|5RGhSi(2cN4Zr z^Lo;}E|%s%D)tw%ubAikDl6ivmwfuMGvzd#avDZ{$Wt42qRTN&rB@G*b-z^(n$WXRylfj8)Esgx@7;DH^KIiH`H06D;taQ!>_j zjwjEX#SLA~KK$#r(p7pJah;c>8ly7lD`F2X)-ar?1-IH&J`4egH)L*imNIiOnN*f!m z^O}DdIvvdLj;kH!9aoa>9fu!Z#H2~P6`fjyANI)`6lL{ZumqGmMpIOJ(3(f3sZr5X z@|~iF)ly&LM*K>eMoN8MNPSJDz9#7Uirvc^s3)#DkanF%{pJ;$HgEd90{T5xaua$KQ!eY#msmV5k3+p`X!W2X zPX>Gcq4ODSX%SsULHb4d!GylirBT;s7Ul1wZ^@)@8KK5)Fnxhl`mA4=*bsNaC@t-J?Ut^To|4F3|A)WPJOg3-T-awWPb13Pj z%&Lb)ocn1H^1CPU@p$)bxX+~>dq%3v-r+sNx`%cRi43lnI&uD%KEyfM4=c4Z-k-!% zFh~_F%InIFU#{yy zmoaUogffmR-;Zrq>Ql%Omv22jWimdEV0>b%s_yGOV&UYcsr+cV$`1}@Jc3u}bh&ch z^O#cI$Y~dz%YQ!ZqnY>_!8kS?e;F!&Lr&L#^Mh>Z2S=*x4T-HnmrvC816rqtOP_*H zGj7rcj;prg<>cWr&W+}(vB4ZQx+GhTDj#tmc|5Kc{TrLE#@6DlBu9-sFuEtFdsLT< zld-aQb>L9yRmw6aP31&~s~qCap$+D=W$7~T5@zW)S?fTu8^px^mGD(@W?PO$@_sON zSrpSTSC>u~_&|4<)UC`(1e5QNW>WBCbtq|VV}A6nh%&E>PdDcCD9arOmHHO4 zj=gBllRo1Ja|rZs5PBGY&og?k8jVhjE*{mL)s-0$zmcbv`Z2O!{QA?B|KMts7rjUM zf*)WD^|cB2b${x4k4ozu+#@r%e*0I^gAC?BZE4+uyHX=5_1+@a4n{spfAUkMCRrUw z7-J+~E`RZuDecqt-@5(UIjz$@hw=AJSoCY@%qwZP^bZAXeQnmI=ZWW-mp#ujj!RGf zX$TC}<7Xb@=V->yY(0KT7^2D7{+xF}5fA*gzfkHD$kR1AGN?W^RtHmFqz(Q?srR}( zi`&`^@-|G3tTr=B)BlWOTpr1|%yY_4I~RB5D(N6kt{k&p;x!rMK^Nu#?ykelY~+b# zcQ!vRya;aYK)Rhf-LIt6uQ2~br*o>ay3f)*S2oG0`&gb6cz(#IOl{xX9jh0c7u~Mn z^-j`MZQGl(7jx2>9P^hv{_A>7oHLnu^DfHzOX$&#*t|Kyv#$*&kfrr_h<*I9L~$6w|e z)rsS8{zTfV=UkOMiH21F!FZg{c%0v6p8BMWc(hX8xgPZ@velMJBje@yc^>smYyK?v zuEG3*E3?FQ@`mLo>=E z)CuG&8_v+N9yJ}g$%UI3mTjv()<-f`=1$f|TprM;w6ZuIm;U7-^A*~L?O%FgZsYXJ zrj0quK+iUD^Z#+oyGll>ac%j%eKV-cv&YQj_9f3m(&tuZ_x7!4q`P`8dc!nmJ?=+G z2C^UE`OD}%`)V^E&D=n_`7@M1n5F!+KILaD^|uxDj_Jwk&h5&Mcy!-P`SF~UgHGlY zXLa>kKCbLtyFJ@qtS@Th+4T{m&DCps9Sl_Vw29a}LE>6O{kphxTcBK`v>noE+fFRL zE3fpZ`N)S{eAZv0f9B}YmSm0|*Oo-XZ<^{+|Bigx`d9ETUgc5Wa^W$z8d8=Lku@(f zM@H8ekF2i6o)d1p8h=QS^EW!3`C2w}b#^!3DQh;FUBe?8^+Wx`m49!(^0T()XKl^T z+M1u|KBH-USvU==My&;_0I9Aug>+Ti&)!` zE9T$T>zkpgcgZ7j244x|WOYWYoPQMXsCV4pQKc^Y zs`Asw0vql;_{+#WE*_UIJ*P!qi~FAGD{4Gy4)Ta|J338`ChenZLHa@F?2)s^VwXe0P9J&AD?zK?MOIS?NQb1I#0hs8GB&VoIl3fMjcyy& zo7I!qEvxn}?%kiFk9(Lou=A(&Ch@s4|AL`vlqXMR^rrX3p4M%<-68c8U*_mhEbK=a z+mH_swxHG{sYjQu_&V$--ZxxF*JU}3v7EJg*5r)t+Bqz17x~yT{&pFi;dhy0`&&n~ zdp3)k2lN+re|D}+4Hmh4zV=1ti90>&bFK`XyR)B1V`EDt?k9c8qxSvFeZ2(O7xAavuQm^}1g+{UP%R)(=_t+nK!X zS0~}=vd^OInKK{Ycatf@-*$e~M_MxJM@Oj9myc|VttwbO(a)ONA9HNnB+RpQztd0M z*=If-U;MnyJzMJaR(=O$-k!X6<8glVIwx!P^zq|rnM=^$GS}9>3&zUD)@S}G(>Kd_ zMQwdg61r??%l(cc zw!DlU^o>!mwkE$TN?q5|Htm}EfMbhpXNhyge&f`-6Bm~bUw*rz4``$P>%PSN{(4rr zMBgPZu3hG*sQg7ak@(**hWyT>%8^%GdqfxXZx#+m+x6mPv-}oMI~cihL}Yk(eQhuh;nvx@e47HMlTMn$G%tt{ykH zA$K@;(ogN=w?Dx)LF$Kh7t#;d->1rm`@D2@9{t35FOTWX>&flT?iv}%s`mx7uC_5h z%}$ZuPa~Q2edFqnE}(oTdeui=Jdz%9E8(+-lfGeaY<$1uLa&;OJn!84ys{41H|Oi8 zd`$aGEHh6&&&3a$=NR*JIV_M~6jyd{Qm;oZ_o^`^)aw$f8?H?bk@@SF?U-W6bK0{R zi$*dQWib}{WGvc{JQhuty3=(QH^0{AzHp2Vns+5kfBskgjw@v>{k`bUBBMLHufK5E zjQsL!R_qg2^@`kkD-lU!e`W0QuhSdXFF5;Td^2|g^!NS6oj)P{ZMm0cJ(Zkd8Nd3* z_qcId#~o*uw2AIYnaDF#{P->NuIj}3{L^#1>Q!V`eBH0czl7sZ!gJv!*J1zTaId`E z6H9~iqpTI=F*jyStY>7mFE-bT)OgkXNJD)55}%GIZXW3J^Cr4nd81dYL{_-)2HD?K zlk3cd_Xf|f*>zs^cI3k@EaS)Y6|ASk&09@5?`57O>k6iv^&2{_pE|bCt2W*2Ra@i3 zDvnzN*K0YfbFg0H);YZBr~h4Ebv^Q=_4j+ixEb^BT{ya&;@X%?qphzU6J({>T(4Y| zq5?e3`!49S>zb6Jc3{_C*k`x!(i9b8tlAgn_Xu`PxT}w|TYDLPu8L#8+!EXfbNB)8Yn;TP;3r@jDiuwfGy0uUi~RoyaxO;?)+bEH1LR z%;JYEe%9iHZ!`YaS)6LaZL;Qt7ON~?VR53xkrurckCmA4p0&8w;!ca3Ev~oNY4KKz z3oK5zIMHH;#S@p?@Gb7N_<+T=7AM+#jIo$u@$|*U|8FcFw7AdW9X212Tk|%H8!dKP zY_k}&ILG3(77HzATTHdM!lrMr#d#L5wfLBgzsQEUe9GcMi!WF_VKHrriN|O09E(L3%Ph{b*k*CP#VrVy-P`*Iw_pR z;V}DPr_`9Y$n_>2d{b$CR`8LQY~ZsJAK&%xM)^#>!DF8yzSQdA>riZmrp#`L%xexU zpSxJ@sdrnSV&G1MkEw7~p~}Op?V(EE)5cAl}Eo0o>v0ael3UO_U&RNES}e^KI- zH`{HR?uZMyRLxDjv1MsO%->24^Tiwo<`Q3i%52#=rfemlw$5)3hRU1R;cUE@5ak{F z(qK?dyj7~#Tg8qib~6+FJ;g3<;ZQUri6~V~Db;K|BV4ItF3kbiG(~oCd&ZSVjeL$a z$1}4n6mr|5q^FX@nrP5wSY0bI$C*zPFB|cQ7d6W>Q|}37-_Iu%3&nLUdqGLmbNJ2+ zyLUOeKtr?%^PeR4*{#8juq{>W?hrTgLTz%C?~E0t>cgbJon2sR^#(fZXeX%(v^BT# z4eZMDFq=v7)`Emn-oe4kE$;IJ^;n#p^P4YzjlqS$PA4(_k}cav!5{ll6_@rqNyk!l zyNlPRJV`4dEi?MLn4HdPL21u9+rCD=Kol){Tx&xsh<6b-Ey2Dz2zaZ}gogG|MY$@FP{4D& zfl%nSJ~!J`MKfQY@_AvO-Os$WZ4E8$VX|c{m3msuXbA@R>Nu*@?Gl#RqGfi7jIsF) z=XsRzL28S2aUVLk*nG30bye{}&W#Z^G78xbIaHUorm1zgGcB>TV9ZkQSCaN6d>;{N z)0IrgJ>wBQr<&Va+e+0??`&$r`Clg~GKOjzJFO(Zm$`j8nlJYQ4Wc0GW?f3Q;9^eB z)8%7IQ>kTAwk9fNzcJB$Oo>fr#jLXCC{33)9BgYdpSCFVLGdZoQQjJskBcAjieYYt z^ks|XUfFGEe2BJCL)|n+oxiJH&(JCwRBcT)d>8QdKH0jM*k6wm*+9t!xjycsM*`1)o(%NoGyuj4G$(t?ZR}BOklC?Z|jv z44ZNt-7G$VX<)-M-si+_R-7C5=CWl_BW=v+p!B(=?b23tU%b^@$h{Lu4`9f`YG*2 zl$UOb4~D}vRJD8vrH*^6LJiA8XW8%2`bPsX9Vs;wmK;isVm6=Axv37B{G1XW@x3Sg z$YrTD;Sl>{4)(-vL#f+qx%tGXiVuWK)ihmt(FVRQk4WZ9)!S2R-5z1mV)e*U#rVYL za}0OE87msu(vuue9D3w9U;5GkZ+ClVwO54Lt&b1H0}NBr?jB01j)v!%t=w*GSc`ZZY(?mX$gj}8oBBD*D>V$-6)W5uyP1KZnug;s@(c`p|u_*OGf~)!Jb4EM$eg(fxObw}?M-RO;!pLfJCuNyv zL)xA-dKk3RYZjl$lkH`suXaxde?6YDR}EYJEhjMxV;lc1G_!*Cg?4^ur|vCV z2M4a{E4;k9#5=7Pi;~QRNoKz_`z)p=-PeJ}{c+*twYaU|Fb=ExEnx|W{TRAJT=4^Z4Z_Pf7o5$$SKlOVO z)`^Cb%S^e{=l6gAsJ*{uoVlMG?-_o`-rq5&fB#+f{)qwZ@38mlZ1|!J@z-CgS1yd= zho7JP@k@AT|7QPz#Rt!v>G?p4);D+GnG<&La+Ts7^@CFG$!YD!S5{vY|j z68OIo_=`$l#dD^=idu|V3|nln7_?Y#vCd+^Vx`5Y77HyFSoB%Uu$X2s)uOU^`e!CR zCoP_^*lY2a#iJIFSnRQQ$l^YWdo1p<=)&J_&08#Pvbf&jT8k?zHd(BmQh?|G}UK-mKFkV&Kgp{|6KK4~}X;6_BRKHJ}Rk_3i)P z{``xpg#UWeUwgc%(ygj3bkOyySFS$K*3(wL=auVIj~cxDp`O#irr*`6aU1Tx@yN4} z_|5IJ{@(q%v6^o2%Wu(rsdfK2?tk#`k%z~qUp;*E;dc%k{#~EaK5k$@x#8J&J?mGu zJbUZ2#b>+!(V^#h{;brLyG+Vbe{1FwuiJ69JjsVA$^4Hpx^ra)3jd#dU&`T)%ECV{ z@i{M+k6)YeUH?0SzTX>k^PR|CtAEymGdsPM`Ht;avyhN$(@F4hOqzirsynQn9!lU3W zkv6dhe{c9GBw}8(gVfbP2_;u{<5AOwMRmpln zijtFpJ~NwggKr1>(3%-mTh4Z_Bx?(Qrgii&xSCdY05B^&%y5vbw)4{U&O8Max z;M_Xu4juq6WC~shF9e@L0`UFdPu_*Dzz>5<7qK4|d@Z;KSp^sTNF(Wl-wS>Y*$Ceb z4sW7Ag?E9EHZzxl_ki8EQqFL}egDpHA8^6ZounV02c8sxNAE^wR#WfZ6txZ15yB&1*{!N z5nS+l$TWEPGn~csS>82-`@t)a0DLO=Q=|@l7|i+{`GRMIGmt2}61)>x1@8pEh^&F{ z00$C1tO-C*@&=n}jZ{3CJ{p7sUm8p$3+S%HgokY;!o-0?+p2EH47?90?E zeEQ?m^%Jy5cmcTVYv>7l1^DVy#0x(S4*PHV4tNH5F|r>%37m->gja%#k;CvN@RQ%9 z%;DR?%x}>r3`TFk&mcwc?cleOsqp<^FESl2ID8-NQQU*YNB~{}-iXw}>%dh=JzVhP zNE3V$_zffi-wXa4Sph!=4*xd&6x;_+LDs@czz2}^@J-;k-=Y1&{os3$&G0p#_q$4M zgQtQ^kR9+Q@C9Ty{3!U2{j>{s75E)wAACPp{5|v!UIIRW9D?r#$9|u70WSa_K#syU zfoG6jxcY%ocOfU?o!|?IVvmrc;BDRXz3?!20P(>Og7beUYp0YC_;th&?*hvYQ2y`= z@Y6^Ud>c5CN!e8RH1LbaboegtCrBmyFnGg3${$_}u0rbI@%zQeo^s)*DRb-vTabEq z{GM^Lcif^w^vl=_-i~a7N5SiUg3iDz!NQ-?HsL41s}7^LX`~HoMhf9!@KK})z7703 zG8KLZ9QHHP56=K+AXV^6@Iy!)d_DLKQZMeo_dkcuz}JE!d&nES3j7kX9li_fL3Y6> z{hT%ZU((j#Y2X-y*N#;IxcCTl0gr(9{ffGPZv=mc6u^7HlSm<4@Xi-VKfDus5UGG~ z26rP>aKY~(weW86SI9#6QSdb+2v;xS_qX&L@XcV|adZ_f_~%~I3_lHC`4VjtJ{4Su zoQ4aoLnfrtPl9zPNCRB(Q%D_r3;0W<34R1T|Buu!d;-{rtbhl>Nw3hR;P-;Nkd1J` zgUDvM;Fv$rcHjlzJY)yF4&03Fh6_H6biogU6Hd~0;DSH;Gi?Wc5FB%g`hXXJA>=50 z6L{&XlrOvp9Q7Lg_AvTYup23Y3)a6*dBO#M%#3v*{18~^@u(GWL4S%zt%VC#BD>*r z-~qmK>VjvpPuX=yH@p&j2ss4b4CV~+sH5;a@FPfC2K^ZLG4_!1!#9K1vbR`0yb9cb z+zS`XVXw+9@I3JI$R4o=?;q|_`{5hGLzy0R1TOgeNWPmJj$VN&IphJJ3cfv;bi*sa zhCK2G-vWLc*$3Yb-j&b3LGVs6b&N-4kH9Zji1^`xH?vpPRCqo3AQFb}0H+jqR1{tU zUNg?4R>7x(VPqX#a5r)@o@IGV>d?V=RA$1e{1o#^sbax2{?<*!gaRZLOobrTE06&eKfOmmEL(+WY9o)wr zRe5m1jJJ7I1zhl}NC3VEY`Vguf^flONE9x(;Y!jYZoorV5ieY@`)cx&g>HlQT;oyG z;OoGZ)7b+Lz6yL1SqDD~ex=l-Hp2ISFCp9DC&0Itp^NZo;0KZ2@b%z`a_RzJ0_M*l zkMIJp8c7|=SO7jh7yW_vfGGj;1y2PpM5^G0;5(37coo=+EQCkEk0L?%z2Fl_7`_{9 zx&gg{3;rD00zU#?Qcd~8CxQMN(gqi7M6yQ_Ciq${dJ9)K(sqz4_!jUx$U^vj@MRI;Mri?dr1d83O@Qi+An+?_&a19ycfLk{nQtH)mru& zL3YEpgNKkVxZscvkREs%Sb}uJBVhGCxP#Y%TalyiZD8bs9@Q&uz^6ZiUgZ!MnEheO z6J84*M5e=gz^m5Nrr?{v_kRQ(hOY&`f&}4vz?YCP`~=vxfwF~1!F!NZ@O9veAElh( zN5R4O($?T<;8n;L_%!f#WIH?xe*Zpn0NxFL^?u3}z6X3AISl9JRW)cM?FXI)o{JRZ zq9>=DKzcn|pSqm&PP z7x-&rFZ>udc`M<=i@-|c7+mlh$O-sf@DHE%FexO>;CDYmyzu?tQ=g?A;CsPk+o@mp z3hJh$C@QaiWTyX48>I+@~&iNAM01trg*+qZI zz8h=6t-H}n_%`qt$U^uL(EAnQf~SISN5b%FU^^0pN5SpLD)>Hd(39v7JPmvh*$&?f zra#3P3eN!VLym|&_*3Kr{4kjLZR!&415bU2G8sepfcJkFoq-<|+|M38aKXawlV*4j z{4){|_uy9#P*(6R@FWt23*P-B(g|M!<{c!RaKSGi_riC82ap}`gW#s8(It4nGalvn zF?|p`6?_6Y3f~Q0|15n7=O0voH~o};5WW!HgiM7C79EzoF3|_@6G)}lgQ?GxX82KX zbr1b4d=0qb7YJN%AF>{P2=pI8&*6gKLbk*Afzy6P8-xpf4cQCt0^j=r{S169`1Kd* z_rxBYb(C^}hrxIM8vQRIUhofyAASOS;WwlkeiZ!JZ%IFVBUpTl{t#XQK7uTSZvk)l z9l8Op2k%DK!`Fb1A{*h`z#kx+;oaa%$Ts*1aO`o)9KH|?_fqC?!A@i!T<}$-8-5xL zyhL8$f*(VA;TyqUBPZd%h(IV-glOU={n6tbq&Oh3tZNf>)0vF8DNXKXMp;2&^2(S}a^Jg7m@#TiA=_ zq;T-&iKORT(hS~zA#08Bjo?p^Cir1+L?Qm+KJe5LP)dEkeyVJ#NE9_&Io;ex+F*20f~qp$U<_2M492H6Oo4&IGyhOYsCjBJA+0&gy5 z-4wnJ{7M;R2;T#aE+_r)JTSk4^ur6lawP3M(g`j`eDEgl-AEpM6}Wl^^$TAEei|u) zZv(%IOojJ=J7;>;boefC>viN2z88G3ih74{1}~aTIm0J`rR>SE30?t)knQj$@Z7mx zwFkZf{4H_}ehj=Yz>K={~)*(3BU!PL?S#heiM8iX@b81%D&C@aKU`!5Zn*SzRTTk!D^(4 z=e3(a*{8PKm5!3DdJJ#g6*w+Gn;7nD6-Q+Wmvl>JyUnEwmP9;#8e zU?;K{F8ip;{-}H4g0eqo2J>)1*~inzTvt%`(2T$ZWv|IJ=8b~6$Pu{g6)Af%Rx*DR zl)V)X!v$r(!~*75g0jD104^wd0PcYc%HDoknEwdMo_+h_f_jfJ<{pBwS5}a5L{Rp; z+CtwhDEn9Szy)RBsY&#)g0i>ND!8ER|Fj)0DEmA4=nn;DkELmFLD_R>H(XHmzu85b z6_mYerqXrHC^i5%X z_VS){;Q;ni2e7Xkz`kw(`zGvHe1rLII=^F>1gXyN(vM^B%>M7uZ&6szJmCklg*bEP z59xQ}+~0eE`*CKkXfQ+k#$5334i#>SH1Y+i|V=Oo>R{}^Njl1*S@CKtXZSV z%F5JLS6!v1OqrrCy67U6mzPJo_Ng>Eaqqb^>d{6M%<;eOQh%Md@et+hS4>!7xIfAE629|y=J6-R-z~={z<4dc3`Q!<5p}DGP2uH|1|>>4G@>1^TY<`UHQk z_;N`4EB>6VkNR?mjtG6(p^o=$_2m-YD}K%O-P{C!r>19-GYS3F^y{Y2Q1Zl}?e+CBDk)IuoCdSQnhaM11h; zPu*}<{<1?s-v#7S@|U}HtIl7LzbfZG?By6j!pTAcq zDX!Nw>c7IYwi+Gk)6KZ{7mLq^YT`25YXA1>W`aM{0;S2*0*FV)Wn+?9bIGTzy99rx z1)e!YV_#tENw+#_1-gw~cSB4!6a1MLhz?5MV&ikIPU4e3V4(Q4=HGO~ly~Y}CdQXF zC8nE6@tL+K%1>RLl|R!Pn99RrY#ci^eb(te)5=Xfon4-^d#9WI#wX>NE9Izlzpwss zz94DnFFyJZ*Vd~`eObCMJ2gE~U(WXTif-|yt>*|=7f3#1?cV6;+5Sw6H|<~nt)J$f z(C$rpkgVw|RxYN+i@qb$`nNu5xNG-fAB(Q9JY7?_qpj$;8+rS31| zx$blHKkko}>N8SXa!prVm1ZXRZqH6_Q=>w>mDQoY3S(Z!RB<-D1o)8#W{>Tfh4@yi zSuNJ?V}Am7@;2$8*cs+1j|*qctX8$E30LA{K6nTI+f)$Ka!g_V`9TRW${l0AK)Y_m z)~{BoR#MRhYlJN&Jsr4|m@mby93RcxxeY!C+ZEjNBdykb3tU3);GQ2_38!4=pb;C1 z+qe~<&DL*|cH5W##B^U8%czjlv>oL4T=M%K^_tG_-F^3&laJsraWHSpHK|9~>(rFT znKSZ45`TFK;}OE3oUI$Vn_NG-7S!LXellY9BRLHtjXM7kN<2z>P3b4rOaphC?HyBY z9n@4vT^*kp)tPp8;7Oj)zRdnozfUd`?Najl0d*z$H4Sey?+C`nT0tyrHbqirE0bbS zD#i0D!pNh{ZdI@AINsBjhPPPmCY_(u>Fgaaoe!$AxOC1+(A4=o_`8MbyL+ola>jrgaRY7t$tY z(IdEaE3I7mi@sJV^}3AELfmmJvXM~5)e>y|nyu9L`ofV?87NM_*1@ROO$no2O~Q3! zT+dKOn9@fi_ZV-jCy4L05?jC2P$zo$N%abK`df5pDX~jC3WK-MSG7^EOSCSxV{xv!8-zg?*NZBxc~>zmWqn=rI=QFx_) z#nNy~`!(Y`+FGt|Z)^%JZD^mow7IdZwVmB+CO5V&y}F@&>7~o2jQ6wiQ1fE8c(R++ zTr+;krA6bf9iHy@Pm8h%oZcVmErxcv@rTcLc3+dt5_LF!u4!$d+dGJbeaqOpkPU*C zgxX^_<8Pad+t~E0Dzq#V_J`%~HRBuFXSFPAy)D!>-rvz&+9+FvT{C`hL%2OO{@Q7m t#llYX91B0r#aXdWyDTBC(=Ll;8t>CCbLDw$pfpfgQ88=Ib#--?{69t_^alU{ literal 0 HcmV?d00001 diff --git a/distutils/distutils/command/wininst-9.0.exe b/distutils/distutils/command/wininst-9.0.exe new file mode 100644 index 0000000000000000000000000000000000000000..2ec261f9fdcd034cff9602af0c81fb7953ce2e2b GIT binary patch literal 196096 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

4O*Kp59>M2 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 "2.10.90" and < "2.13" should also be able to use + # gcc -mdll instead of dllwrap + # Older dllwraps had own version numbers, newer ones use the + # same as the rest of binutils ( also ld ) + # dllwrap 2.10.90 is buggy + if self.ld_version >= "2.10.90": + self.linker_dll = "gcc" + else: + self.linker_dll = "dllwrap" + + # ld_version >= "2.13" support -shared so use it instead of + # -mdll -static + if self.ld_version >= "2.13": + shared_option = "-shared" + else: + shared_option = "-mdll -static" + + # Hard-code GCC because that's what this is all about. + # XXX optimization, warnings etc. should be customizable. + self.set_executables(compiler='gcc -mcygwin -O -Wall', + compiler_so='gcc -mcygwin -mdll -O -Wall', + compiler_cxx='g++ -mcygwin -O -Wall', + linker_exe='gcc -mcygwin', + linker_so=('%s -mcygwin %s' % + (self.linker_dll, shared_option))) + + # cygwin and mingw32 need different sets of libraries + if self.gcc_version == "2.91.57": + # cygwin shouldn't need msvcrt, but without the dlls will crash + # (gcc version 2.91.57) -- perhaps something about initialization + self.dll_libraries=["msvcrt"] + self.warn( + "Consider upgrading to a newer version of gcc") + else: + # Include the appropriate MSVC runtime library if Python was built + # with MSVC 7.0 or later. + self.dll_libraries = get_msvcr() + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + """Compiles the source by spawning GCC and windres if needed.""" + if ext == '.rc' or ext == '.res': + # gcc needs '.res' and '.rc' compiled to object files !!! + try: + self.spawn(["windres", "-i", src, "-o", obj]) + except DistutilsExecError as msg: + raise CompileError(msg) + else: # for other files use the C-compiler + try: + self.spawn(self.compiler_so + cc_args + [src, '-o', obj] + + extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + + def link(self, target_desc, objects, output_filename, output_dir=None, + libraries=None, library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None): + """Link the objects.""" + # use separate copies, so we can modify the lists + extra_preargs = copy.copy(extra_preargs or []) + libraries = copy.copy(libraries or []) + objects = copy.copy(objects or []) + + # Additional libraries + libraries.extend(self.dll_libraries) + + # handle export symbols by creating a def-file + # with executables this only works with gcc/ld as linker + if ((export_symbols is not None) and + (target_desc != self.EXECUTABLE or self.linker_dll == "gcc")): + # (The linker doesn't do anything if output is up-to-date. + # So it would probably better to check if we really need this, + # but for this we had to insert some unchanged parts of + # UnixCCompiler, and this is not what we want.) + + # we want to put some files in the same directory as the + # object files are, build_temp doesn't help much + # where are the object files + temp_dir = os.path.dirname(objects[0]) + # name of dll to give the helper files the same base name + (dll_name, dll_extension) = os.path.splitext( + os.path.basename(output_filename)) + + # generate the filenames for these files + def_file = os.path.join(temp_dir, dll_name + ".def") + lib_file = os.path.join(temp_dir, 'lib' + dll_name + ".a") + + # Generate .def file + contents = [ + "LIBRARY %s" % os.path.basename(output_filename), + "EXPORTS"] + for sym in export_symbols: + contents.append(sym) + self.execute(write_file, (def_file, contents), + "writing %s" % def_file) + + # next add options for def-file and to creating import libraries + + # dllwrap uses different options than gcc/ld + if self.linker_dll == "dllwrap": + extra_preargs.extend(["--output-lib", lib_file]) + # for dllwrap we have to use a special option + extra_preargs.extend(["--def", def_file]) + # we use gcc/ld here and can be sure ld is >= 2.9.10 + else: + # doesn't work: bfd_close build\...\libfoo.a: Invalid operation + #extra_preargs.extend(["-Wl,--out-implib,%s" % lib_file]) + # for gcc/ld the def-file is specified as any object files + objects.append(def_file) + + #end: if ((export_symbols is not None) and + # (target_desc != self.EXECUTABLE or self.linker_dll == "gcc")): + + # who wants symbols and a many times larger output file + # should explicitly switch the debug mode on + # otherwise we let dllwrap/ld strip the output file + # (On my machine: 10KB < stripped_file < ??100KB + # unstripped_file = stripped_file + XXX KB + # ( XXX=254 for a typical python extension)) + if not debug: + extra_preargs.append("-s") + + UnixCCompiler.link(self, target_desc, objects, output_filename, + output_dir, libraries, library_dirs, + runtime_library_dirs, + None, # export_symbols, we do this in our def-file + debug, extra_preargs, extra_postargs, build_temp, + target_lang) + + # -- Miscellaneous methods ----------------------------------------- + + def object_filenames(self, source_filenames, strip_dir=0, output_dir=''): + """Adds supports for rc and res files.""" + if output_dir is None: + output_dir = '' + obj_names = [] + for src_name in source_filenames: + # use normcase to make sure '.rc' is really '.rc' and not '.RC' + base, ext = os.path.splitext(os.path.normcase(src_name)) + if ext not in (self.src_extensions + ['.rc','.res']): + raise UnknownFileError("unknown file type '%s' (from '%s')" % \ + (ext, src_name)) + if strip_dir: + base = os.path.basename (base) + if ext in ('.res', '.rc'): + # these need to be compiled to object files + obj_names.append (os.path.join(output_dir, + base + ext + self.obj_extension)) + else: + obj_names.append (os.path.join(output_dir, + base + self.obj_extension)) + return obj_names + +# the same as cygwin plus some additional parameters +class Mingw32CCompiler(CygwinCCompiler): + """ Handles the Mingw32 port of the GNU C compiler to Windows. + """ + compiler_type = 'mingw32' + + def __init__(self, verbose=0, dry_run=0, force=0): + + CygwinCCompiler.__init__ (self, verbose, dry_run, force) + + # ld_version >= "2.13" support -shared so use it instead of + # -mdll -static + if self.ld_version >= "2.13": + shared_option = "-shared" + else: + shared_option = "-mdll -static" + + # A real mingw32 doesn't need to specify a different entry point, + # but cygwin 2.91.57 in no-cygwin-mode needs it. + if self.gcc_version <= "2.91.57": + entry_point = '--entry _DllMain@12' + else: + entry_point = '' + + if is_cygwingcc(): + raise CCompilerError( + 'Cygwin gcc cannot be used with --compiler=mingw32') + + self.set_executables(compiler='gcc -O -Wall', + compiler_so='gcc -mdll -O -Wall', + compiler_cxx='g++ -O -Wall', + linker_exe='gcc', + linker_so='%s %s %s' + % (self.linker_dll, shared_option, + entry_point)) + # Maybe we should also append -mthreads, but then the finished + # dlls need another dll (mingwm10.dll see Mingw32 docs) + # (-mthreads: Support thread-safe exception handling on `Mingw32') + + # no additional libraries needed + self.dll_libraries=[] + + # Include the appropriate MSVC runtime library if Python was built + # with MSVC 7.0 or later. + self.dll_libraries = get_msvcr() + +# Because these compilers aren't configured in Python's pyconfig.h file by +# default, we should at least warn the user if he is using an unmodified +# version. + +CONFIG_H_OK = "ok" +CONFIG_H_NOTOK = "not ok" +CONFIG_H_UNCERTAIN = "uncertain" + +def check_config_h(): + """Check if the current Python installation appears amenable to building + extensions with GCC. + + Returns a tuple (status, details), where 'status' is one of the following + constants: + + - CONFIG_H_OK: all is well, go ahead and compile + - CONFIG_H_NOTOK: doesn't look good + - CONFIG_H_UNCERTAIN: not sure -- unable to read pyconfig.h + + 'details' is a human-readable string explaining the situation. + + Note there are two ways to conclude "OK": either 'sys.version' contains + the string "GCC" (implying that this Python was built with GCC), or the + installed "pyconfig.h" contains the string "__GNUC__". + """ + + # XXX since this function also checks sys.version, it's not strictly a + # "pyconfig.h" check -- should probably be renamed... + + from distutils import sysconfig + + # if sys.version contains GCC then python was compiled with GCC, and the + # pyconfig.h file should be OK + if "GCC" in sys.version: + return CONFIG_H_OK, "sys.version mentions 'GCC'" + + # let's see if __GNUC__ is mentioned in python.h + fn = sysconfig.get_config_h_filename() + try: + config_h = open(fn) + try: + if "__GNUC__" in config_h.read(): + return CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn + else: + return CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn + finally: + config_h.close() + except OSError as exc: + return (CONFIG_H_UNCERTAIN, + "couldn't read '%s': %s" % (fn, exc.strerror)) + +RE_VERSION = re.compile(br'(\d+\.\d+(\.\d+)*)') + +def _find_exe_version(cmd): + """Find the version of an executable by running `cmd` in the shell. + + If the command is not found, or the output does not match + `RE_VERSION`, returns None. + """ + executable = cmd.split()[0] + if find_executable(executable) is None: + return None + out = Popen(cmd, shell=True, stdout=PIPE).stdout + try: + out_string = out.read() + finally: + out.close() + result = RE_VERSION.search(out_string) + if result is None: + return None + # LooseVersion works with strings + # so we need to decode our bytes + return LooseVersion(result.group(1).decode()) + +def get_versions(): + """ Try to find out the versions of gcc, ld and dllwrap. + + If not possible it returns None for it. + """ + commands = ['gcc -dumpversion', 'ld -v', 'dllwrap --version'] + return tuple([_find_exe_version(cmd) for cmd in commands]) + +def is_cygwingcc(): + '''Try to determine if the gcc that would be used is from cygwin.''' + out_string = check_output(['gcc', '-dumpmachine']) + return out_string.strip().endswith(b'cygwin') diff --git a/distutils/distutils/debug.py b/distutils/distutils/debug.py new file mode 100644 index 0000000..daf1660 --- /dev/null +++ b/distutils/distutils/debug.py @@ -0,0 +1,5 @@ +import os + +# If DISTUTILS_DEBUG is anything other than the empty string, we run in +# debug mode. +DEBUG = os.environ.get('DISTUTILS_DEBUG') diff --git a/distutils/distutils/dep_util.py b/distutils/distutils/dep_util.py new file mode 100644 index 0000000..d74f5e4 --- /dev/null +++ b/distutils/distutils/dep_util.py @@ -0,0 +1,92 @@ +"""distutils.dep_util + +Utility functions for simple, timestamp-based dependency of files +and groups of files; also, function based entirely on such +timestamp dependency analysis.""" + +import os +from distutils.errors import DistutilsFileError + + +def newer (source, target): + """Return true if 'source' exists and is more recently modified than + 'target', or if 'source' exists and 'target' doesn't. Return false if + both exist and 'target' is the same age or younger than 'source'. + Raise DistutilsFileError if 'source' does not exist. + """ + if not os.path.exists(source): + raise DistutilsFileError("file '%s' does not exist" % + os.path.abspath(source)) + if not os.path.exists(target): + return 1 + + from stat import ST_MTIME + mtime1 = os.stat(source)[ST_MTIME] + mtime2 = os.stat(target)[ST_MTIME] + + return mtime1 > mtime2 + +# newer () + + +def newer_pairwise (sources, targets): + """Walk two filename lists in parallel, testing if each source is newer + than its corresponding target. Return a pair of lists (sources, + targets) where source is newer than target, according to the semantics + of 'newer()'. + """ + if len(sources) != len(targets): + raise ValueError("'sources' and 'targets' must be same length") + + # build a pair of lists (sources, targets) where source is newer + n_sources = [] + n_targets = [] + for i in range(len(sources)): + if newer(sources[i], targets[i]): + n_sources.append(sources[i]) + n_targets.append(targets[i]) + + return (n_sources, n_targets) + +# newer_pairwise () + + +def newer_group (sources, target, missing='error'): + """Return true if 'target' is out-of-date with respect to any file + listed in 'sources'. In other words, if 'target' exists and is newer + than every file in 'sources', return false; otherwise return true. + 'missing' controls what we do when a source file is missing; the + default ("error") is to blow up with an OSError from inside 'stat()'; + if it is "ignore", we silently drop any missing source files; if it is + "newer", any missing source files make us assume that 'target' is + out-of-date (this is handy in "dry-run" mode: it'll make you pretend to + carry out commands that wouldn't work because inputs are missing, but + that doesn't matter because you're not actually going to run the + commands). + """ + # If the target doesn't even exist, then it's definitely out-of-date. + if not os.path.exists(target): + return 1 + + # Otherwise we have to find out the hard way: if *any* source file + # is more recent than 'target', then 'target' is out-of-date and + # we can immediately return true. If we fall through to the end + # of the loop, then 'target' is up-to-date and we return false. + from stat import ST_MTIME + target_mtime = os.stat(target)[ST_MTIME] + for source in sources: + if not os.path.exists(source): + if missing == 'error': # blow up when we stat() the file + pass + elif missing == 'ignore': # missing source dropped from + continue # target's dependency list + elif missing == 'newer': # missing source means target is + return 1 # out-of-date + + source_mtime = os.stat(source)[ST_MTIME] + if source_mtime > target_mtime: + return 1 + else: + return 0 + +# newer_group () diff --git a/distutils/distutils/dir_util.py b/distutils/distutils/dir_util.py new file mode 100644 index 0000000..d5cd8e3 --- /dev/null +++ b/distutils/distutils/dir_util.py @@ -0,0 +1,210 @@ +"""distutils.dir_util + +Utility functions for manipulating directories and directory trees.""" + +import os +import errno +from distutils.errors import DistutilsFileError, DistutilsInternalError +from distutils import log + +# cache for by mkpath() -- in addition to cheapening redundant calls, +# eliminates redundant "creating /foo/bar/baz" messages in dry-run mode +_path_created = {} + +# I don't use os.makedirs because a) it's new to Python 1.5.2, and +# b) it blows up if the directory already exists (I want to silently +# succeed in that case). +def mkpath(name, mode=0o777, verbose=1, dry_run=0): + """Create a directory and any missing ancestor directories. + + If the directory already exists (or if 'name' is the empty string, which + means the current directory, which of course exists), then do nothing. + Raise DistutilsFileError if unable to create some directory along the way + (eg. some sub-path exists, but is a file rather than a directory). + If 'verbose' is true, print a one-line summary of each mkdir to stdout. + Return the list of directories actually created. + """ + + global _path_created + + # Detect a common bug -- name is None + if not isinstance(name, str): + raise DistutilsInternalError( + "mkpath: 'name' must be a string (got %r)" % (name,)) + + # XXX what's the better way to handle verbosity? print as we create + # each directory in the path (the current behaviour), or only announce + # the creation of the whole path? (quite easy to do the latter since + # we're not using a recursive algorithm) + + name = os.path.normpath(name) + created_dirs = [] + if os.path.isdir(name) or name == '': + return created_dirs + if _path_created.get(os.path.abspath(name)): + return created_dirs + + (head, tail) = os.path.split(name) + tails = [tail] # stack of lone dirs to create + + while head and tail and not os.path.isdir(head): + (head, tail) = os.path.split(head) + tails.insert(0, tail) # push next higher dir onto stack + + # now 'head' contains the deepest directory that already exists + # (that is, the child of 'head' in 'name' is the highest directory + # that does *not* exist) + for d in tails: + #print "head = %s, d = %s: " % (head, d), + head = os.path.join(head, d) + abs_head = os.path.abspath(head) + + if _path_created.get(abs_head): + continue + + if verbose >= 1: + log.info("creating %s", head) + + if not dry_run: + try: + os.mkdir(head, mode) + except OSError as exc: + if not (exc.errno == errno.EEXIST and os.path.isdir(head)): + raise DistutilsFileError( + "could not create '%s': %s" % (head, exc.args[-1])) + created_dirs.append(head) + + _path_created[abs_head] = 1 + return created_dirs + +def create_tree(base_dir, files, mode=0o777, verbose=1, dry_run=0): + """Create all the empty directories under 'base_dir' needed to put 'files' + there. + + 'base_dir' is just the name of a directory which doesn't necessarily + exist yet; 'files' is a list of filenames to be interpreted relative to + 'base_dir'. 'base_dir' + the directory portion of every file in 'files' + will be created if it doesn't already exist. 'mode', 'verbose' and + 'dry_run' flags are as for 'mkpath()'. + """ + # First get the list of directories to create + need_dir = set() + for file in files: + need_dir.add(os.path.join(base_dir, os.path.dirname(file))) + + # Now create them + for dir in sorted(need_dir): + mkpath(dir, mode, verbose=verbose, dry_run=dry_run) + +def copy_tree(src, dst, preserve_mode=1, preserve_times=1, + preserve_symlinks=0, update=0, verbose=1, dry_run=0): + """Copy an entire directory tree 'src' to a new location 'dst'. + + Both 'src' and 'dst' must be directory names. If 'src' is not a + directory, raise DistutilsFileError. If 'dst' does not exist, it is + created with 'mkpath()'. The end result of the copy is that every + file in 'src' is copied to 'dst', and directories under 'src' are + recursively copied to 'dst'. Return the list of files that were + copied or might have been copied, using their output name. The + return value is unaffected by 'update' or 'dry_run': it is simply + the list of all files under 'src', with the names changed to be + under 'dst'. + + 'preserve_mode' and 'preserve_times' are the same as for + 'copy_file'; note that they only apply to regular files, not to + directories. If 'preserve_symlinks' is true, symlinks will be + copied as symlinks (on platforms that support them!); otherwise + (the default), the destination of the symlink will be copied. + 'update' and 'verbose' are the same as for 'copy_file'. + """ + from distutils.file_util import copy_file + + if not dry_run and not os.path.isdir(src): + raise DistutilsFileError( + "cannot copy tree '%s': not a directory" % src) + try: + names = os.listdir(src) + except OSError as e: + if dry_run: + names = [] + else: + raise DistutilsFileError( + "error listing files in '%s': %s" % (src, e.strerror)) + + if not dry_run: + mkpath(dst, verbose=verbose) + + outputs = [] + + for n in names: + src_name = os.path.join(src, n) + dst_name = os.path.join(dst, n) + + if n.startswith('.nfs'): + # skip NFS rename files + continue + + if preserve_symlinks and os.path.islink(src_name): + link_dest = os.readlink(src_name) + if verbose >= 1: + log.info("linking %s -> %s", dst_name, link_dest) + if not dry_run: + os.symlink(link_dest, dst_name) + outputs.append(dst_name) + + elif os.path.isdir(src_name): + outputs.extend( + copy_tree(src_name, dst_name, preserve_mode, + preserve_times, preserve_symlinks, update, + verbose=verbose, dry_run=dry_run)) + else: + copy_file(src_name, dst_name, preserve_mode, + preserve_times, update, verbose=verbose, + dry_run=dry_run) + outputs.append(dst_name) + + return outputs + +def _build_cmdtuple(path, cmdtuples): + """Helper for remove_tree().""" + for f in os.listdir(path): + real_f = os.path.join(path,f) + if os.path.isdir(real_f) and not os.path.islink(real_f): + _build_cmdtuple(real_f, cmdtuples) + else: + cmdtuples.append((os.remove, real_f)) + cmdtuples.append((os.rmdir, path)) + +def remove_tree(directory, verbose=1, dry_run=0): + """Recursively remove an entire directory tree. + + Any errors are ignored (apart from being reported to stdout if 'verbose' + is true). + """ + global _path_created + + if verbose >= 1: + log.info("removing '%s' (and everything under it)", directory) + if dry_run: + return + cmdtuples = [] + _build_cmdtuple(directory, cmdtuples) + for cmd in cmdtuples: + try: + cmd[0](cmd[1]) + # remove dir from cache if it's already there + abspath = os.path.abspath(cmd[1]) + if abspath in _path_created: + del _path_created[abspath] + except OSError as exc: + log.warn("error removing %s: %s", directory, exc) + +def ensure_relative(path): + """Take the full path 'path', and make it a relative path. + + This is useful to make 'path' the second argument to os.path.join(). + """ + drive, path = os.path.splitdrive(path) + if path[0:1] == os.sep: + path = drive + path[1:] + return path diff --git a/distutils/distutils/dist.py b/distutils/distutils/dist.py new file mode 100644 index 0000000..62a2451 --- /dev/null +++ b/distutils/distutils/dist.py @@ -0,0 +1,1236 @@ +"""distutils.dist + +Provides the Distribution class, which represents the module distribution +being built/installed/distributed. +""" + +import sys +import os +import re +from email import message_from_file + +try: + import warnings +except ImportError: + warnings = None + +from distutils.errors import * +from distutils.fancy_getopt import FancyGetopt, translate_longopt +from distutils.util import check_environ, strtobool, rfc822_escape +from distutils import log +from distutils.debug import DEBUG + +# Regex to define acceptable Distutils command names. This is not *quite* +# the same as a Python NAME -- I don't allow leading underscores. The fact +# that they're very similar is no coincidence; the default naming scheme is +# to look for a Python module named after the command. +command_re = re.compile(r'^[a-zA-Z]([a-zA-Z0-9_]*)$') + + +class Distribution: + """The core of the Distutils. Most of the work hiding behind 'setup' + is really done within a Distribution instance, which farms the work out + to the Distutils commands specified on the command line. + + Setup scripts will almost never instantiate Distribution directly, + unless the 'setup()' function is totally inadequate to their needs. + However, it is conceivable that a setup script might wish to subclass + Distribution for some specialized purpose, and then pass the subclass + to 'setup()' as the 'distclass' keyword argument. If so, it is + necessary to respect the expectations that 'setup' has of Distribution. + See the code for 'setup()', in core.py, for details. + """ + + # 'global_options' describes the command-line options that may be + # supplied to the setup script prior to any actual commands. + # Eg. "./setup.py -n" or "./setup.py --quiet" both take advantage of + # these global options. This list should be kept to a bare minimum, + # since every global option is also valid as a command option -- and we + # don't want to pollute the commands with too many options that they + # have minimal control over. + # The fourth entry for verbose means that it can be repeated. + global_options = [ + ('verbose', 'v', "run verbosely (default)", 1), + ('quiet', 'q', "run quietly (turns verbosity off)"), + ('dry-run', 'n', "don't actually do anything"), + ('help', 'h', "show detailed help message"), + ('no-user-cfg', None, + 'ignore pydistutils.cfg in your home directory'), + ] + + # 'common_usage' is a short (2-3 line) string describing the common + # usage of the setup script. + common_usage = """\ +Common commands: (see '--help-commands' for more) + + setup.py build will build the package underneath 'build/' + setup.py install will install the package +""" + + # options that are not propagated to the commands + display_options = [ + ('help-commands', None, + "list all available commands"), + ('name', None, + "print package name"), + ('version', 'V', + "print package version"), + ('fullname', None, + "print -"), + ('author', None, + "print the author's name"), + ('author-email', None, + "print the author's email address"), + ('maintainer', None, + "print the maintainer's name"), + ('maintainer-email', None, + "print the maintainer's email address"), + ('contact', None, + "print the maintainer's name if known, else the author's"), + ('contact-email', None, + "print the maintainer's email address if known, else the author's"), + ('url', None, + "print the URL for this package"), + ('license', None, + "print the license of the package"), + ('licence', None, + "alias for --license"), + ('description', None, + "print the package description"), + ('long-description', None, + "print the long package description"), + ('platforms', None, + "print the list of platforms"), + ('classifiers', None, + "print the list of classifiers"), + ('keywords', None, + "print the list of keywords"), + ('provides', None, + "print the list of packages/modules provided"), + ('requires', None, + "print the list of packages/modules required"), + ('obsoletes', None, + "print the list of packages/modules made obsolete") + ] + display_option_names = [translate_longopt(x[0]) for x in display_options] + + # negative options are options that exclude other options + negative_opt = {'quiet': 'verbose'} + + # -- Creation/initialization methods ------------------------------- + + def __init__(self, attrs=None): + """Construct a new Distribution instance: initialize all the + attributes of a Distribution, and then use 'attrs' (a dictionary + mapping attribute names to values) to assign some of those + attributes their "real" values. (Any attributes not mentioned in + 'attrs' will be assigned to some null value: 0, None, an empty list + or dictionary, etc.) Most importantly, initialize the + 'command_obj' attribute to the empty dictionary; this will be + filled in with real command objects by 'parse_command_line()'. + """ + + # Default values for our command-line options + self.verbose = 1 + self.dry_run = 0 + self.help = 0 + for attr in self.display_option_names: + setattr(self, attr, 0) + + # Store the distribution meta-data (name, version, author, and so + # forth) in a separate object -- we're getting to have enough + # information here (and enough command-line options) that it's + # worth it. Also delegate 'get_XXX()' methods to the 'metadata' + # object in a sneaky and underhanded (but efficient!) way. + self.metadata = DistributionMetadata() + for basename in self.metadata._METHOD_BASENAMES: + method_name = "get_" + basename + setattr(self, method_name, getattr(self.metadata, method_name)) + + # 'cmdclass' maps command names to class objects, so we + # can 1) quickly figure out which class to instantiate when + # we need to create a new command object, and 2) have a way + # for the setup script to override command classes + self.cmdclass = {} + + # 'command_packages' is a list of packages in which commands + # are searched for. The factory for command 'foo' is expected + # to be named 'foo' in the module 'foo' in one of the packages + # named here. This list is searched from the left; an error + # is raised if no named package provides the command being + # searched for. (Always access using get_command_packages().) + self.command_packages = None + + # 'script_name' and 'script_args' are usually set to sys.argv[0] + # and sys.argv[1:], but they can be overridden when the caller is + # not necessarily a setup script run from the command-line. + self.script_name = None + self.script_args = None + + # 'command_options' is where we store command options between + # parsing them (from config files, the command-line, etc.) and when + # they are actually needed -- ie. when the command in question is + # instantiated. It is a dictionary of dictionaries of 2-tuples: + # command_options = { command_name : { option : (source, value) } } + self.command_options = {} + + # 'dist_files' is the list of (command, pyversion, file) that + # have been created by any dist commands run so far. This is + # filled regardless of whether the run is dry or not. pyversion + # gives sysconfig.get_python_version() if the dist file is + # specific to a Python version, 'any' if it is good for all + # Python versions on the target platform, and '' for a source + # file. pyversion should not be used to specify minimum or + # maximum required Python versions; use the metainfo for that + # instead. + self.dist_files = [] + + # These options are really the business of various commands, rather + # than of the Distribution itself. We provide aliases for them in + # Distribution as a convenience to the developer. + self.packages = None + self.package_data = {} + self.package_dir = None + self.py_modules = None + self.libraries = None + self.headers = None + self.ext_modules = None + self.ext_package = None + self.include_dirs = None + self.extra_path = None + self.scripts = None + self.data_files = None + self.password = '' + + # And now initialize bookkeeping stuff that can't be supplied by + # the caller at all. 'command_obj' maps command names to + # Command instances -- that's how we enforce that every command + # class is a singleton. + self.command_obj = {} + + # 'have_run' maps command names to boolean values; it keeps track + # of whether we have actually run a particular command, to make it + # cheap to "run" a command whenever we think we might need to -- if + # it's already been done, no need for expensive filesystem + # operations, we just check the 'have_run' dictionary and carry on. + # It's only safe to query 'have_run' for a command class that has + # been instantiated -- a false value will be inserted when the + # command object is created, and replaced with a true value when + # the command is successfully run. Thus it's probably best to use + # '.get()' rather than a straight lookup. + self.have_run = {} + + # Now we'll use the attrs dictionary (ultimately, keyword args from + # the setup script) to possibly override any or all of these + # distribution options. + + if attrs: + # Pull out the set of command options and work on them + # specifically. Note that this order guarantees that aliased + # command options will override any supplied redundantly + # through the general options dictionary. + options = attrs.get('options') + if options is not None: + del attrs['options'] + for (command, cmd_options) in options.items(): + opt_dict = self.get_option_dict(command) + for (opt, val) in cmd_options.items(): + opt_dict[opt] = ("setup script", val) + + if 'licence' in attrs: + attrs['license'] = attrs['licence'] + del attrs['licence'] + msg = "'licence' distribution option is deprecated; use 'license'" + if warnings is not None: + warnings.warn(msg) + else: + sys.stderr.write(msg + "\n") + + # Now work on the rest of the attributes. Any attribute that's + # not already defined is invalid! + for (key, val) in attrs.items(): + if hasattr(self.metadata, "set_" + key): + getattr(self.metadata, "set_" + key)(val) + elif hasattr(self.metadata, key): + setattr(self.metadata, key, val) + elif hasattr(self, key): + setattr(self, key, val) + else: + msg = "Unknown distribution option: %s" % repr(key) + if warnings is not None: + warnings.warn(msg) + else: + sys.stderr.write(msg + "\n") + + # no-user-cfg is handled before other command line args + # because other args override the config files, and this + # one is needed before we can load the config files. + # If attrs['script_args'] wasn't passed, assume false. + # + # This also make sure we just look at the global options + self.want_user_cfg = True + + if self.script_args is not None: + for arg in self.script_args: + if not arg.startswith('-'): + break + if arg == '--no-user-cfg': + self.want_user_cfg = False + break + + self.finalize_options() + + def get_option_dict(self, command): + """Get the option dictionary for a given command. If that + command's option dictionary hasn't been created yet, then create it + and return the new dictionary; otherwise, return the existing + option dictionary. + """ + dict = self.command_options.get(command) + if dict is None: + dict = self.command_options[command] = {} + return dict + + def dump_option_dicts(self, header=None, commands=None, indent=""): + from pprint import pformat + + if commands is None: # dump all command option dicts + commands = sorted(self.command_options.keys()) + + if header is not None: + self.announce(indent + header) + indent = indent + " " + + if not commands: + self.announce(indent + "no commands known yet") + return + + for cmd_name in commands: + opt_dict = self.command_options.get(cmd_name) + if opt_dict is None: + self.announce(indent + + "no option dict for '%s' command" % cmd_name) + else: + self.announce(indent + + "option dict for '%s' command:" % cmd_name) + out = pformat(opt_dict) + for line in out.split('\n'): + self.announce(indent + " " + line) + + # -- Config file finding/parsing methods --------------------------- + + def find_config_files(self): + """Find as many configuration files as should be processed for this + platform, and return a list of filenames in the order in which they + should be parsed. The filenames returned are guaranteed to exist + (modulo nasty race conditions). + + There are three possible config files: distutils.cfg in the + Distutils installation directory (ie. where the top-level + Distutils __inst__.py file lives), a file in the user's home + directory named .pydistutils.cfg on Unix and pydistutils.cfg + on Windows/Mac; and setup.cfg in the current directory. + + The file in the user's home directory can be disabled with the + --no-user-cfg option. + """ + files = [] + check_environ() + + # Where to look for the system-wide Distutils config file + sys_dir = os.path.dirname(sys.modules['distutils'].__file__) + + # Look for the system config file + sys_file = os.path.join(sys_dir, "distutils.cfg") + if os.path.isfile(sys_file): + files.append(sys_file) + + # What to call the per-user config file + if os.name == 'posix': + user_filename = ".pydistutils.cfg" + else: + user_filename = "pydistutils.cfg" + + # And look for the user config file + if self.want_user_cfg: + user_file = os.path.join(os.path.expanduser('~'), user_filename) + if os.path.isfile(user_file): + files.append(user_file) + + # All platforms support local setup.cfg + local_file = "setup.cfg" + if os.path.isfile(local_file): + files.append(local_file) + + if DEBUG: + self.announce("using config files: %s" % ', '.join(files)) + + return files + + def parse_config_files(self, filenames=None): + from configparser import ConfigParser + + # Ignore install directory options if we have a venv + if sys.prefix != sys.base_prefix: + ignore_options = [ + 'install-base', 'install-platbase', 'install-lib', + 'install-platlib', 'install-purelib', 'install-headers', + 'install-scripts', 'install-data', 'prefix', 'exec-prefix', + 'home', 'user', 'root'] + else: + ignore_options = [] + + ignore_options = frozenset(ignore_options) + + if filenames is None: + filenames = self.find_config_files() + + if DEBUG: + self.announce("Distribution.parse_config_files():") + + parser = ConfigParser() + for filename in filenames: + if DEBUG: + self.announce(" reading %s" % filename) + parser.read(filename) + for section in parser.sections(): + options = parser.options(section) + opt_dict = self.get_option_dict(section) + + for opt in options: + if opt != '__name__' and opt not in ignore_options: + val = parser.get(section,opt) + opt = opt.replace('-', '_') + opt_dict[opt] = (filename, val) + + # Make the ConfigParser forget everything (so we retain + # the original filenames that options come from) + parser.__init__() + + # If there was a "global" section in the config file, use it + # to set Distribution options. + + if 'global' in self.command_options: + for (opt, (src, val)) in self.command_options['global'].items(): + alias = self.negative_opt.get(opt) + try: + if alias: + setattr(self, alias, not strtobool(val)) + elif opt in ('verbose', 'dry_run'): # ugh! + setattr(self, opt, strtobool(val)) + else: + setattr(self, opt, val) + except ValueError as msg: + raise DistutilsOptionError(msg) + + # -- Command-line parsing methods ---------------------------------- + + def parse_command_line(self): + """Parse the setup script's command line, taken from the + 'script_args' instance attribute (which defaults to 'sys.argv[1:]' + -- see 'setup()' in core.py). This list is first processed for + "global options" -- options that set attributes of the Distribution + instance. Then, it is alternately scanned for Distutils commands + and options for that command. Each new command terminates the + options for the previous command. The allowed options for a + command are determined by the 'user_options' attribute of the + command class -- thus, we have to be able to load command classes + in order to parse the command line. Any error in that 'options' + attribute raises DistutilsGetoptError; any error on the + command-line raises DistutilsArgError. If no Distutils commands + were found on the command line, raises DistutilsArgError. Return + true if command-line was successfully parsed and we should carry + on with executing commands; false if no errors but we shouldn't + execute commands (currently, this only happens if user asks for + help). + """ + # + # We now have enough information to show the Macintosh dialog + # that allows the user to interactively specify the "command line". + # + toplevel_options = self._get_toplevel_options() + + # We have to parse the command line a bit at a time -- global + # options, then the first command, then its options, and so on -- + # because each command will be handled by a different class, and + # the options that are valid for a particular class aren't known + # until we have loaded the command class, which doesn't happen + # until we know what the command is. + + self.commands = [] + parser = FancyGetopt(toplevel_options + self.display_options) + parser.set_negative_aliases(self.negative_opt) + parser.set_aliases({'licence': 'license'}) + args = parser.getopt(args=self.script_args, object=self) + option_order = parser.get_option_order() + log.set_verbosity(self.verbose) + + # for display options we return immediately + if self.handle_display_options(option_order): + return + while args: + args = self._parse_command_opts(parser, args) + if args is None: # user asked for help (and got it) + return + + # Handle the cases of --help as a "global" option, ie. + # "setup.py --help" and "setup.py --help command ...". For the + # former, we show global options (--verbose, --dry-run, etc.) + # and display-only options (--name, --version, etc.); for the + # latter, we omit the display-only options and show help for + # each command listed on the command line. + if self.help: + self._show_help(parser, + display_options=len(self.commands) == 0, + commands=self.commands) + return + + # Oops, no commands found -- an end-user error + if not self.commands: + raise DistutilsArgError("no commands supplied") + + # All is well: return true + return True + + def _get_toplevel_options(self): + """Return the non-display options recognized at the top level. + + This includes options that are recognized *only* at the top + level as well as options recognized for commands. + """ + return self.global_options + [ + ("command-packages=", None, + "list of packages that provide distutils commands"), + ] + + def _parse_command_opts(self, parser, args): + """Parse the command-line options for a single command. + 'parser' must be a FancyGetopt instance; 'args' must be the list + of arguments, starting with the current command (whose options + we are about to parse). Returns a new version of 'args' with + the next command at the front of the list; will be the empty + list if there are no more commands on the command line. Returns + None if the user asked for help on this command. + """ + # late import because of mutual dependence between these modules + from distutils.cmd import Command + + # Pull the current command from the head of the command line + command = args[0] + if not command_re.match(command): + raise SystemExit("invalid command name '%s'" % command) + self.commands.append(command) + + # Dig up the command class that implements this command, so we + # 1) know that it's a valid command, and 2) know which options + # it takes. + try: + cmd_class = self.get_command_class(command) + except DistutilsModuleError as msg: + raise DistutilsArgError(msg) + + # Require that the command class be derived from Command -- want + # to be sure that the basic "command" interface is implemented. + if not issubclass(cmd_class, Command): + raise DistutilsClassError( + "command class %s must subclass Command" % cmd_class) + + # Also make sure that the command object provides a list of its + # known options. + if not (hasattr(cmd_class, 'user_options') and + isinstance(cmd_class.user_options, list)): + msg = ("command class %s must provide " + "'user_options' attribute (a list of tuples)") + raise DistutilsClassError(msg % cmd_class) + + # If the command class has a list of negative alias options, + # merge it in with the global negative aliases. + negative_opt = self.negative_opt + if hasattr(cmd_class, 'negative_opt'): + negative_opt = negative_opt.copy() + negative_opt.update(cmd_class.negative_opt) + + # Check for help_options in command class. They have a different + # format (tuple of four) so we need to preprocess them here. + if (hasattr(cmd_class, 'help_options') and + isinstance(cmd_class.help_options, list)): + help_options = fix_help_options(cmd_class.help_options) + else: + help_options = [] + + # All commands support the global options too, just by adding + # in 'global_options'. + parser.set_option_table(self.global_options + + cmd_class.user_options + + help_options) + parser.set_negative_aliases(negative_opt) + (args, opts) = parser.getopt(args[1:]) + if hasattr(opts, 'help') and opts.help: + self._show_help(parser, display_options=0, commands=[cmd_class]) + return + + if (hasattr(cmd_class, 'help_options') and + isinstance(cmd_class.help_options, list)): + help_option_found=0 + for (help_option, short, desc, func) in cmd_class.help_options: + if hasattr(opts, parser.get_attr_name(help_option)): + help_option_found=1 + if callable(func): + func() + else: + raise DistutilsClassError( + "invalid help function %r for help option '%s': " + "must be a callable object (function, etc.)" + % (func, help_option)) + + if help_option_found: + return + + # Put the options from the command-line into their official + # holding pen, the 'command_options' dictionary. + opt_dict = self.get_option_dict(command) + for (name, value) in vars(opts).items(): + opt_dict[name] = ("command line", value) + + return args + + def finalize_options(self): + """Set final values for all the options on the Distribution + instance, analogous to the .finalize_options() method of Command + objects. + """ + for attr in ('keywords', 'platforms'): + value = getattr(self.metadata, attr) + if value is None: + continue + if isinstance(value, str): + value = [elm.strip() for elm in value.split(',')] + setattr(self.metadata, attr, value) + + def _show_help(self, parser, global_options=1, display_options=1, + commands=[]): + """Show help for the setup script command-line in the form of + several lists of command-line options. 'parser' should be a + FancyGetopt instance; do not expect it to be returned in the + same state, as its option table will be reset to make it + generate the correct help text. + + If 'global_options' is true, lists the global options: + --verbose, --dry-run, etc. If 'display_options' is true, lists + the "display-only" options: --name, --version, etc. Finally, + lists per-command help for every command name or command class + in 'commands'. + """ + # late import because of mutual dependence between these modules + from distutils.core import gen_usage + from distutils.cmd import Command + + if global_options: + if display_options: + options = self._get_toplevel_options() + else: + options = self.global_options + parser.set_option_table(options) + parser.print_help(self.common_usage + "\nGlobal options:") + print('') + + if display_options: + parser.set_option_table(self.display_options) + parser.print_help( + "Information display options (just display " + + "information, ignore any commands)") + print('') + + for command in self.commands: + if isinstance(command, type) and issubclass(command, Command): + klass = command + else: + klass = self.get_command_class(command) + if (hasattr(klass, 'help_options') and + isinstance(klass.help_options, list)): + parser.set_option_table(klass.user_options + + fix_help_options(klass.help_options)) + else: + parser.set_option_table(klass.user_options) + parser.print_help("Options for '%s' command:" % klass.__name__) + print('') + + print(gen_usage(self.script_name)) + + def handle_display_options(self, option_order): + """If there were any non-global "display-only" options + (--help-commands or the metadata display options) on the command + line, display the requested info and return true; else return + false. + """ + from distutils.core import gen_usage + + # User just wants a list of commands -- we'll print it out and stop + # processing now (ie. if they ran "setup --help-commands foo bar", + # we ignore "foo bar"). + if self.help_commands: + self.print_commands() + print('') + print(gen_usage(self.script_name)) + return 1 + + # If user supplied any of the "display metadata" options, then + # display that metadata in the order in which the user supplied the + # metadata options. + any_display_options = 0 + is_display_option = {} + for option in self.display_options: + is_display_option[option[0]] = 1 + + for (opt, val) in option_order: + if val and is_display_option.get(opt): + opt = translate_longopt(opt) + value = getattr(self.metadata, "get_"+opt)() + if opt in ['keywords', 'platforms']: + print(','.join(value)) + elif opt in ('classifiers', 'provides', 'requires', + 'obsoletes'): + print('\n'.join(value)) + else: + print(value) + any_display_options = 1 + + return any_display_options + + def print_command_list(self, commands, header, max_length): + """Print a subset of the list of all commands -- used by + 'print_commands()'. + """ + print(header + ":") + + for cmd in commands: + klass = self.cmdclass.get(cmd) + if not klass: + klass = self.get_command_class(cmd) + try: + description = klass.description + except AttributeError: + description = "(no description available)" + + print(" %-*s %s" % (max_length, cmd, description)) + + def print_commands(self): + """Print out a help message listing all available commands with a + description of each. The list is divided into "standard commands" + (listed in distutils.command.__all__) and "extra commands" + (mentioned in self.cmdclass, but not a standard command). The + descriptions come from the command class attribute + 'description'. + """ + import distutils.command + std_commands = distutils.command.__all__ + is_std = {} + for cmd in std_commands: + is_std[cmd] = 1 + + extra_commands = [] + for cmd in self.cmdclass.keys(): + if not is_std.get(cmd): + extra_commands.append(cmd) + + max_length = 0 + for cmd in (std_commands + extra_commands): + if len(cmd) > max_length: + max_length = len(cmd) + + self.print_command_list(std_commands, + "Standard commands", + max_length) + if extra_commands: + print() + self.print_command_list(extra_commands, + "Extra commands", + max_length) + + def get_command_list(self): + """Get a list of (command, description) tuples. + The list is divided into "standard commands" (listed in + distutils.command.__all__) and "extra commands" (mentioned in + self.cmdclass, but not a standard command). The descriptions come + from the command class attribute 'description'. + """ + # Currently this is only used on Mac OS, for the Mac-only GUI + # Distutils interface (by Jack Jansen) + import distutils.command + std_commands = distutils.command.__all__ + is_std = {} + for cmd in std_commands: + is_std[cmd] = 1 + + extra_commands = [] + for cmd in self.cmdclass.keys(): + if not is_std.get(cmd): + extra_commands.append(cmd) + + rv = [] + for cmd in (std_commands + extra_commands): + klass = self.cmdclass.get(cmd) + if not klass: + klass = self.get_command_class(cmd) + try: + description = klass.description + except AttributeError: + description = "(no description available)" + rv.append((cmd, description)) + return rv + + # -- Command class/object methods ---------------------------------- + + def get_command_packages(self): + """Return a list of packages from which commands are loaded.""" + pkgs = self.command_packages + if not isinstance(pkgs, list): + if pkgs is None: + pkgs = '' + pkgs = [pkg.strip() for pkg in pkgs.split(',') if pkg != ''] + if "distutils.command" not in pkgs: + pkgs.insert(0, "distutils.command") + self.command_packages = pkgs + return pkgs + + def get_command_class(self, command): + """Return the class that implements the Distutils command named by + 'command'. First we check the 'cmdclass' dictionary; if the + command is mentioned there, we fetch the class object from the + dictionary and return it. Otherwise we load the command module + ("distutils.command." + command) and fetch the command class from + the module. The loaded class is also stored in 'cmdclass' + to speed future calls to 'get_command_class()'. + + Raises DistutilsModuleError if the expected module could not be + found, or if that module does not define the expected class. + """ + klass = self.cmdclass.get(command) + if klass: + return klass + + for pkgname in self.get_command_packages(): + module_name = "%s.%s" % (pkgname, command) + klass_name = command + + try: + __import__(module_name) + module = sys.modules[module_name] + except ImportError: + continue + + try: + klass = getattr(module, klass_name) + except AttributeError: + raise DistutilsModuleError( + "invalid command '%s' (no class '%s' in module '%s')" + % (command, klass_name, module_name)) + + self.cmdclass[command] = klass + return klass + + raise DistutilsModuleError("invalid command '%s'" % command) + + def get_command_obj(self, command, create=1): + """Return the command object for 'command'. Normally this object + is cached on a previous call to 'get_command_obj()'; if no command + object for 'command' is in the cache, then we either create and + return it (if 'create' is true) or return None. + """ + cmd_obj = self.command_obj.get(command) + if not cmd_obj and create: + if DEBUG: + self.announce("Distribution.get_command_obj(): " + "creating '%s' command object" % command) + + klass = self.get_command_class(command) + cmd_obj = self.command_obj[command] = klass(self) + self.have_run[command] = 0 + + # Set any options that were supplied in config files + # or on the command line. (NB. support for error + # reporting is lame here: any errors aren't reported + # until 'finalize_options()' is called, which means + # we won't report the source of the error.) + options = self.command_options.get(command) + if options: + self._set_command_options(cmd_obj, options) + + return cmd_obj + + def _set_command_options(self, command_obj, option_dict=None): + """Set the options for 'command_obj' from 'option_dict'. Basically + this means copying elements of a dictionary ('option_dict') to + attributes of an instance ('command'). + + 'command_obj' must be a Command instance. If 'option_dict' is not + supplied, uses the standard option dictionary for this command + (from 'self.command_options'). + """ + command_name = command_obj.get_command_name() + if option_dict is None: + option_dict = self.get_option_dict(command_name) + + if DEBUG: + self.announce(" setting options for '%s' command:" % command_name) + for (option, (source, value)) in option_dict.items(): + if DEBUG: + self.announce(" %s = %s (from %s)" % (option, value, + source)) + try: + bool_opts = [translate_longopt(o) + for o in command_obj.boolean_options] + except AttributeError: + bool_opts = [] + try: + neg_opt = command_obj.negative_opt + except AttributeError: + neg_opt = {} + + try: + is_string = isinstance(value, str) + if option in neg_opt and is_string: + setattr(command_obj, neg_opt[option], not strtobool(value)) + elif option in bool_opts and is_string: + setattr(command_obj, option, strtobool(value)) + elif hasattr(command_obj, option): + setattr(command_obj, option, value) + else: + raise DistutilsOptionError( + "error in %s: command '%s' has no such option '%s'" + % (source, command_name, option)) + except ValueError as msg: + raise DistutilsOptionError(msg) + + def reinitialize_command(self, command, reinit_subcommands=0): + """Reinitializes a command to the state it was in when first + returned by 'get_command_obj()': ie., initialized but not yet + finalized. This provides the opportunity to sneak option + values in programmatically, overriding or supplementing + user-supplied values from the config files and command line. + You'll have to re-finalize the command object (by calling + 'finalize_options()' or 'ensure_finalized()') before using it for + real. + + 'command' should be a command name (string) or command object. If + 'reinit_subcommands' is true, also reinitializes the command's + sub-commands, as declared by the 'sub_commands' class attribute (if + it has one). See the "install" command for an example. Only + reinitializes the sub-commands that actually matter, ie. those + whose test predicates return true. + + Returns the reinitialized command object. + """ + from distutils.cmd import Command + if not isinstance(command, Command): + command_name = command + command = self.get_command_obj(command_name) + else: + command_name = command.get_command_name() + + if not command.finalized: + return command + command.initialize_options() + command.finalized = 0 + self.have_run[command_name] = 0 + self._set_command_options(command) + + if reinit_subcommands: + for sub in command.get_sub_commands(): + self.reinitialize_command(sub, reinit_subcommands) + + return command + + # -- Methods that operate on the Distribution ---------------------- + + def announce(self, msg, level=log.INFO): + log.log(level, msg) + + def run_commands(self): + """Run each command that was seen on the setup script command line. + Uses the list of commands found and cache of command objects + created by 'get_command_obj()'. + """ + for cmd in self.commands: + self.run_command(cmd) + + # -- Methods that operate on its Commands -------------------------- + + def run_command(self, command): + """Do whatever it takes to run a command (including nothing at all, + if the command has already been run). Specifically: if we have + already created and run the command named by 'command', return + silently without doing anything. If the command named by 'command' + doesn't even have a command object yet, create one. Then invoke + 'run()' on that command object (or an existing one). + """ + # Already been here, done that? then return silently. + if self.have_run.get(command): + return + + log.info("running %s", command) + cmd_obj = self.get_command_obj(command) + cmd_obj.ensure_finalized() + cmd_obj.run() + self.have_run[command] = 1 + + # -- Distribution query methods ------------------------------------ + + def has_pure_modules(self): + return len(self.packages or self.py_modules or []) > 0 + + def has_ext_modules(self): + return self.ext_modules and len(self.ext_modules) > 0 + + def has_c_libraries(self): + return self.libraries and len(self.libraries) > 0 + + def has_modules(self): + return self.has_pure_modules() or self.has_ext_modules() + + def has_headers(self): + return self.headers and len(self.headers) > 0 + + def has_scripts(self): + return self.scripts and len(self.scripts) > 0 + + def has_data_files(self): + return self.data_files and len(self.data_files) > 0 + + def is_pure(self): + return (self.has_pure_modules() and + not self.has_ext_modules() and + not self.has_c_libraries()) + + # -- Metadata query methods ---------------------------------------- + + # If you're looking for 'get_name()', 'get_version()', and so forth, + # they are defined in a sneaky way: the constructor binds self.get_XXX + # to self.metadata.get_XXX. The actual code is in the + # DistributionMetadata class, below. + +class DistributionMetadata: + """Dummy class to hold the distribution meta-data: name, version, + author, and so forth. + """ + + _METHOD_BASENAMES = ("name", "version", "author", "author_email", + "maintainer", "maintainer_email", "url", + "license", "description", "long_description", + "keywords", "platforms", "fullname", "contact", + "contact_email", "classifiers", "download_url", + # PEP 314 + "provides", "requires", "obsoletes", + ) + + def __init__(self, path=None): + if path is not None: + self.read_pkg_file(open(path)) + else: + self.name = None + self.version = None + self.author = None + self.author_email = None + self.maintainer = None + self.maintainer_email = None + self.url = None + self.license = None + self.description = None + self.long_description = None + self.keywords = None + self.platforms = None + self.classifiers = None + self.download_url = None + # PEP 314 + self.provides = None + self.requires = None + self.obsoletes = None + + def read_pkg_file(self, file): + """Reads the metadata values from a file object.""" + msg = message_from_file(file) + + def _read_field(name): + value = msg[name] + if value == 'UNKNOWN': + return None + return value + + def _read_list(name): + values = msg.get_all(name, None) + if values == []: + return None + return values + + metadata_version = msg['metadata-version'] + self.name = _read_field('name') + self.version = _read_field('version') + self.description = _read_field('summary') + # we are filling author only. + self.author = _read_field('author') + self.maintainer = None + self.author_email = _read_field('author-email') + self.maintainer_email = None + self.url = _read_field('home-page') + self.license = _read_field('license') + + if 'download-url' in msg: + self.download_url = _read_field('download-url') + else: + self.download_url = None + + self.long_description = _read_field('description') + self.description = _read_field('summary') + + if 'keywords' in msg: + self.keywords = _read_field('keywords').split(',') + + self.platforms = _read_list('platform') + self.classifiers = _read_list('classifier') + + # PEP 314 - these fields only exist in 1.1 + if metadata_version == '1.1': + self.requires = _read_list('requires') + self.provides = _read_list('provides') + self.obsoletes = _read_list('obsoletes') + else: + self.requires = None + self.provides = None + self.obsoletes = None + + def write_pkg_info(self, base_dir): + """Write the PKG-INFO file into the release tree. + """ + with open(os.path.join(base_dir, 'PKG-INFO'), 'w', + encoding='UTF-8') as pkg_info: + self.write_pkg_file(pkg_info) + + def write_pkg_file(self, file): + """Write the PKG-INFO format data to a file object. + """ + version = '1.0' + if (self.provides or self.requires or self.obsoletes or + self.classifiers or self.download_url): + version = '1.1' + + file.write('Metadata-Version: %s\n' % version) + file.write('Name: %s\n' % self.get_name()) + file.write('Version: %s\n' % self.get_version()) + file.write('Summary: %s\n' % self.get_description()) + file.write('Home-page: %s\n' % self.get_url()) + file.write('Author: %s\n' % self.get_contact()) + file.write('Author-email: %s\n' % self.get_contact_email()) + file.write('License: %s\n' % self.get_license()) + if self.download_url: + file.write('Download-URL: %s\n' % self.download_url) + + long_desc = rfc822_escape(self.get_long_description()) + file.write('Description: %s\n' % long_desc) + + keywords = ','.join(self.get_keywords()) + if keywords: + file.write('Keywords: %s\n' % keywords) + + self._write_list(file, 'Platform', self.get_platforms()) + self._write_list(file, 'Classifier', self.get_classifiers()) + + # PEP 314 + self._write_list(file, 'Requires', self.get_requires()) + self._write_list(file, 'Provides', self.get_provides()) + self._write_list(file, 'Obsoletes', self.get_obsoletes()) + + def _write_list(self, file, name, values): + for value in values: + file.write('%s: %s\n' % (name, value)) + + # -- Metadata query methods ---------------------------------------- + + def get_name(self): + return self.name or "UNKNOWN" + + def get_version(self): + return self.version or "0.0.0" + + def get_fullname(self): + return "%s-%s" % (self.get_name(), self.get_version()) + + def get_author(self): + return self.author or "UNKNOWN" + + def get_author_email(self): + return self.author_email or "UNKNOWN" + + def get_maintainer(self): + return self.maintainer or "UNKNOWN" + + def get_maintainer_email(self): + return self.maintainer_email or "UNKNOWN" + + def get_contact(self): + return self.maintainer or self.author or "UNKNOWN" + + def get_contact_email(self): + return self.maintainer_email or self.author_email or "UNKNOWN" + + def get_url(self): + return self.url or "UNKNOWN" + + def get_license(self): + return self.license or "UNKNOWN" + get_licence = get_license + + def get_description(self): + return self.description or "UNKNOWN" + + def get_long_description(self): + return self.long_description or "UNKNOWN" + + def get_keywords(self): + return self.keywords or [] + + def get_platforms(self): + return self.platforms or ["UNKNOWN"] + + def get_classifiers(self): + return self.classifiers or [] + + def get_download_url(self): + return self.download_url or "UNKNOWN" + + # PEP 314 + def get_requires(self): + return self.requires or [] + + def set_requires(self, value): + import distutils.versionpredicate + for v in value: + distutils.versionpredicate.VersionPredicate(v) + self.requires = value + + def get_provides(self): + return self.provides or [] + + def set_provides(self, value): + value = [v.strip() for v in value] + for v in value: + import distutils.versionpredicate + distutils.versionpredicate.split_provision(v) + self.provides = value + + def get_obsoletes(self): + return self.obsoletes or [] + + def set_obsoletes(self, value): + import distutils.versionpredicate + for v in value: + distutils.versionpredicate.VersionPredicate(v) + self.obsoletes = value + +def fix_help_options(options): + """Convert a 4-tuple 'help_options' list as found in various command + classes to the 3-tuple form required by FancyGetopt. + """ + new_options = [] + for help_tuple in options: + new_options.append(help_tuple[0:3]) + return new_options diff --git a/distutils/distutils/errors.py b/distutils/distutils/errors.py new file mode 100644 index 0000000..8b93059 --- /dev/null +++ b/distutils/distutils/errors.py @@ -0,0 +1,97 @@ +"""distutils.errors + +Provides exceptions used by the Distutils modules. Note that Distutils +modules may raise standard exceptions; in particular, SystemExit is +usually raised for errors that are obviously the end-user's fault +(eg. bad command-line arguments). + +This module is safe to use in "from ... import *" mode; it only exports +symbols whose names start with "Distutils" and end with "Error".""" + +class DistutilsError (Exception): + """The root of all Distutils evil.""" + pass + +class DistutilsModuleError (DistutilsError): + """Unable to load an expected module, or to find an expected class + within some module (in particular, command modules and classes).""" + pass + +class DistutilsClassError (DistutilsError): + """Some command class (or possibly distribution class, if anyone + feels a need to subclass Distribution) is found not to be holding + up its end of the bargain, ie. implementing some part of the + "command "interface.""" + pass + +class DistutilsGetoptError (DistutilsError): + """The option table provided to 'fancy_getopt()' is bogus.""" + pass + +class DistutilsArgError (DistutilsError): + """Raised by fancy_getopt in response to getopt.error -- ie. an + error in the command line usage.""" + pass + +class DistutilsFileError (DistutilsError): + """Any problems in the filesystem: expected file not found, etc. + Typically this is for problems that we detect before OSError + could be raised.""" + pass + +class DistutilsOptionError (DistutilsError): + """Syntactic/semantic errors in command options, such as use of + mutually conflicting options, or inconsistent options, + badly-spelled values, etc. No distinction is made between option + values originating in the setup script, the command line, config + files, or what-have-you -- but if we *know* something originated in + the setup script, we'll raise DistutilsSetupError instead.""" + pass + +class DistutilsSetupError (DistutilsError): + """For errors that can be definitely blamed on the setup script, + such as invalid keyword arguments to 'setup()'.""" + pass + +class DistutilsPlatformError (DistutilsError): + """We don't know how to do something on the current platform (but + we do know how to do it on some platform) -- eg. trying to compile + C files on a platform not supported by a CCompiler subclass.""" + pass + +class DistutilsExecError (DistutilsError): + """Any problems executing an external program (such as the C + compiler, when compiling C files).""" + pass + +class DistutilsInternalError (DistutilsError): + """Internal inconsistencies or impossibilities (obviously, this + should never be seen if the code is working!).""" + pass + +class DistutilsTemplateError (DistutilsError): + """Syntax error in a file list template.""" + +class DistutilsByteCompileError(DistutilsError): + """Byte compile error.""" + +# Exception classes used by the CCompiler implementation classes +class CCompilerError (Exception): + """Some compile/link operation failed.""" + +class PreprocessError (CCompilerError): + """Failure to preprocess one or more C/C++ files.""" + +class CompileError (CCompilerError): + """Failure to compile one or more C/C++ source files.""" + +class LibError (CCompilerError): + """Failure to create a static library from one or more C/C++ object + files.""" + +class LinkError (CCompilerError): + """Failure to link one or more C/C++ object files into an executable + or shared library file.""" + +class UnknownFileError (CCompilerError): + """Attempt to process an unknown file type.""" diff --git a/distutils/distutils/extension.py b/distutils/distutils/extension.py new file mode 100644 index 0000000..c507da3 --- /dev/null +++ b/distutils/distutils/extension.py @@ -0,0 +1,240 @@ +"""distutils.extension + +Provides the Extension class, used to describe C/C++ extension +modules in setup scripts.""" + +import os +import warnings + +# This class is really only used by the "build_ext" command, so it might +# make sense to put it in distutils.command.build_ext. However, that +# module is already big enough, and I want to make this class a bit more +# complex to simplify some common cases ("foo" module in "foo.c") and do +# better error-checking ("foo.c" actually exists). +# +# Also, putting this in build_ext.py means every setup script would have to +# import that large-ish module (indirectly, through distutils.core) in +# order to do anything. + +class Extension: + """Just a collection of attributes that describes an extension + module and everything needed to build it (hopefully in a portable + way, but there are hooks that let you be as unportable as you need). + + Instance attributes: + name : string + the full name of the extension, including any packages -- ie. + *not* a filename or pathname, but Python dotted name + sources : [string] + list of source filenames, relative to the distribution root + (where the setup script lives), in Unix form (slash-separated) + for portability. Source files may be C, C++, SWIG (.i), + platform-specific resource files, or whatever else is recognized + by the "build_ext" command as source for a Python extension. + include_dirs : [string] + list of directories to search for C/C++ header files (in Unix + form for portability) + define_macros : [(name : string, value : string|None)] + list of macros to define; each macro is defined using a 2-tuple, + where 'value' is either the string to define it to or None to + define it without a particular value (equivalent of "#define + FOO" in source or -DFOO on Unix C compiler command line) + undef_macros : [string] + list of macros to undefine explicitly + library_dirs : [string] + list of directories to search for C/C++ libraries at link time + libraries : [string] + list of library names (not filenames or paths) to link against + runtime_library_dirs : [string] + list of directories to search for C/C++ libraries at run time + (for shared extensions, this is when the extension is loaded) + extra_objects : [string] + list of extra files to link with (eg. object files not implied + by 'sources', static library that must be explicitly specified, + binary resource files, etc.) + extra_compile_args : [string] + any extra platform- and compiler-specific information to use + when compiling the source files in 'sources'. For platforms and + compilers where "command line" makes sense, this is typically a + list of command-line arguments, but for other platforms it could + be anything. + extra_link_args : [string] + any extra platform- and compiler-specific information to use + when linking object files together to create the extension (or + to create a new static Python interpreter). Similar + interpretation as for 'extra_compile_args'. + export_symbols : [string] + list of symbols to be exported from a shared extension. Not + used on all platforms, and not generally necessary for Python + extensions, which typically export exactly one symbol: "init" + + extension_name. + swig_opts : [string] + any extra options to pass to SWIG if a source file has the .i + extension. + depends : [string] + list of files that the extension depends on + language : string + extension language (i.e. "c", "c++", "objc"). Will be detected + from the source extensions if not provided. + optional : boolean + specifies that a build failure in the extension should not abort the + build process, but simply not install the failing extension. + """ + + # When adding arguments to this constructor, be sure to update + # setup_keywords in core.py. + def __init__(self, name, sources, + include_dirs=None, + define_macros=None, + undef_macros=None, + library_dirs=None, + libraries=None, + runtime_library_dirs=None, + extra_objects=None, + extra_compile_args=None, + extra_link_args=None, + export_symbols=None, + swig_opts = None, + depends=None, + language=None, + optional=None, + **kw # To catch unknown keywords + ): + if not isinstance(name, str): + raise AssertionError("'name' must be a string") + if not (isinstance(sources, list) and + all(isinstance(v, str) for v in sources)): + raise AssertionError("'sources' must be a list of strings") + + self.name = name + self.sources = sources + self.include_dirs = include_dirs or [] + self.define_macros = define_macros or [] + self.undef_macros = undef_macros or [] + self.library_dirs = library_dirs or [] + self.libraries = libraries or [] + self.runtime_library_dirs = runtime_library_dirs or [] + self.extra_objects = extra_objects or [] + self.extra_compile_args = extra_compile_args or [] + self.extra_link_args = extra_link_args or [] + self.export_symbols = export_symbols or [] + self.swig_opts = swig_opts or [] + self.depends = depends or [] + self.language = language + self.optional = optional + + # If there are unknown keyword options, warn about them + if len(kw) > 0: + options = [repr(option) for option in kw] + options = ', '.join(sorted(options)) + msg = "Unknown Extension options: %s" % options + warnings.warn(msg) + + def __repr__(self): + return '<%s.%s(%r) at %#x>' % ( + self.__class__.__module__, + self.__class__.__qualname__, + self.name, + id(self)) + + +def read_setup_file(filename): + """Reads a Setup file and returns Extension instances.""" + from distutils.sysconfig import (parse_makefile, expand_makefile_vars, + _variable_rx) + + from distutils.text_file import TextFile + from distutils.util import split_quoted + + # First pass over the file to gather "VAR = VALUE" assignments. + vars = parse_makefile(filename) + + # Second pass to gobble up the real content: lines of the form + # ... [ ...] [ ...] [ ...] + file = TextFile(filename, + strip_comments=1, skip_blanks=1, join_lines=1, + lstrip_ws=1, rstrip_ws=1) + try: + extensions = [] + + while True: + line = file.readline() + if line is None: # eof + break + if _variable_rx.match(line): # VAR=VALUE, handled in first pass + continue + + if line[0] == line[-1] == "*": + file.warn("'%s' lines not handled yet" % line) + continue + + line = expand_makefile_vars(line, vars) + words = split_quoted(line) + + # NB. this parses a slightly different syntax than the old + # makesetup script: here, there must be exactly one extension per + # line, and it must be the first word of the line. I have no idea + # why the old syntax supported multiple extensions per line, as + # they all wind up being the same. + + module = words[0] + ext = Extension(module, []) + append_next_word = None + + for word in words[1:]: + if append_next_word is not None: + append_next_word.append(word) + append_next_word = None + continue + + suffix = os.path.splitext(word)[1] + switch = word[0:2] ; value = word[2:] + + if suffix in (".c", ".cc", ".cpp", ".cxx", ".c++", ".m", ".mm"): + # hmm, should we do something about C vs. C++ sources? + # or leave it up to the CCompiler implementation to + # worry about? + ext.sources.append(word) + elif switch == "-I": + ext.include_dirs.append(value) + elif switch == "-D": + equals = value.find("=") + if equals == -1: # bare "-DFOO" -- no value + ext.define_macros.append((value, None)) + else: # "-DFOO=blah" + ext.define_macros.append((value[0:equals], + value[equals+2:])) + elif switch == "-U": + ext.undef_macros.append(value) + elif switch == "-C": # only here 'cause makesetup has it! + ext.extra_compile_args.append(word) + elif switch == "-l": + ext.libraries.append(value) + elif switch == "-L": + ext.library_dirs.append(value) + elif switch == "-R": + ext.runtime_library_dirs.append(value) + elif word == "-rpath": + append_next_word = ext.runtime_library_dirs + elif word == "-Xlinker": + append_next_word = ext.extra_link_args + elif word == "-Xcompiler": + append_next_word = ext.extra_compile_args + elif switch == "-u": + ext.extra_link_args.append(word) + if not value: + append_next_word = ext.extra_link_args + elif suffix in (".a", ".so", ".sl", ".o", ".dylib"): + # NB. a really faithful emulation of makesetup would + # append a .o file to extra_objects only if it + # had a slash in it; otherwise, it would s/.o/.c/ + # and append it to sources. Hmmmm. + ext.extra_objects.append(word) + else: + file.warn("unrecognized argument '%s'" % word) + + extensions.append(ext) + finally: + file.close() + + return extensions diff --git a/distutils/distutils/fancy_getopt.py b/distutils/distutils/fancy_getopt.py new file mode 100644 index 0000000..7d170dd --- /dev/null +++ b/distutils/distutils/fancy_getopt.py @@ -0,0 +1,457 @@ +"""distutils.fancy_getopt + +Wrapper around the standard getopt module that provides the following +additional features: + * short and long options are tied together + * options have help strings, so fancy_getopt could potentially + create a complete usage summary + * options set attributes of a passed-in object +""" + +import sys, string, re +import getopt +from distutils.errors import * + +# Much like command_re in distutils.core, this is close to but not quite +# the same as a Python NAME -- except, in the spirit of most GNU +# utilities, we use '-' in place of '_'. (The spirit of LISP lives on!) +# The similarities to NAME are again not a coincidence... +longopt_pat = r'[a-zA-Z](?:[a-zA-Z0-9-]*)' +longopt_re = re.compile(r'^%s$' % longopt_pat) + +# For recognizing "negative alias" options, eg. "quiet=!verbose" +neg_alias_re = re.compile("^(%s)=!(%s)$" % (longopt_pat, longopt_pat)) + +# This is used to translate long options to legitimate Python identifiers +# (for use as attributes of some object). +longopt_xlate = str.maketrans('-', '_') + +class FancyGetopt: + """Wrapper around the standard 'getopt()' module that provides some + handy extra functionality: + * short and long options are tied together + * options have help strings, and help text can be assembled + from them + * options set attributes of a passed-in object + * boolean options can have "negative aliases" -- eg. if + --quiet is the "negative alias" of --verbose, then "--quiet" + on the command line sets 'verbose' to false + """ + + def __init__(self, option_table=None): + # The option table is (currently) a list of tuples. The + # tuples may have 3 or four values: + # (long_option, short_option, help_string [, repeatable]) + # if an option takes an argument, its long_option should have '=' + # appended; short_option should just be a single character, no ':' + # in any case. If a long_option doesn't have a corresponding + # short_option, short_option should be None. All option tuples + # must have long options. + self.option_table = option_table + + # 'option_index' maps long option names to entries in the option + # table (ie. those 3-tuples). + self.option_index = {} + if self.option_table: + self._build_index() + + # 'alias' records (duh) alias options; {'foo': 'bar'} means + # --foo is an alias for --bar + self.alias = {} + + # 'negative_alias' keeps track of options that are the boolean + # opposite of some other option + self.negative_alias = {} + + # These keep track of the information in the option table. We + # don't actually populate these structures until we're ready to + # parse the command-line, since the 'option_table' passed in here + # isn't necessarily the final word. + self.short_opts = [] + self.long_opts = [] + self.short2long = {} + self.attr_name = {} + self.takes_arg = {} + + # And 'option_order' is filled up in 'getopt()'; it records the + # original order of options (and their values) on the command-line, + # but expands short options, converts aliases, etc. + self.option_order = [] + + def _build_index(self): + self.option_index.clear() + for option in self.option_table: + self.option_index[option[0]] = option + + def set_option_table(self, option_table): + self.option_table = option_table + self._build_index() + + def add_option(self, long_option, short_option=None, help_string=None): + if long_option in self.option_index: + raise DistutilsGetoptError( + "option conflict: already an option '%s'" % long_option) + else: + option = (long_option, short_option, help_string) + self.option_table.append(option) + self.option_index[long_option] = option + + def has_option(self, long_option): + """Return true if the option table for this parser has an + option with long name 'long_option'.""" + return long_option in self.option_index + + def get_attr_name(self, long_option): + """Translate long option name 'long_option' to the form it + has as an attribute of some object: ie., translate hyphens + to underscores.""" + return long_option.translate(longopt_xlate) + + def _check_alias_dict(self, aliases, what): + assert isinstance(aliases, dict) + for (alias, opt) in aliases.items(): + if alias not in self.option_index: + raise DistutilsGetoptError(("invalid %s '%s': " + "option '%s' not defined") % (what, alias, alias)) + if opt not in self.option_index: + raise DistutilsGetoptError(("invalid %s '%s': " + "aliased option '%s' not defined") % (what, alias, opt)) + + def set_aliases(self, alias): + """Set the aliases for this option parser.""" + self._check_alias_dict(alias, "alias") + self.alias = alias + + def set_negative_aliases(self, negative_alias): + """Set the negative aliases for this option parser. + 'negative_alias' should be a dictionary mapping option names to + option names, both the key and value must already be defined + in the option table.""" + self._check_alias_dict(negative_alias, "negative alias") + self.negative_alias = negative_alias + + def _grok_option_table(self): + """Populate the various data structures that keep tabs on the + option table. Called by 'getopt()' before it can do anything + worthwhile. + """ + self.long_opts = [] + self.short_opts = [] + self.short2long.clear() + self.repeat = {} + + for option in self.option_table: + if len(option) == 3: + long, short, help = option + repeat = 0 + elif len(option) == 4: + long, short, help, repeat = option + else: + # the option table is part of the code, so simply + # assert that it is correct + raise ValueError("invalid option tuple: %r" % (option,)) + + # Type- and value-check the option names + if not isinstance(long, str) or len(long) < 2: + raise DistutilsGetoptError(("invalid long option '%s': " + "must be a string of length >= 2") % long) + + if (not ((short is None) or + (isinstance(short, str) and len(short) == 1))): + raise DistutilsGetoptError("invalid short option '%s': " + "must a single character or None" % short) + + self.repeat[long] = repeat + self.long_opts.append(long) + + if long[-1] == '=': # option takes an argument? + if short: short = short + ':' + long = long[0:-1] + self.takes_arg[long] = 1 + else: + # Is option is a "negative alias" for some other option (eg. + # "quiet" == "!verbose")? + alias_to = self.negative_alias.get(long) + if alias_to is not None: + if self.takes_arg[alias_to]: + raise DistutilsGetoptError( + "invalid negative alias '%s': " + "aliased option '%s' takes a value" + % (long, alias_to)) + + self.long_opts[-1] = long # XXX redundant?! + self.takes_arg[long] = 0 + + # If this is an alias option, make sure its "takes arg" flag is + # the same as the option it's aliased to. + alias_to = self.alias.get(long) + if alias_to is not None: + if self.takes_arg[long] != self.takes_arg[alias_to]: + raise DistutilsGetoptError( + "invalid alias '%s': inconsistent with " + "aliased option '%s' (one of them takes a value, " + "the other doesn't" + % (long, alias_to)) + + # Now enforce some bondage on the long option name, so we can + # later translate it to an attribute name on some object. Have + # to do this a bit late to make sure we've removed any trailing + # '='. + if not longopt_re.match(long): + raise DistutilsGetoptError( + "invalid long option name '%s' " + "(must be letters, numbers, hyphens only" % long) + + self.attr_name[long] = self.get_attr_name(long) + if short: + self.short_opts.append(short) + self.short2long[short[0]] = long + + def getopt(self, args=None, object=None): + """Parse command-line options in args. Store as attributes on object. + + If 'args' is None or not supplied, uses 'sys.argv[1:]'. If + 'object' is None or not supplied, creates a new OptionDummy + object, stores option values there, and returns a tuple (args, + object). If 'object' is supplied, it is modified in place and + 'getopt()' just returns 'args'; in both cases, the returned + 'args' is a modified copy of the passed-in 'args' list, which + is left untouched. + """ + if args is None: + args = sys.argv[1:] + if object is None: + object = OptionDummy() + created_object = True + else: + created_object = False + + self._grok_option_table() + + short_opts = ' '.join(self.short_opts) + try: + opts, args = getopt.getopt(args, short_opts, self.long_opts) + except getopt.error as msg: + raise DistutilsArgError(msg) + + for opt, val in opts: + if len(opt) == 2 and opt[0] == '-': # it's a short option + opt = self.short2long[opt[1]] + else: + assert len(opt) > 2 and opt[:2] == '--' + opt = opt[2:] + + alias = self.alias.get(opt) + if alias: + opt = alias + + if not self.takes_arg[opt]: # boolean option? + assert val == '', "boolean option can't have value" + alias = self.negative_alias.get(opt) + if alias: + opt = alias + val = 0 + else: + val = 1 + + attr = self.attr_name[opt] + # The only repeating option at the moment is 'verbose'. + # It has a negative option -q quiet, which should set verbose = 0. + if val and self.repeat.get(attr) is not None: + val = getattr(object, attr, 0) + 1 + setattr(object, attr, val) + self.option_order.append((opt, val)) + + # for opts + if created_object: + return args, object + else: + return args + + def get_option_order(self): + """Returns the list of (option, value) tuples processed by the + previous run of 'getopt()'. Raises RuntimeError if + 'getopt()' hasn't been called yet. + """ + if self.option_order is None: + raise RuntimeError("'getopt()' hasn't been called yet") + else: + return self.option_order + + def generate_help(self, header=None): + """Generate help text (a list of strings, one per suggested line of + output) from the option table for this FancyGetopt object. + """ + # Blithely assume the option table is good: probably wouldn't call + # 'generate_help()' unless you've already called 'getopt()'. + + # First pass: determine maximum length of long option names + max_opt = 0 + for option in self.option_table: + long = option[0] + short = option[1] + l = len(long) + if long[-1] == '=': + l = l - 1 + if short is not None: + l = l + 5 # " (-x)" where short == 'x' + if l > max_opt: + max_opt = l + + opt_width = max_opt + 2 + 2 + 2 # room for indent + dashes + gutter + + # Typical help block looks like this: + # --foo controls foonabulation + # Help block for longest option looks like this: + # --flimflam set the flim-flam level + # and with wrapped text: + # --flimflam set the flim-flam level (must be between + # 0 and 100, except on Tuesdays) + # Options with short names will have the short name shown (but + # it doesn't contribute to max_opt): + # --foo (-f) controls foonabulation + # If adding the short option would make the left column too wide, + # we push the explanation off to the next line + # --flimflam (-l) + # set the flim-flam level + # Important parameters: + # - 2 spaces before option block start lines + # - 2 dashes for each long option name + # - min. 2 spaces between option and explanation (gutter) + # - 5 characters (incl. space) for short option name + + # Now generate lines of help text. (If 80 columns were good enough + # for Jesus, then 78 columns are good enough for me!) + line_width = 78 + text_width = line_width - opt_width + big_indent = ' ' * opt_width + if header: + lines = [header] + else: + lines = ['Option summary:'] + + for option in self.option_table: + long, short, help = option[:3] + text = wrap_text(help, text_width) + if long[-1] == '=': + long = long[0:-1] + + # Case 1: no short option at all (makes life easy) + if short is None: + if text: + lines.append(" --%-*s %s" % (max_opt, long, text[0])) + else: + lines.append(" --%-*s " % (max_opt, long)) + + # Case 2: we have a short option, so we have to include it + # just after the long option + else: + opt_names = "%s (-%s)" % (long, short) + if text: + lines.append(" --%-*s %s" % + (max_opt, opt_names, text[0])) + else: + lines.append(" --%-*s" % opt_names) + + for l in text[1:]: + lines.append(big_indent + l) + return lines + + def print_help(self, header=None, file=None): + if file is None: + file = sys.stdout + for line in self.generate_help(header): + file.write(line + "\n") + + +def fancy_getopt(options, negative_opt, object, args): + parser = FancyGetopt(options) + parser.set_negative_aliases(negative_opt) + return parser.getopt(args, object) + + +WS_TRANS = {ord(_wschar) : ' ' for _wschar in string.whitespace} + +def wrap_text(text, width): + """wrap_text(text : string, width : int) -> [string] + + Split 'text' into multiple lines of no more than 'width' characters + each, and return the list of strings that results. + """ + if text is None: + return [] + if len(text) <= width: + return [text] + + text = text.expandtabs() + text = text.translate(WS_TRANS) + chunks = re.split(r'( +|-+)', text) + chunks = [ch for ch in chunks if ch] # ' - ' results in empty strings + lines = [] + + while chunks: + cur_line = [] # list of chunks (to-be-joined) + cur_len = 0 # length of current line + + while chunks: + l = len(chunks[0]) + if cur_len + l <= width: # can squeeze (at least) this chunk in + cur_line.append(chunks[0]) + del chunks[0] + cur_len = cur_len + l + else: # this line is full + # drop last chunk if all space + if cur_line and cur_line[-1][0] == ' ': + del cur_line[-1] + break + + if chunks: # any chunks left to process? + # if the current line is still empty, then we had a single + # chunk that's too big too fit on a line -- so we break + # down and break it up at the line width + if cur_len == 0: + cur_line.append(chunks[0][0:width]) + chunks[0] = chunks[0][width:] + + # all-whitespace chunks at the end of a line can be discarded + # (and we know from the re.split above that if a chunk has + # *any* whitespace, it is *all* whitespace) + if chunks[0][0] == ' ': + del chunks[0] + + # and store this line in the list-of-all-lines -- as a single + # string, of course! + lines.append(''.join(cur_line)) + + return lines + + +def translate_longopt(opt): + """Convert a long option name to a valid Python identifier by + changing "-" to "_". + """ + return opt.translate(longopt_xlate) + + +class OptionDummy: + """Dummy class just used as a place to hold command-line option + values as instance attributes.""" + + def __init__(self, options=[]): + """Create a new OptionDummy instance. The attributes listed in + 'options' will be initialized to None.""" + for opt in options: + setattr(self, opt, None) + + +if __name__ == "__main__": + text = """\ +Tra-la-la, supercalifragilisticexpialidocious. +How *do* you spell that odd word, anyways? +(Someone ask Mary -- she'll know [or she'll +say, "How should I know?"].)""" + + for w in (10, 20, 30, 40): + print("width: %d" % w) + print("\n".join(wrap_text(text, w))) + print() diff --git a/distutils/distutils/file_util.py b/distutils/distutils/file_util.py new file mode 100644 index 0000000..b3fee35 --- /dev/null +++ b/distutils/distutils/file_util.py @@ -0,0 +1,238 @@ +"""distutils.file_util + +Utility functions for operating on single files. +""" + +import os +from distutils.errors import DistutilsFileError +from distutils import log + +# for generating verbose output in 'copy_file()' +_copy_action = { None: 'copying', + 'hard': 'hard linking', + 'sym': 'symbolically linking' } + + +def _copy_file_contents(src, dst, buffer_size=16*1024): + """Copy the file 'src' to 'dst'; both must be filenames. Any error + opening either file, reading from 'src', or writing to 'dst', raises + DistutilsFileError. Data is read/written in chunks of 'buffer_size' + bytes (default 16k). No attempt is made to handle anything apart from + regular files. + """ + # Stolen from shutil module in the standard library, but with + # custom error-handling added. + fsrc = None + fdst = None + try: + try: + fsrc = open(src, 'rb') + except OSError as e: + raise DistutilsFileError("could not open '%s': %s" % (src, e.strerror)) + + if os.path.exists(dst): + try: + os.unlink(dst) + except OSError as e: + raise DistutilsFileError( + "could not delete '%s': %s" % (dst, e.strerror)) + + try: + fdst = open(dst, 'wb') + except OSError as e: + raise DistutilsFileError( + "could not create '%s': %s" % (dst, e.strerror)) + + while True: + try: + buf = fsrc.read(buffer_size) + except OSError as e: + raise DistutilsFileError( + "could not read from '%s': %s" % (src, e.strerror)) + + if not buf: + break + + try: + fdst.write(buf) + except OSError as e: + raise DistutilsFileError( + "could not write to '%s': %s" % (dst, e.strerror)) + finally: + if fdst: + fdst.close() + if fsrc: + fsrc.close() + +def copy_file(src, dst, preserve_mode=1, preserve_times=1, update=0, + link=None, verbose=1, dry_run=0): + """Copy a file 'src' to 'dst'. If 'dst' is a directory, then 'src' is + copied there with the same name; otherwise, it must be a filename. (If + the file exists, it will be ruthlessly clobbered.) If 'preserve_mode' + is true (the default), the file's mode (type and permission bits, or + whatever is analogous on the current platform) is copied. If + 'preserve_times' is true (the default), the last-modified and + last-access times are copied as well. If 'update' is true, 'src' will + only be copied if 'dst' does not exist, or if 'dst' does exist but is + older than 'src'. + + 'link' allows you to make hard links (os.link) or symbolic links + (os.symlink) instead of copying: set it to "hard" or "sym"; if it is + None (the default), files are copied. Don't set 'link' on systems that + don't support it: 'copy_file()' doesn't check if hard or symbolic + linking is available. If hardlink fails, falls back to + _copy_file_contents(). + + Under Mac OS, uses the native file copy function in macostools; on + other systems, uses '_copy_file_contents()' to copy file contents. + + Return a tuple (dest_name, copied): 'dest_name' is the actual name of + the output file, and 'copied' is true if the file was copied (or would + have been copied, if 'dry_run' true). + """ + # XXX if the destination file already exists, we clobber it if + # copying, but blow up if linking. Hmmm. And I don't know what + # macostools.copyfile() does. Should definitely be consistent, and + # should probably blow up if destination exists and we would be + # changing it (ie. it's not already a hard/soft link to src OR + # (not update) and (src newer than dst). + + from distutils.dep_util import newer + from stat import ST_ATIME, ST_MTIME, ST_MODE, S_IMODE + + if not os.path.isfile(src): + raise DistutilsFileError( + "can't copy '%s': doesn't exist or not a regular file" % src) + + if os.path.isdir(dst): + dir = dst + dst = os.path.join(dst, os.path.basename(src)) + else: + dir = os.path.dirname(dst) + + if update and not newer(src, dst): + if verbose >= 1: + log.debug("not copying %s (output up-to-date)", src) + return (dst, 0) + + try: + action = _copy_action[link] + except KeyError: + raise ValueError("invalid value '%s' for 'link' argument" % link) + + if verbose >= 1: + if os.path.basename(dst) == os.path.basename(src): + log.info("%s %s -> %s", action, src, dir) + else: + log.info("%s %s -> %s", action, src, dst) + + if dry_run: + return (dst, 1) + + # If linking (hard or symbolic), use the appropriate system call + # (Unix only, of course, but that's the caller's responsibility) + elif link == 'hard': + if not (os.path.exists(dst) and os.path.samefile(src, dst)): + try: + os.link(src, dst) + return (dst, 1) + except OSError: + # If hard linking fails, fall back on copying file + # (some special filesystems don't support hard linking + # even under Unix, see issue #8876). + pass + elif link == 'sym': + if not (os.path.exists(dst) and os.path.samefile(src, dst)): + os.symlink(src, dst) + return (dst, 1) + + # Otherwise (non-Mac, not linking), copy the file contents and + # (optionally) copy the times and mode. + _copy_file_contents(src, dst) + if preserve_mode or preserve_times: + st = os.stat(src) + + # According to David Ascher , utime() should be done + # before chmod() (at least under NT). + if preserve_times: + os.utime(dst, (st[ST_ATIME], st[ST_MTIME])) + if preserve_mode: + os.chmod(dst, S_IMODE(st[ST_MODE])) + + return (dst, 1) + + +# XXX I suspect this is Unix-specific -- need porting help! +def move_file (src, dst, + verbose=1, + dry_run=0): + + """Move a file 'src' to 'dst'. If 'dst' is a directory, the file will + be moved into it with the same name; otherwise, 'src' is just renamed + to 'dst'. Return the new full name of the file. + + Handles cross-device moves on Unix using 'copy_file()'. What about + other systems??? + """ + from os.path import exists, isfile, isdir, basename, dirname + import errno + + if verbose >= 1: + log.info("moving %s -> %s", src, dst) + + if dry_run: + return dst + + if not isfile(src): + raise DistutilsFileError("can't move '%s': not a regular file" % src) + + if isdir(dst): + dst = os.path.join(dst, basename(src)) + elif exists(dst): + raise DistutilsFileError( + "can't move '%s': destination '%s' already exists" % + (src, dst)) + + if not isdir(dirname(dst)): + raise DistutilsFileError( + "can't move '%s': destination '%s' not a valid path" % + (src, dst)) + + copy_it = False + try: + os.rename(src, dst) + except OSError as e: + (num, msg) = e.args + if num == errno.EXDEV: + copy_it = True + else: + raise DistutilsFileError( + "couldn't move '%s' to '%s': %s" % (src, dst, msg)) + + if copy_it: + copy_file(src, dst, verbose=verbose) + try: + os.unlink(src) + except OSError as e: + (num, msg) = e.args + try: + os.unlink(dst) + except OSError: + pass + raise DistutilsFileError( + "couldn't move '%s' to '%s' by copy/delete: " + "delete '%s' failed: %s" + % (src, dst, src, msg)) + return dst + + +def write_file (filename, contents): + """Create a file with the specified name and write 'contents' (a + sequence of strings without line terminators) to it. + """ + f = open(filename, "w") + try: + for line in contents: + f.write(line + "\n") + finally: + f.close() diff --git a/distutils/distutils/filelist.py b/distutils/distutils/filelist.py new file mode 100644 index 0000000..c92d5fd --- /dev/null +++ b/distutils/distutils/filelist.py @@ -0,0 +1,327 @@ +"""distutils.filelist + +Provides the FileList class, used for poking about the filesystem +and building lists of files. +""" + +import os, re +import fnmatch +import functools +from distutils.util import convert_path +from distutils.errors import DistutilsTemplateError, DistutilsInternalError +from distutils import log + +class FileList: + """A list of files built by on exploring the filesystem and filtered by + applying various patterns to what we find there. + + Instance attributes: + dir + directory from which files will be taken -- only used if + 'allfiles' not supplied to constructor + files + list of filenames currently being built/filtered/manipulated + allfiles + complete list of files under consideration (ie. without any + filtering applied) + """ + + def __init__(self, warn=None, debug_print=None): + # ignore argument to FileList, but keep them for backwards + # compatibility + self.allfiles = None + self.files = [] + + def set_allfiles(self, allfiles): + self.allfiles = allfiles + + def findall(self, dir=os.curdir): + self.allfiles = findall(dir) + + def debug_print(self, msg): + """Print 'msg' to stdout if the global DEBUG (taken from the + DISTUTILS_DEBUG environment variable) flag is true. + """ + from distutils.debug import DEBUG + if DEBUG: + print(msg) + + # -- List-like methods --------------------------------------------- + + def append(self, item): + self.files.append(item) + + def extend(self, items): + self.files.extend(items) + + def sort(self): + # Not a strict lexical sort! + sortable_files = sorted(map(os.path.split, self.files)) + self.files = [] + for sort_tuple in sortable_files: + self.files.append(os.path.join(*sort_tuple)) + + + # -- Other miscellaneous utility methods --------------------------- + + def remove_duplicates(self): + # Assumes list has been sorted! + for i in range(len(self.files) - 1, 0, -1): + if self.files[i] == self.files[i - 1]: + del self.files[i] + + + # -- "File template" methods --------------------------------------- + + def _parse_template_line(self, line): + words = line.split() + action = words[0] + + patterns = dir = dir_pattern = None + + if action in ('include', 'exclude', + 'global-include', 'global-exclude'): + if len(words) < 2: + raise DistutilsTemplateError( + "'%s' expects ..." % action) + patterns = [convert_path(w) for w in words[1:]] + elif action in ('recursive-include', 'recursive-exclude'): + if len(words) < 3: + raise DistutilsTemplateError( + "'%s' expects

..." % action) + dir = convert_path(words[1]) + patterns = [convert_path(w) for w in words[2:]] + elif action in ('graft', 'prune'): + if len(words) != 2: + raise DistutilsTemplateError( + "'%s' expects a single " % action) + dir_pattern = convert_path(words[1]) + else: + raise DistutilsTemplateError("unknown action '%s'" % action) + + return (action, patterns, dir, dir_pattern) + + def process_template_line(self, line): + # Parse the line: split it up, make sure the right number of words + # is there, and return the relevant words. 'action' is always + # defined: it's the first word of the line. Which of the other + # three are defined depends on the action; it'll be either + # patterns, (dir and patterns), or (dir_pattern). + (action, patterns, dir, dir_pattern) = self._parse_template_line(line) + + # OK, now we know that the action is valid and we have the + # right number of words on the line for that action -- so we + # can proceed with minimal error-checking. + if action == 'include': + self.debug_print("include " + ' '.join(patterns)) + for pattern in patterns: + if not self.include_pattern(pattern, anchor=1): + log.warn("warning: no files found matching '%s'", + pattern) + + elif action == 'exclude': + self.debug_print("exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.exclude_pattern(pattern, anchor=1): + log.warn(("warning: no previously-included files " + "found matching '%s'"), pattern) + + elif action == 'global-include': + self.debug_print("global-include " + ' '.join(patterns)) + for pattern in patterns: + if not self.include_pattern(pattern, anchor=0): + log.warn(("warning: no files found matching '%s' " + "anywhere in distribution"), pattern) + + elif action == 'global-exclude': + self.debug_print("global-exclude " + ' '.join(patterns)) + for pattern in patterns: + if not self.exclude_pattern(pattern, anchor=0): + log.warn(("warning: no previously-included files matching " + "'%s' found anywhere in distribution"), + pattern) + + elif action == 'recursive-include': + self.debug_print("recursive-include %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.include_pattern(pattern, prefix=dir): + log.warn(("warning: no files found matching '%s' " + "under directory '%s'"), + pattern, dir) + + elif action == 'recursive-exclude': + self.debug_print("recursive-exclude %s %s" % + (dir, ' '.join(patterns))) + for pattern in patterns: + if not self.exclude_pattern(pattern, prefix=dir): + log.warn(("warning: no previously-included files matching " + "'%s' found under directory '%s'"), + pattern, dir) + + elif action == 'graft': + self.debug_print("graft " + dir_pattern) + if not self.include_pattern(None, prefix=dir_pattern): + log.warn("warning: no directories found matching '%s'", + dir_pattern) + + elif action == 'prune': + self.debug_print("prune " + dir_pattern) + if not self.exclude_pattern(None, prefix=dir_pattern): + log.warn(("no previously-included directories found " + "matching '%s'"), dir_pattern) + else: + raise DistutilsInternalError( + "this cannot happen: invalid action '%s'" % action) + + + # -- Filtering/selection methods ----------------------------------- + + def include_pattern(self, pattern, anchor=1, prefix=None, is_regex=0): + """Select strings (presumably filenames) from 'self.files' that + match 'pattern', a Unix-style wildcard (glob) pattern. Patterns + are not quite the same as implemented by the 'fnmatch' module: '*' + and '?' match non-special characters, where "special" is platform- + dependent: slash on Unix; colon, slash, and backslash on + DOS/Windows; and colon on Mac OS. + + If 'anchor' is true (the default), then the pattern match is more + stringent: "*.py" will match "foo.py" but not "foo/bar.py". If + 'anchor' is false, both of these will match. + + If 'prefix' is supplied, then only filenames starting with 'prefix' + (itself a pattern) and ending with 'pattern', with anything in between + them, will match. 'anchor' is ignored in this case. + + If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and + 'pattern' is assumed to be either a string containing a regex or a + regex object -- no translation is done, the regex is just compiled + and used as-is. + + Selected strings will be added to self.files. + + Return True if files are found, False otherwise. + """ + # XXX docstring lying about what the special chars are? + files_found = False + pattern_re = translate_pattern(pattern, anchor, prefix, is_regex) + self.debug_print("include_pattern: applying regex r'%s'" % + pattern_re.pattern) + + # delayed loading of allfiles list + if self.allfiles is None: + self.findall() + + for name in self.allfiles: + if pattern_re.search(name): + self.debug_print(" adding " + name) + self.files.append(name) + files_found = True + return files_found + + + def exclude_pattern (self, pattern, + anchor=1, prefix=None, is_regex=0): + """Remove strings (presumably filenames) from 'files' that match + 'pattern'. Other parameters are the same as for + 'include_pattern()', above. + The list 'self.files' is modified in place. + Return True if files are found, False otherwise. + """ + files_found = False + pattern_re = translate_pattern(pattern, anchor, prefix, is_regex) + self.debug_print("exclude_pattern: applying regex r'%s'" % + pattern_re.pattern) + for i in range(len(self.files)-1, -1, -1): + if pattern_re.search(self.files[i]): + self.debug_print(" removing " + self.files[i]) + del self.files[i] + files_found = True + return files_found + + +# ---------------------------------------------------------------------- +# Utility functions + +def _find_all_simple(path): + """ + Find all files under 'path' + """ + results = ( + os.path.join(base, file) + for base, dirs, files in os.walk(path, followlinks=True) + for file in files + ) + return filter(os.path.isfile, results) + + +def findall(dir=os.curdir): + """ + Find all files under 'dir' and return the list of full filenames. + Unless dir is '.', return full filenames with dir prepended. + """ + files = _find_all_simple(dir) + if dir == os.curdir: + make_rel = functools.partial(os.path.relpath, start=dir) + files = map(make_rel, files) + return list(files) + + +def glob_to_re(pattern): + """Translate a shell-like glob pattern to a regular expression; return + a string containing the regex. Differs from 'fnmatch.translate()' in + that '*' does not match "special characters" (which are + platform-specific). + """ + pattern_re = fnmatch.translate(pattern) + + # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which + # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, + # and by extension they shouldn't match such "special characters" under + # any OS. So change all non-escaped dots in the RE to match any + # character except the special characters (currently: just os.sep). + sep = os.sep + if os.sep == '\\': + # we're using a regex to manipulate a regex, so we need + # to escape the backslash twice + sep = r'\\\\' + escaped = r'\1[^%s]' % sep + pattern_re = re.sub(r'((?= self.threshold: + if args: + msg = msg % args + if level in (WARN, ERROR, FATAL): + stream = sys.stderr + else: + stream = sys.stdout + try: + stream.write('%s\n' % msg) + except UnicodeEncodeError: + # emulate backslashreplace error handler + encoding = stream.encoding + msg = msg.encode(encoding, "backslashreplace").decode(encoding) + stream.write('%s\n' % msg) + stream.flush() + + def log(self, level, msg, *args): + self._log(level, msg, args) + + def debug(self, msg, *args): + self._log(DEBUG, msg, args) + + def info(self, msg, *args): + self._log(INFO, msg, args) + + def warn(self, msg, *args): + self._log(WARN, msg, args) + + def error(self, msg, *args): + self._log(ERROR, msg, args) + + def fatal(self, msg, *args): + self._log(FATAL, msg, args) + +_global_log = Log() +log = _global_log.log +debug = _global_log.debug +info = _global_log.info +warn = _global_log.warn +error = _global_log.error +fatal = _global_log.fatal + +def set_threshold(level): + # return the old threshold for use from tests + old = _global_log.threshold + _global_log.threshold = level + return old + +def set_verbosity(v): + if v <= 0: + set_threshold(WARN) + elif v == 1: + set_threshold(INFO) + elif v >= 2: + set_threshold(DEBUG) diff --git a/distutils/distutils/msvc9compiler.py b/distutils/distutils/msvc9compiler.py new file mode 100644 index 0000000..2119127 --- /dev/null +++ b/distutils/distutils/msvc9compiler.py @@ -0,0 +1,791 @@ +"""distutils.msvc9compiler + +Contains MSVCCompiler, an implementation of the abstract CCompiler class +for the Microsoft Visual Studio 2008. + +The module is compatible with VS 2005 and VS 2008. You can find legacy support +for older versions of VS in distutils.msvccompiler. +""" + +# Written by Perry Stoll +# hacked by Robin Becker and Thomas Heller to do a better job of +# finding DevStudio (through the registry) +# ported to VS2005 and VS 2008 by Christian Heimes + +import os +import subprocess +import sys +import re + +from distutils.errors import DistutilsExecError, DistutilsPlatformError, \ + CompileError, LibError, LinkError +from distutils.ccompiler import CCompiler, gen_preprocess_options, \ + gen_lib_options +from distutils import log +from distutils.util import get_platform + +import winreg + +RegOpenKeyEx = winreg.OpenKeyEx +RegEnumKey = winreg.EnumKey +RegEnumValue = winreg.EnumValue +RegError = winreg.error + +HKEYS = (winreg.HKEY_USERS, + winreg.HKEY_CURRENT_USER, + winreg.HKEY_LOCAL_MACHINE, + winreg.HKEY_CLASSES_ROOT) + +NATIVE_WIN64 = (sys.platform == 'win32' and sys.maxsize > 2**32) +if NATIVE_WIN64: + # Visual C++ is a 32-bit application, so we need to look in + # the corresponding registry branch, if we're running a + # 64-bit Python on Win64 + VS_BASE = r"Software\Wow6432Node\Microsoft\VisualStudio\%0.1f" + WINSDK_BASE = r"Software\Wow6432Node\Microsoft\Microsoft SDKs\Windows" + NET_BASE = r"Software\Wow6432Node\Microsoft\.NETFramework" +else: + VS_BASE = r"Software\Microsoft\VisualStudio\%0.1f" + WINSDK_BASE = r"Software\Microsoft\Microsoft SDKs\Windows" + NET_BASE = r"Software\Microsoft\.NETFramework" + +# A map keyed by get_platform() return values to values accepted by +# 'vcvarsall.bat'. Note a cross-compile may combine these (eg, 'x86_amd64' is +# the param to cross-compile on x86 targeting amd64.) +PLAT_TO_VCVARS = { + 'win32' : 'x86', + 'win-amd64' : 'amd64', + 'win-ia64' : 'ia64', +} + +class Reg: + """Helper class to read values from the registry + """ + + def get_value(cls, path, key): + for base in HKEYS: + d = cls.read_values(base, path) + if d and key in d: + return d[key] + raise KeyError(key) + get_value = classmethod(get_value) + + def read_keys(cls, base, key): + """Return list of registry keys.""" + try: + handle = RegOpenKeyEx(base, key) + except RegError: + return None + L = [] + i = 0 + while True: + try: + k = RegEnumKey(handle, i) + except RegError: + break + L.append(k) + i += 1 + return L + read_keys = classmethod(read_keys) + + def read_values(cls, base, key): + """Return dict of registry keys and values. + + All names are converted to lowercase. + """ + try: + handle = RegOpenKeyEx(base, key) + except RegError: + return None + d = {} + i = 0 + while True: + try: + name, value, type = RegEnumValue(handle, i) + except RegError: + break + name = name.lower() + d[cls.convert_mbcs(name)] = cls.convert_mbcs(value) + i += 1 + return d + read_values = classmethod(read_values) + + def convert_mbcs(s): + dec = getattr(s, "decode", None) + if dec is not None: + try: + s = dec("mbcs") + except UnicodeError: + pass + return s + convert_mbcs = staticmethod(convert_mbcs) + +class MacroExpander: + + def __init__(self, version): + self.macros = {} + self.vsbase = VS_BASE % version + self.load_macros(version) + + def set_macro(self, macro, path, key): + self.macros["$(%s)" % macro] = Reg.get_value(path, key) + + def load_macros(self, version): + self.set_macro("VCInstallDir", self.vsbase + r"\Setup\VC", "productdir") + self.set_macro("VSInstallDir", self.vsbase + r"\Setup\VS", "productdir") + self.set_macro("FrameworkDir", NET_BASE, "installroot") + try: + if version >= 8.0: + self.set_macro("FrameworkSDKDir", NET_BASE, + "sdkinstallrootv2.0") + else: + raise KeyError("sdkinstallrootv2.0") + except KeyError: + raise DistutilsPlatformError( + """Python was built with Visual Studio 2008; +extensions must be built with a compiler than can generate compatible binaries. +Visual Studio 2008 was not found on this system. If you have Cygwin installed, +you can try compiling with MingW32, by passing "-c mingw32" to setup.py.""") + + if version >= 9.0: + self.set_macro("FrameworkVersion", self.vsbase, "clr version") + self.set_macro("WindowsSdkDir", WINSDK_BASE, "currentinstallfolder") + else: + p = r"Software\Microsoft\NET Framework Setup\Product" + for base in HKEYS: + try: + h = RegOpenKeyEx(base, p) + except RegError: + continue + key = RegEnumKey(h, 0) + d = Reg.get_value(base, r"%s\%s" % (p, key)) + self.macros["$(FrameworkVersion)"] = d["version"] + + def sub(self, s): + for k, v in self.macros.items(): + s = s.replace(k, v) + return s + +def get_build_version(): + """Return the version of MSVC that was used to build Python. + + For Python 2.3 and up, the version number is included in + sys.version. For earlier versions, assume the compiler is MSVC 6. + """ + prefix = "MSC v." + i = sys.version.find(prefix) + if i == -1: + return 6 + i = i + len(prefix) + s, rest = sys.version[i:].split(" ", 1) + majorVersion = int(s[:-2]) - 6 + if majorVersion >= 13: + # v13 was skipped and should be v14 + majorVersion += 1 + minorVersion = int(s[2:3]) / 10.0 + # I don't think paths are affected by minor version in version 6 + if majorVersion == 6: + minorVersion = 0 + if majorVersion >= 6: + return majorVersion + minorVersion + # else we don't know what version of the compiler this is + return None + +def normalize_and_reduce_paths(paths): + """Return a list of normalized paths with duplicates removed. + + The current order of paths is maintained. + """ + # Paths are normalized so things like: /a and /a/ aren't both preserved. + reduced_paths = [] + for p in paths: + np = os.path.normpath(p) + # XXX(nnorwitz): O(n**2), if reduced_paths gets long perhaps use a set. + if np not in reduced_paths: + reduced_paths.append(np) + return reduced_paths + +def removeDuplicates(variable): + """Remove duplicate values of an environment variable. + """ + oldList = variable.split(os.pathsep) + newList = [] + for i in oldList: + if i not in newList: + newList.append(i) + newVariable = os.pathsep.join(newList) + return newVariable + +def find_vcvarsall(version): + """Find the vcvarsall.bat file + + At first it tries to find the productdir of VS 2008 in the registry. If + that fails it falls back to the VS90COMNTOOLS env var. + """ + vsbase = VS_BASE % version + try: + productdir = Reg.get_value(r"%s\Setup\VC" % vsbase, + "productdir") + except KeyError: + log.debug("Unable to find productdir in registry") + productdir = None + + if not productdir or not os.path.isdir(productdir): + toolskey = "VS%0.f0COMNTOOLS" % version + toolsdir = os.environ.get(toolskey, None) + + if toolsdir and os.path.isdir(toolsdir): + productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC") + productdir = os.path.abspath(productdir) + if not os.path.isdir(productdir): + log.debug("%s is not a valid directory" % productdir) + return None + else: + log.debug("Env var %s is not set or invalid" % toolskey) + if not productdir: + log.debug("No productdir found") + return None + vcvarsall = os.path.join(productdir, "vcvarsall.bat") + if os.path.isfile(vcvarsall): + return vcvarsall + log.debug("Unable to find vcvarsall.bat") + return None + +def query_vcvarsall(version, arch="x86"): + """Launch vcvarsall.bat and read the settings from its environment + """ + vcvarsall = find_vcvarsall(version) + interesting = set(("include", "lib", "libpath", "path")) + result = {} + + if vcvarsall is None: + raise DistutilsPlatformError("Unable to find vcvarsall.bat") + log.debug("Calling 'vcvarsall.bat %s' (version=%s)", arch, version) + popen = subprocess.Popen('"%s" %s & set' % (vcvarsall, arch), + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + try: + stdout, stderr = popen.communicate() + if popen.wait() != 0: + raise DistutilsPlatformError(stderr.decode("mbcs")) + + stdout = stdout.decode("mbcs") + for line in stdout.split("\n"): + line = Reg.convert_mbcs(line) + if '=' not in line: + continue + line = line.strip() + key, value = line.split('=', 1) + key = key.lower() + if key in interesting: + if value.endswith(os.pathsep): + value = value[:-1] + result[key] = removeDuplicates(value) + + finally: + popen.stdout.close() + popen.stderr.close() + + if len(result) != len(interesting): + raise ValueError(str(list(result.keys()))) + + return result + +# More globals +VERSION = get_build_version() +if VERSION < 8.0: + raise DistutilsPlatformError("VC %0.1f is not supported by this module" % VERSION) +# MACROS = MacroExpander(VERSION) + +class MSVCCompiler(CCompiler) : + """Concrete class that implements an interface to Microsoft Visual C++, + as defined by the CCompiler abstract class.""" + + compiler_type = 'msvc' + + # Just set this so CCompiler's constructor doesn't barf. We currently + # don't use the 'set_executables()' bureaucracy provided by CCompiler, + # as it really isn't necessary for this sort of single-compiler class. + # Would be nice to have a consistent interface with UnixCCompiler, + # though, so it's worth thinking about. + executables = {} + + # Private class data (need to distinguish C from C++ source for compiler) + _c_extensions = ['.c'] + _cpp_extensions = ['.cc', '.cpp', '.cxx'] + _rc_extensions = ['.rc'] + _mc_extensions = ['.mc'] + + # Needed for the filename generation methods provided by the + # base class, CCompiler. + src_extensions = (_c_extensions + _cpp_extensions + + _rc_extensions + _mc_extensions) + res_extension = '.res' + obj_extension = '.obj' + static_lib_extension = '.lib' + shared_lib_extension = '.dll' + static_lib_format = shared_lib_format = '%s%s' + exe_extension = '.exe' + + def __init__(self, verbose=0, dry_run=0, force=0): + CCompiler.__init__ (self, verbose, dry_run, force) + self.__version = VERSION + self.__root = r"Software\Microsoft\VisualStudio" + # self.__macros = MACROS + self.__paths = [] + # target platform (.plat_name is consistent with 'bdist') + self.plat_name = None + self.__arch = None # deprecated name + self.initialized = False + + def initialize(self, plat_name=None): + # multi-init means we would need to check platform same each time... + assert not self.initialized, "don't init multiple times" + if plat_name is None: + plat_name = get_platform() + # sanity check for platforms to prevent obscure errors later. + ok_plats = 'win32', 'win-amd64', 'win-ia64' + if plat_name not in ok_plats: + raise DistutilsPlatformError("--plat-name must be one of %s" % + (ok_plats,)) + + if "DISTUTILS_USE_SDK" in os.environ and "MSSdk" in os.environ and self.find_exe("cl.exe"): + # Assume that the SDK set up everything alright; don't try to be + # smarter + self.cc = "cl.exe" + self.linker = "link.exe" + self.lib = "lib.exe" + self.rc = "rc.exe" + self.mc = "mc.exe" + else: + # On x86, 'vcvars32.bat amd64' creates an env that doesn't work; + # to cross compile, you use 'x86_amd64'. + # On AMD64, 'vcvars32.bat amd64' is a native build env; to cross + # compile use 'x86' (ie, it runs the x86 compiler directly) + # No idea how itanium handles this, if at all. + if plat_name == get_platform() or plat_name == 'win32': + # native build or cross-compile to win32 + plat_spec = PLAT_TO_VCVARS[plat_name] + else: + # cross compile from win32 -> some 64bit + plat_spec = PLAT_TO_VCVARS[get_platform()] + '_' + \ + PLAT_TO_VCVARS[plat_name] + + vc_env = query_vcvarsall(VERSION, plat_spec) + + self.__paths = vc_env['path'].split(os.pathsep) + os.environ['lib'] = vc_env['lib'] + os.environ['include'] = vc_env['include'] + + if len(self.__paths) == 0: + raise DistutilsPlatformError("Python was built with %s, " + "and extensions need to be built with the same " + "version of the compiler, but it isn't installed." + % self.__product) + + self.cc = self.find_exe("cl.exe") + self.linker = self.find_exe("link.exe") + self.lib = self.find_exe("lib.exe") + self.rc = self.find_exe("rc.exe") # resource compiler + self.mc = self.find_exe("mc.exe") # message compiler + #self.set_path_env_var('lib') + #self.set_path_env_var('include') + + # extend the MSVC path with the current path + try: + for p in os.environ['path'].split(';'): + self.__paths.append(p) + except KeyError: + pass + self.__paths = normalize_and_reduce_paths(self.__paths) + os.environ['path'] = ";".join(self.__paths) + + self.preprocess_options = None + if self.__arch == "x86": + self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', + '/DNDEBUG'] + self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', + '/Z7', '/D_DEBUG'] + else: + # Win64 + self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GS-' , + '/DNDEBUG'] + self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GS-', + '/Z7', '/D_DEBUG'] + + self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO'] + if self.__version >= 7: + self.ldflags_shared_debug = [ + '/DLL', '/nologo', '/INCREMENTAL:no', '/DEBUG' + ] + self.ldflags_static = [ '/nologo'] + + self.initialized = True + + # -- Worker methods ------------------------------------------------ + + def object_filenames(self, + source_filenames, + strip_dir=0, + output_dir=''): + # Copied from ccompiler.py, extended to return .res as 'object'-file + # for .rc input file + if output_dir is None: output_dir = '' + obj_names = [] + for src_name in source_filenames: + (base, ext) = os.path.splitext (src_name) + base = os.path.splitdrive(base)[1] # Chop off the drive + base = base[os.path.isabs(base):] # If abs, chop off leading / + if ext not in self.src_extensions: + # Better to raise an exception instead of silently continuing + # and later complain about sources and targets having + # different lengths + raise CompileError ("Don't know how to compile %s" % src_name) + if strip_dir: + base = os.path.basename (base) + if ext in self._rc_extensions: + obj_names.append (os.path.join (output_dir, + base + self.res_extension)) + elif ext in self._mc_extensions: + obj_names.append (os.path.join (output_dir, + base + self.res_extension)) + else: + obj_names.append (os.path.join (output_dir, + base + self.obj_extension)) + return obj_names + + + def compile(self, sources, + output_dir=None, macros=None, include_dirs=None, debug=0, + extra_preargs=None, extra_postargs=None, depends=None): + + if not self.initialized: + self.initialize() + compile_info = self._setup_compile(output_dir, macros, include_dirs, + sources, depends, extra_postargs) + macros, objects, extra_postargs, pp_opts, build = compile_info + + compile_opts = extra_preargs or [] + compile_opts.append ('/c') + if debug: + compile_opts.extend(self.compile_options_debug) + else: + compile_opts.extend(self.compile_options) + + for obj in objects: + try: + src, ext = build[obj] + except KeyError: + continue + if debug: + # pass the full pathname to MSVC in debug mode, + # this allows the debugger to find the source file + # without asking the user to browse for it + src = os.path.abspath(src) + + if ext in self._c_extensions: + input_opt = "/Tc" + src + elif ext in self._cpp_extensions: + input_opt = "/Tp" + src + elif ext in self._rc_extensions: + # compile .RC to .RES file + input_opt = src + output_opt = "/fo" + obj + try: + self.spawn([self.rc] + pp_opts + + [output_opt] + [input_opt]) + except DistutilsExecError as msg: + raise CompileError(msg) + continue + elif ext in self._mc_extensions: + # Compile .MC to .RC file to .RES file. + # * '-h dir' specifies the directory for the + # generated include file + # * '-r dir' specifies the target directory of the + # generated RC file and the binary message resource + # it includes + # + # For now (since there are no options to change this), + # we use the source-directory for the include file and + # the build directory for the RC file and message + # resources. This works at least for win32all. + h_dir = os.path.dirname(src) + rc_dir = os.path.dirname(obj) + try: + # first compile .MC to .RC and .H file + self.spawn([self.mc] + + ['-h', h_dir, '-r', rc_dir] + [src]) + base, _ = os.path.splitext (os.path.basename (src)) + rc_file = os.path.join (rc_dir, base + '.rc') + # then compile .RC to .RES file + self.spawn([self.rc] + + ["/fo" + obj] + [rc_file]) + + except DistutilsExecError as msg: + raise CompileError(msg) + continue + else: + # how to handle this file? + raise CompileError("Don't know how to compile %s to %s" + % (src, obj)) + + output_opt = "/Fo" + obj + try: + self.spawn([self.cc] + compile_opts + pp_opts + + [input_opt, output_opt] + + extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + + return objects + + + def create_static_lib(self, + objects, + output_libname, + output_dir=None, + debug=0, + target_lang=None): + + if not self.initialized: + self.initialize() + (objects, output_dir) = self._fix_object_args(objects, output_dir) + output_filename = self.library_filename(output_libname, + output_dir=output_dir) + + if self._need_link(objects, output_filename): + lib_args = objects + ['/OUT:' + output_filename] + if debug: + pass # XXX what goes here? + try: + self.spawn([self.lib] + lib_args) + except DistutilsExecError as msg: + raise LibError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + + def link(self, + target_desc, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + + if not self.initialized: + self.initialize() + (objects, output_dir) = self._fix_object_args(objects, output_dir) + fixed_args = self._fix_lib_args(libraries, library_dirs, + runtime_library_dirs) + (libraries, library_dirs, runtime_library_dirs) = fixed_args + + if runtime_library_dirs: + self.warn ("I don't know what to do with 'runtime_library_dirs': " + + str (runtime_library_dirs)) + + lib_opts = gen_lib_options(self, + library_dirs, runtime_library_dirs, + libraries) + if output_dir is not None: + output_filename = os.path.join(output_dir, output_filename) + + if self._need_link(objects, output_filename): + if target_desc == CCompiler.EXECUTABLE: + if debug: + ldflags = self.ldflags_shared_debug[1:] + else: + ldflags = self.ldflags_shared[1:] + else: + if debug: + ldflags = self.ldflags_shared_debug + else: + ldflags = self.ldflags_shared + + export_opts = [] + for sym in (export_symbols or []): + export_opts.append("/EXPORT:" + sym) + + ld_args = (ldflags + lib_opts + export_opts + + objects + ['/OUT:' + output_filename]) + + # The MSVC linker generates .lib and .exp files, which cannot be + # suppressed by any linker switches. The .lib files may even be + # needed! Make sure they are generated in the temporary build + # directory. Since they have different names for debug and release + # builds, they can go into the same directory. + build_temp = os.path.dirname(objects[0]) + if export_symbols is not None: + (dll_name, dll_ext) = os.path.splitext( + os.path.basename(output_filename)) + implib_file = os.path.join( + build_temp, + self.library_filename(dll_name)) + ld_args.append ('/IMPLIB:' + implib_file) + + self.manifest_setup_ldargs(output_filename, build_temp, ld_args) + + if extra_preargs: + ld_args[:0] = extra_preargs + if extra_postargs: + ld_args.extend(extra_postargs) + + self.mkpath(os.path.dirname(output_filename)) + try: + self.spawn([self.linker] + ld_args) + except DistutilsExecError as msg: + raise LinkError(msg) + + # embed the manifest + # XXX - this is somewhat fragile - if mt.exe fails, distutils + # will still consider the DLL up-to-date, but it will not have a + # manifest. Maybe we should link to a temp file? OTOH, that + # implies a build environment error that shouldn't go undetected. + mfinfo = self.manifest_get_embed_info(target_desc, ld_args) + if mfinfo is not None: + mffilename, mfid = mfinfo + out_arg = '-outputresource:%s;%s' % (output_filename, mfid) + try: + self.spawn(['mt.exe', '-nologo', '-manifest', + mffilename, out_arg]) + except DistutilsExecError as msg: + raise LinkError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + def manifest_setup_ldargs(self, output_filename, build_temp, ld_args): + # If we need a manifest at all, an embedded manifest is recommended. + # See MSDN article titled + # "How to: Embed a Manifest Inside a C/C++ Application" + # (currently at http://msdn2.microsoft.com/en-us/library/ms235591(VS.80).aspx) + # Ask the linker to generate the manifest in the temp dir, so + # we can check it, and possibly embed it, later. + temp_manifest = os.path.join( + build_temp, + os.path.basename(output_filename) + ".manifest") + ld_args.append('/MANIFESTFILE:' + temp_manifest) + + def manifest_get_embed_info(self, target_desc, ld_args): + # If a manifest should be embedded, return a tuple of + # (manifest_filename, resource_id). Returns None if no manifest + # should be embedded. See http://bugs.python.org/issue7833 for why + # we want to avoid any manifest for extension modules if we can) + for arg in ld_args: + if arg.startswith("/MANIFESTFILE:"): + temp_manifest = arg.split(":", 1)[1] + break + else: + # no /MANIFESTFILE so nothing to do. + return None + if target_desc == CCompiler.EXECUTABLE: + # by default, executables always get the manifest with the + # CRT referenced. + mfid = 1 + else: + # Extension modules try and avoid any manifest if possible. + mfid = 2 + temp_manifest = self._remove_visual_c_ref(temp_manifest) + if temp_manifest is None: + return None + return temp_manifest, mfid + + def _remove_visual_c_ref(self, manifest_file): + try: + # Remove references to the Visual C runtime, so they will + # fall through to the Visual C dependency of Python.exe. + # This way, when installed for a restricted user (e.g. + # runtimes are not in WinSxS folder, but in Python's own + # folder), the runtimes do not need to be in every folder + # with .pyd's. + # Returns either the filename of the modified manifest or + # None if no manifest should be embedded. + manifest_f = open(manifest_file) + try: + manifest_buf = manifest_f.read() + finally: + manifest_f.close() + pattern = re.compile( + r"""|)""", + re.DOTALL) + manifest_buf = re.sub(pattern, "", manifest_buf) + pattern = r"\s*" + manifest_buf = re.sub(pattern, "", manifest_buf) + # Now see if any other assemblies are referenced - if not, we + # don't want a manifest embedded. + pattern = re.compile( + r"""|)""", re.DOTALL) + if re.search(pattern, manifest_buf) is None: + return None + + manifest_f = open(manifest_file, 'w') + try: + manifest_f.write(manifest_buf) + return manifest_file + finally: + manifest_f.close() + except OSError: + pass + + # -- Miscellaneous methods ----------------------------------------- + # These are all used by the 'gen_lib_options() function, in + # ccompiler.py. + + def library_dir_option(self, dir): + return "/LIBPATH:" + dir + + def runtime_library_dir_option(self, dir): + raise DistutilsPlatformError( + "don't know how to set runtime library search path for MSVC++") + + def library_option(self, lib): + return self.library_filename(lib) + + + def find_library_file(self, dirs, lib, debug=0): + # Prefer a debugging library if found (and requested), but deal + # with it if we don't have one. + if debug: + try_names = [lib + "_d", lib] + else: + try_names = [lib] + for dir in dirs: + for name in try_names: + libfile = os.path.join(dir, self.library_filename (name)) + if os.path.exists(libfile): + return libfile + else: + # Oops, didn't find it in *any* of 'dirs' + return None + + # Helper methods for using the MSVC registry settings + + def find_exe(self, exe): + """Return path to an MSVC executable program. + + Tries to find the program in several places: first, one of the + MSVC program search paths from the registry; next, the directories + in the PATH environment variable. If any of those work, return an + absolute path that is known to exist. If none of them work, just + return the original program name, 'exe'. + """ + for p in self.__paths: + fn = os.path.join(os.path.abspath(p), exe) + if os.path.isfile(fn): + return fn + + # didn't find it; try existing path + for p in os.environ['Path'].split(';'): + fn = os.path.join(os.path.abspath(p),exe) + if os.path.isfile(fn): + return fn + + return exe diff --git a/distutils/distutils/msvccompiler.py b/distutils/distutils/msvccompiler.py new file mode 100644 index 0000000..1048cd4 --- /dev/null +++ b/distutils/distutils/msvccompiler.py @@ -0,0 +1,643 @@ +"""distutils.msvccompiler + +Contains MSVCCompiler, an implementation of the abstract CCompiler class +for the Microsoft Visual Studio. +""" + +# Written by Perry Stoll +# hacked by Robin Becker and Thomas Heller to do a better job of +# finding DevStudio (through the registry) + +import sys, os +from distutils.errors import \ + DistutilsExecError, DistutilsPlatformError, \ + CompileError, LibError, LinkError +from distutils.ccompiler import \ + CCompiler, gen_preprocess_options, gen_lib_options +from distutils import log + +_can_read_reg = False +try: + import winreg + + _can_read_reg = True + hkey_mod = winreg + + RegOpenKeyEx = winreg.OpenKeyEx + RegEnumKey = winreg.EnumKey + RegEnumValue = winreg.EnumValue + RegError = winreg.error + +except ImportError: + try: + import win32api + import win32con + _can_read_reg = True + hkey_mod = win32con + + RegOpenKeyEx = win32api.RegOpenKeyEx + RegEnumKey = win32api.RegEnumKey + RegEnumValue = win32api.RegEnumValue + RegError = win32api.error + except ImportError: + log.info("Warning: Can't read registry to find the " + "necessary compiler setting\n" + "Make sure that Python modules winreg, " + "win32api or win32con are installed.") + pass + +if _can_read_reg: + HKEYS = (hkey_mod.HKEY_USERS, + hkey_mod.HKEY_CURRENT_USER, + hkey_mod.HKEY_LOCAL_MACHINE, + hkey_mod.HKEY_CLASSES_ROOT) + +def read_keys(base, key): + """Return list of registry keys.""" + try: + handle = RegOpenKeyEx(base, key) + except RegError: + return None + L = [] + i = 0 + while True: + try: + k = RegEnumKey(handle, i) + except RegError: + break + L.append(k) + i += 1 + return L + +def read_values(base, key): + """Return dict of registry keys and values. + + All names are converted to lowercase. + """ + try: + handle = RegOpenKeyEx(base, key) + except RegError: + return None + d = {} + i = 0 + while True: + try: + name, value, type = RegEnumValue(handle, i) + except RegError: + break + name = name.lower() + d[convert_mbcs(name)] = convert_mbcs(value) + i += 1 + return d + +def convert_mbcs(s): + dec = getattr(s, "decode", None) + if dec is not None: + try: + s = dec("mbcs") + except UnicodeError: + pass + return s + +class MacroExpander: + def __init__(self, version): + self.macros = {} + self.load_macros(version) + + def set_macro(self, macro, path, key): + for base in HKEYS: + d = read_values(base, path) + if d: + self.macros["$(%s)" % macro] = d[key] + break + + def load_macros(self, version): + vsbase = r"Software\Microsoft\VisualStudio\%0.1f" % version + self.set_macro("VCInstallDir", vsbase + r"\Setup\VC", "productdir") + self.set_macro("VSInstallDir", vsbase + r"\Setup\VS", "productdir") + net = r"Software\Microsoft\.NETFramework" + self.set_macro("FrameworkDir", net, "installroot") + try: + if version > 7.0: + self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1") + else: + self.set_macro("FrameworkSDKDir", net, "sdkinstallroot") + except KeyError as exc: # + raise DistutilsPlatformError( + """Python was built with Visual Studio 2003; +extensions must be built with a compiler than can generate compatible binaries. +Visual Studio 2003 was not found on this system. If you have Cygwin installed, +you can try compiling with MingW32, by passing "-c mingw32" to setup.py.""") + + p = r"Software\Microsoft\NET Framework Setup\Product" + for base in HKEYS: + try: + h = RegOpenKeyEx(base, p) + except RegError: + continue + key = RegEnumKey(h, 0) + d = read_values(base, r"%s\%s" % (p, key)) + self.macros["$(FrameworkVersion)"] = d["version"] + + def sub(self, s): + for k, v in self.macros.items(): + s = s.replace(k, v) + return s + +def get_build_version(): + """Return the version of MSVC that was used to build Python. + + For Python 2.3 and up, the version number is included in + sys.version. For earlier versions, assume the compiler is MSVC 6. + """ + prefix = "MSC v." + i = sys.version.find(prefix) + if i == -1: + return 6 + i = i + len(prefix) + s, rest = sys.version[i:].split(" ", 1) + majorVersion = int(s[:-2]) - 6 + if majorVersion >= 13: + # v13 was skipped and should be v14 + majorVersion += 1 + minorVersion = int(s[2:3]) / 10.0 + # I don't think paths are affected by minor version in version 6 + if majorVersion == 6: + minorVersion = 0 + if majorVersion >= 6: + return majorVersion + minorVersion + # else we don't know what version of the compiler this is + return None + +def get_build_architecture(): + """Return the processor architecture. + + Possible results are "Intel", "Itanium", or "AMD64". + """ + + prefix = " bit (" + i = sys.version.find(prefix) + if i == -1: + return "Intel" + j = sys.version.find(")", i) + return sys.version[i+len(prefix):j] + +def normalize_and_reduce_paths(paths): + """Return a list of normalized paths with duplicates removed. + + The current order of paths is maintained. + """ + # Paths are normalized so things like: /a and /a/ aren't both preserved. + reduced_paths = [] + for p in paths: + np = os.path.normpath(p) + # XXX(nnorwitz): O(n**2), if reduced_paths gets long perhaps use a set. + if np not in reduced_paths: + reduced_paths.append(np) + return reduced_paths + + +class MSVCCompiler(CCompiler) : + """Concrete class that implements an interface to Microsoft Visual C++, + as defined by the CCompiler abstract class.""" + + compiler_type = 'msvc' + + # Just set this so CCompiler's constructor doesn't barf. We currently + # don't use the 'set_executables()' bureaucracy provided by CCompiler, + # as it really isn't necessary for this sort of single-compiler class. + # Would be nice to have a consistent interface with UnixCCompiler, + # though, so it's worth thinking about. + executables = {} + + # Private class data (need to distinguish C from C++ source for compiler) + _c_extensions = ['.c'] + _cpp_extensions = ['.cc', '.cpp', '.cxx'] + _rc_extensions = ['.rc'] + _mc_extensions = ['.mc'] + + # Needed for the filename generation methods provided by the + # base class, CCompiler. + src_extensions = (_c_extensions + _cpp_extensions + + _rc_extensions + _mc_extensions) + res_extension = '.res' + obj_extension = '.obj' + static_lib_extension = '.lib' + shared_lib_extension = '.dll' + static_lib_format = shared_lib_format = '%s%s' + exe_extension = '.exe' + + def __init__(self, verbose=0, dry_run=0, force=0): + CCompiler.__init__ (self, verbose, dry_run, force) + self.__version = get_build_version() + self.__arch = get_build_architecture() + if self.__arch == "Intel": + # x86 + if self.__version >= 7: + self.__root = r"Software\Microsoft\VisualStudio" + self.__macros = MacroExpander(self.__version) + else: + self.__root = r"Software\Microsoft\Devstudio" + self.__product = "Visual Studio version %s" % self.__version + else: + # Win64. Assume this was built with the platform SDK + self.__product = "Microsoft SDK compiler %s" % (self.__version + 6) + + self.initialized = False + + def initialize(self): + self.__paths = [] + if "DISTUTILS_USE_SDK" in os.environ and "MSSdk" in os.environ and self.find_exe("cl.exe"): + # Assume that the SDK set up everything alright; don't try to be + # smarter + self.cc = "cl.exe" + self.linker = "link.exe" + self.lib = "lib.exe" + self.rc = "rc.exe" + self.mc = "mc.exe" + else: + self.__paths = self.get_msvc_paths("path") + + if len(self.__paths) == 0: + raise DistutilsPlatformError("Python was built with %s, " + "and extensions need to be built with the same " + "version of the compiler, but it isn't installed." + % self.__product) + + self.cc = self.find_exe("cl.exe") + self.linker = self.find_exe("link.exe") + self.lib = self.find_exe("lib.exe") + self.rc = self.find_exe("rc.exe") # resource compiler + self.mc = self.find_exe("mc.exe") # message compiler + self.set_path_env_var('lib') + self.set_path_env_var('include') + + # extend the MSVC path with the current path + try: + for p in os.environ['path'].split(';'): + self.__paths.append(p) + except KeyError: + pass + self.__paths = normalize_and_reduce_paths(self.__paths) + os.environ['path'] = ";".join(self.__paths) + + self.preprocess_options = None + if self.__arch == "Intel": + self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' , + '/DNDEBUG'] + self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX', + '/Z7', '/D_DEBUG'] + else: + # Win64 + self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GS-' , + '/DNDEBUG'] + self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GS-', + '/Z7', '/D_DEBUG'] + + self.ldflags_shared = ['/DLL', '/nologo', '/INCREMENTAL:NO'] + if self.__version >= 7: + self.ldflags_shared_debug = [ + '/DLL', '/nologo', '/INCREMENTAL:no', '/DEBUG' + ] + else: + self.ldflags_shared_debug = [ + '/DLL', '/nologo', '/INCREMENTAL:no', '/pdb:None', '/DEBUG' + ] + self.ldflags_static = [ '/nologo'] + + self.initialized = True + + # -- Worker methods ------------------------------------------------ + + def object_filenames(self, + source_filenames, + strip_dir=0, + output_dir=''): + # Copied from ccompiler.py, extended to return .res as 'object'-file + # for .rc input file + if output_dir is None: output_dir = '' + obj_names = [] + for src_name in source_filenames: + (base, ext) = os.path.splitext (src_name) + base = os.path.splitdrive(base)[1] # Chop off the drive + base = base[os.path.isabs(base):] # If abs, chop off leading / + if ext not in self.src_extensions: + # Better to raise an exception instead of silently continuing + # and later complain about sources and targets having + # different lengths + raise CompileError ("Don't know how to compile %s" % src_name) + if strip_dir: + base = os.path.basename (base) + if ext in self._rc_extensions: + obj_names.append (os.path.join (output_dir, + base + self.res_extension)) + elif ext in self._mc_extensions: + obj_names.append (os.path.join (output_dir, + base + self.res_extension)) + else: + obj_names.append (os.path.join (output_dir, + base + self.obj_extension)) + return obj_names + + + def compile(self, sources, + output_dir=None, macros=None, include_dirs=None, debug=0, + extra_preargs=None, extra_postargs=None, depends=None): + + if not self.initialized: + self.initialize() + compile_info = self._setup_compile(output_dir, macros, include_dirs, + sources, depends, extra_postargs) + macros, objects, extra_postargs, pp_opts, build = compile_info + + compile_opts = extra_preargs or [] + compile_opts.append ('/c') + if debug: + compile_opts.extend(self.compile_options_debug) + else: + compile_opts.extend(self.compile_options) + + for obj in objects: + try: + src, ext = build[obj] + except KeyError: + continue + if debug: + # pass the full pathname to MSVC in debug mode, + # this allows the debugger to find the source file + # without asking the user to browse for it + src = os.path.abspath(src) + + if ext in self._c_extensions: + input_opt = "/Tc" + src + elif ext in self._cpp_extensions: + input_opt = "/Tp" + src + elif ext in self._rc_extensions: + # compile .RC to .RES file + input_opt = src + output_opt = "/fo" + obj + try: + self.spawn([self.rc] + pp_opts + + [output_opt] + [input_opt]) + except DistutilsExecError as msg: + raise CompileError(msg) + continue + elif ext in self._mc_extensions: + # Compile .MC to .RC file to .RES file. + # * '-h dir' specifies the directory for the + # generated include file + # * '-r dir' specifies the target directory of the + # generated RC file and the binary message resource + # it includes + # + # For now (since there are no options to change this), + # we use the source-directory for the include file and + # the build directory for the RC file and message + # resources. This works at least for win32all. + h_dir = os.path.dirname(src) + rc_dir = os.path.dirname(obj) + try: + # first compile .MC to .RC and .H file + self.spawn([self.mc] + + ['-h', h_dir, '-r', rc_dir] + [src]) + base, _ = os.path.splitext (os.path.basename (src)) + rc_file = os.path.join (rc_dir, base + '.rc') + # then compile .RC to .RES file + self.spawn([self.rc] + + ["/fo" + obj] + [rc_file]) + + except DistutilsExecError as msg: + raise CompileError(msg) + continue + else: + # how to handle this file? + raise CompileError("Don't know how to compile %s to %s" + % (src, obj)) + + output_opt = "/Fo" + obj + try: + self.spawn([self.cc] + compile_opts + pp_opts + + [input_opt, output_opt] + + extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + + return objects + + + def create_static_lib(self, + objects, + output_libname, + output_dir=None, + debug=0, + target_lang=None): + + if not self.initialized: + self.initialize() + (objects, output_dir) = self._fix_object_args(objects, output_dir) + output_filename = self.library_filename(output_libname, + output_dir=output_dir) + + if self._need_link(objects, output_filename): + lib_args = objects + ['/OUT:' + output_filename] + if debug: + pass # XXX what goes here? + try: + self.spawn([self.lib] + lib_args) + except DistutilsExecError as msg: + raise LibError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + + def link(self, + target_desc, + objects, + output_filename, + output_dir=None, + libraries=None, + library_dirs=None, + runtime_library_dirs=None, + export_symbols=None, + debug=0, + extra_preargs=None, + extra_postargs=None, + build_temp=None, + target_lang=None): + + if not self.initialized: + self.initialize() + (objects, output_dir) = self._fix_object_args(objects, output_dir) + fixed_args = self._fix_lib_args(libraries, library_dirs, + runtime_library_dirs) + (libraries, library_dirs, runtime_library_dirs) = fixed_args + + if runtime_library_dirs: + self.warn ("I don't know what to do with 'runtime_library_dirs': " + + str (runtime_library_dirs)) + + lib_opts = gen_lib_options(self, + library_dirs, runtime_library_dirs, + libraries) + if output_dir is not None: + output_filename = os.path.join(output_dir, output_filename) + + if self._need_link(objects, output_filename): + if target_desc == CCompiler.EXECUTABLE: + if debug: + ldflags = self.ldflags_shared_debug[1:] + else: + ldflags = self.ldflags_shared[1:] + else: + if debug: + ldflags = self.ldflags_shared_debug + else: + ldflags = self.ldflags_shared + + export_opts = [] + for sym in (export_symbols or []): + export_opts.append("/EXPORT:" + sym) + + ld_args = (ldflags + lib_opts + export_opts + + objects + ['/OUT:' + output_filename]) + + # The MSVC linker generates .lib and .exp files, which cannot be + # suppressed by any linker switches. The .lib files may even be + # needed! Make sure they are generated in the temporary build + # directory. Since they have different names for debug and release + # builds, they can go into the same directory. + if export_symbols is not None: + (dll_name, dll_ext) = os.path.splitext( + os.path.basename(output_filename)) + implib_file = os.path.join( + os.path.dirname(objects[0]), + self.library_filename(dll_name)) + ld_args.append ('/IMPLIB:' + implib_file) + + if extra_preargs: + ld_args[:0] = extra_preargs + if extra_postargs: + ld_args.extend(extra_postargs) + + self.mkpath(os.path.dirname(output_filename)) + try: + self.spawn([self.linker] + ld_args) + except DistutilsExecError as msg: + raise LinkError(msg) + + else: + log.debug("skipping %s (up-to-date)", output_filename) + + + # -- Miscellaneous methods ----------------------------------------- + # These are all used by the 'gen_lib_options() function, in + # ccompiler.py. + + def library_dir_option(self, dir): + return "/LIBPATH:" + dir + + def runtime_library_dir_option(self, dir): + raise DistutilsPlatformError( + "don't know how to set runtime library search path for MSVC++") + + def library_option(self, lib): + return self.library_filename(lib) + + + def find_library_file(self, dirs, lib, debug=0): + # Prefer a debugging library if found (and requested), but deal + # with it if we don't have one. + if debug: + try_names = [lib + "_d", lib] + else: + try_names = [lib] + for dir in dirs: + for name in try_names: + libfile = os.path.join(dir, self.library_filename (name)) + if os.path.exists(libfile): + return libfile + else: + # Oops, didn't find it in *any* of 'dirs' + return None + + # Helper methods for using the MSVC registry settings + + def find_exe(self, exe): + """Return path to an MSVC executable program. + + Tries to find the program in several places: first, one of the + MSVC program search paths from the registry; next, the directories + in the PATH environment variable. If any of those work, return an + absolute path that is known to exist. If none of them work, just + return the original program name, 'exe'. + """ + for p in self.__paths: + fn = os.path.join(os.path.abspath(p), exe) + if os.path.isfile(fn): + return fn + + # didn't find it; try existing path + for p in os.environ['Path'].split(';'): + fn = os.path.join(os.path.abspath(p),exe) + if os.path.isfile(fn): + return fn + + return exe + + def get_msvc_paths(self, path, platform='x86'): + """Get a list of devstudio directories (include, lib or path). + + Return a list of strings. The list will be empty if unable to + access the registry or appropriate registry keys not found. + """ + if not _can_read_reg: + return [] + + path = path + " dirs" + if self.__version >= 7: + key = (r"%s\%0.1f\VC\VC_OBJECTS_PLATFORM_INFO\Win32\Directories" + % (self.__root, self.__version)) + else: + key = (r"%s\6.0\Build System\Components\Platforms" + r"\Win32 (%s)\Directories" % (self.__root, platform)) + + for base in HKEYS: + d = read_values(base, key) + if d: + if self.__version >= 7: + return self.__macros.sub(d[path]).split(";") + else: + return d[path].split(";") + # MSVC 6 seems to create the registry entries we need only when + # the GUI is run. + if self.__version == 6: + for base in HKEYS: + if read_values(base, r"%s\6.0" % self.__root) is not None: + self.warn("It seems you have Visual Studio 6 installed, " + "but the expected registry settings are not present.\n" + "You must at least run the Visual Studio GUI once " + "so that these entries are created.") + break + return [] + + def set_path_env_var(self, name): + """Set environment variable 'name' to an MSVC path type value. + + This is equivalent to a SET command prior to execution of spawned + commands. + """ + + if name == "lib": + p = self.get_msvc_paths("library") + else: + p = self.get_msvc_paths(name) + if p: + os.environ[name] = ';'.join(p) + + +if get_build_version() >= 8.0: + log.debug("Importing new compiler from distutils.msvc9compiler") + OldMSVCCompiler = MSVCCompiler + from distutils.msvc9compiler import MSVCCompiler + # get_build_architecture not really relevant now we support cross-compile + from distutils.msvc9compiler import MacroExpander diff --git a/distutils/distutils/spawn.py b/distutils/distutils/spawn.py new file mode 100644 index 0000000..5387688 --- /dev/null +++ b/distutils/distutils/spawn.py @@ -0,0 +1,192 @@ +"""distutils.spawn + +Provides the 'spawn()' function, a front-end to various platform- +specific functions for launching another program in a sub-process. +Also provides the 'find_executable()' to search the path for a given +executable name. +""" + +import sys +import os + +from distutils.errors import DistutilsPlatformError, DistutilsExecError +from distutils.debug import DEBUG +from distutils import log + +def spawn(cmd, search_path=1, verbose=0, dry_run=0): + """Run another program, specified as a command list 'cmd', in a new process. + + 'cmd' is just the argument list for the new process, ie. + cmd[0] is the program to run and cmd[1:] are the rest of its arguments. + There is no way to run a program with a name different from that of its + executable. + + If 'search_path' is true (the default), the system's executable + search path will be used to find the program; otherwise, cmd[0] + must be the exact path to the executable. If 'dry_run' is true, + the command will not actually be run. + + Raise DistutilsExecError if running the program fails in any way; just + return on success. + """ + # cmd is documented as a list, but just in case some code passes a tuple + # in, protect our %-formatting code against horrible death + cmd = list(cmd) + if os.name == 'posix': + _spawn_posix(cmd, search_path, dry_run=dry_run) + elif os.name == 'nt': + _spawn_nt(cmd, search_path, dry_run=dry_run) + else: + raise DistutilsPlatformError( + "don't know how to spawn programs on platform '%s'" % os.name) + +def _nt_quote_args(args): + """Quote command-line arguments for DOS/Windows conventions. + + Just wraps every argument which contains blanks in double quotes, and + returns a new argument list. + """ + # XXX this doesn't seem very robust to me -- but if the Windows guys + # say it'll work, I guess I'll have to accept it. (What if an arg + # contains quotes? What other magic characters, other than spaces, + # have to be escaped? Is there an escaping mechanism other than + # quoting?) + for i, arg in enumerate(args): + if ' ' in arg: + args[i] = '"%s"' % arg + return args + +def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0): + executable = cmd[0] + cmd = _nt_quote_args(cmd) + if search_path: + # either we find one or it stays the same + executable = find_executable(executable) or executable + log.info(' '.join([executable] + cmd[1:])) + if not dry_run: + # spawn for NT requires a full path to the .exe + try: + rc = os.spawnv(os.P_WAIT, executable, cmd) + except OSError as exc: + # this seems to happen when the command isn't found + if not DEBUG: + cmd = executable + raise DistutilsExecError( + "command %r failed: %s" % (cmd, exc.args[-1])) + if rc != 0: + # and this reflects the command running but failing + if not DEBUG: + cmd = executable + raise DistutilsExecError( + "command %r failed with exit status %d" % (cmd, rc)) + +if sys.platform == 'darwin': + from distutils import sysconfig + _cfg_target = None + _cfg_target_split = None + +def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0): + log.info(' '.join(cmd)) + if dry_run: + return + executable = cmd[0] + exec_fn = search_path and os.execvp or os.execv + env = None + if sys.platform == 'darwin': + global _cfg_target, _cfg_target_split + if _cfg_target is None: + _cfg_target = sysconfig.get_config_var( + 'MACOSX_DEPLOYMENT_TARGET') or '' + if _cfg_target: + _cfg_target_split = [int(x) for x in _cfg_target.split('.')] + if _cfg_target: + # ensure that the deployment target of build process is not less + # than that used when the interpreter was built. This ensures + # extension modules are built with correct compatibility values + cur_target = os.environ.get('MACOSX_DEPLOYMENT_TARGET', _cfg_target) + if _cfg_target_split > [int(x) for x in cur_target.split('.')]: + my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: ' + 'now "%s" but "%s" during configure' + % (cur_target, _cfg_target)) + raise DistutilsPlatformError(my_msg) + env = dict(os.environ, + MACOSX_DEPLOYMENT_TARGET=cur_target) + exec_fn = search_path and os.execvpe or os.execve + pid = os.fork() + if pid == 0: # in the child + try: + if env is None: + exec_fn(executable, cmd) + else: + exec_fn(executable, cmd, env) + except OSError as e: + if not DEBUG: + cmd = executable + sys.stderr.write("unable to execute %r: %s\n" + % (cmd, e.strerror)) + os._exit(1) + + if not DEBUG: + cmd = executable + sys.stderr.write("unable to execute %r for unknown reasons" % cmd) + os._exit(1) + else: # in the parent + # Loop until the child either exits or is terminated by a signal + # (ie. keep waiting if it's merely stopped) + while True: + try: + pid, status = os.waitpid(pid, 0) + except OSError as exc: + if not DEBUG: + cmd = executable + raise DistutilsExecError( + "command %r failed: %s" % (cmd, exc.args[-1])) + if os.WIFSIGNALED(status): + if not DEBUG: + cmd = executable + raise DistutilsExecError( + "command %r terminated by signal %d" + % (cmd, os.WTERMSIG(status))) + elif os.WIFEXITED(status): + exit_status = os.WEXITSTATUS(status) + if exit_status == 0: + return # hey, it succeeded! + else: + if not DEBUG: + cmd = executable + raise DistutilsExecError( + "command %r failed with exit status %d" + % (cmd, exit_status)) + elif os.WIFSTOPPED(status): + continue + else: + if not DEBUG: + cmd = executable + raise DistutilsExecError( + "unknown error executing %r: termination status %d" + % (cmd, status)) + +def find_executable(executable, path=None): + """Tries to find 'executable' in the directories listed in 'path'. + + A string listing directories separated by 'os.pathsep'; defaults to + os.environ['PATH']. Returns the complete filename or None if not found. + """ + if path is None: + path = os.environ.get('PATH', os.defpath) + + paths = path.split(os.pathsep) + base, ext = os.path.splitext(executable) + + if (sys.platform == 'win32') and (ext != '.exe'): + executable = executable + '.exe' + + if not os.path.isfile(executable): + for p in paths: + f = os.path.join(p, executable) + if os.path.isfile(f): + # the file exists, we have a shot at spawn working + return f + return None + else: + return executable diff --git a/distutils/distutils/sysconfig.py b/distutils/distutils/sysconfig.py new file mode 100644 index 0000000..2bcd1dd --- /dev/null +++ b/distutils/distutils/sysconfig.py @@ -0,0 +1,532 @@ +"""Provide access to Python's configuration information. The specific +configuration variables available depend heavily on the platform and +configuration. The values may be retrieved using +get_config_var(name), and the list of variables is available via +get_config_vars().keys(). Additional convenience functions are also +available. + +Written by: Fred L. Drake, Jr. +Email: +""" + +import _imp +import os +import re +import sys + +from .errors import DistutilsPlatformError + +# These are needed in a couple of spots, so just compute them once. +PREFIX = os.path.normpath(sys.prefix) +EXEC_PREFIX = os.path.normpath(sys.exec_prefix) +BASE_PREFIX = os.path.normpath(sys.base_prefix) +BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) + +# Path to the base directory of the project. On Windows the binary may +# live in project/PCBuild/win32 or project/PCBuild/amd64. +# set for cross builds +if "_PYTHON_PROJECT_BASE" in os.environ: + project_base = os.path.abspath(os.environ["_PYTHON_PROJECT_BASE"]) +else: + project_base = os.path.dirname(os.path.abspath(sys.executable)) +if (os.name == 'nt' and + project_base.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))): + project_base = os.path.dirname(os.path.dirname(project_base)) + +# python_build: (Boolean) if true, we're either building Python or +# building an extension with an un-installed Python, so we use +# different (hard-wired) directories. +# Setup.local is available for Makefile builds including VPATH builds, +# Setup.dist is available on Windows +def _is_python_source_dir(d): + for fn in ("Setup.dist", "Setup.local"): + if os.path.isfile(os.path.join(d, "Modules", fn)): + return True + return False +_sys_home = getattr(sys, '_home', None) +if (_sys_home and os.name == 'nt' and + _sys_home.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))): + _sys_home = os.path.dirname(os.path.dirname(_sys_home)) +def _python_build(): + if _sys_home: + return _is_python_source_dir(_sys_home) + return _is_python_source_dir(project_base) +python_build = _python_build() + +# Calculate the build qualifier flags if they are defined. Adding the flags +# to the include and lib directories only makes sense for an installation, not +# an in-source build. +build_flags = '' +try: + if not python_build: + build_flags = sys.abiflags +except AttributeError: + # It's not a configure-based build, so the sys module doesn't have + # this attribute, which is fine. + pass + +def get_python_version(): + """Return a string containing the major and minor Python version, + leaving off the patchlevel. Sample return values could be '1.5' + or '2.2'. + """ + return '%d.%d' % sys.version_info[:2] + + +def get_python_inc(plat_specific=0, prefix=None): + """Return the directory containing installed Python header files. + + If 'plat_specific' is false (the default), this is the path to the + non-platform-specific header files, i.e. Python.h and so on; + otherwise, this is the path to platform-specific header files + (namely pyconfig.h). + + If 'prefix' is supplied, use it instead of sys.base_prefix or + sys.base_exec_prefix -- i.e., ignore 'plat_specific'. + """ + if prefix is None: + prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX + if os.name == "posix": + if python_build: + # Assume the executable is in the build directory. The + # pyconfig.h file should be in the same directory. Since + # the build directory may not be the source directory, we + # must use "srcdir" from the makefile to find the "Include" + # directory. + if plat_specific: + return _sys_home or project_base + else: + incdir = os.path.join(get_config_var('srcdir'), 'Include') + return os.path.normpath(incdir) + python_dir = 'python' + get_python_version() + build_flags + return os.path.join(prefix, "include", python_dir) + elif os.name == "nt": + return os.path.join(prefix, "include") + else: + raise DistutilsPlatformError( + "I don't know where Python installs its C header files " + "on platform '%s'" % os.name) + + +def get_python_lib(plat_specific=0, standard_lib=0, prefix=None): + """Return the directory containing the Python library (standard or + site additions). + + If 'plat_specific' is true, return the directory containing + platform-specific modules, i.e. any module from a non-pure-Python + module distribution; otherwise, return the platform-shared library + directory. If 'standard_lib' is true, return the directory + containing standard Python library modules; otherwise, return the + directory for site-specific modules. + + If 'prefix' is supplied, use it instead of sys.base_prefix or + sys.base_exec_prefix -- i.e., ignore 'plat_specific'. + """ + if prefix is None: + if standard_lib: + prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX + else: + prefix = plat_specific and EXEC_PREFIX or PREFIX + + if os.name == "posix": + libpython = os.path.join(prefix, + "lib", "python" + get_python_version()) + if standard_lib: + return libpython + else: + return os.path.join(libpython, "site-packages") + elif os.name == "nt": + if standard_lib: + return os.path.join(prefix, "Lib") + else: + return os.path.join(prefix, "Lib", "site-packages") + else: + raise DistutilsPlatformError( + "I don't know where Python installs its library " + "on platform '%s'" % os.name) + + + +def customize_compiler(compiler): + """Do any platform-specific customization of a CCompiler instance. + + Mainly needed on Unix, so we can plug in the information that + varies across Unices and is stored in Python's Makefile. + """ + if compiler.compiler_type == "unix": + if sys.platform == "darwin": + # Perform first-time customization of compiler-related + # config vars on OS X now that we know we need a compiler. + # This is primarily to support Pythons from binary + # installers. The kind and paths to build tools on + # the user system may vary significantly from the system + # that Python itself was built on. Also the user OS + # version and build tools may not support the same set + # of CPU architectures for universal builds. + global _config_vars + # Use get_config_var() to ensure _config_vars is initialized. + if not get_config_var('CUSTOMIZED_OSX_COMPILER'): + import _osx_support + _osx_support.customize_compiler(_config_vars) + _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' + + (cc, cxx, opt, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \ + get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS', + 'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') + + if 'CC' in os.environ: + newcc = os.environ['CC'] + if (sys.platform == 'darwin' + and 'LDSHARED' not in os.environ + and ldshared.startswith(cc)): + # On OS X, if CC is overridden, use that as the default + # command for LDSHARED as well + ldshared = newcc + ldshared[len(cc):] + cc = newcc + if 'CXX' in os.environ: + cxx = os.environ['CXX'] + if 'LDSHARED' in os.environ: + ldshared = os.environ['LDSHARED'] + if 'CPP' in os.environ: + cpp = os.environ['CPP'] + else: + cpp = cc + " -E" # not always + if 'LDFLAGS' in os.environ: + ldshared = ldshared + ' ' + os.environ['LDFLAGS'] + if 'CFLAGS' in os.environ: + cflags = opt + ' ' + os.environ['CFLAGS'] + ldshared = ldshared + ' ' + os.environ['CFLAGS'] + if 'CPPFLAGS' in os.environ: + cpp = cpp + ' ' + os.environ['CPPFLAGS'] + cflags = cflags + ' ' + os.environ['CPPFLAGS'] + ldshared = ldshared + ' ' + os.environ['CPPFLAGS'] + if 'AR' in os.environ: + ar = os.environ['AR'] + if 'ARFLAGS' in os.environ: + archiver = ar + ' ' + os.environ['ARFLAGS'] + else: + archiver = ar + ' ' + ar_flags + + cc_cmd = cc + ' ' + cflags + compiler.set_executables( + preprocessor=cpp, + compiler=cc_cmd, + compiler_so=cc_cmd + ' ' + ccshared, + compiler_cxx=cxx, + linker_so=ldshared, + linker_exe=cc, + archiver=archiver) + + compiler.shared_lib_extension = shlib_suffix + + +def get_config_h_filename(): + """Return full pathname of installed pyconfig.h file.""" + if python_build: + if os.name == "nt": + inc_dir = os.path.join(_sys_home or project_base, "PC") + else: + inc_dir = _sys_home or project_base + else: + inc_dir = get_python_inc(plat_specific=1) + + return os.path.join(inc_dir, 'pyconfig.h') + + +def get_makefile_filename(): + """Return full pathname of installed Makefile from the Python build.""" + if python_build: + return os.path.join(_sys_home or project_base, "Makefile") + lib_dir = get_python_lib(plat_specific=0, standard_lib=1) + config_file = 'config-{}{}'.format(get_python_version(), build_flags) + if hasattr(sys.implementation, '_multiarch'): + config_file += '-%s' % sys.implementation._multiarch + return os.path.join(lib_dir, config_file, 'Makefile') + + +def parse_config_h(fp, g=None): + """Parse a config.h-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + if g is None: + g = {} + define_rx = re.compile("#define ([A-Z][A-Za-z0-9_]+) (.*)\n") + undef_rx = re.compile("/[*] #undef ([A-Z][A-Za-z0-9_]+) [*]/\n") + # + while True: + line = fp.readline() + if not line: + break + m = define_rx.match(line) + if m: + n, v = m.group(1, 2) + try: v = int(v) + except ValueError: pass + g[n] = v + else: + m = undef_rx.match(line) + if m: + g[m.group(1)] = 0 + return g + + +# Regexes needed for parsing Makefile (and similar syntaxes, +# like old-style Setup files). +_variable_rx = re.compile(r"([a-zA-Z][a-zA-Z0-9_]+)\s*=\s*(.*)") +_findvar1_rx = re.compile(r"\$\(([A-Za-z][A-Za-z0-9_]*)\)") +_findvar2_rx = re.compile(r"\${([A-Za-z][A-Za-z0-9_]*)}") + +def parse_makefile(fn, g=None): + """Parse a Makefile-style file. + + A dictionary containing name/value pairs is returned. If an + optional dictionary is passed in as the second argument, it is + used instead of a new dictionary. + """ + from distutils.text_file import TextFile + fp = TextFile(fn, strip_comments=1, skip_blanks=1, join_lines=1, errors="surrogateescape") + + if g is None: + g = {} + done = {} + notdone = {} + + while True: + line = fp.readline() + if line is None: # eof + break + m = _variable_rx.match(line) + if m: + n, v = m.group(1, 2) + v = v.strip() + # `$$' is a literal `$' in make + tmpv = v.replace('$$', '') + + if "$" in tmpv: + notdone[n] = v + else: + try: + v = int(v) + except ValueError: + # insert literal `$' + done[n] = v.replace('$$', '$') + else: + done[n] = v + + # Variables with a 'PY_' prefix in the makefile. These need to + # be made available without that prefix through sysconfig. + # Special care is needed to ensure that variable expansion works, even + # if the expansion uses the name without a prefix. + renamed_variables = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS') + + # do variable interpolation here + while notdone: + for name in list(notdone): + value = notdone[name] + m = _findvar1_rx.search(value) or _findvar2_rx.search(value) + if m: + n = m.group(1) + found = True + if n in done: + item = str(done[n]) + elif n in notdone: + # get it on a subsequent round + found = False + elif n in os.environ: + # do it like make: fall back to environment + item = os.environ[n] + + elif n in renamed_variables: + if name.startswith('PY_') and name[3:] in renamed_variables: + item = "" + + elif 'PY_' + n in notdone: + found = False + + else: + item = str(done['PY_' + n]) + else: + done[n] = item = "" + if found: + after = value[m.end():] + value = value[:m.start()] + item + after + if "$" in after: + notdone[name] = value + else: + try: value = int(value) + except ValueError: + done[name] = value.strip() + else: + done[name] = value + del notdone[name] + + if name.startswith('PY_') \ + and name[3:] in renamed_variables: + + name = name[3:] + if name not in done: + done[name] = value + else: + # bogus variable reference; just drop it since we can't deal + del notdone[name] + + fp.close() + + # strip spurious spaces + for k, v in done.items(): + if isinstance(v, str): + done[k] = v.strip() + + # save the results in the global dictionary + g.update(done) + return g + + +def expand_makefile_vars(s, vars): + """Expand Makefile-style variables -- "${foo}" or "$(foo)" -- in + 'string' according to 'vars' (a dictionary mapping variable names to + values). Variables not present in 'vars' are silently expanded to the + empty string. The variable values in 'vars' should not contain further + variable expansions; if 'vars' is the output of 'parse_makefile()', + you're fine. Returns a variable-expanded version of 's'. + """ + + # This algorithm does multiple expansion, so if vars['foo'] contains + # "${bar}", it will expand ${foo} to ${bar}, and then expand + # ${bar}... and so forth. This is fine as long as 'vars' comes from + # 'parse_makefile()', which takes care of such expansions eagerly, + # according to make's variable expansion semantics. + + while True: + m = _findvar1_rx.search(s) or _findvar2_rx.search(s) + if m: + (beg, end) = m.span() + s = s[0:beg] + vars.get(m.group(1)) + s[end:] + else: + break + return s + + +_config_vars = None + +def _init_posix(): + """Initialize the module as appropriate for POSIX systems.""" + # _sysconfigdata is generated at build time, see the sysconfig module + name = os.environ.get('_PYTHON_SYSCONFIGDATA_NAME', + '_sysconfigdata_{abi}_{platform}_{multiarch}'.format( + abi=sys.abiflags, + platform=sys.platform, + multiarch=getattr(sys.implementation, '_multiarch', ''), + )) + _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0) + build_time_vars = _temp.build_time_vars + global _config_vars + _config_vars = {} + _config_vars.update(build_time_vars) + + +def _init_nt(): + """Initialize the module as appropriate for NT""" + g = {} + # set basic install directories + g['LIBDEST'] = get_python_lib(plat_specific=0, standard_lib=1) + g['BINLIBDEST'] = get_python_lib(plat_specific=1, standard_lib=1) + + # XXX hmmm.. a normal install puts include files here + g['INCLUDEPY'] = get_python_inc(plat_specific=0) + + g['EXT_SUFFIX'] = _imp.extension_suffixes()[0] + g['EXE'] = ".exe" + g['VERSION'] = get_python_version().replace(".", "") + g['BINDIR'] = os.path.dirname(os.path.abspath(sys.executable)) + + global _config_vars + _config_vars = g + + +def get_config_vars(*args): + """With no arguments, return a dictionary of all configuration + variables relevant for the current platform. Generally this includes + everything needed to build extensions and install both pure modules and + extensions. On Unix, this means every variable defined in Python's + installed Makefile; on Windows it's a much smaller set. + + With arguments, return a list of values that result from looking up + each argument in the configuration variable dictionary. + """ + global _config_vars + if _config_vars is None: + func = globals().get("_init_" + os.name) + if func: + func() + else: + _config_vars = {} + + # Normalized versions of prefix and exec_prefix are handy to have; + # in fact, these are the standard versions used most places in the + # Distutils. + _config_vars['prefix'] = PREFIX + _config_vars['exec_prefix'] = EXEC_PREFIX + + # For backward compatibility, see issue19555 + SO = _config_vars.get('EXT_SUFFIX') + if SO is not None: + _config_vars['SO'] = SO + + # Always convert srcdir to an absolute path + srcdir = _config_vars.get('srcdir', project_base) + if os.name == 'posix': + if python_build: + # If srcdir is a relative path (typically '.' or '..') + # then it should be interpreted relative to the directory + # containing Makefile. + base = os.path.dirname(get_makefile_filename()) + srcdir = os.path.join(base, srcdir) + else: + # srcdir is not meaningful since the installation is + # spread about the filesystem. We choose the + # directory containing the Makefile since we know it + # exists. + srcdir = os.path.dirname(get_makefile_filename()) + _config_vars['srcdir'] = os.path.abspath(os.path.normpath(srcdir)) + + # Convert srcdir into an absolute path if it appears necessary. + # Normally it is relative to the build directory. However, during + # testing, for example, we might be running a non-installed python + # from a different directory. + if python_build and os.name == "posix": + base = project_base + if (not os.path.isabs(_config_vars['srcdir']) and + base != os.getcwd()): + # srcdir is relative and we are not in the same directory + # as the executable. Assume executable is in the build + # directory and make srcdir absolute. + srcdir = os.path.join(base, _config_vars['srcdir']) + _config_vars['srcdir'] = os.path.normpath(srcdir) + + # OS X platforms require special customization to handle + # multi-architecture, multi-os-version installers + if sys.platform == 'darwin': + import _osx_support + _osx_support.customize_config_vars(_config_vars) + + if args: + vals = [] + for name in args: + vals.append(_config_vars.get(name)) + return vals + else: + return _config_vars + +def get_config_var(name): + """Return the value of a single variable using the dictionary + returned by 'get_config_vars()'. Equivalent to + get_config_vars().get(name) + """ + if name == 'SO': + import warnings + warnings.warn('SO is deprecated, use EXT_SUFFIX', DeprecationWarning, 2) + return get_config_vars().get(name) diff --git a/distutils/distutils/tests/Setup.sample b/distutils/distutils/tests/Setup.sample new file mode 100644 index 0000000..36c4290 --- /dev/null +++ b/distutils/distutils/tests/Setup.sample @@ -0,0 +1,67 @@ +# Setup file from the pygame project + +#--StartConfig +SDL = -I/usr/include/SDL -D_REENTRANT -lSDL +FONT = -lSDL_ttf +IMAGE = -lSDL_image +MIXER = -lSDL_mixer +SMPEG = -lsmpeg +PNG = -lpng +JPEG = -ljpeg +SCRAP = -lX11 +PORTMIDI = -lportmidi +PORTTIME = -lporttime +#--EndConfig + +#DEBUG = -C-W -C-Wall +DEBUG = + +#the following modules are optional. you will want to compile +#everything you can, but you can ignore ones you don't have +#dependencies for, just comment them out + +imageext src/imageext.c $(SDL) $(IMAGE) $(PNG) $(JPEG) $(DEBUG) +font src/font.c $(SDL) $(FONT) $(DEBUG) +mixer src/mixer.c $(SDL) $(MIXER) $(DEBUG) +mixer_music src/music.c $(SDL) $(MIXER) $(DEBUG) +_numericsurfarray src/_numericsurfarray.c $(SDL) $(DEBUG) +_numericsndarray src/_numericsndarray.c $(SDL) $(MIXER) $(DEBUG) +movie src/movie.c $(SDL) $(SMPEG) $(DEBUG) +scrap src/scrap.c $(SDL) $(SCRAP) $(DEBUG) +_camera src/_camera.c src/camera_v4l2.c src/camera_v4l.c $(SDL) $(DEBUG) +pypm src/pypm.c $(SDL) $(PORTMIDI) $(PORTTIME) $(DEBUG) + +GFX = src/SDL_gfx/SDL_gfxPrimitives.c +#GFX = src/SDL_gfx/SDL_gfxBlitFunc.c src/SDL_gfx/SDL_gfxPrimitives.c +gfxdraw src/gfxdraw.c $(SDL) $(GFX) $(DEBUG) + + + +#these modules are required for pygame to run. they only require +#SDL as a dependency. these should not be altered + +base src/base.c $(SDL) $(DEBUG) +cdrom src/cdrom.c $(SDL) $(DEBUG) +color src/color.c $(SDL) $(DEBUG) +constants src/constants.c $(SDL) $(DEBUG) +display src/display.c $(SDL) $(DEBUG) +event src/event.c $(SDL) $(DEBUG) +fastevent src/fastevent.c src/fastevents.c $(SDL) $(DEBUG) +key src/key.c $(SDL) $(DEBUG) +mouse src/mouse.c $(SDL) $(DEBUG) +rect src/rect.c $(SDL) $(DEBUG) +rwobject src/rwobject.c $(SDL) $(DEBUG) +surface src/surface.c src/alphablit.c src/surface_fill.c $(SDL) $(DEBUG) +surflock src/surflock.c $(SDL) $(DEBUG) +time src/time.c $(SDL) $(DEBUG) +joystick src/joystick.c $(SDL) $(DEBUG) +draw src/draw.c $(SDL) $(DEBUG) +image src/image.c $(SDL) $(DEBUG) +overlay src/overlay.c $(SDL) $(DEBUG) +transform src/transform.c src/rotozoom.c src/scale2x.c src/scale_mmx.c $(SDL) $(DEBUG) +mask src/mask.c src/bitmask.c $(SDL) $(DEBUG) +bufferproxy src/bufferproxy.c $(SDL) $(DEBUG) +pixelarray src/pixelarray.c $(SDL) $(DEBUG) +_arraysurfarray src/_arraysurfarray.c $(SDL) $(DEBUG) + + diff --git a/distutils/distutils/tests/__init__.py b/distutils/distutils/tests/__init__.py new file mode 100644 index 0000000..1b939cb --- /dev/null +++ b/distutils/distutils/tests/__init__.py @@ -0,0 +1,36 @@ +"""Test suite for distutils. + +This test suite consists of a collection of test modules in the +distutils.tests package. Each test module has a name starting with +'test' and contains a function test_suite(). The function is expected +to return an initialized unittest.TestSuite instance. + +Tests for the command classes in the distutils.command package are +included in distutils.tests as well, instead of using a separate +distutils.command.tests package, since command identification is done +by import rather than matching pre-defined names. + +""" + +import os +import sys +import unittest +from test.support import run_unittest + + +here = os.path.dirname(__file__) or os.curdir + + +def test_suite(): + suite = unittest.TestSuite() + for fn in os.listdir(here): + if fn.startswith("test") and fn.endswith(".py"): + modname = "distutils.tests." + fn[:-3] + __import__(modname) + module = sys.modules[modname] + suite.addTest(module.test_suite()) + return suite + + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/support.py b/distutils/distutils/tests/support.py new file mode 100644 index 0000000..7385c6b --- /dev/null +++ b/distutils/distutils/tests/support.py @@ -0,0 +1,210 @@ +"""Support code for distutils test cases.""" +import os +import sys +import shutil +import tempfile +import unittest +import sysconfig +from copy import deepcopy + +from distutils import log +from distutils.log import DEBUG, INFO, WARN, ERROR, FATAL +from distutils.core import Distribution + + +class LoggingSilencer(object): + + def setUp(self): + super().setUp() + self.threshold = log.set_threshold(log.FATAL) + # catching warnings + # when log will be replaced by logging + # we won't need such monkey-patch anymore + self._old_log = log.Log._log + log.Log._log = self._log + self.logs = [] + + def tearDown(self): + log.set_threshold(self.threshold) + log.Log._log = self._old_log + super().tearDown() + + def _log(self, level, msg, args): + if level not in (DEBUG, INFO, WARN, ERROR, FATAL): + raise ValueError('%s wrong log level' % str(level)) + if not isinstance(msg, str): + raise TypeError("msg should be str, not '%.200s'" + % (type(msg).__name__)) + self.logs.append((level, msg, args)) + + def get_logs(self, *levels): + def _format(msg, args): + return msg % args + return [msg % args for level, msg, args + in self.logs if level in levels] + + def clear_logs(self): + self.logs = [] + + +class TempdirManager(object): + """Mix-in class that handles temporary directories for test cases. + + This is intended to be used with unittest.TestCase. + """ + + def setUp(self): + super().setUp() + self.old_cwd = os.getcwd() + self.tempdirs = [] + + def tearDown(self): + # Restore working dir, for Solaris and derivatives, where rmdir() + # on the current directory fails. + os.chdir(self.old_cwd) + super().tearDown() + while self.tempdirs: + d = self.tempdirs.pop() + shutil.rmtree(d, os.name in ('nt', 'cygwin')) + + def mkdtemp(self): + """Create a temporary directory that will be cleaned up. + + Returns the path of the directory. + """ + d = tempfile.mkdtemp() + self.tempdirs.append(d) + return d + + def write_file(self, path, content='xxx'): + """Writes a file in the given path. + + + path can be a string or a sequence. + """ + if isinstance(path, (list, tuple)): + path = os.path.join(*path) + f = open(path, 'w') + try: + f.write(content) + finally: + f.close() + + def create_dist(self, pkg_name='foo', **kw): + """Will generate a test environment. + + This function creates: + - a Distribution instance using keywords + - a temporary directory with a package structure + + It returns the package directory and the distribution + instance. + """ + tmp_dir = self.mkdtemp() + pkg_dir = os.path.join(tmp_dir, pkg_name) + os.mkdir(pkg_dir) + dist = Distribution(attrs=kw) + + return pkg_dir, dist + + +class DummyCommand: + """Class to store options for retrieval via set_undefined_options().""" + + def __init__(self, **kwargs): + for kw, val in kwargs.items(): + setattr(self, kw, val) + + def ensure_finalized(self): + pass + + +class EnvironGuard(object): + + def setUp(self): + super(EnvironGuard, self).setUp() + self.old_environ = deepcopy(os.environ) + + def tearDown(self): + for key, value in self.old_environ.items(): + if os.environ.get(key) != value: + os.environ[key] = value + + for key in tuple(os.environ.keys()): + if key not in self.old_environ: + del os.environ[key] + + super(EnvironGuard, self).tearDown() + + +def copy_xxmodule_c(directory): + """Helper for tests that need the xxmodule.c source file. + + Example use: + + def test_compile(self): + copy_xxmodule_c(self.tmpdir) + self.assertIn('xxmodule.c', os.listdir(self.tmpdir)) + + If the source file can be found, it will be copied to *directory*. If not, + the test will be skipped. Errors during copy are not caught. + """ + filename = _get_xxmodule_path() + if filename is None: + raise unittest.SkipTest('cannot find xxmodule.c (test must run in ' + 'the python build dir)') + shutil.copy(filename, directory) + + +def _get_xxmodule_path(): + srcdir = sysconfig.get_config_var('srcdir') + candidates = [ + # use installed copy if available + os.path.join(os.path.dirname(__file__), 'xxmodule.c'), + # otherwise try using copy from build directory + os.path.join(srcdir, 'Modules', 'xxmodule.c'), + # srcdir mysteriously can be $srcdir/Lib/distutils/tests when + # this file is run from its parent directory, so walk up the + # tree to find the real srcdir + os.path.join(srcdir, '..', '..', '..', 'Modules', 'xxmodule.c'), + ] + for path in candidates: + if os.path.exists(path): + return path + + +def fixup_build_ext(cmd): + """Function needed to make build_ext tests pass. + + When Python was built with --enable-shared on Unix, -L. is not enough to + find libpython.so, because regrtest runs in a tempdir, not in the + source directory where the .so lives. + + When Python was built with in debug mode on Windows, build_ext commands + need their debug attribute set, and it is not done automatically for + some reason. + + This function handles both of these things. Example use: + + cmd = build_ext(dist) + support.fixup_build_ext(cmd) + cmd.ensure_finalized() + + Unlike most other Unix platforms, Mac OS X embeds absolute paths + to shared libraries into executables, so the fixup is not needed there. + """ + if os.name == 'nt': + cmd.debug = sys.executable.endswith('_d.exe') + elif sysconfig.get_config_var('Py_ENABLE_SHARED'): + # To further add to the shared builds fun on Unix, we can't just add + # library_dirs to the Extension() instance because that doesn't get + # plumbed through to the final compiler command. + runshared = sysconfig.get_config_var('RUNSHARED') + if runshared is None: + cmd.library_dirs = ['.'] + else: + if sys.platform == 'darwin': + cmd.library_dirs = [] + else: + name, equals, value = runshared.partition('=') + cmd.library_dirs = [d for d in value.split(os.pathsep) if d] diff --git a/distutils/distutils/tests/test_archive_util.py b/distutils/distutils/tests/test_archive_util.py new file mode 100644 index 0000000..18a0313 --- /dev/null +++ b/distutils/distutils/tests/test_archive_util.py @@ -0,0 +1,394 @@ +# -*- coding: utf-8 -*- +"""Tests for distutils.archive_util.""" +import unittest +import os +import sys +import tarfile +from os.path import splitdrive +import warnings + +from distutils import archive_util +from distutils.archive_util import (check_archive_formats, make_tarball, + make_zipfile, make_archive, + ARCHIVE_FORMATS) +from distutils.spawn import find_executable, spawn +from distutils.tests import support +from test.support import check_warnings, run_unittest, patch, change_cwd + +try: + import grp + import pwd + UID_GID_SUPPORT = True +except ImportError: + UID_GID_SUPPORT = False + +try: + import zipfile + ZIP_SUPPORT = True +except ImportError: + ZIP_SUPPORT = find_executable('zip') + +try: + import zlib + ZLIB_SUPPORT = True +except ImportError: + ZLIB_SUPPORT = False + +try: + import bz2 +except ImportError: + bz2 = None + +try: + import lzma +except ImportError: + lzma = None + +def can_fs_encode(filename): + """ + Return True if the filename can be saved in the file system. + """ + if os.path.supports_unicode_filenames: + return True + try: + filename.encode(sys.getfilesystemencoding()) + except UnicodeEncodeError: + return False + return True + + +class ArchiveUtilTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_make_tarball(self, name='archive'): + # creating something to tar + tmpdir = self._create_files() + self._make_tarball(tmpdir, name, '.tar.gz') + # trying an uncompressed one + self._make_tarball(tmpdir, name, '.tar', compress=None) + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_make_tarball_gzip(self): + tmpdir = self._create_files() + self._make_tarball(tmpdir, 'archive', '.tar.gz', compress='gzip') + + @unittest.skipUnless(bz2, 'Need bz2 support to run') + def test_make_tarball_bzip2(self): + tmpdir = self._create_files() + self._make_tarball(tmpdir, 'archive', '.tar.bz2', compress='bzip2') + + @unittest.skipUnless(lzma, 'Need lzma support to run') + def test_make_tarball_xz(self): + tmpdir = self._create_files() + self._make_tarball(tmpdir, 'archive', '.tar.xz', compress='xz') + + @unittest.skipUnless(can_fs_encode('årchiv'), + 'File system cannot handle this filename') + def test_make_tarball_latin1(self): + """ + Mirror test_make_tarball, except filename contains latin characters. + """ + self.test_make_tarball('årchiv') # note this isn't a real word + + @unittest.skipUnless(can_fs_encode('のアーカイブ'), + 'File system cannot handle this filename') + def test_make_tarball_extended(self): + """ + Mirror test_make_tarball, except filename contains extended + characters outside the latin charset. + """ + self.test_make_tarball('のアーカイブ') # japanese for archive + + def _make_tarball(self, tmpdir, target_name, suffix, **kwargs): + tmpdir2 = self.mkdtemp() + unittest.skipUnless(splitdrive(tmpdir)[0] == splitdrive(tmpdir2)[0], + "source and target should be on same drive") + + base_name = os.path.join(tmpdir2, target_name) + + # working with relative paths to avoid tar warnings + with change_cwd(tmpdir): + make_tarball(splitdrive(base_name)[1], 'dist', **kwargs) + + # check if the compressed tarball was created + tarball = base_name + suffix + self.assertTrue(os.path.exists(tarball)) + self.assertEqual(self._tarinfo(tarball), self._created_files) + + def _tarinfo(self, path): + tar = tarfile.open(path) + try: + names = tar.getnames() + names.sort() + return names + finally: + tar.close() + + _zip_created_files = ['dist/', 'dist/file1', 'dist/file2', + 'dist/sub/', 'dist/sub/file3', 'dist/sub2/'] + _created_files = [p.rstrip('/') for p in _zip_created_files] + + def _create_files(self): + # creating something to tar + tmpdir = self.mkdtemp() + dist = os.path.join(tmpdir, 'dist') + os.mkdir(dist) + self.write_file([dist, 'file1'], 'xxx') + self.write_file([dist, 'file2'], 'xxx') + os.mkdir(os.path.join(dist, 'sub')) + self.write_file([dist, 'sub', 'file3'], 'xxx') + os.mkdir(os.path.join(dist, 'sub2')) + return tmpdir + + @unittest.skipUnless(find_executable('tar') and find_executable('gzip') + and ZLIB_SUPPORT, + 'Need the tar, gzip and zlib command to run') + def test_tarfile_vs_tar(self): + tmpdir = self._create_files() + tmpdir2 = self.mkdtemp() + base_name = os.path.join(tmpdir2, 'archive') + old_dir = os.getcwd() + os.chdir(tmpdir) + try: + make_tarball(base_name, 'dist') + finally: + os.chdir(old_dir) + + # check if the compressed tarball was created + tarball = base_name + '.tar.gz' + self.assertTrue(os.path.exists(tarball)) + + # now create another tarball using `tar` + tarball2 = os.path.join(tmpdir, 'archive2.tar.gz') + tar_cmd = ['tar', '-cf', 'archive2.tar', 'dist'] + gzip_cmd = ['gzip', '-f9', 'archive2.tar'] + old_dir = os.getcwd() + os.chdir(tmpdir) + try: + spawn(tar_cmd) + spawn(gzip_cmd) + finally: + os.chdir(old_dir) + + self.assertTrue(os.path.exists(tarball2)) + # let's compare both tarballs + self.assertEqual(self._tarinfo(tarball), self._created_files) + self.assertEqual(self._tarinfo(tarball2), self._created_files) + + # trying an uncompressed one + base_name = os.path.join(tmpdir2, 'archive') + old_dir = os.getcwd() + os.chdir(tmpdir) + try: + make_tarball(base_name, 'dist', compress=None) + finally: + os.chdir(old_dir) + tarball = base_name + '.tar' + self.assertTrue(os.path.exists(tarball)) + + # now for a dry_run + base_name = os.path.join(tmpdir2, 'archive') + old_dir = os.getcwd() + os.chdir(tmpdir) + try: + make_tarball(base_name, 'dist', compress=None, dry_run=True) + finally: + os.chdir(old_dir) + tarball = base_name + '.tar' + self.assertTrue(os.path.exists(tarball)) + + @unittest.skipUnless(find_executable('compress'), + 'The compress program is required') + def test_compress_deprecated(self): + tmpdir = self._create_files() + base_name = os.path.join(self.mkdtemp(), 'archive') + + # using compress and testing the PendingDeprecationWarning + old_dir = os.getcwd() + os.chdir(tmpdir) + try: + with check_warnings() as w: + warnings.simplefilter("always") + make_tarball(base_name, 'dist', compress='compress') + finally: + os.chdir(old_dir) + tarball = base_name + '.tar.Z' + self.assertTrue(os.path.exists(tarball)) + self.assertEqual(len(w.warnings), 1) + + # same test with dry_run + os.remove(tarball) + old_dir = os.getcwd() + os.chdir(tmpdir) + try: + with check_warnings() as w: + warnings.simplefilter("always") + make_tarball(base_name, 'dist', compress='compress', + dry_run=True) + finally: + os.chdir(old_dir) + self.assertFalse(os.path.exists(tarball)) + self.assertEqual(len(w.warnings), 1) + + @unittest.skipUnless(ZIP_SUPPORT and ZLIB_SUPPORT, + 'Need zip and zlib support to run') + def test_make_zipfile(self): + # creating something to tar + tmpdir = self._create_files() + base_name = os.path.join(self.mkdtemp(), 'archive') + with change_cwd(tmpdir): + make_zipfile(base_name, 'dist') + + # check if the compressed tarball was created + tarball = base_name + '.zip' + self.assertTrue(os.path.exists(tarball)) + with zipfile.ZipFile(tarball) as zf: + self.assertEqual(sorted(zf.namelist()), self._zip_created_files) + + @unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run') + def test_make_zipfile_no_zlib(self): + patch(self, archive_util.zipfile, 'zlib', None) # force zlib ImportError + + called = [] + zipfile_class = zipfile.ZipFile + def fake_zipfile(*a, **kw): + if kw.get('compression', None) == zipfile.ZIP_STORED: + called.append((a, kw)) + return zipfile_class(*a, **kw) + + patch(self, archive_util.zipfile, 'ZipFile', fake_zipfile) + + # create something to tar and compress + tmpdir = self._create_files() + base_name = os.path.join(self.mkdtemp(), 'archive') + with change_cwd(tmpdir): + make_zipfile(base_name, 'dist') + + tarball = base_name + '.zip' + self.assertEqual(called, + [((tarball, "w"), {'compression': zipfile.ZIP_STORED})]) + self.assertTrue(os.path.exists(tarball)) + with zipfile.ZipFile(tarball) as zf: + self.assertEqual(sorted(zf.namelist()), self._zip_created_files) + + def test_check_archive_formats(self): + self.assertEqual(check_archive_formats(['gztar', 'xxx', 'zip']), + 'xxx') + self.assertIsNone(check_archive_formats(['gztar', 'bztar', 'xztar', + 'ztar', 'tar', 'zip'])) + + def test_make_archive(self): + tmpdir = self.mkdtemp() + base_name = os.path.join(tmpdir, 'archive') + self.assertRaises(ValueError, make_archive, base_name, 'xxx') + + def test_make_archive_cwd(self): + current_dir = os.getcwd() + def _breaks(*args, **kw): + raise RuntimeError() + ARCHIVE_FORMATS['xxx'] = (_breaks, [], 'xxx file') + try: + try: + make_archive('xxx', 'xxx', root_dir=self.mkdtemp()) + except: + pass + self.assertEqual(os.getcwd(), current_dir) + finally: + del ARCHIVE_FORMATS['xxx'] + + def test_make_archive_tar(self): + base_dir = self._create_files() + base_name = os.path.join(self.mkdtemp() , 'archive') + res = make_archive(base_name, 'tar', base_dir, 'dist') + self.assertTrue(os.path.exists(res)) + self.assertEqual(os.path.basename(res), 'archive.tar') + self.assertEqual(self._tarinfo(res), self._created_files) + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_make_archive_gztar(self): + base_dir = self._create_files() + base_name = os.path.join(self.mkdtemp() , 'archive') + res = make_archive(base_name, 'gztar', base_dir, 'dist') + self.assertTrue(os.path.exists(res)) + self.assertEqual(os.path.basename(res), 'archive.tar.gz') + self.assertEqual(self._tarinfo(res), self._created_files) + + @unittest.skipUnless(bz2, 'Need bz2 support to run') + def test_make_archive_bztar(self): + base_dir = self._create_files() + base_name = os.path.join(self.mkdtemp() , 'archive') + res = make_archive(base_name, 'bztar', base_dir, 'dist') + self.assertTrue(os.path.exists(res)) + self.assertEqual(os.path.basename(res), 'archive.tar.bz2') + self.assertEqual(self._tarinfo(res), self._created_files) + + @unittest.skipUnless(lzma, 'Need xz support to run') + def test_make_archive_xztar(self): + base_dir = self._create_files() + base_name = os.path.join(self.mkdtemp() , 'archive') + res = make_archive(base_name, 'xztar', base_dir, 'dist') + self.assertTrue(os.path.exists(res)) + self.assertEqual(os.path.basename(res), 'archive.tar.xz') + self.assertEqual(self._tarinfo(res), self._created_files) + + def test_make_archive_owner_group(self): + # testing make_archive with owner and group, with various combinations + # this works even if there's not gid/uid support + if UID_GID_SUPPORT: + group = grp.getgrgid(0)[0] + owner = pwd.getpwuid(0)[0] + else: + group = owner = 'root' + + base_dir = self._create_files() + root_dir = self.mkdtemp() + base_name = os.path.join(self.mkdtemp() , 'archive') + res = make_archive(base_name, 'zip', root_dir, base_dir, owner=owner, + group=group) + self.assertTrue(os.path.exists(res)) + + res = make_archive(base_name, 'zip', root_dir, base_dir) + self.assertTrue(os.path.exists(res)) + + res = make_archive(base_name, 'tar', root_dir, base_dir, + owner=owner, group=group) + self.assertTrue(os.path.exists(res)) + + res = make_archive(base_name, 'tar', root_dir, base_dir, + owner='kjhkjhkjg', group='oihohoh') + self.assertTrue(os.path.exists(res)) + + @unittest.skipUnless(ZLIB_SUPPORT, "Requires zlib") + @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support") + def test_tarfile_root_owner(self): + tmpdir = self._create_files() + base_name = os.path.join(self.mkdtemp(), 'archive') + old_dir = os.getcwd() + os.chdir(tmpdir) + group = grp.getgrgid(0)[0] + owner = pwd.getpwuid(0)[0] + try: + archive_name = make_tarball(base_name, 'dist', compress=None, + owner=owner, group=group) + finally: + os.chdir(old_dir) + + # check if the compressed tarball was created + self.assertTrue(os.path.exists(archive_name)) + + # now checks the rights + archive = tarfile.open(archive_name) + try: + for member in archive.getmembers(): + self.assertEqual(member.uid, 0) + self.assertEqual(member.gid, 0) + finally: + archive.close() + +def test_suite(): + return unittest.makeSuite(ArchiveUtilTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_bdist.py b/distutils/distutils/tests/test_bdist.py new file mode 100644 index 0000000..c80b3ed --- /dev/null +++ b/distutils/distutils/tests/test_bdist.py @@ -0,0 +1,53 @@ +"""Tests for distutils.command.bdist.""" +import os +import unittest +from test.support import run_unittest + +from distutils.command.bdist import bdist +from distutils.tests import support + + +class BuildTestCase(support.TempdirManager, + unittest.TestCase): + + def test_formats(self): + # let's create a command and make sure + # we can set the format + dist = self.create_dist()[1] + cmd = bdist(dist) + cmd.formats = ['msi'] + cmd.ensure_finalized() + self.assertEqual(cmd.formats, ['msi']) + + # what formats does bdist offer? + formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar', + 'wininst', 'xztar', 'zip', 'ztar'] + found = sorted(cmd.format_command) + self.assertEqual(found, formats) + + def test_skip_build(self): + # bug #10946: bdist --skip-build should trickle down to subcommands + dist = self.create_dist()[1] + cmd = bdist(dist) + cmd.skip_build = 1 + cmd.ensure_finalized() + dist.command_obj['bdist'] = cmd + + names = ['bdist_dumb', 'bdist_wininst'] # bdist_rpm does not support --skip-build + if os.name == 'nt': + names.append('bdist_msi') + + for name in names: + subcmd = cmd.get_finalized_command(name) + if getattr(subcmd, '_unsupported', False): + # command is not supported on this build + continue + self.assertTrue(subcmd.skip_build, + '%s should take --skip-build from bdist' % name) + + +def test_suite(): + return unittest.makeSuite(BuildTestCase) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_bdist_dumb.py b/distutils/distutils/tests/test_bdist_dumb.py new file mode 100644 index 0000000..01a233b --- /dev/null +++ b/distutils/distutils/tests/test_bdist_dumb.py @@ -0,0 +1,97 @@ +"""Tests for distutils.command.bdist_dumb.""" + +import os +import sys +import zipfile +import unittest +from test.support import run_unittest + +from distutils.core import Distribution +from distutils.command.bdist_dumb import bdist_dumb +from distutils.tests import support + +SETUP_PY = """\ +from distutils.core import setup +import foo + +setup(name='foo', version='0.1', py_modules=['foo'], + url='xxx', author='xxx', author_email='xxx') + +""" + +try: + import zlib + ZLIB_SUPPORT = True +except ImportError: + ZLIB_SUPPORT = False + + +class BuildDumbTestCase(support.TempdirManager, + support.LoggingSilencer, + support.EnvironGuard, + unittest.TestCase): + + def setUp(self): + super(BuildDumbTestCase, self).setUp() + self.old_location = os.getcwd() + self.old_sys_argv = sys.argv, sys.argv[:] + + def tearDown(self): + os.chdir(self.old_location) + sys.argv = self.old_sys_argv[0] + sys.argv[:] = self.old_sys_argv[1] + super(BuildDumbTestCase, self).tearDown() + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_simple_built(self): + + # let's create a simple package + tmp_dir = self.mkdtemp() + pkg_dir = os.path.join(tmp_dir, 'foo') + os.mkdir(pkg_dir) + self.write_file((pkg_dir, 'setup.py'), SETUP_PY) + self.write_file((pkg_dir, 'foo.py'), '#') + self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py') + self.write_file((pkg_dir, 'README'), '') + + dist = Distribution({'name': 'foo', 'version': '0.1', + 'py_modules': ['foo'], + 'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx'}) + dist.script_name = 'setup.py' + os.chdir(pkg_dir) + + sys.argv = ['setup.py'] + cmd = bdist_dumb(dist) + + # so the output is the same no matter + # what is the platform + cmd.format = 'zip' + + cmd.ensure_finalized() + cmd.run() + + # see what we have + dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) + base = "%s.%s.zip" % (dist.get_fullname(), cmd.plat_name) + + self.assertEqual(dist_created, [base]) + + # now let's check what we have in the zip file + fp = zipfile.ZipFile(os.path.join('dist', base)) + try: + contents = fp.namelist() + finally: + fp.close() + + contents = sorted(filter(None, map(os.path.basename, contents))) + wanted = ['foo-0.1-py%s.%s.egg-info' % sys.version_info[:2], 'foo.py'] + if not sys.dont_write_bytecode: + wanted.append('foo.%s.pyc' % sys.implementation.cache_tag) + self.assertEqual(contents, sorted(wanted)) + +def test_suite(): + return unittest.makeSuite(BuildDumbTestCase) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_bdist_msi.py b/distutils/distutils/tests/test_bdist_msi.py new file mode 100644 index 0000000..15d8bdf --- /dev/null +++ b/distutils/distutils/tests/test_bdist_msi.py @@ -0,0 +1,25 @@ +"""Tests for distutils.command.bdist_msi.""" +import sys +import unittest +from test.support import run_unittest +from distutils.tests import support + + +@unittest.skipUnless(sys.platform == 'win32', 'these tests require Windows') +class BDistMSITestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_minimal(self): + # minimal test XXX need more tests + from distutils.command.bdist_msi import bdist_msi + project_dir, dist = self.create_dist() + cmd = bdist_msi(dist) + cmd.ensure_finalized() + + +def test_suite(): + return unittest.makeSuite(BDistMSITestCase) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_bdist_rpm.py b/distutils/distutils/tests/test_bdist_rpm.py new file mode 100644 index 0000000..6453a02 --- /dev/null +++ b/distutils/distutils/tests/test_bdist_rpm.py @@ -0,0 +1,135 @@ +"""Tests for distutils.command.bdist_rpm.""" + +import unittest +import sys +import os +from test.support import run_unittest, requires_zlib + +from distutils.core import Distribution +from distutils.command.bdist_rpm import bdist_rpm +from distutils.tests import support +from distutils.spawn import find_executable + +SETUP_PY = """\ +from distutils.core import setup +import foo + +setup(name='foo', version='0.1', py_modules=['foo'], + url='xxx', author='xxx', author_email='xxx') + +""" + +class BuildRpmTestCase(support.TempdirManager, + support.EnvironGuard, + support.LoggingSilencer, + unittest.TestCase): + + def setUp(self): + try: + sys.executable.encode("UTF-8") + except UnicodeEncodeError: + raise unittest.SkipTest("sys.executable is not encodable to UTF-8") + + super(BuildRpmTestCase, self).setUp() + self.old_location = os.getcwd() + self.old_sys_argv = sys.argv, sys.argv[:] + + def tearDown(self): + os.chdir(self.old_location) + sys.argv = self.old_sys_argv[0] + sys.argv[:] = self.old_sys_argv[1] + super(BuildRpmTestCase, self).tearDown() + + # XXX I am unable yet to make this test work without + # spurious sdtout/stderr output under Mac OS X + @unittest.skipUnless(sys.platform.startswith('linux'), + 'spurious sdtout/stderr output under Mac OS X') + @requires_zlib + @unittest.skipIf(find_executable('rpm') is None, + 'the rpm command is not found') + @unittest.skipIf(find_executable('rpmbuild') is None, + 'the rpmbuild command is not found') + def test_quiet(self): + # let's create a package + tmp_dir = self.mkdtemp() + os.environ['HOME'] = tmp_dir # to confine dir '.rpmdb' creation + pkg_dir = os.path.join(tmp_dir, 'foo') + os.mkdir(pkg_dir) + self.write_file((pkg_dir, 'setup.py'), SETUP_PY) + self.write_file((pkg_dir, 'foo.py'), '#') + self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py') + self.write_file((pkg_dir, 'README'), '') + + dist = Distribution({'name': 'foo', 'version': '0.1', + 'py_modules': ['foo'], + 'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx'}) + dist.script_name = 'setup.py' + os.chdir(pkg_dir) + + sys.argv = ['setup.py'] + cmd = bdist_rpm(dist) + cmd.fix_python = True + + # running in quiet mode + cmd.quiet = 1 + cmd.ensure_finalized() + cmd.run() + + dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) + self.assertIn('foo-0.1-1.noarch.rpm', dist_created) + + # bug #2945: upload ignores bdist_rpm files + self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files) + self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files) + + # XXX I am unable yet to make this test work without + # spurious sdtout/stderr output under Mac OS X + @unittest.skipUnless(sys.platform.startswith('linux'), + 'spurious sdtout/stderr output under Mac OS X') + @requires_zlib + # http://bugs.python.org/issue1533164 + @unittest.skipIf(find_executable('rpm') is None, + 'the rpm command is not found') + @unittest.skipIf(find_executable('rpmbuild') is None, + 'the rpmbuild command is not found') + def test_no_optimize_flag(self): + # let's create a package that breaks bdist_rpm + tmp_dir = self.mkdtemp() + os.environ['HOME'] = tmp_dir # to confine dir '.rpmdb' creation + pkg_dir = os.path.join(tmp_dir, 'foo') + os.mkdir(pkg_dir) + self.write_file((pkg_dir, 'setup.py'), SETUP_PY) + self.write_file((pkg_dir, 'foo.py'), '#') + self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py') + self.write_file((pkg_dir, 'README'), '') + + dist = Distribution({'name': 'foo', 'version': '0.1', + 'py_modules': ['foo'], + 'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx'}) + dist.script_name = 'setup.py' + os.chdir(pkg_dir) + + sys.argv = ['setup.py'] + cmd = bdist_rpm(dist) + cmd.fix_python = True + + cmd.quiet = 1 + cmd.ensure_finalized() + cmd.run() + + dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) + self.assertIn('foo-0.1-1.noarch.rpm', dist_created) + + # bug #2945: upload ignores bdist_rpm files + self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files) + self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files) + + os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm')) + +def test_suite(): + return unittest.makeSuite(BuildRpmTestCase) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_bdist_wininst.py b/distutils/distutils/tests/test_bdist_wininst.py new file mode 100644 index 0000000..4c19bba --- /dev/null +++ b/distutils/distutils/tests/test_bdist_wininst.py @@ -0,0 +1,33 @@ +"""Tests for distutils.command.bdist_wininst.""" +import unittest +from test.support import run_unittest + +from distutils.command.bdist_wininst import bdist_wininst +from distutils.tests import support + +@unittest.skipIf(getattr(bdist_wininst, '_unsupported', False), + 'bdist_wininst is not supported in this install') +class BuildWinInstTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_get_exe_bytes(self): + + # issue5731: command was broken on non-windows platforms + # this test makes sure it works now for every platform + # let's create a command + pkg_pth, dist = self.create_dist() + cmd = bdist_wininst(dist) + cmd.ensure_finalized() + + # let's run the code that finds the right wininst*.exe file + # and make sure it finds it and returns its content + # no matter what platform we have + exe_file = cmd.get_exe_bytes() + self.assertGreater(len(exe_file), 10) + +def test_suite(): + return unittest.makeSuite(BuildWinInstTestCase) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_build.py b/distutils/distutils/tests/test_build.py new file mode 100644 index 0000000..b020a5b --- /dev/null +++ b/distutils/distutils/tests/test_build.py @@ -0,0 +1,56 @@ +"""Tests for distutils.command.build.""" +import unittest +import os +import sys +from test.support import run_unittest + +from distutils.command.build import build +from distutils.tests import support +from sysconfig import get_platform + +class BuildTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_finalize_options(self): + pkg_dir, dist = self.create_dist() + cmd = build(dist) + cmd.finalize_options() + + # if not specified, plat_name gets the current platform + self.assertEqual(cmd.plat_name, get_platform()) + + # build_purelib is build + lib + wanted = os.path.join(cmd.build_base, 'lib') + self.assertEqual(cmd.build_purelib, wanted) + + # build_platlib is 'build/lib.platform-x.x[-pydebug]' + # examples: + # build/lib.macosx-10.3-i386-2.7 + plat_spec = '.%s-%d.%d' % (cmd.plat_name, *sys.version_info[:2]) + if hasattr(sys, 'gettotalrefcount'): + self.assertTrue(cmd.build_platlib.endswith('-pydebug')) + plat_spec += '-pydebug' + wanted = os.path.join(cmd.build_base, 'lib' + plat_spec) + self.assertEqual(cmd.build_platlib, wanted) + + # by default, build_lib = build_purelib + self.assertEqual(cmd.build_lib, cmd.build_purelib) + + # build_temp is build/temp. + wanted = os.path.join(cmd.build_base, 'temp' + plat_spec) + self.assertEqual(cmd.build_temp, wanted) + + # build_scripts is build/scripts-x.x + wanted = os.path.join(cmd.build_base, + 'scripts-%d.%d' % sys.version_info[:2]) + self.assertEqual(cmd.build_scripts, wanted) + + # executable is os.path.normpath(sys.executable) + self.assertEqual(cmd.executable, os.path.normpath(sys.executable)) + +def test_suite(): + return unittest.makeSuite(BuildTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_build_clib.py b/distutils/distutils/tests/test_build_clib.py new file mode 100644 index 0000000..85d0990 --- /dev/null +++ b/distutils/distutils/tests/test_build_clib.py @@ -0,0 +1,135 @@ +"""Tests for distutils.command.build_clib.""" +import unittest +import os +import sys + +from test.support import run_unittest, missing_compiler_executable + +from distutils.command.build_clib import build_clib +from distutils.errors import DistutilsSetupError +from distutils.tests import support +from distutils.spawn import find_executable + +class BuildCLibTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_check_library_dist(self): + pkg_dir, dist = self.create_dist() + cmd = build_clib(dist) + + # 'libraries' option must be a list + self.assertRaises(DistutilsSetupError, cmd.check_library_list, 'foo') + + # each element of 'libraries' must a 2-tuple + self.assertRaises(DistutilsSetupError, cmd.check_library_list, + ['foo1', 'foo2']) + + # first element of each tuple in 'libraries' + # must be a string (the library name) + self.assertRaises(DistutilsSetupError, cmd.check_library_list, + [(1, 'foo1'), ('name', 'foo2')]) + + # library name may not contain directory separators + self.assertRaises(DistutilsSetupError, cmd.check_library_list, + [('name', 'foo1'), + ('another/name', 'foo2')]) + + # second element of each tuple must be a dictionary (build info) + self.assertRaises(DistutilsSetupError, cmd.check_library_list, + [('name', {}), + ('another', 'foo2')]) + + # those work + libs = [('name', {}), ('name', {'ok': 'good'})] + cmd.check_library_list(libs) + + def test_get_source_files(self): + pkg_dir, dist = self.create_dist() + cmd = build_clib(dist) + + # "in 'libraries' option 'sources' must be present and must be + # a list of source filenames + cmd.libraries = [('name', {})] + self.assertRaises(DistutilsSetupError, cmd.get_source_files) + + cmd.libraries = [('name', {'sources': 1})] + self.assertRaises(DistutilsSetupError, cmd.get_source_files) + + cmd.libraries = [('name', {'sources': ['a', 'b']})] + self.assertEqual(cmd.get_source_files(), ['a', 'b']) + + cmd.libraries = [('name', {'sources': ('a', 'b')})] + self.assertEqual(cmd.get_source_files(), ['a', 'b']) + + cmd.libraries = [('name', {'sources': ('a', 'b')}), + ('name2', {'sources': ['c', 'd']})] + self.assertEqual(cmd.get_source_files(), ['a', 'b', 'c', 'd']) + + def test_build_libraries(self): + + pkg_dir, dist = self.create_dist() + cmd = build_clib(dist) + class FakeCompiler: + def compile(*args, **kw): + pass + create_static_lib = compile + + cmd.compiler = FakeCompiler() + + # build_libraries is also doing a bit of typo checking + lib = [('name', {'sources': 'notvalid'})] + self.assertRaises(DistutilsSetupError, cmd.build_libraries, lib) + + lib = [('name', {'sources': list()})] + cmd.build_libraries(lib) + + lib = [('name', {'sources': tuple()})] + cmd.build_libraries(lib) + + def test_finalize_options(self): + pkg_dir, dist = self.create_dist() + cmd = build_clib(dist) + + cmd.include_dirs = 'one-dir' + cmd.finalize_options() + self.assertEqual(cmd.include_dirs, ['one-dir']) + + cmd.include_dirs = None + cmd.finalize_options() + self.assertEqual(cmd.include_dirs, []) + + cmd.distribution.libraries = 'WONTWORK' + self.assertRaises(DistutilsSetupError, cmd.finalize_options) + + @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") + def test_run(self): + pkg_dir, dist = self.create_dist() + cmd = build_clib(dist) + + foo_c = os.path.join(pkg_dir, 'foo.c') + self.write_file(foo_c, 'int main(void) { return 1;}\n') + cmd.libraries = [('foo', {'sources': [foo_c]})] + + build_temp = os.path.join(pkg_dir, 'build') + os.mkdir(build_temp) + cmd.build_temp = build_temp + cmd.build_clib = build_temp + + # Before we run the command, we want to make sure + # all commands are present on the system. + ccmd = missing_compiler_executable() + if ccmd is not None: + self.skipTest('The %r command is not found' % ccmd) + + # this should work + cmd.run() + + # let's check the result + self.assertIn('libfoo.a', os.listdir(build_temp)) + +def test_suite(): + return unittest.makeSuite(BuildCLibTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_build_ext.py b/distutils/distutils/tests/test_build_ext.py new file mode 100644 index 0000000..c6502d6 --- /dev/null +++ b/distutils/distutils/tests/test_build_ext.py @@ -0,0 +1,521 @@ +import sys +import os +from io import StringIO +import textwrap + +from distutils.core import Distribution +from distutils.command.build_ext import build_ext +from distutils import sysconfig +from distutils.tests.support import (TempdirManager, LoggingSilencer, + copy_xxmodule_c, fixup_build_ext) +from distutils.extension import Extension +from distutils.errors import ( + CompileError, DistutilsPlatformError, DistutilsSetupError, + UnknownFileError) + +import unittest +from test import support + +# http://bugs.python.org/issue4373 +# Don't load the xx module more than once. +ALREADY_TESTED = False + + +class BuildExtTestCase(TempdirManager, + LoggingSilencer, + unittest.TestCase): + def setUp(self): + # Create a simple test environment + # Note that we're making changes to sys.path + super(BuildExtTestCase, self).setUp() + self.tmp_dir = self.mkdtemp() + self.sys_path = sys.path, sys.path[:] + sys.path.append(self.tmp_dir) + import site + self.old_user_base = site.USER_BASE + site.USER_BASE = self.mkdtemp() + from distutils.command import build_ext + build_ext.USER_BASE = site.USER_BASE + + # bpo-30132: On Windows, a .pdb file may be created in the current + # working directory. Create a temporary working directory to cleanup + # everything at the end of the test. + self.temp_cwd = support.temp_cwd() + self.temp_cwd.__enter__() + self.addCleanup(self.temp_cwd.__exit__, None, None, None) + + def build_ext(self, *args, **kwargs): + return build_ext(*args, **kwargs) + + def test_build_ext(self): + cmd = support.missing_compiler_executable() + if cmd is not None: + self.skipTest('The %r command is not found' % cmd) + global ALREADY_TESTED + copy_xxmodule_c(self.tmp_dir) + xx_c = os.path.join(self.tmp_dir, 'xxmodule.c') + xx_ext = Extension('xx', [xx_c]) + dist = Distribution({'name': 'xx', 'ext_modules': [xx_ext]}) + dist.package_dir = self.tmp_dir + cmd = self.build_ext(dist) + fixup_build_ext(cmd) + cmd.build_lib = self.tmp_dir + cmd.build_temp = self.tmp_dir + + old_stdout = sys.stdout + if not support.verbose: + # silence compiler output + sys.stdout = StringIO() + try: + cmd.ensure_finalized() + cmd.run() + finally: + sys.stdout = old_stdout + + if ALREADY_TESTED: + self.skipTest('Already tested in %s' % ALREADY_TESTED) + else: + ALREADY_TESTED = type(self).__name__ + + import xx + + for attr in ('error', 'foo', 'new', 'roj'): + self.assertTrue(hasattr(xx, attr)) + + self.assertEqual(xx.foo(2, 5), 7) + self.assertEqual(xx.foo(13,15), 28) + self.assertEqual(xx.new().demo(), None) + if support.HAVE_DOCSTRINGS: + doc = 'This is a template module just for instruction.' + self.assertEqual(xx.__doc__, doc) + self.assertIsInstance(xx.Null(), xx.Null) + self.assertIsInstance(xx.Str(), xx.Str) + + def tearDown(self): + # Get everything back to normal + support.unload('xx') + sys.path = self.sys_path[0] + sys.path[:] = self.sys_path[1] + import site + site.USER_BASE = self.old_user_base + from distutils.command import build_ext + build_ext.USER_BASE = self.old_user_base + super(BuildExtTestCase, self).tearDown() + + def test_solaris_enable_shared(self): + dist = Distribution({'name': 'xx'}) + cmd = self.build_ext(dist) + old = sys.platform + + sys.platform = 'sunos' # fooling finalize_options + from distutils.sysconfig import _config_vars + old_var = _config_vars.get('Py_ENABLE_SHARED') + _config_vars['Py_ENABLE_SHARED'] = 1 + try: + cmd.ensure_finalized() + finally: + sys.platform = old + if old_var is None: + del _config_vars['Py_ENABLE_SHARED'] + else: + _config_vars['Py_ENABLE_SHARED'] = old_var + + # make sure we get some library dirs under solaris + self.assertGreater(len(cmd.library_dirs), 0) + + def test_user_site(self): + import site + dist = Distribution({'name': 'xx'}) + cmd = self.build_ext(dist) + + # making sure the user option is there + options = [name for name, short, lable in + cmd.user_options] + self.assertIn('user', options) + + # setting a value + cmd.user = 1 + + # setting user based lib and include + lib = os.path.join(site.USER_BASE, 'lib') + incl = os.path.join(site.USER_BASE, 'include') + os.mkdir(lib) + os.mkdir(incl) + + # let's run finalize + cmd.ensure_finalized() + + # see if include_dirs and library_dirs + # were set + self.assertIn(lib, cmd.library_dirs) + self.assertIn(lib, cmd.rpath) + self.assertIn(incl, cmd.include_dirs) + + def test_optional_extension(self): + + # this extension will fail, but let's ignore this failure + # with the optional argument. + modules = [Extension('foo', ['xxx'], optional=False)] + dist = Distribution({'name': 'xx', 'ext_modules': modules}) + cmd = self.build_ext(dist) + cmd.ensure_finalized() + self.assertRaises((UnknownFileError, CompileError), + cmd.run) # should raise an error + + modules = [Extension('foo', ['xxx'], optional=True)] + dist = Distribution({'name': 'xx', 'ext_modules': modules}) + cmd = self.build_ext(dist) + cmd.ensure_finalized() + cmd.run() # should pass + + def test_finalize_options(self): + # Make sure Python's include directories (for Python.h, pyconfig.h, + # etc.) are in the include search path. + modules = [Extension('foo', ['xxx'], optional=False)] + dist = Distribution({'name': 'xx', 'ext_modules': modules}) + cmd = self.build_ext(dist) + cmd.finalize_options() + + py_include = sysconfig.get_python_inc() + self.assertIn(py_include, cmd.include_dirs) + + plat_py_include = sysconfig.get_python_inc(plat_specific=1) + self.assertIn(plat_py_include, cmd.include_dirs) + + # make sure cmd.libraries is turned into a list + # if it's a string + cmd = self.build_ext(dist) + cmd.libraries = 'my_lib, other_lib lastlib' + cmd.finalize_options() + self.assertEqual(cmd.libraries, ['my_lib', 'other_lib', 'lastlib']) + + # make sure cmd.library_dirs is turned into a list + # if it's a string + cmd = self.build_ext(dist) + cmd.library_dirs = 'my_lib_dir%sother_lib_dir' % os.pathsep + cmd.finalize_options() + self.assertIn('my_lib_dir', cmd.library_dirs) + self.assertIn('other_lib_dir', cmd.library_dirs) + + # make sure rpath is turned into a list + # if it's a string + cmd = self.build_ext(dist) + cmd.rpath = 'one%stwo' % os.pathsep + cmd.finalize_options() + self.assertEqual(cmd.rpath, ['one', 'two']) + + # make sure cmd.link_objects is turned into a list + # if it's a string + cmd = build_ext(dist) + cmd.link_objects = 'one two,three' + cmd.finalize_options() + self.assertEqual(cmd.link_objects, ['one', 'two', 'three']) + + # XXX more tests to perform for win32 + + # make sure define is turned into 2-tuples + # strings if they are ','-separated strings + cmd = self.build_ext(dist) + cmd.define = 'one,two' + cmd.finalize_options() + self.assertEqual(cmd.define, [('one', '1'), ('two', '1')]) + + # make sure undef is turned into a list of + # strings if they are ','-separated strings + cmd = self.build_ext(dist) + cmd.undef = 'one,two' + cmd.finalize_options() + self.assertEqual(cmd.undef, ['one', 'two']) + + # make sure swig_opts is turned into a list + cmd = self.build_ext(dist) + cmd.swig_opts = None + cmd.finalize_options() + self.assertEqual(cmd.swig_opts, []) + + cmd = self.build_ext(dist) + cmd.swig_opts = '1 2' + cmd.finalize_options() + self.assertEqual(cmd.swig_opts, ['1', '2']) + + def test_check_extensions_list(self): + dist = Distribution() + cmd = self.build_ext(dist) + cmd.finalize_options() + + #'extensions' option must be a list of Extension instances + self.assertRaises(DistutilsSetupError, + cmd.check_extensions_list, 'foo') + + # each element of 'ext_modules' option must be an + # Extension instance or 2-tuple + exts = [('bar', 'foo', 'bar'), 'foo'] + self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) + + # first element of each tuple in 'ext_modules' + # must be the extension name (a string) and match + # a python dotted-separated name + exts = [('foo-bar', '')] + self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) + + # second element of each tuple in 'ext_modules' + # must be a dictionary (build info) + exts = [('foo.bar', '')] + self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) + + # ok this one should pass + exts = [('foo.bar', {'sources': [''], 'libraries': 'foo', + 'some': 'bar'})] + cmd.check_extensions_list(exts) + ext = exts[0] + self.assertIsInstance(ext, Extension) + + # check_extensions_list adds in ext the values passed + # when they are in ('include_dirs', 'library_dirs', 'libraries' + # 'extra_objects', 'extra_compile_args', 'extra_link_args') + self.assertEqual(ext.libraries, 'foo') + self.assertFalse(hasattr(ext, 'some')) + + # 'macros' element of build info dict must be 1- or 2-tuple + exts = [('foo.bar', {'sources': [''], 'libraries': 'foo', + 'some': 'bar', 'macros': [('1', '2', '3'), 'foo']})] + self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) + + exts[0][1]['macros'] = [('1', '2'), ('3',)] + cmd.check_extensions_list(exts) + self.assertEqual(exts[0].undef_macros, ['3']) + self.assertEqual(exts[0].define_macros, [('1', '2')]) + + def test_get_source_files(self): + modules = [Extension('foo', ['xxx'], optional=False)] + dist = Distribution({'name': 'xx', 'ext_modules': modules}) + cmd = self.build_ext(dist) + cmd.ensure_finalized() + self.assertEqual(cmd.get_source_files(), ['xxx']) + + def test_compiler_option(self): + # cmd.compiler is an option and + # should not be overridden by a compiler instance + # when the command is run + dist = Distribution() + cmd = self.build_ext(dist) + cmd.compiler = 'unix' + cmd.ensure_finalized() + cmd.run() + self.assertEqual(cmd.compiler, 'unix') + + def test_get_outputs(self): + cmd = support.missing_compiler_executable() + if cmd is not None: + self.skipTest('The %r command is not found' % cmd) + tmp_dir = self.mkdtemp() + c_file = os.path.join(tmp_dir, 'foo.c') + self.write_file(c_file, 'void PyInit_foo(void) {}\n') + ext = Extension('foo', [c_file], optional=False) + dist = Distribution({'name': 'xx', + 'ext_modules': [ext]}) + cmd = self.build_ext(dist) + fixup_build_ext(cmd) + cmd.ensure_finalized() + self.assertEqual(len(cmd.get_outputs()), 1) + + cmd.build_lib = os.path.join(self.tmp_dir, 'build') + cmd.build_temp = os.path.join(self.tmp_dir, 'tempt') + + # issue #5977 : distutils build_ext.get_outputs + # returns wrong result with --inplace + other_tmp_dir = os.path.realpath(self.mkdtemp()) + old_wd = os.getcwd() + os.chdir(other_tmp_dir) + try: + cmd.inplace = 1 + cmd.run() + so_file = cmd.get_outputs()[0] + finally: + os.chdir(old_wd) + self.assertTrue(os.path.exists(so_file)) + ext_suffix = sysconfig.get_config_var('EXT_SUFFIX') + self.assertTrue(so_file.endswith(ext_suffix)) + so_dir = os.path.dirname(so_file) + self.assertEqual(so_dir, other_tmp_dir) + + cmd.inplace = 0 + cmd.compiler = None + cmd.run() + so_file = cmd.get_outputs()[0] + self.assertTrue(os.path.exists(so_file)) + self.assertTrue(so_file.endswith(ext_suffix)) + so_dir = os.path.dirname(so_file) + self.assertEqual(so_dir, cmd.build_lib) + + # inplace = 0, cmd.package = 'bar' + build_py = cmd.get_finalized_command('build_py') + build_py.package_dir = {'': 'bar'} + path = cmd.get_ext_fullpath('foo') + # checking that the last directory is the build_dir + path = os.path.split(path)[0] + self.assertEqual(path, cmd.build_lib) + + # inplace = 1, cmd.package = 'bar' + cmd.inplace = 1 + other_tmp_dir = os.path.realpath(self.mkdtemp()) + old_wd = os.getcwd() + os.chdir(other_tmp_dir) + try: + path = cmd.get_ext_fullpath('foo') + finally: + os.chdir(old_wd) + # checking that the last directory is bar + path = os.path.split(path)[0] + lastdir = os.path.split(path)[-1] + self.assertEqual(lastdir, 'bar') + + def test_ext_fullpath(self): + ext = sysconfig.get_config_var('EXT_SUFFIX') + # building lxml.etree inplace + #etree_c = os.path.join(self.tmp_dir, 'lxml.etree.c') + #etree_ext = Extension('lxml.etree', [etree_c]) + #dist = Distribution({'name': 'lxml', 'ext_modules': [etree_ext]}) + dist = Distribution() + cmd = self.build_ext(dist) + cmd.inplace = 1 + cmd.distribution.package_dir = {'': 'src'} + cmd.distribution.packages = ['lxml', 'lxml.html'] + curdir = os.getcwd() + wanted = os.path.join(curdir, 'src', 'lxml', 'etree' + ext) + path = cmd.get_ext_fullpath('lxml.etree') + self.assertEqual(wanted, path) + + # building lxml.etree not inplace + cmd.inplace = 0 + cmd.build_lib = os.path.join(curdir, 'tmpdir') + wanted = os.path.join(curdir, 'tmpdir', 'lxml', 'etree' + ext) + path = cmd.get_ext_fullpath('lxml.etree') + self.assertEqual(wanted, path) + + # building twisted.runner.portmap not inplace + build_py = cmd.get_finalized_command('build_py') + build_py.package_dir = {} + cmd.distribution.packages = ['twisted', 'twisted.runner.portmap'] + path = cmd.get_ext_fullpath('twisted.runner.portmap') + wanted = os.path.join(curdir, 'tmpdir', 'twisted', 'runner', + 'portmap' + ext) + self.assertEqual(wanted, path) + + # building twisted.runner.portmap inplace + cmd.inplace = 1 + path = cmd.get_ext_fullpath('twisted.runner.portmap') + wanted = os.path.join(curdir, 'twisted', 'runner', 'portmap' + ext) + self.assertEqual(wanted, path) + + + @unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for MacOSX') + def test_deployment_target_default(self): + # Issue 9516: Test that, in the absence of the environment variable, + # an extension module is compiled with the same deployment target as + # the interpreter. + self._try_compile_deployment_target('==', None) + + @unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for MacOSX') + def test_deployment_target_too_low(self): + # Issue 9516: Test that an extension module is not allowed to be + # compiled with a deployment target less than that of the interpreter. + self.assertRaises(DistutilsPlatformError, + self._try_compile_deployment_target, '>', '10.1') + + @unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for MacOSX') + def test_deployment_target_higher_ok(self): + # Issue 9516: Test that an extension module can be compiled with a + # deployment target higher than that of the interpreter: the ext + # module may depend on some newer OS feature. + deptarget = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + if deptarget: + # increment the minor version number (i.e. 10.6 -> 10.7) + deptarget = [int(x) for x in deptarget.split('.')] + deptarget[-1] += 1 + deptarget = '.'.join(str(i) for i in deptarget) + self._try_compile_deployment_target('<', deptarget) + + def _try_compile_deployment_target(self, operator, target): + orig_environ = os.environ + os.environ = orig_environ.copy() + self.addCleanup(setattr, os, 'environ', orig_environ) + + if target is None: + if os.environ.get('MACOSX_DEPLOYMENT_TARGET'): + del os.environ['MACOSX_DEPLOYMENT_TARGET'] + else: + os.environ['MACOSX_DEPLOYMENT_TARGET'] = target + + deptarget_c = os.path.join(self.tmp_dir, 'deptargetmodule.c') + + with open(deptarget_c, 'w') as fp: + fp.write(textwrap.dedent('''\ + #include + + int dummy; + + #if TARGET %s MAC_OS_X_VERSION_MIN_REQUIRED + #else + #error "Unexpected target" + #endif + + ''' % operator)) + + # get the deployment target that the interpreter was built with + target = sysconfig.get_config_var('MACOSX_DEPLOYMENT_TARGET') + target = tuple(map(int, target.split('.')[0:2])) + # format the target value as defined in the Apple + # Availability Macros. We can't use the macro names since + # at least one value we test with will not exist yet. + if target[1] < 10: + # for 10.1 through 10.9.x -> "10n0" + target = '%02d%01d0' % target + else: + # for 10.10 and beyond -> "10nn00" + target = '%02d%02d00' % target + deptarget_ext = Extension( + 'deptarget', + [deptarget_c], + extra_compile_args=['-DTARGET=%s'%(target,)], + ) + dist = Distribution({ + 'name': 'deptarget', + 'ext_modules': [deptarget_ext] + }) + dist.package_dir = self.tmp_dir + cmd = self.build_ext(dist) + cmd.build_lib = self.tmp_dir + cmd.build_temp = self.tmp_dir + + try: + old_stdout = sys.stdout + if not support.verbose: + # silence compiler output + sys.stdout = StringIO() + try: + cmd.ensure_finalized() + cmd.run() + finally: + sys.stdout = old_stdout + + except CompileError: + self.fail("Wrong deployment target during compilation") + + +class ParallelBuildExtTestCase(BuildExtTestCase): + + def build_ext(self, *args, **kwargs): + build_ext = super().build_ext(*args, **kwargs) + build_ext.parallel = True + return build_ext + + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(BuildExtTestCase)) + suite.addTest(unittest.makeSuite(ParallelBuildExtTestCase)) + return suite + +if __name__ == '__main__': + support.run_unittest(__name__) diff --git a/distutils/distutils/tests/test_build_py.py b/distutils/distutils/tests/test_build_py.py new file mode 100644 index 0000000..0712e92 --- /dev/null +++ b/distutils/distutils/tests/test_build_py.py @@ -0,0 +1,179 @@ +"""Tests for distutils.command.build_py.""" + +import os +import sys +import unittest + +from distutils.command.build_py import build_py +from distutils.core import Distribution +from distutils.errors import DistutilsFileError + +from distutils.tests import support +from test.support import run_unittest + + +class BuildPyTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_package_data(self): + sources = self.mkdtemp() + f = open(os.path.join(sources, "__init__.py"), "w") + try: + f.write("# Pretend this is a package.") + finally: + f.close() + f = open(os.path.join(sources, "README.txt"), "w") + try: + f.write("Info about this package") + finally: + f.close() + + destination = self.mkdtemp() + + dist = Distribution({"packages": ["pkg"], + "package_dir": {"pkg": sources}}) + # script_name need not exist, it just need to be initialized + dist.script_name = os.path.join(sources, "setup.py") + dist.command_obj["build"] = support.DummyCommand( + force=0, + build_lib=destination) + dist.packages = ["pkg"] + dist.package_data = {"pkg": ["README.txt"]} + dist.package_dir = {"pkg": sources} + + cmd = build_py(dist) + cmd.compile = 1 + cmd.ensure_finalized() + self.assertEqual(cmd.package_data, dist.package_data) + + cmd.run() + + # This makes sure the list of outputs includes byte-compiled + # files for Python modules but not for package data files + # (there shouldn't *be* byte-code files for those!). + self.assertEqual(len(cmd.get_outputs()), 3) + pkgdest = os.path.join(destination, "pkg") + files = os.listdir(pkgdest) + pycache_dir = os.path.join(pkgdest, "__pycache__") + self.assertIn("__init__.py", files) + self.assertIn("README.txt", files) + if sys.dont_write_bytecode: + self.assertFalse(os.path.exists(pycache_dir)) + else: + pyc_files = os.listdir(pycache_dir) + self.assertIn("__init__.%s.pyc" % sys.implementation.cache_tag, + pyc_files) + + def test_empty_package_dir(self): + # See bugs #1668596/#1720897 + sources = self.mkdtemp() + open(os.path.join(sources, "__init__.py"), "w").close() + + testdir = os.path.join(sources, "doc") + os.mkdir(testdir) + open(os.path.join(testdir, "testfile"), "w").close() + + os.chdir(sources) + dist = Distribution({"packages": ["pkg"], + "package_dir": {"pkg": ""}, + "package_data": {"pkg": ["doc/*"]}}) + # script_name need not exist, it just need to be initialized + dist.script_name = os.path.join(sources, "setup.py") + dist.script_args = ["build"] + dist.parse_command_line() + + try: + dist.run_commands() + except DistutilsFileError: + self.fail("failed package_data test when package_dir is ''") + + @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + def test_byte_compile(self): + project_dir, dist = self.create_dist(py_modules=['boiledeggs']) + os.chdir(project_dir) + self.write_file('boiledeggs.py', 'import antigravity') + cmd = build_py(dist) + cmd.compile = 1 + cmd.build_lib = 'here' + cmd.finalize_options() + cmd.run() + + found = os.listdir(cmd.build_lib) + self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py']) + found = os.listdir(os.path.join(cmd.build_lib, '__pycache__')) + self.assertEqual(found, + ['boiledeggs.%s.pyc' % sys.implementation.cache_tag]) + + @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + def test_byte_compile_optimized(self): + project_dir, dist = self.create_dist(py_modules=['boiledeggs']) + os.chdir(project_dir) + self.write_file('boiledeggs.py', 'import antigravity') + cmd = build_py(dist) + cmd.compile = 0 + cmd.optimize = 1 + cmd.build_lib = 'here' + cmd.finalize_options() + cmd.run() + + found = os.listdir(cmd.build_lib) + self.assertEqual(sorted(found), ['__pycache__', 'boiledeggs.py']) + found = os.listdir(os.path.join(cmd.build_lib, '__pycache__')) + expect = 'boiledeggs.{}.opt-1.pyc'.format(sys.implementation.cache_tag) + self.assertEqual(sorted(found), [expect]) + + def test_dir_in_package_data(self): + """ + A directory in package_data should not be added to the filelist. + """ + # See bug 19286 + sources = self.mkdtemp() + pkg_dir = os.path.join(sources, "pkg") + + os.mkdir(pkg_dir) + open(os.path.join(pkg_dir, "__init__.py"), "w").close() + + docdir = os.path.join(pkg_dir, "doc") + os.mkdir(docdir) + open(os.path.join(docdir, "testfile"), "w").close() + + # create the directory that could be incorrectly detected as a file + os.mkdir(os.path.join(docdir, 'otherdir')) + + os.chdir(sources) + dist = Distribution({"packages": ["pkg"], + "package_data": {"pkg": ["doc/*"]}}) + # script_name need not exist, it just need to be initialized + dist.script_name = os.path.join(sources, "setup.py") + dist.script_args = ["build"] + dist.parse_command_line() + + try: + dist.run_commands() + except DistutilsFileError: + self.fail("failed package_data when data dir includes a dir") + + def test_dont_write_bytecode(self): + # makes sure byte_compile is not used + dist = self.create_dist()[1] + cmd = build_py(dist) + cmd.compile = 1 + cmd.optimize = 1 + + old_dont_write_bytecode = sys.dont_write_bytecode + sys.dont_write_bytecode = True + try: + cmd.byte_compile([]) + finally: + sys.dont_write_bytecode = old_dont_write_bytecode + + self.assertIn('byte-compiling is disabled', + self.logs[0][1] % self.logs[0][2]) + + +def test_suite(): + return unittest.makeSuite(BuildPyTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_build_scripts.py b/distutils/distutils/tests/test_build_scripts.py new file mode 100644 index 0000000..954fc76 --- /dev/null +++ b/distutils/distutils/tests/test_build_scripts.py @@ -0,0 +1,112 @@ +"""Tests for distutils.command.build_scripts.""" + +import os +import unittest + +from distutils.command.build_scripts import build_scripts +from distutils.core import Distribution +from distutils import sysconfig + +from distutils.tests import support +from test.support import run_unittest + + +class BuildScriptsTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_default_settings(self): + cmd = self.get_build_scripts_cmd("/foo/bar", []) + self.assertFalse(cmd.force) + self.assertIsNone(cmd.build_dir) + + cmd.finalize_options() + + self.assertTrue(cmd.force) + self.assertEqual(cmd.build_dir, "/foo/bar") + + def test_build(self): + source = self.mkdtemp() + target = self.mkdtemp() + expected = self.write_sample_scripts(source) + + cmd = self.get_build_scripts_cmd(target, + [os.path.join(source, fn) + for fn in expected]) + cmd.finalize_options() + cmd.run() + + built = os.listdir(target) + for name in expected: + self.assertIn(name, built) + + def get_build_scripts_cmd(self, target, scripts): + import sys + dist = Distribution() + dist.scripts = scripts + dist.command_obj["build"] = support.DummyCommand( + build_scripts=target, + force=1, + executable=sys.executable + ) + return build_scripts(dist) + + def write_sample_scripts(self, dir): + expected = [] + expected.append("script1.py") + self.write_script(dir, "script1.py", + ("#! /usr/bin/env python2.3\n" + "# bogus script w/ Python sh-bang\n" + "pass\n")) + expected.append("script2.py") + self.write_script(dir, "script2.py", + ("#!/usr/bin/python\n" + "# bogus script w/ Python sh-bang\n" + "pass\n")) + expected.append("shell.sh") + self.write_script(dir, "shell.sh", + ("#!/bin/sh\n" + "# bogus shell script w/ sh-bang\n" + "exit 0\n")) + return expected + + def write_script(self, dir, name, text): + f = open(os.path.join(dir, name), "w") + try: + f.write(text) + finally: + f.close() + + def test_version_int(self): + source = self.mkdtemp() + target = self.mkdtemp() + expected = self.write_sample_scripts(source) + + + cmd = self.get_build_scripts_cmd(target, + [os.path.join(source, fn) + for fn in expected]) + cmd.finalize_options() + + # http://bugs.python.org/issue4524 + # + # On linux-g++-32 with command line `./configure --enable-ipv6 + # --with-suffix=3`, python is compiled okay but the build scripts + # failed when writing the name of the executable + old = sysconfig.get_config_vars().get('VERSION') + sysconfig._config_vars['VERSION'] = 4 + try: + cmd.run() + finally: + if old is not None: + sysconfig._config_vars['VERSION'] = old + + built = os.listdir(target) + for name in expected: + self.assertIn(name, built) + +def test_suite(): + return unittest.makeSuite(BuildScriptsTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_check.py b/distutils/distutils/tests/test_check.py new file mode 100644 index 0000000..3d22868 --- /dev/null +++ b/distutils/distutils/tests/test_check.py @@ -0,0 +1,149 @@ +"""Tests for distutils.command.check.""" +import textwrap +import unittest +from test.support import run_unittest + +from distutils.command.check import check, HAS_DOCUTILS +from distutils.tests import support +from distutils.errors import DistutilsSetupError + +try: + import pygments +except ImportError: + pygments = None + + +class CheckTestCase(support.LoggingSilencer, + support.TempdirManager, + unittest.TestCase): + + def _run(self, metadata=None, **options): + if metadata is None: + metadata = {} + pkg_info, dist = self.create_dist(**metadata) + cmd = check(dist) + cmd.initialize_options() + for name, value in options.items(): + setattr(cmd, name, value) + cmd.ensure_finalized() + cmd.run() + return cmd + + def test_check_metadata(self): + # let's run the command with no metadata at all + # by default, check is checking the metadata + # should have some warnings + cmd = self._run() + self.assertEqual(cmd._warnings, 2) + + # now let's add the required fields + # and run it again, to make sure we don't get + # any warning anymore + metadata = {'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx', + 'name': 'xxx', 'version': 'xxx'} + cmd = self._run(metadata) + self.assertEqual(cmd._warnings, 0) + + # now with the strict mode, we should + # get an error if there are missing metadata + self.assertRaises(DistutilsSetupError, self._run, {}, **{'strict': 1}) + + # and of course, no error when all metadata are present + cmd = self._run(metadata, strict=1) + self.assertEqual(cmd._warnings, 0) + + # now a test with non-ASCII characters + metadata = {'url': 'xxx', 'author': '\u00c9ric', + 'author_email': 'xxx', 'name': 'xxx', + 'version': 'xxx', + 'description': 'Something about esszet \u00df', + 'long_description': 'More things about esszet \u00df'} + cmd = self._run(metadata) + self.assertEqual(cmd._warnings, 0) + + @unittest.skipUnless(HAS_DOCUTILS, "won't test without docutils") + def test_check_document(self): + pkg_info, dist = self.create_dist() + cmd = check(dist) + + # let's see if it detects broken rest + broken_rest = 'title\n===\n\ntest' + msgs = cmd._check_rst_data(broken_rest) + self.assertEqual(len(msgs), 1) + + # and non-broken rest + rest = 'title\n=====\n\ntest' + msgs = cmd._check_rst_data(rest) + self.assertEqual(len(msgs), 0) + + @unittest.skipUnless(HAS_DOCUTILS, "won't test without docutils") + def test_check_restructuredtext(self): + # let's see if it detects broken rest in long_description + broken_rest = 'title\n===\n\ntest' + pkg_info, dist = self.create_dist(long_description=broken_rest) + cmd = check(dist) + cmd.check_restructuredtext() + self.assertEqual(cmd._warnings, 1) + + # let's see if we have an error with strict=1 + metadata = {'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx', + 'name': 'xxx', 'version': 'xxx', + 'long_description': broken_rest} + self.assertRaises(DistutilsSetupError, self._run, metadata, + **{'strict': 1, 'restructuredtext': 1}) + + # and non-broken rest, including a non-ASCII character to test #12114 + metadata['long_description'] = 'title\n=====\n\ntest \u00df' + cmd = self._run(metadata, strict=1, restructuredtext=1) + self.assertEqual(cmd._warnings, 0) + + @unittest.skipUnless(HAS_DOCUTILS, "won't test without docutils") + def test_check_restructuredtext_with_syntax_highlight(self): + # Don't fail if there is a `code` or `code-block` directive + + example_rst_docs = [] + example_rst_docs.append(textwrap.dedent("""\ + Here's some code: + + .. code:: python + + def foo(): + pass + """)) + example_rst_docs.append(textwrap.dedent("""\ + Here's some code: + + .. code-block:: python + + def foo(): + pass + """)) + + for rest_with_code in example_rst_docs: + pkg_info, dist = self.create_dist(long_description=rest_with_code) + cmd = check(dist) + cmd.check_restructuredtext() + msgs = cmd._check_rst_data(rest_with_code) + if pygments is not None: + self.assertEqual(len(msgs), 0) + else: + self.assertEqual(len(msgs), 1) + self.assertEqual( + str(msgs[0][1]), + 'Cannot analyze code. Pygments package not found.' + ) + + def test_check_all(self): + + metadata = {'url': 'xxx', 'author': 'xxx'} + self.assertRaises(DistutilsSetupError, self._run, + {}, **{'strict': 1, + 'restructuredtext': 1}) + +def test_suite(): + return unittest.makeSuite(CheckTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_clean.py b/distutils/distutils/tests/test_clean.py new file mode 100644 index 0000000..c605afd --- /dev/null +++ b/distutils/distutils/tests/test_clean.py @@ -0,0 +1,49 @@ +"""Tests for distutils.command.clean.""" +import os +import unittest + +from distutils.command.clean import clean +from distutils.tests import support +from test.support import run_unittest + +class cleanTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_simple_run(self): + pkg_dir, dist = self.create_dist() + cmd = clean(dist) + + # let's add some elements clean should remove + dirs = [(d, os.path.join(pkg_dir, d)) + for d in ('build_temp', 'build_lib', 'bdist_base', + 'build_scripts', 'build_base')] + + for name, path in dirs: + os.mkdir(path) + setattr(cmd, name, path) + if name == 'build_base': + continue + for f in ('one', 'two', 'three'): + self.write_file(os.path.join(path, f)) + + # let's run the command + cmd.all = 1 + cmd.ensure_finalized() + cmd.run() + + # make sure the files where removed + for name, path in dirs: + self.assertFalse(os.path.exists(path), + '%s was not removed' % path) + + # let's run the command again (should spit warnings but succeed) + cmd.all = 1 + cmd.ensure_finalized() + cmd.run() + +def test_suite(): + return unittest.makeSuite(cleanTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_cmd.py b/distutils/distutils/tests/test_cmd.py new file mode 100644 index 0000000..cf5197c --- /dev/null +++ b/distutils/distutils/tests/test_cmd.py @@ -0,0 +1,126 @@ +"""Tests for distutils.cmd.""" +import unittest +import os +from test.support import captured_stdout, run_unittest + +from distutils.cmd import Command +from distutils.dist import Distribution +from distutils.errors import DistutilsOptionError +from distutils import debug + +class MyCmd(Command): + def initialize_options(self): + pass + +class CommandTestCase(unittest.TestCase): + + def setUp(self): + dist = Distribution() + self.cmd = MyCmd(dist) + + def test_ensure_string_list(self): + + cmd = self.cmd + cmd.not_string_list = ['one', 2, 'three'] + cmd.yes_string_list = ['one', 'two', 'three'] + cmd.not_string_list2 = object() + cmd.yes_string_list2 = 'ok' + cmd.ensure_string_list('yes_string_list') + cmd.ensure_string_list('yes_string_list2') + + self.assertRaises(DistutilsOptionError, + cmd.ensure_string_list, 'not_string_list') + + self.assertRaises(DistutilsOptionError, + cmd.ensure_string_list, 'not_string_list2') + + cmd.option1 = 'ok,dok' + cmd.ensure_string_list('option1') + self.assertEqual(cmd.option1, ['ok', 'dok']) + + cmd.option2 = ['xxx', 'www'] + cmd.ensure_string_list('option2') + + cmd.option3 = ['ok', 2] + self.assertRaises(DistutilsOptionError, cmd.ensure_string_list, + 'option3') + + + def test_make_file(self): + + cmd = self.cmd + + # making sure it raises when infiles is not a string or a list/tuple + self.assertRaises(TypeError, cmd.make_file, + infiles=1, outfile='', func='func', args=()) + + # making sure execute gets called properly + def _execute(func, args, exec_msg, level): + self.assertEqual(exec_msg, 'generating out from in') + cmd.force = True + cmd.execute = _execute + cmd.make_file(infiles='in', outfile='out', func='func', args=()) + + def test_dump_options(self): + + msgs = [] + def _announce(msg, level): + msgs.append(msg) + cmd = self.cmd + cmd.announce = _announce + cmd.option1 = 1 + cmd.option2 = 1 + cmd.user_options = [('option1', '', ''), ('option2', '', '')] + cmd.dump_options() + + wanted = ["command options for 'MyCmd':", ' option1 = 1', + ' option2 = 1'] + self.assertEqual(msgs, wanted) + + def test_ensure_string(self): + cmd = self.cmd + cmd.option1 = 'ok' + cmd.ensure_string('option1') + + cmd.option2 = None + cmd.ensure_string('option2', 'xxx') + self.assertTrue(hasattr(cmd, 'option2')) + + cmd.option3 = 1 + self.assertRaises(DistutilsOptionError, cmd.ensure_string, 'option3') + + def test_ensure_filename(self): + cmd = self.cmd + cmd.option1 = __file__ + cmd.ensure_filename('option1') + cmd.option2 = 'xxx' + self.assertRaises(DistutilsOptionError, cmd.ensure_filename, 'option2') + + def test_ensure_dirname(self): + cmd = self.cmd + cmd.option1 = os.path.dirname(__file__) or os.curdir + cmd.ensure_dirname('option1') + cmd.option2 = 'xxx' + self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2') + + def test_debug_print(self): + cmd = self.cmd + with captured_stdout() as stdout: + cmd.debug_print('xxx') + stdout.seek(0) + self.assertEqual(stdout.read(), '') + + debug.DEBUG = True + try: + with captured_stdout() as stdout: + cmd.debug_print('xxx') + stdout.seek(0) + self.assertEqual(stdout.read(), 'xxx\n') + finally: + debug.DEBUG = False + +def test_suite(): + return unittest.makeSuite(CommandTestCase) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_config.py b/distutils/distutils/tests/test_config.py new file mode 100644 index 0000000..77ef788 --- /dev/null +++ b/distutils/distutils/tests/test_config.py @@ -0,0 +1,140 @@ +"""Tests for distutils.pypirc.pypirc.""" +import os +import unittest + +from distutils.core import PyPIRCCommand +from distutils.core import Distribution +from distutils.log import set_threshold +from distutils.log import WARN + +from distutils.tests import support +from test.support import run_unittest + +PYPIRC = """\ +[distutils] + +index-servers = + server1 + server2 + server3 + +[server1] +username:me +password:secret + +[server2] +username:meagain +password: secret +realm:acme +repository:http://another.pypi/ + +[server3] +username:cbiggles +password:yh^%#rest-of-my-password +""" + +PYPIRC_OLD = """\ +[server-login] +username:tarek +password:secret +""" + +WANTED = """\ +[distutils] +index-servers = + pypi + +[pypi] +username:tarek +password:xxx +""" + + +class BasePyPIRCCommandTestCase(support.TempdirManager, + support.LoggingSilencer, + support.EnvironGuard, + unittest.TestCase): + + def setUp(self): + """Patches the environment.""" + super(BasePyPIRCCommandTestCase, self).setUp() + self.tmp_dir = self.mkdtemp() + os.environ['HOME'] = self.tmp_dir + self.rc = os.path.join(self.tmp_dir, '.pypirc') + self.dist = Distribution() + + class command(PyPIRCCommand): + def __init__(self, dist): + PyPIRCCommand.__init__(self, dist) + def initialize_options(self): + pass + finalize_options = initialize_options + + self._cmd = command + self.old_threshold = set_threshold(WARN) + + def tearDown(self): + """Removes the patch.""" + set_threshold(self.old_threshold) + super(BasePyPIRCCommandTestCase, self).tearDown() + + +class PyPIRCCommandTestCase(BasePyPIRCCommandTestCase): + + def test_server_registration(self): + # This test makes sure PyPIRCCommand knows how to: + # 1. handle several sections in .pypirc + # 2. handle the old format + + # new format + self.write_file(self.rc, PYPIRC) + cmd = self._cmd(self.dist) + config = cmd._read_pypirc() + + config = list(sorted(config.items())) + waited = [('password', 'secret'), ('realm', 'pypi'), + ('repository', 'https://upload.pypi.org/legacy/'), + ('server', 'server1'), ('username', 'me')] + self.assertEqual(config, waited) + + # old format + self.write_file(self.rc, PYPIRC_OLD) + config = cmd._read_pypirc() + config = list(sorted(config.items())) + waited = [('password', 'secret'), ('realm', 'pypi'), + ('repository', 'https://upload.pypi.org/legacy/'), + ('server', 'server-login'), ('username', 'tarek')] + self.assertEqual(config, waited) + + def test_server_empty_registration(self): + cmd = self._cmd(self.dist) + rc = cmd._get_rc_file() + self.assertFalse(os.path.exists(rc)) + cmd._store_pypirc('tarek', 'xxx') + self.assertTrue(os.path.exists(rc)) + f = open(rc) + try: + content = f.read() + self.assertEqual(content, WANTED) + finally: + f.close() + + def test_config_interpolation(self): + # using the % character in .pypirc should not raise an error (#20120) + self.write_file(self.rc, PYPIRC) + cmd = self._cmd(self.dist) + cmd.repository = 'server3' + config = cmd._read_pypirc() + + config = list(sorted(config.items())) + waited = [('password', 'yh^%#rest-of-my-password'), ('realm', 'pypi'), + ('repository', 'https://upload.pypi.org/legacy/'), + ('server', 'server3'), ('username', 'cbiggles')] + self.assertEqual(config, waited) + + +def test_suite(): + return unittest.makeSuite(PyPIRCCommandTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_config_cmd.py b/distutils/distutils/tests/test_config_cmd.py new file mode 100644 index 0000000..6e566e7 --- /dev/null +++ b/distutils/distutils/tests/test_config_cmd.py @@ -0,0 +1,92 @@ +"""Tests for distutils.command.config.""" +import unittest +import os +import sys +from test.support import run_unittest, missing_compiler_executable + +from distutils.command.config import dump_file, config +from distutils.tests import support +from distutils import log + +class ConfigTestCase(support.LoggingSilencer, + support.TempdirManager, + unittest.TestCase): + + def _info(self, msg, *args): + for line in msg.splitlines(): + self._logs.append(line) + + def setUp(self): + super(ConfigTestCase, self).setUp() + self._logs = [] + self.old_log = log.info + log.info = self._info + + def tearDown(self): + log.info = self.old_log + super(ConfigTestCase, self).tearDown() + + def test_dump_file(self): + this_file = os.path.splitext(__file__)[0] + '.py' + f = open(this_file) + try: + numlines = len(f.readlines()) + finally: + f.close() + + dump_file(this_file, 'I am the header') + self.assertEqual(len(self._logs), numlines+1) + + @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") + def test_search_cpp(self): + cmd = missing_compiler_executable(['preprocessor']) + if cmd is not None: + self.skipTest('The %r command is not found' % cmd) + pkg_dir, dist = self.create_dist() + cmd = config(dist) + + # simple pattern searches + match = cmd.search_cpp(pattern='xxx', body='/* xxx */') + self.assertEqual(match, 0) + + match = cmd.search_cpp(pattern='_configtest', body='/* xxx */') + self.assertEqual(match, 1) + + def test_finalize_options(self): + # finalize_options does a bit of transformation + # on options + pkg_dir, dist = self.create_dist() + cmd = config(dist) + cmd.include_dirs = 'one%stwo' % os.pathsep + cmd.libraries = 'one' + cmd.library_dirs = 'three%sfour' % os.pathsep + cmd.ensure_finalized() + + self.assertEqual(cmd.include_dirs, ['one', 'two']) + self.assertEqual(cmd.libraries, ['one']) + self.assertEqual(cmd.library_dirs, ['three', 'four']) + + def test_clean(self): + # _clean removes files + tmp_dir = self.mkdtemp() + f1 = os.path.join(tmp_dir, 'one') + f2 = os.path.join(tmp_dir, 'two') + + self.write_file(f1, 'xxx') + self.write_file(f2, 'xxx') + + for f in (f1, f2): + self.assertTrue(os.path.exists(f)) + + pkg_dir, dist = self.create_dist() + cmd = config(dist) + cmd._clean(f1, f2) + + for f in (f1, f2): + self.assertFalse(os.path.exists(f)) + +def test_suite(): + return unittest.makeSuite(ConfigTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_core.py b/distutils/distutils/tests/test_core.py new file mode 100644 index 0000000..27ce732 --- /dev/null +++ b/distutils/distutils/tests/test_core.py @@ -0,0 +1,140 @@ +"""Tests for distutils.core.""" + +import io +import distutils.core +import os +import shutil +import sys +import test.support +from test.support import captured_stdout, run_unittest +import unittest +from distutils.tests import support +from distutils import log + +# setup script that uses __file__ +setup_using___file__ = """\ + +__file__ + +from distutils.core import setup +setup() +""" + +setup_prints_cwd = """\ + +import os +print(os.getcwd()) + +from distutils.core import setup +setup() +""" + +setup_does_nothing = """\ +from distutils.core import setup +setup() +""" + + +setup_defines_subclass = """\ +from distutils.core import setup +from distutils.command.install import install as _install + +class install(_install): + sub_commands = _install.sub_commands + ['cmd'] + +setup(cmdclass={'install': install}) +""" + +class CoreTestCase(support.EnvironGuard, unittest.TestCase): + + def setUp(self): + super(CoreTestCase, self).setUp() + self.old_stdout = sys.stdout + self.cleanup_testfn() + self.old_argv = sys.argv, sys.argv[:] + self.addCleanup(log.set_threshold, log._global_log.threshold) + + def tearDown(self): + sys.stdout = self.old_stdout + self.cleanup_testfn() + sys.argv = self.old_argv[0] + sys.argv[:] = self.old_argv[1] + super(CoreTestCase, self).tearDown() + + def cleanup_testfn(self): + path = test.support.TESTFN + if os.path.isfile(path): + os.remove(path) + elif os.path.isdir(path): + shutil.rmtree(path) + + def write_setup(self, text, path=test.support.TESTFN): + f = open(path, "w") + try: + f.write(text) + finally: + f.close() + return path + + def test_run_setup_provides_file(self): + # Make sure the script can use __file__; if that's missing, the test + # setup.py script will raise NameError. + distutils.core.run_setup( + self.write_setup(setup_using___file__)) + + def test_run_setup_preserves_sys_argv(self): + # Make sure run_setup does not clobber sys.argv + argv_copy = sys.argv.copy() + distutils.core.run_setup( + self.write_setup(setup_does_nothing)) + self.assertEqual(sys.argv, argv_copy) + + def test_run_setup_defines_subclass(self): + # Make sure the script can use __file__; if that's missing, the test + # setup.py script will raise NameError. + dist = distutils.core.run_setup( + self.write_setup(setup_defines_subclass)) + install = dist.get_command_obj('install') + self.assertIn('cmd', install.sub_commands) + + def test_run_setup_uses_current_dir(self): + # This tests that the setup script is run with the current directory + # as its own current directory; this was temporarily broken by a + # previous patch when TESTFN did not use the current directory. + sys.stdout = io.StringIO() + cwd = os.getcwd() + + # Create a directory and write the setup.py file there: + os.mkdir(test.support.TESTFN) + setup_py = os.path.join(test.support.TESTFN, "setup.py") + distutils.core.run_setup( + self.write_setup(setup_prints_cwd, path=setup_py)) + + output = sys.stdout.getvalue() + if output.endswith("\n"): + output = output[:-1] + self.assertEqual(cwd, output) + + def test_debug_mode(self): + # this covers the code called when DEBUG is set + sys.argv = ['setup.py', '--name'] + with captured_stdout() as stdout: + distutils.core.setup(name='bar') + stdout.seek(0) + self.assertEqual(stdout.read(), 'bar\n') + + distutils.core.DEBUG = True + try: + with captured_stdout() as stdout: + distutils.core.setup(name='bar') + finally: + distutils.core.DEBUG = False + stdout.seek(0) + wanted = "options (after parsing config files):\n" + self.assertEqual(stdout.readlines()[0], wanted) + +def test_suite(): + return unittest.makeSuite(CoreTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_cygwinccompiler.py b/distutils/distutils/tests/test_cygwinccompiler.py new file mode 100644 index 0000000..9dc869d --- /dev/null +++ b/distutils/distutils/tests/test_cygwinccompiler.py @@ -0,0 +1,154 @@ +"""Tests for distutils.cygwinccompiler.""" +import unittest +import sys +import os +from io import BytesIO +from test.support import run_unittest + +from distutils import cygwinccompiler +from distutils.cygwinccompiler import (check_config_h, + CONFIG_H_OK, CONFIG_H_NOTOK, + CONFIG_H_UNCERTAIN, get_versions, + get_msvcr) +from distutils.tests import support + +class FakePopen(object): + test_class = None + + def __init__(self, cmd, shell, stdout): + self.cmd = cmd.split()[0] + exes = self.test_class._exes + if self.cmd in exes: + # issue #6438 in Python 3.x, Popen returns bytes + self.stdout = BytesIO(exes[self.cmd]) + else: + self.stdout = os.popen(cmd, 'r') + + +class CygwinCCompilerTestCase(support.TempdirManager, + unittest.TestCase): + + def setUp(self): + super(CygwinCCompilerTestCase, self).setUp() + self.version = sys.version + self.python_h = os.path.join(self.mkdtemp(), 'python.h') + from distutils import sysconfig + self.old_get_config_h_filename = sysconfig.get_config_h_filename + sysconfig.get_config_h_filename = self._get_config_h_filename + self.old_find_executable = cygwinccompiler.find_executable + cygwinccompiler.find_executable = self._find_executable + self._exes = {} + self.old_popen = cygwinccompiler.Popen + FakePopen.test_class = self + cygwinccompiler.Popen = FakePopen + + def tearDown(self): + sys.version = self.version + from distutils import sysconfig + sysconfig.get_config_h_filename = self.old_get_config_h_filename + cygwinccompiler.find_executable = self.old_find_executable + cygwinccompiler.Popen = self.old_popen + super(CygwinCCompilerTestCase, self).tearDown() + + def _get_config_h_filename(self): + return self.python_h + + def _find_executable(self, name): + if name in self._exes: + return name + return None + + def test_check_config_h(self): + + # check_config_h looks for "GCC" in sys.version first + # returns CONFIG_H_OK if found + sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) \n[GCC ' + '4.0.1 (Apple Computer, Inc. build 5370)]') + + self.assertEqual(check_config_h()[0], CONFIG_H_OK) + + # then it tries to see if it can find "__GNUC__" in pyconfig.h + sys.version = 'something without the *CC word' + + # if the file doesn't exist it returns CONFIG_H_UNCERTAIN + self.assertEqual(check_config_h()[0], CONFIG_H_UNCERTAIN) + + # if it exists but does not contain __GNUC__, it returns CONFIG_H_NOTOK + self.write_file(self.python_h, 'xxx') + self.assertEqual(check_config_h()[0], CONFIG_H_NOTOK) + + # and CONFIG_H_OK if __GNUC__ is found + self.write_file(self.python_h, 'xxx __GNUC__ xxx') + self.assertEqual(check_config_h()[0], CONFIG_H_OK) + + def test_get_versions(self): + + # get_versions calls distutils.spawn.find_executable on + # 'gcc', 'ld' and 'dllwrap' + self.assertEqual(get_versions(), (None, None, None)) + + # Let's fake we have 'gcc' and it returns '3.4.5' + self._exes['gcc'] = b'gcc (GCC) 3.4.5 (mingw special)\nFSF' + res = get_versions() + self.assertEqual(str(res[0]), '3.4.5') + + # and let's see what happens when the version + # doesn't match the regular expression + # (\d+\.\d+(\.\d+)*) + self._exes['gcc'] = b'very strange output' + res = get_versions() + self.assertEqual(res[0], None) + + # same thing for ld + self._exes['ld'] = b'GNU ld version 2.17.50 20060824' + res = get_versions() + self.assertEqual(str(res[1]), '2.17.50') + self._exes['ld'] = b'@(#)PROGRAM:ld PROJECT:ld64-77' + res = get_versions() + self.assertEqual(res[1], None) + + # and dllwrap + self._exes['dllwrap'] = b'GNU dllwrap 2.17.50 20060824\nFSF' + res = get_versions() + self.assertEqual(str(res[2]), '2.17.50') + self._exes['dllwrap'] = b'Cheese Wrap' + res = get_versions() + self.assertEqual(res[2], None) + + def test_get_msvcr(self): + + # none + sys.version = ('2.6.1 (r261:67515, Dec 6 2008, 16:42:21) ' + '\n[GCC 4.0.1 (Apple Computer, Inc. build 5370)]') + self.assertEqual(get_msvcr(), None) + + # MSVC 7.0 + sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' + '[MSC v.1300 32 bits (Intel)]') + self.assertEqual(get_msvcr(), ['msvcr70']) + + # MSVC 7.1 + sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' + '[MSC v.1310 32 bits (Intel)]') + self.assertEqual(get_msvcr(), ['msvcr71']) + + # VS2005 / MSVC 8.0 + sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' + '[MSC v.1400 32 bits (Intel)]') + self.assertEqual(get_msvcr(), ['msvcr80']) + + # VS2008 / MSVC 9.0 + sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' + '[MSC v.1500 32 bits (Intel)]') + self.assertEqual(get_msvcr(), ['msvcr90']) + + # unknown + sys.version = ('2.5.1 (r251:54863, Apr 18 2007, 08:51:08) ' + '[MSC v.1999 32 bits (Intel)]') + self.assertRaises(ValueError, get_msvcr) + +def test_suite(): + return unittest.makeSuite(CygwinCCompilerTestCase) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_dep_util.py b/distutils/distutils/tests/test_dep_util.py new file mode 100644 index 0000000..c6fae39 --- /dev/null +++ b/distutils/distutils/tests/test_dep_util.py @@ -0,0 +1,80 @@ +"""Tests for distutils.dep_util.""" +import unittest +import os + +from distutils.dep_util import newer, newer_pairwise, newer_group +from distutils.errors import DistutilsFileError +from distutils.tests import support +from test.support import run_unittest + +class DepUtilTestCase(support.TempdirManager, unittest.TestCase): + + def test_newer(self): + + tmpdir = self.mkdtemp() + new_file = os.path.join(tmpdir, 'new') + old_file = os.path.abspath(__file__) + + # Raise DistutilsFileError if 'new_file' does not exist. + self.assertRaises(DistutilsFileError, newer, new_file, old_file) + + # Return true if 'new_file' exists and is more recently modified than + # 'old_file', or if 'new_file' exists and 'old_file' doesn't. + self.write_file(new_file) + self.assertTrue(newer(new_file, 'I_dont_exist')) + self.assertTrue(newer(new_file, old_file)) + + # Return false if both exist and 'old_file' is the same age or younger + # than 'new_file'. + self.assertFalse(newer(old_file, new_file)) + + def test_newer_pairwise(self): + tmpdir = self.mkdtemp() + sources = os.path.join(tmpdir, 'sources') + targets = os.path.join(tmpdir, 'targets') + os.mkdir(sources) + os.mkdir(targets) + one = os.path.join(sources, 'one') + two = os.path.join(sources, 'two') + three = os.path.abspath(__file__) # I am the old file + four = os.path.join(targets, 'four') + self.write_file(one) + self.write_file(two) + self.write_file(four) + + self.assertEqual(newer_pairwise([one, two], [three, four]), + ([one],[three])) + + def test_newer_group(self): + tmpdir = self.mkdtemp() + sources = os.path.join(tmpdir, 'sources') + os.mkdir(sources) + one = os.path.join(sources, 'one') + two = os.path.join(sources, 'two') + three = os.path.join(sources, 'three') + old_file = os.path.abspath(__file__) + + # return true if 'old_file' is out-of-date with respect to any file + # listed in 'sources'. + self.write_file(one) + self.write_file(two) + self.write_file(three) + self.assertTrue(newer_group([one, two, three], old_file)) + self.assertFalse(newer_group([one, two, old_file], three)) + + # missing handling + os.remove(one) + self.assertRaises(OSError, newer_group, [one, two, old_file], three) + + self.assertFalse(newer_group([one, two, old_file], three, + missing='ignore')) + + self.assertTrue(newer_group([one, two, old_file], three, + missing='newer')) + + +def test_suite(): + return unittest.makeSuite(DepUtilTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_dir_util.py b/distutils/distutils/tests/test_dir_util.py new file mode 100644 index 0000000..d436cf8 --- /dev/null +++ b/distutils/distutils/tests/test_dir_util.py @@ -0,0 +1,139 @@ +"""Tests for distutils.dir_util.""" +import unittest +import os +import stat +import sys +from unittest.mock import patch + +from distutils import dir_util, errors +from distutils.dir_util import (mkpath, remove_tree, create_tree, copy_tree, + ensure_relative) + +from distutils import log +from distutils.tests import support +from test.support import run_unittest + + +class DirUtilTestCase(support.TempdirManager, unittest.TestCase): + + def _log(self, msg, *args): + if len(args) > 0: + self._logs.append(msg % args) + else: + self._logs.append(msg) + + def setUp(self): + super(DirUtilTestCase, self).setUp() + self._logs = [] + tmp_dir = self.mkdtemp() + self.root_target = os.path.join(tmp_dir, 'deep') + self.target = os.path.join(self.root_target, 'here') + self.target2 = os.path.join(tmp_dir, 'deep2') + self.old_log = log.info + log.info = self._log + + def tearDown(self): + log.info = self.old_log + super(DirUtilTestCase, self).tearDown() + + def test_mkpath_remove_tree_verbosity(self): + + mkpath(self.target, verbose=0) + wanted = [] + self.assertEqual(self._logs, wanted) + remove_tree(self.root_target, verbose=0) + + mkpath(self.target, verbose=1) + wanted = ['creating %s' % self.root_target, + 'creating %s' % self.target] + self.assertEqual(self._logs, wanted) + self._logs = [] + + remove_tree(self.root_target, verbose=1) + wanted = ["removing '%s' (and everything under it)" % self.root_target] + self.assertEqual(self._logs, wanted) + + @unittest.skipIf(sys.platform.startswith('win'), + "This test is only appropriate for POSIX-like systems.") + def test_mkpath_with_custom_mode(self): + # Get and set the current umask value for testing mode bits. + umask = os.umask(0o002) + os.umask(umask) + mkpath(self.target, 0o700) + self.assertEqual( + stat.S_IMODE(os.stat(self.target).st_mode), 0o700 & ~umask) + mkpath(self.target2, 0o555) + self.assertEqual( + stat.S_IMODE(os.stat(self.target2).st_mode), 0o555 & ~umask) + + def test_create_tree_verbosity(self): + + create_tree(self.root_target, ['one', 'two', 'three'], verbose=0) + self.assertEqual(self._logs, []) + remove_tree(self.root_target, verbose=0) + + wanted = ['creating %s' % self.root_target] + create_tree(self.root_target, ['one', 'two', 'three'], verbose=1) + self.assertEqual(self._logs, wanted) + + remove_tree(self.root_target, verbose=0) + + def test_copy_tree_verbosity(self): + + mkpath(self.target, verbose=0) + + copy_tree(self.target, self.target2, verbose=0) + self.assertEqual(self._logs, []) + + remove_tree(self.root_target, verbose=0) + + mkpath(self.target, verbose=0) + a_file = os.path.join(self.target, 'ok.txt') + with open(a_file, 'w') as f: + f.write('some content') + + wanted = ['copying %s -> %s' % (a_file, self.target2)] + copy_tree(self.target, self.target2, verbose=1) + self.assertEqual(self._logs, wanted) + + remove_tree(self.root_target, verbose=0) + remove_tree(self.target2, verbose=0) + + def test_copy_tree_skips_nfs_temp_files(self): + mkpath(self.target, verbose=0) + + a_file = os.path.join(self.target, 'ok.txt') + nfs_file = os.path.join(self.target, '.nfs123abc') + for f in a_file, nfs_file: + with open(f, 'w') as fh: + fh.write('some content') + + copy_tree(self.target, self.target2) + self.assertEqual(os.listdir(self.target2), ['ok.txt']) + + remove_tree(self.root_target, verbose=0) + remove_tree(self.target2, verbose=0) + + def test_ensure_relative(self): + if os.sep == '/': + self.assertEqual(ensure_relative('/home/foo'), 'home/foo') + self.assertEqual(ensure_relative('some/path'), 'some/path') + else: # \\ + self.assertEqual(ensure_relative('c:\\home\\foo'), 'c:home\\foo') + self.assertEqual(ensure_relative('home\\foo'), 'home\\foo') + + def test_copy_tree_exception_in_listdir(self): + """ + An exception in listdir should raise a DistutilsFileError + """ + with patch("os.listdir", side_effect=OSError()), \ + self.assertRaises(errors.DistutilsFileError): + src = self.tempdirs[-1] + dir_util.copy_tree(src, None) + + +def test_suite(): + return unittest.makeSuite(DirUtilTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_dist.py b/distutils/distutils/tests/test_dist.py new file mode 100644 index 0000000..1f104ce --- /dev/null +++ b/distutils/distutils/tests/test_dist.py @@ -0,0 +1,456 @@ +"""Tests for distutils.dist.""" +import os +import io +import sys +import unittest +import warnings +import textwrap + +from unittest import mock + +from distutils.dist import Distribution, fix_help_options, DistributionMetadata +from distutils.cmd import Command + +from test.support import TESTFN, captured_stdout, run_unittest +from distutils.tests import support +from distutils import log + + +class test_dist(Command): + """Sample distutils extension command.""" + + user_options = [ + ("sample-option=", "S", "help text"), + ] + + def initialize_options(self): + self.sample_option = None + + +class TestDistribution(Distribution): + """Distribution subclasses that avoids the default search for + configuration files. + + The ._config_files attribute must be set before + .parse_config_files() is called. + """ + + def find_config_files(self): + return self._config_files + + +class DistributionTestCase(support.LoggingSilencer, + support.TempdirManager, + support.EnvironGuard, + unittest.TestCase): + + def setUp(self): + super(DistributionTestCase, self).setUp() + self.argv = sys.argv, sys.argv[:] + del sys.argv[1:] + + def tearDown(self): + sys.argv = self.argv[0] + sys.argv[:] = self.argv[1] + super(DistributionTestCase, self).tearDown() + + def create_distribution(self, configfiles=()): + d = TestDistribution() + d._config_files = configfiles + d.parse_config_files() + d.parse_command_line() + return d + + def test_command_packages_unspecified(self): + sys.argv.append("build") + d = self.create_distribution() + self.assertEqual(d.get_command_packages(), ["distutils.command"]) + + def test_command_packages_cmdline(self): + from distutils.tests.test_dist import test_dist + sys.argv.extend(["--command-packages", + "foo.bar,distutils.tests", + "test_dist", + "-Ssometext", + ]) + d = self.create_distribution() + # let's actually try to load our test command: + self.assertEqual(d.get_command_packages(), + ["distutils.command", "foo.bar", "distutils.tests"]) + cmd = d.get_command_obj("test_dist") + self.assertIsInstance(cmd, test_dist) + self.assertEqual(cmd.sample_option, "sometext") + + def test_venv_install_options(self): + sys.argv.append("install") + self.addCleanup(os.unlink, TESTFN) + + fakepath = '/somedir' + + with open(TESTFN, "w") as f: + print(("[install]\n" + "install-base = {0}\n" + "install-platbase = {0}\n" + "install-lib = {0}\n" + "install-platlib = {0}\n" + "install-purelib = {0}\n" + "install-headers = {0}\n" + "install-scripts = {0}\n" + "install-data = {0}\n" + "prefix = {0}\n" + "exec-prefix = {0}\n" + "home = {0}\n" + "user = {0}\n" + "root = {0}").format(fakepath), file=f) + + # Base case: Not in a Virtual Environment + with mock.patch.multiple(sys, prefix='/a', base_prefix='/a') as values: + d = self.create_distribution([TESTFN]) + + option_tuple = (TESTFN, fakepath) + + result_dict = { + 'install_base': option_tuple, + 'install_platbase': option_tuple, + 'install_lib': option_tuple, + 'install_platlib': option_tuple, + 'install_purelib': option_tuple, + 'install_headers': option_tuple, + 'install_scripts': option_tuple, + 'install_data': option_tuple, + 'prefix': option_tuple, + 'exec_prefix': option_tuple, + 'home': option_tuple, + 'user': option_tuple, + 'root': option_tuple, + } + + self.assertEqual( + sorted(d.command_options.get('install').keys()), + sorted(result_dict.keys())) + + for (key, value) in d.command_options.get('install').items(): + self.assertEqual(value, result_dict[key]) + + # Test case: In a Virtual Environment + with mock.patch.multiple(sys, prefix='/a', base_prefix='/b') as values: + d = self.create_distribution([TESTFN]) + + for key in result_dict.keys(): + self.assertNotIn(key, d.command_options.get('install', {})) + + def test_command_packages_configfile(self): + sys.argv.append("build") + self.addCleanup(os.unlink, TESTFN) + f = open(TESTFN, "w") + try: + print("[global]", file=f) + print("command_packages = foo.bar, splat", file=f) + finally: + f.close() + + d = self.create_distribution([TESTFN]) + self.assertEqual(d.get_command_packages(), + ["distutils.command", "foo.bar", "splat"]) + + # ensure command line overrides config: + sys.argv[1:] = ["--command-packages", "spork", "build"] + d = self.create_distribution([TESTFN]) + self.assertEqual(d.get_command_packages(), + ["distutils.command", "spork"]) + + # Setting --command-packages to '' should cause the default to + # be used even if a config file specified something else: + sys.argv[1:] = ["--command-packages", "", "build"] + d = self.create_distribution([TESTFN]) + self.assertEqual(d.get_command_packages(), ["distutils.command"]) + + def test_empty_options(self): + # an empty options dictionary should not stay in the + # list of attributes + + # catching warnings + warns = [] + + def _warn(msg): + warns.append(msg) + + self.addCleanup(setattr, warnings, 'warn', warnings.warn) + warnings.warn = _warn + dist = Distribution(attrs={'author': 'xxx', 'name': 'xxx', + 'version': 'xxx', 'url': 'xxxx', + 'options': {}}) + + self.assertEqual(len(warns), 0) + self.assertNotIn('options', dir(dist)) + + def test_finalize_options(self): + attrs = {'keywords': 'one,two', + 'platforms': 'one,two'} + + dist = Distribution(attrs=attrs) + dist.finalize_options() + + # finalize_option splits platforms and keywords + self.assertEqual(dist.metadata.platforms, ['one', 'two']) + self.assertEqual(dist.metadata.keywords, ['one', 'two']) + + def test_get_command_packages(self): + dist = Distribution() + self.assertEqual(dist.command_packages, None) + cmds = dist.get_command_packages() + self.assertEqual(cmds, ['distutils.command']) + self.assertEqual(dist.command_packages, + ['distutils.command']) + + dist.command_packages = 'one,two' + cmds = dist.get_command_packages() + self.assertEqual(cmds, ['distutils.command', 'one', 'two']) + + def test_announce(self): + # make sure the level is known + dist = Distribution() + args = ('ok',) + kwargs = {'level': 'ok2'} + self.assertRaises(ValueError, dist.announce, args, kwargs) + + + def test_find_config_files_disable(self): + # Ticket #1180: Allow user to disable their home config file. + temp_home = self.mkdtemp() + if os.name == 'posix': + user_filename = os.path.join(temp_home, ".pydistutils.cfg") + else: + user_filename = os.path.join(temp_home, "pydistutils.cfg") + + with open(user_filename, 'w') as f: + f.write('[distutils]\n') + + def _expander(path): + return temp_home + + old_expander = os.path.expanduser + os.path.expanduser = _expander + try: + d = Distribution() + all_files = d.find_config_files() + + d = Distribution(attrs={'script_args': ['--no-user-cfg']}) + files = d.find_config_files() + finally: + os.path.expanduser = old_expander + + # make sure --no-user-cfg disables the user cfg file + self.assertEqual(len(all_files)-1, len(files)) + +class MetadataTestCase(support.TempdirManager, support.EnvironGuard, + unittest.TestCase): + + def setUp(self): + super(MetadataTestCase, self).setUp() + self.argv = sys.argv, sys.argv[:] + + def tearDown(self): + sys.argv = self.argv[0] + sys.argv[:] = self.argv[1] + super(MetadataTestCase, self).tearDown() + + def format_metadata(self, dist): + sio = io.StringIO() + dist.metadata.write_pkg_file(sio) + return sio.getvalue() + + def test_simple_metadata(self): + attrs = {"name": "package", + "version": "1.0"} + dist = Distribution(attrs) + meta = self.format_metadata(dist) + self.assertIn("Metadata-Version: 1.0", meta) + self.assertNotIn("provides:", meta.lower()) + self.assertNotIn("requires:", meta.lower()) + self.assertNotIn("obsoletes:", meta.lower()) + + def test_provides(self): + attrs = {"name": "package", + "version": "1.0", + "provides": ["package", "package.sub"]} + dist = Distribution(attrs) + self.assertEqual(dist.metadata.get_provides(), + ["package", "package.sub"]) + self.assertEqual(dist.get_provides(), + ["package", "package.sub"]) + meta = self.format_metadata(dist) + self.assertIn("Metadata-Version: 1.1", meta) + self.assertNotIn("requires:", meta.lower()) + self.assertNotIn("obsoletes:", meta.lower()) + + def test_provides_illegal(self): + self.assertRaises(ValueError, Distribution, + {"name": "package", + "version": "1.0", + "provides": ["my.pkg (splat)"]}) + + def test_requires(self): + attrs = {"name": "package", + "version": "1.0", + "requires": ["other", "another (==1.0)"]} + dist = Distribution(attrs) + self.assertEqual(dist.metadata.get_requires(), + ["other", "another (==1.0)"]) + self.assertEqual(dist.get_requires(), + ["other", "another (==1.0)"]) + meta = self.format_metadata(dist) + self.assertIn("Metadata-Version: 1.1", meta) + self.assertNotIn("provides:", meta.lower()) + self.assertIn("Requires: other", meta) + self.assertIn("Requires: another (==1.0)", meta) + self.assertNotIn("obsoletes:", meta.lower()) + + def test_requires_illegal(self): + self.assertRaises(ValueError, Distribution, + {"name": "package", + "version": "1.0", + "requires": ["my.pkg (splat)"]}) + + def test_obsoletes(self): + attrs = {"name": "package", + "version": "1.0", + "obsoletes": ["other", "another (<1.0)"]} + dist = Distribution(attrs) + self.assertEqual(dist.metadata.get_obsoletes(), + ["other", "another (<1.0)"]) + self.assertEqual(dist.get_obsoletes(), + ["other", "another (<1.0)"]) + meta = self.format_metadata(dist) + self.assertIn("Metadata-Version: 1.1", meta) + self.assertNotIn("provides:", meta.lower()) + self.assertNotIn("requires:", meta.lower()) + self.assertIn("Obsoletes: other", meta) + self.assertIn("Obsoletes: another (<1.0)", meta) + + def test_obsoletes_illegal(self): + self.assertRaises(ValueError, Distribution, + {"name": "package", + "version": "1.0", + "obsoletes": ["my.pkg (splat)"]}) + + def test_classifier(self): + attrs = {'name': 'Boa', 'version': '3.0', + 'classifiers': ['Programming Language :: Python :: 3']} + dist = Distribution(attrs) + meta = self.format_metadata(dist) + self.assertIn('Metadata-Version: 1.1', meta) + + def test_download_url(self): + attrs = {'name': 'Boa', 'version': '3.0', + 'download_url': 'http://example.org/boa'} + dist = Distribution(attrs) + meta = self.format_metadata(dist) + self.assertIn('Metadata-Version: 1.1', meta) + + def test_long_description(self): + long_desc = textwrap.dedent("""\ + example:: + We start here + and continue here + and end here.""") + attrs = {"name": "package", + "version": "1.0", + "long_description": long_desc} + + dist = Distribution(attrs) + meta = self.format_metadata(dist) + meta = meta.replace('\n' + 8 * ' ', '\n') + self.assertIn(long_desc, meta) + + def test_custom_pydistutils(self): + # fixes #2166 + # make sure pydistutils.cfg is found + if os.name == 'posix': + user_filename = ".pydistutils.cfg" + else: + user_filename = "pydistutils.cfg" + + temp_dir = self.mkdtemp() + user_filename = os.path.join(temp_dir, user_filename) + f = open(user_filename, 'w') + try: + f.write('.') + finally: + f.close() + + try: + dist = Distribution() + + # linux-style + if sys.platform in ('linux', 'darwin'): + os.environ['HOME'] = temp_dir + files = dist.find_config_files() + self.assertIn(user_filename, files) + + # win32-style + if sys.platform == 'win32': + # home drive should be found + os.environ['HOME'] = temp_dir + files = dist.find_config_files() + self.assertIn(user_filename, files, + '%r not found in %r' % (user_filename, files)) + finally: + os.remove(user_filename) + + def test_fix_help_options(self): + help_tuples = [('a', 'b', 'c', 'd'), (1, 2, 3, 4)] + fancy_options = fix_help_options(help_tuples) + self.assertEqual(fancy_options[0], ('a', 'b', 'c')) + self.assertEqual(fancy_options[1], (1, 2, 3)) + + def test_show_help(self): + # smoke test, just makes sure some help is displayed + self.addCleanup(log.set_threshold, log._global_log.threshold) + dist = Distribution() + sys.argv = [] + dist.help = 1 + dist.script_name = 'setup.py' + with captured_stdout() as s: + dist.parse_command_line() + + output = [line for line in s.getvalue().split('\n') + if line.strip() != ''] + self.assertTrue(output) + + + def test_read_metadata(self): + attrs = {"name": "package", + "version": "1.0", + "long_description": "desc", + "description": "xxx", + "download_url": "http://example.com", + "keywords": ['one', 'two'], + "requires": ['foo']} + + dist = Distribution(attrs) + metadata = dist.metadata + + # write it then reloads it + PKG_INFO = io.StringIO() + metadata.write_pkg_file(PKG_INFO) + PKG_INFO.seek(0) + metadata.read_pkg_file(PKG_INFO) + + self.assertEqual(metadata.name, "package") + self.assertEqual(metadata.version, "1.0") + self.assertEqual(metadata.description, "xxx") + self.assertEqual(metadata.download_url, 'http://example.com') + self.assertEqual(metadata.keywords, ['one', 'two']) + self.assertEqual(metadata.platforms, ['UNKNOWN']) + self.assertEqual(metadata.obsoletes, None) + self.assertEqual(metadata.requires, ['foo']) + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(DistributionTestCase)) + suite.addTest(unittest.makeSuite(MetadataTestCase)) + return suite + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_extension.py b/distutils/distutils/tests/test_extension.py new file mode 100644 index 0000000..e35f273 --- /dev/null +++ b/distutils/distutils/tests/test_extension.py @@ -0,0 +1,69 @@ +"""Tests for distutils.extension.""" +import unittest +import os +import warnings + +from test.support import check_warnings, run_unittest +from distutils.extension import read_setup_file, Extension + +class ExtensionTestCase(unittest.TestCase): + + def test_read_setup_file(self): + # trying to read a Setup file + # (sample extracted from the PyGame project) + setup = os.path.join(os.path.dirname(__file__), 'Setup.sample') + + exts = read_setup_file(setup) + names = [ext.name for ext in exts] + names.sort() + + # here are the extensions read_setup_file should have created + # out of the file + wanted = ['_arraysurfarray', '_camera', '_numericsndarray', + '_numericsurfarray', 'base', 'bufferproxy', 'cdrom', + 'color', 'constants', 'display', 'draw', 'event', + 'fastevent', 'font', 'gfxdraw', 'image', 'imageext', + 'joystick', 'key', 'mask', 'mixer', 'mixer_music', + 'mouse', 'movie', 'overlay', 'pixelarray', 'pypm', + 'rect', 'rwobject', 'scrap', 'surface', 'surflock', + 'time', 'transform'] + + self.assertEqual(names, wanted) + + def test_extension_init(self): + # the first argument, which is the name, must be a string + self.assertRaises(AssertionError, Extension, 1, []) + ext = Extension('name', []) + self.assertEqual(ext.name, 'name') + + # the second argument, which is the list of files, must + # be a list of strings + self.assertRaises(AssertionError, Extension, 'name', 'file') + self.assertRaises(AssertionError, Extension, 'name', ['file', 1]) + ext = Extension('name', ['file1', 'file2']) + self.assertEqual(ext.sources, ['file1', 'file2']) + + # others arguments have defaults + for attr in ('include_dirs', 'define_macros', 'undef_macros', + 'library_dirs', 'libraries', 'runtime_library_dirs', + 'extra_objects', 'extra_compile_args', 'extra_link_args', + 'export_symbols', 'swig_opts', 'depends'): + self.assertEqual(getattr(ext, attr), []) + + self.assertEqual(ext.language, None) + self.assertEqual(ext.optional, None) + + # if there are unknown keyword options, warn about them + with check_warnings() as w: + warnings.simplefilter('always') + ext = Extension('name', ['file1', 'file2'], chic=True) + + self.assertEqual(len(w.warnings), 1) + self.assertEqual(str(w.warnings[0].message), + "Unknown Extension options: 'chic'") + +def test_suite(): + return unittest.makeSuite(ExtensionTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_file_util.py b/distutils/distutils/tests/test_file_util.py new file mode 100644 index 0000000..03040af --- /dev/null +++ b/distutils/distutils/tests/test_file_util.py @@ -0,0 +1,114 @@ +"""Tests for distutils.file_util.""" +import unittest +import os +import errno +from unittest.mock import patch + +from distutils.file_util import move_file, copy_file +from distutils import log +from distutils.tests import support +from distutils.errors import DistutilsFileError +from test.support import run_unittest + +class FileUtilTestCase(support.TempdirManager, unittest.TestCase): + + def _log(self, msg, *args): + if len(args) > 0: + self._logs.append(msg % args) + else: + self._logs.append(msg) + + def setUp(self): + super(FileUtilTestCase, self).setUp() + self._logs = [] + self.old_log = log.info + log.info = self._log + tmp_dir = self.mkdtemp() + self.source = os.path.join(tmp_dir, 'f1') + self.target = os.path.join(tmp_dir, 'f2') + self.target_dir = os.path.join(tmp_dir, 'd1') + + def tearDown(self): + log.info = self.old_log + super(FileUtilTestCase, self).tearDown() + + def test_move_file_verbosity(self): + f = open(self.source, 'w') + try: + f.write('some content') + finally: + f.close() + + move_file(self.source, self.target, verbose=0) + wanted = [] + self.assertEqual(self._logs, wanted) + + # back to original state + move_file(self.target, self.source, verbose=0) + + move_file(self.source, self.target, verbose=1) + wanted = ['moving %s -> %s' % (self.source, self.target)] + self.assertEqual(self._logs, wanted) + + # back to original state + move_file(self.target, self.source, verbose=0) + + self._logs = [] + # now the target is a dir + os.mkdir(self.target_dir) + move_file(self.source, self.target_dir, verbose=1) + wanted = ['moving %s -> %s' % (self.source, self.target_dir)] + self.assertEqual(self._logs, wanted) + + def test_move_file_exception_unpacking_rename(self): + # see issue 22182 + with patch("os.rename", side_effect=OSError("wrong", 1)), \ + self.assertRaises(DistutilsFileError): + with open(self.source, 'w') as fobj: + fobj.write('spam eggs') + move_file(self.source, self.target, verbose=0) + + def test_move_file_exception_unpacking_unlink(self): + # see issue 22182 + with patch("os.rename", side_effect=OSError(errno.EXDEV, "wrong")), \ + patch("os.unlink", side_effect=OSError("wrong", 1)), \ + self.assertRaises(DistutilsFileError): + with open(self.source, 'w') as fobj: + fobj.write('spam eggs') + move_file(self.source, self.target, verbose=0) + + def test_copy_file_hard_link(self): + with open(self.source, 'w') as f: + f.write('some content') + st = os.stat(self.source) + copy_file(self.source, self.target, link='hard') + st2 = os.stat(self.source) + st3 = os.stat(self.target) + self.assertTrue(os.path.samestat(st, st2), (st, st2)) + self.assertTrue(os.path.samestat(st2, st3), (st2, st3)) + with open(self.source, 'r') as f: + self.assertEqual(f.read(), 'some content') + + def test_copy_file_hard_link_failure(self): + # If hard linking fails, copy_file() falls back on copying file + # (some special filesystems don't support hard linking even under + # Unix, see issue #8876). + with open(self.source, 'w') as f: + f.write('some content') + st = os.stat(self.source) + with patch("os.link", side_effect=OSError(0, "linking unsupported")): + copy_file(self.source, self.target, link='hard') + st2 = os.stat(self.source) + st3 = os.stat(self.target) + self.assertTrue(os.path.samestat(st, st2), (st, st2)) + self.assertFalse(os.path.samestat(st2, st3), (st2, st3)) + for fn in (self.source, self.target): + with open(fn, 'r') as f: + self.assertEqual(f.read(), 'some content') + + +def test_suite(): + return unittest.makeSuite(FileUtilTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_filelist.py b/distutils/distutils/tests/test_filelist.py new file mode 100644 index 0000000..c71342d --- /dev/null +++ b/distutils/distutils/tests/test_filelist.py @@ -0,0 +1,340 @@ +"""Tests for distutils.filelist.""" +import os +import re +import unittest +from distutils import debug +from distutils.log import WARN +from distutils.errors import DistutilsTemplateError +from distutils.filelist import glob_to_re, translate_pattern, FileList +from distutils import filelist + +import test.support +from test.support import captured_stdout, run_unittest +from distutils.tests import support + +MANIFEST_IN = """\ +include ok +include xo +exclude xo +include foo.tmp +include buildout.cfg +global-include *.x +global-include *.txt +global-exclude *.tmp +recursive-include f *.oo +recursive-exclude global *.x +graft dir +prune dir3 +""" + + +def make_local_path(s): + """Converts '/' in a string to os.sep""" + return s.replace('/', os.sep) + + +class FileListTestCase(support.LoggingSilencer, + unittest.TestCase): + + def assertNoWarnings(self): + self.assertEqual(self.get_logs(WARN), []) + self.clear_logs() + + def assertWarnings(self): + self.assertGreater(len(self.get_logs(WARN)), 0) + self.clear_logs() + + def test_glob_to_re(self): + sep = os.sep + if os.sep == '\\': + sep = re.escape(os.sep) + + for glob, regex in ( + # simple cases + ('foo*', r'(?s:foo[^%(sep)s]*)\Z'), + ('foo?', r'(?s:foo[^%(sep)s])\Z'), + ('foo??', r'(?s:foo[^%(sep)s][^%(sep)s])\Z'), + # special cases + (r'foo\\*', r'(?s:foo\\\\[^%(sep)s]*)\Z'), + (r'foo\\\*', r'(?s:foo\\\\\\[^%(sep)s]*)\Z'), + ('foo????', r'(?s:foo[^%(sep)s][^%(sep)s][^%(sep)s][^%(sep)s])\Z'), + (r'foo\\??', r'(?s:foo\\\\[^%(sep)s][^%(sep)s])\Z')): + regex = regex % {'sep': sep} + self.assertEqual(glob_to_re(glob), regex) + + def test_process_template_line(self): + # testing all MANIFEST.in template patterns + file_list = FileList() + l = make_local_path + + # simulated file list + file_list.allfiles = ['foo.tmp', 'ok', 'xo', 'four.txt', + 'buildout.cfg', + # filelist does not filter out VCS directories, + # it's sdist that does + l('.hg/last-message.txt'), + l('global/one.txt'), + l('global/two.txt'), + l('global/files.x'), + l('global/here.tmp'), + l('f/o/f.oo'), + l('dir/graft-one'), + l('dir/dir2/graft2'), + l('dir3/ok'), + l('dir3/sub/ok.txt'), + ] + + for line in MANIFEST_IN.split('\n'): + if line.strip() == '': + continue + file_list.process_template_line(line) + + wanted = ['ok', + 'buildout.cfg', + 'four.txt', + l('.hg/last-message.txt'), + l('global/one.txt'), + l('global/two.txt'), + l('f/o/f.oo'), + l('dir/graft-one'), + l('dir/dir2/graft2'), + ] + + self.assertEqual(file_list.files, wanted) + + def test_debug_print(self): + file_list = FileList() + with captured_stdout() as stdout: + file_list.debug_print('xxx') + self.assertEqual(stdout.getvalue(), '') + + debug.DEBUG = True + try: + with captured_stdout() as stdout: + file_list.debug_print('xxx') + self.assertEqual(stdout.getvalue(), 'xxx\n') + finally: + debug.DEBUG = False + + def test_set_allfiles(self): + file_list = FileList() + files = ['a', 'b', 'c'] + file_list.set_allfiles(files) + self.assertEqual(file_list.allfiles, files) + + def test_remove_duplicates(self): + file_list = FileList() + file_list.files = ['a', 'b', 'a', 'g', 'c', 'g'] + # files must be sorted beforehand (sdist does it) + file_list.sort() + file_list.remove_duplicates() + self.assertEqual(file_list.files, ['a', 'b', 'c', 'g']) + + def test_translate_pattern(self): + # not regex + self.assertTrue(hasattr( + translate_pattern('a', anchor=True, is_regex=False), + 'search')) + + # is a regex + regex = re.compile('a') + self.assertEqual( + translate_pattern(regex, anchor=True, is_regex=True), + regex) + + # plain string flagged as regex + self.assertTrue(hasattr( + translate_pattern('a', anchor=True, is_regex=True), + 'search')) + + # glob support + self.assertTrue(translate_pattern( + '*.py', anchor=True, is_regex=False).search('filelist.py')) + + def test_exclude_pattern(self): + # return False if no match + file_list = FileList() + self.assertFalse(file_list.exclude_pattern('*.py')) + + # return True if files match + file_list = FileList() + file_list.files = ['a.py', 'b.py'] + self.assertTrue(file_list.exclude_pattern('*.py')) + + # test excludes + file_list = FileList() + file_list.files = ['a.py', 'a.txt'] + file_list.exclude_pattern('*.py') + self.assertEqual(file_list.files, ['a.txt']) + + def test_include_pattern(self): + # return False if no match + file_list = FileList() + file_list.set_allfiles([]) + self.assertFalse(file_list.include_pattern('*.py')) + + # return True if files match + file_list = FileList() + file_list.set_allfiles(['a.py', 'b.txt']) + self.assertTrue(file_list.include_pattern('*.py')) + + # test * matches all files + file_list = FileList() + self.assertIsNone(file_list.allfiles) + file_list.set_allfiles(['a.py', 'b.txt']) + file_list.include_pattern('*') + self.assertEqual(file_list.allfiles, ['a.py', 'b.txt']) + + def test_process_template(self): + l = make_local_path + # invalid lines + file_list = FileList() + for action in ('include', 'exclude', 'global-include', + 'global-exclude', 'recursive-include', + 'recursive-exclude', 'graft', 'prune', 'blarg'): + self.assertRaises(DistutilsTemplateError, + file_list.process_template_line, action) + + # include + file_list = FileList() + file_list.set_allfiles(['a.py', 'b.txt', l('d/c.py')]) + + file_list.process_template_line('include *.py') + self.assertEqual(file_list.files, ['a.py']) + self.assertNoWarnings() + + file_list.process_template_line('include *.rb') + self.assertEqual(file_list.files, ['a.py']) + self.assertWarnings() + + # exclude + file_list = FileList() + file_list.files = ['a.py', 'b.txt', l('d/c.py')] + + file_list.process_template_line('exclude *.py') + self.assertEqual(file_list.files, ['b.txt', l('d/c.py')]) + self.assertNoWarnings() + + file_list.process_template_line('exclude *.rb') + self.assertEqual(file_list.files, ['b.txt', l('d/c.py')]) + self.assertWarnings() + + # global-include + file_list = FileList() + file_list.set_allfiles(['a.py', 'b.txt', l('d/c.py')]) + + file_list.process_template_line('global-include *.py') + self.assertEqual(file_list.files, ['a.py', l('d/c.py')]) + self.assertNoWarnings() + + file_list.process_template_line('global-include *.rb') + self.assertEqual(file_list.files, ['a.py', l('d/c.py')]) + self.assertWarnings() + + # global-exclude + file_list = FileList() + file_list.files = ['a.py', 'b.txt', l('d/c.py')] + + file_list.process_template_line('global-exclude *.py') + self.assertEqual(file_list.files, ['b.txt']) + self.assertNoWarnings() + + file_list.process_template_line('global-exclude *.rb') + self.assertEqual(file_list.files, ['b.txt']) + self.assertWarnings() + + # recursive-include + file_list = FileList() + file_list.set_allfiles(['a.py', l('d/b.py'), l('d/c.txt'), + l('d/d/e.py')]) + + file_list.process_template_line('recursive-include d *.py') + self.assertEqual(file_list.files, [l('d/b.py'), l('d/d/e.py')]) + self.assertNoWarnings() + + file_list.process_template_line('recursive-include e *.py') + self.assertEqual(file_list.files, [l('d/b.py'), l('d/d/e.py')]) + self.assertWarnings() + + # recursive-exclude + file_list = FileList() + file_list.files = ['a.py', l('d/b.py'), l('d/c.txt'), l('d/d/e.py')] + + file_list.process_template_line('recursive-exclude d *.py') + self.assertEqual(file_list.files, ['a.py', l('d/c.txt')]) + self.assertNoWarnings() + + file_list.process_template_line('recursive-exclude e *.py') + self.assertEqual(file_list.files, ['a.py', l('d/c.txt')]) + self.assertWarnings() + + # graft + file_list = FileList() + file_list.set_allfiles(['a.py', l('d/b.py'), l('d/d/e.py'), + l('f/f.py')]) + + file_list.process_template_line('graft d') + self.assertEqual(file_list.files, [l('d/b.py'), l('d/d/e.py')]) + self.assertNoWarnings() + + file_list.process_template_line('graft e') + self.assertEqual(file_list.files, [l('d/b.py'), l('d/d/e.py')]) + self.assertWarnings() + + # prune + file_list = FileList() + file_list.files = ['a.py', l('d/b.py'), l('d/d/e.py'), l('f/f.py')] + + file_list.process_template_line('prune d') + self.assertEqual(file_list.files, ['a.py', l('f/f.py')]) + self.assertNoWarnings() + + file_list.process_template_line('prune e') + self.assertEqual(file_list.files, ['a.py', l('f/f.py')]) + self.assertWarnings() + + +class FindAllTestCase(unittest.TestCase): + @test.support.skip_unless_symlink + def test_missing_symlink(self): + with test.support.temp_cwd(): + os.symlink('foo', 'bar') + self.assertEqual(filelist.findall(), []) + + def test_basic_discovery(self): + """ + When findall is called with no parameters or with + '.' as the parameter, the dot should be omitted from + the results. + """ + with test.support.temp_cwd(): + os.mkdir('foo') + file1 = os.path.join('foo', 'file1.txt') + test.support.create_empty_file(file1) + os.mkdir('bar') + file2 = os.path.join('bar', 'file2.txt') + test.support.create_empty_file(file2) + expected = [file2, file1] + self.assertEqual(sorted(filelist.findall()), expected) + + def test_non_local_discovery(self): + """ + When findall is called with another path, the full + path name should be returned. + """ + with test.support.temp_dir() as temp_dir: + file1 = os.path.join(temp_dir, 'file1.txt') + test.support.create_empty_file(file1) + expected = [file1] + self.assertEqual(filelist.findall(temp_dir), expected) + + +def test_suite(): + return unittest.TestSuite([ + unittest.makeSuite(FileListTestCase), + unittest.makeSuite(FindAllTestCase), + ]) + + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_install.py b/distutils/distutils/tests/test_install.py new file mode 100644 index 0000000..287ab19 --- /dev/null +++ b/distutils/distutils/tests/test_install.py @@ -0,0 +1,248 @@ +"""Tests for distutils.command.install.""" + +import os +import sys +import unittest +import site + +from test.support import captured_stdout, run_unittest + +from distutils import sysconfig +from distutils.command.install import install +from distutils.command import install as install_module +from distutils.command.build_ext import build_ext +from distutils.command.install import INSTALL_SCHEMES +from distutils.core import Distribution +from distutils.errors import DistutilsOptionError +from distutils.extension import Extension + +from distutils.tests import support +from test import support as test_support + + +def _make_ext_name(modname): + return modname + sysconfig.get_config_var('EXT_SUFFIX') + + +class InstallTestCase(support.TempdirManager, + support.EnvironGuard, + support.LoggingSilencer, + unittest.TestCase): + + def test_home_installation_scheme(self): + # This ensure two things: + # - that --home generates the desired set of directory names + # - test --home is supported on all platforms + builddir = self.mkdtemp() + destination = os.path.join(builddir, "installation") + + dist = Distribution({"name": "foopkg"}) + # script_name need not exist, it just need to be initialized + dist.script_name = os.path.join(builddir, "setup.py") + dist.command_obj["build"] = support.DummyCommand( + build_base=builddir, + build_lib=os.path.join(builddir, "lib"), + ) + + cmd = install(dist) + cmd.home = destination + cmd.ensure_finalized() + + self.assertEqual(cmd.install_base, destination) + self.assertEqual(cmd.install_platbase, destination) + + def check_path(got, expected): + got = os.path.normpath(got) + expected = os.path.normpath(expected) + self.assertEqual(got, expected) + + libdir = os.path.join(destination, "lib", "python") + check_path(cmd.install_lib, libdir) + check_path(cmd.install_platlib, libdir) + check_path(cmd.install_purelib, libdir) + check_path(cmd.install_headers, + os.path.join(destination, "include", "python", "foopkg")) + check_path(cmd.install_scripts, os.path.join(destination, "bin")) + check_path(cmd.install_data, destination) + + def test_user_site(self): + # test install with --user + # preparing the environment for the test + self.old_user_base = site.USER_BASE + self.old_user_site = site.USER_SITE + self.tmpdir = self.mkdtemp() + self.user_base = os.path.join(self.tmpdir, 'B') + self.user_site = os.path.join(self.tmpdir, 'S') + site.USER_BASE = self.user_base + site.USER_SITE = self.user_site + install_module.USER_BASE = self.user_base + install_module.USER_SITE = self.user_site + + def _expanduser(path): + return self.tmpdir + self.old_expand = os.path.expanduser + os.path.expanduser = _expanduser + + def cleanup(): + site.USER_BASE = self.old_user_base + site.USER_SITE = self.old_user_site + install_module.USER_BASE = self.old_user_base + install_module.USER_SITE = self.old_user_site + os.path.expanduser = self.old_expand + + self.addCleanup(cleanup) + + for key in ('nt_user', 'unix_user'): + self.assertIn(key, INSTALL_SCHEMES) + + dist = Distribution({'name': 'xx'}) + cmd = install(dist) + + # making sure the user option is there + options = [name for name, short, lable in + cmd.user_options] + self.assertIn('user', options) + + # setting a value + cmd.user = 1 + + # user base and site shouldn't be created yet + self.assertFalse(os.path.exists(self.user_base)) + self.assertFalse(os.path.exists(self.user_site)) + + # let's run finalize + cmd.ensure_finalized() + + # now they should + self.assertTrue(os.path.exists(self.user_base)) + self.assertTrue(os.path.exists(self.user_site)) + + self.assertIn('userbase', cmd.config_vars) + self.assertIn('usersite', cmd.config_vars) + + def test_handle_extra_path(self): + dist = Distribution({'name': 'xx', 'extra_path': 'path,dirs'}) + cmd = install(dist) + + # two elements + cmd.handle_extra_path() + self.assertEqual(cmd.extra_path, ['path', 'dirs']) + self.assertEqual(cmd.extra_dirs, 'dirs') + self.assertEqual(cmd.path_file, 'path') + + # one element + cmd.extra_path = ['path'] + cmd.handle_extra_path() + self.assertEqual(cmd.extra_path, ['path']) + self.assertEqual(cmd.extra_dirs, 'path') + self.assertEqual(cmd.path_file, 'path') + + # none + dist.extra_path = cmd.extra_path = None + cmd.handle_extra_path() + self.assertEqual(cmd.extra_path, None) + self.assertEqual(cmd.extra_dirs, '') + self.assertEqual(cmd.path_file, None) + + # three elements (no way !) + cmd.extra_path = 'path,dirs,again' + self.assertRaises(DistutilsOptionError, cmd.handle_extra_path) + + def test_finalize_options(self): + dist = Distribution({'name': 'xx'}) + cmd = install(dist) + + # must supply either prefix/exec-prefix/home or + # install-base/install-platbase -- not both + cmd.prefix = 'prefix' + cmd.install_base = 'base' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + + # must supply either home or prefix/exec-prefix -- not both + cmd.install_base = None + cmd.home = 'home' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + + # can't combine user with prefix/exec_prefix/home or + # install_(plat)base + cmd.prefix = None + cmd.user = 'user' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + + def test_record(self): + install_dir = self.mkdtemp() + project_dir, dist = self.create_dist(py_modules=['hello'], + scripts=['sayhi']) + os.chdir(project_dir) + self.write_file('hello.py', "def main(): print('o hai')") + self.write_file('sayhi', 'from hello import main; main()') + + cmd = install(dist) + dist.command_obj['install'] = cmd + cmd.root = install_dir + cmd.record = os.path.join(project_dir, 'filelist') + cmd.ensure_finalized() + cmd.run() + + f = open(cmd.record) + try: + content = f.read() + finally: + f.close() + + found = [os.path.basename(line) for line in content.splitlines()] + expected = ['hello.py', 'hello.%s.pyc' % sys.implementation.cache_tag, + 'sayhi', + 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] + self.assertEqual(found, expected) + + def test_record_extensions(self): + cmd = test_support.missing_compiler_executable() + if cmd is not None: + self.skipTest('The %r command is not found' % cmd) + install_dir = self.mkdtemp() + project_dir, dist = self.create_dist(ext_modules=[ + Extension('xx', ['xxmodule.c'])]) + os.chdir(project_dir) + support.copy_xxmodule_c(project_dir) + + buildextcmd = build_ext(dist) + support.fixup_build_ext(buildextcmd) + buildextcmd.ensure_finalized() + + cmd = install(dist) + dist.command_obj['install'] = cmd + dist.command_obj['build_ext'] = buildextcmd + cmd.root = install_dir + cmd.record = os.path.join(project_dir, 'filelist') + cmd.ensure_finalized() + cmd.run() + + f = open(cmd.record) + try: + content = f.read() + finally: + f.close() + + found = [os.path.basename(line) for line in content.splitlines()] + expected = [_make_ext_name('xx'), + 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] + self.assertEqual(found, expected) + + def test_debug_mode(self): + # this covers the code called when DEBUG is set + old_logs_len = len(self.logs) + install_module.DEBUG = True + try: + with captured_stdout(): + self.test_record() + finally: + install_module.DEBUG = False + self.assertGreater(len(self.logs), old_logs_len) + + +def test_suite(): + return unittest.makeSuite(InstallTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_install_data.py b/distutils/distutils/tests/test_install_data.py new file mode 100644 index 0000000..32ab296 --- /dev/null +++ b/distutils/distutils/tests/test_install_data.py @@ -0,0 +1,75 @@ +"""Tests for distutils.command.install_data.""" +import os +import unittest + +from distutils.command.install_data import install_data +from distutils.tests import support +from test.support import run_unittest + +class InstallDataTestCase(support.TempdirManager, + support.LoggingSilencer, + support.EnvironGuard, + unittest.TestCase): + + def test_simple_run(self): + pkg_dir, dist = self.create_dist() + cmd = install_data(dist) + cmd.install_dir = inst = os.path.join(pkg_dir, 'inst') + + # data_files can contain + # - simple files + # - a tuple with a path, and a list of file + one = os.path.join(pkg_dir, 'one') + self.write_file(one, 'xxx') + inst2 = os.path.join(pkg_dir, 'inst2') + two = os.path.join(pkg_dir, 'two') + self.write_file(two, 'xxx') + + cmd.data_files = [one, (inst2, [two])] + self.assertEqual(cmd.get_inputs(), [one, (inst2, [two])]) + + # let's run the command + cmd.ensure_finalized() + cmd.run() + + # let's check the result + self.assertEqual(len(cmd.get_outputs()), 2) + rtwo = os.path.split(two)[-1] + self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) + rone = os.path.split(one)[-1] + self.assertTrue(os.path.exists(os.path.join(inst, rone))) + cmd.outfiles = [] + + # let's try with warn_dir one + cmd.warn_dir = 1 + cmd.ensure_finalized() + cmd.run() + + # let's check the result + self.assertEqual(len(cmd.get_outputs()), 2) + self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) + self.assertTrue(os.path.exists(os.path.join(inst, rone))) + cmd.outfiles = [] + + # now using root and empty dir + cmd.root = os.path.join(pkg_dir, 'root') + inst3 = os.path.join(cmd.install_dir, 'inst3') + inst4 = os.path.join(pkg_dir, 'inst4') + three = os.path.join(cmd.install_dir, 'three') + self.write_file(three, 'xx') + cmd.data_files = [one, (inst2, [two]), + ('inst3', [three]), + (inst4, [])] + cmd.ensure_finalized() + cmd.run() + + # let's check the result + self.assertEqual(len(cmd.get_outputs()), 4) + self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) + self.assertTrue(os.path.exists(os.path.join(inst, rone))) + +def test_suite(): + return unittest.makeSuite(InstallDataTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_install_headers.py b/distutils/distutils/tests/test_install_headers.py new file mode 100644 index 0000000..2217b32 --- /dev/null +++ b/distutils/distutils/tests/test_install_headers.py @@ -0,0 +1,39 @@ +"""Tests for distutils.command.install_headers.""" +import os +import unittest + +from distutils.command.install_headers import install_headers +from distutils.tests import support +from test.support import run_unittest + +class InstallHeadersTestCase(support.TempdirManager, + support.LoggingSilencer, + support.EnvironGuard, + unittest.TestCase): + + def test_simple_run(self): + # we have two headers + header_list = self.mkdtemp() + header1 = os.path.join(header_list, 'header1') + header2 = os.path.join(header_list, 'header2') + self.write_file(header1) + self.write_file(header2) + headers = [header1, header2] + + pkg_dir, dist = self.create_dist(headers=headers) + cmd = install_headers(dist) + self.assertEqual(cmd.get_inputs(), headers) + + # let's run the command + cmd.install_dir = os.path.join(pkg_dir, 'inst') + cmd.ensure_finalized() + cmd.run() + + # let's check the results + self.assertEqual(len(cmd.get_outputs()), 2) + +def test_suite(): + return unittest.makeSuite(InstallHeadersTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_install_lib.py b/distutils/distutils/tests/test_install_lib.py new file mode 100644 index 0000000..fda6315 --- /dev/null +++ b/distutils/distutils/tests/test_install_lib.py @@ -0,0 +1,115 @@ +"""Tests for distutils.command.install_data.""" +import sys +import os +import importlib.util +import unittest + +from distutils.command.install_lib import install_lib +from distutils.extension import Extension +from distutils.tests import support +from distutils.errors import DistutilsOptionError +from test.support import run_unittest + + +class InstallLibTestCase(support.TempdirManager, + support.LoggingSilencer, + support.EnvironGuard, + unittest.TestCase): + + def test_finalize_options(self): + dist = self.create_dist()[1] + cmd = install_lib(dist) + + cmd.finalize_options() + self.assertEqual(cmd.compile, 1) + self.assertEqual(cmd.optimize, 0) + + # optimize must be 0, 1, or 2 + cmd.optimize = 'foo' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + cmd.optimize = '4' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + + cmd.optimize = '2' + cmd.finalize_options() + self.assertEqual(cmd.optimize, 2) + + @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + def test_byte_compile(self): + project_dir, dist = self.create_dist() + os.chdir(project_dir) + cmd = install_lib(dist) + cmd.compile = cmd.optimize = 1 + + f = os.path.join(project_dir, 'foo.py') + self.write_file(f, '# python file') + cmd.byte_compile([f]) + pyc_file = importlib.util.cache_from_source('foo.py', optimization='') + pyc_opt_file = importlib.util.cache_from_source('foo.py', + optimization=cmd.optimize) + self.assertTrue(os.path.exists(pyc_file)) + self.assertTrue(os.path.exists(pyc_opt_file)) + + def test_get_outputs(self): + project_dir, dist = self.create_dist() + os.chdir(project_dir) + os.mkdir('spam') + cmd = install_lib(dist) + + # setting up a dist environment + cmd.compile = cmd.optimize = 1 + cmd.install_dir = self.mkdtemp() + f = os.path.join(project_dir, 'spam', '__init__.py') + self.write_file(f, '# python package') + cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] + cmd.distribution.packages = ['spam'] + cmd.distribution.script_name = 'setup.py' + + # get_outputs should return 4 elements: spam/__init__.py and .pyc, + # foo.import-tag-abiflags.so / foo.pyd + outputs = cmd.get_outputs() + self.assertEqual(len(outputs), 4, outputs) + + def test_get_inputs(self): + project_dir, dist = self.create_dist() + os.chdir(project_dir) + os.mkdir('spam') + cmd = install_lib(dist) + + # setting up a dist environment + cmd.compile = cmd.optimize = 1 + cmd.install_dir = self.mkdtemp() + f = os.path.join(project_dir, 'spam', '__init__.py') + self.write_file(f, '# python package') + cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] + cmd.distribution.packages = ['spam'] + cmd.distribution.script_name = 'setup.py' + + # get_inputs should return 2 elements: spam/__init__.py and + # foo.import-tag-abiflags.so / foo.pyd + inputs = cmd.get_inputs() + self.assertEqual(len(inputs), 2, inputs) + + def test_dont_write_bytecode(self): + # makes sure byte_compile is not used + dist = self.create_dist()[1] + cmd = install_lib(dist) + cmd.compile = 1 + cmd.optimize = 1 + + old_dont_write_bytecode = sys.dont_write_bytecode + sys.dont_write_bytecode = True + try: + cmd.byte_compile([]) + finally: + sys.dont_write_bytecode = old_dont_write_bytecode + + self.assertIn('byte-compiling is disabled', + self.logs[0][1] % self.logs[0][2]) + + +def test_suite(): + return unittest.makeSuite(InstallLibTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_install_scripts.py b/distutils/distutils/tests/test_install_scripts.py new file mode 100644 index 0000000..1f7b103 --- /dev/null +++ b/distutils/distutils/tests/test_install_scripts.py @@ -0,0 +1,82 @@ +"""Tests for distutils.command.install_scripts.""" + +import os +import unittest + +from distutils.command.install_scripts import install_scripts +from distutils.core import Distribution + +from distutils.tests import support +from test.support import run_unittest + + +class InstallScriptsTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_default_settings(self): + dist = Distribution() + dist.command_obj["build"] = support.DummyCommand( + build_scripts="/foo/bar") + dist.command_obj["install"] = support.DummyCommand( + install_scripts="/splat/funk", + force=1, + skip_build=1, + ) + cmd = install_scripts(dist) + self.assertFalse(cmd.force) + self.assertFalse(cmd.skip_build) + self.assertIsNone(cmd.build_dir) + self.assertIsNone(cmd.install_dir) + + cmd.finalize_options() + + self.assertTrue(cmd.force) + self.assertTrue(cmd.skip_build) + self.assertEqual(cmd.build_dir, "/foo/bar") + self.assertEqual(cmd.install_dir, "/splat/funk") + + def test_installation(self): + source = self.mkdtemp() + expected = [] + + def write_script(name, text): + expected.append(name) + f = open(os.path.join(source, name), "w") + try: + f.write(text) + finally: + f.close() + + write_script("script1.py", ("#! /usr/bin/env python2.3\n" + "# bogus script w/ Python sh-bang\n" + "pass\n")) + write_script("script2.py", ("#!/usr/bin/python\n" + "# bogus script w/ Python sh-bang\n" + "pass\n")) + write_script("shell.sh", ("#!/bin/sh\n" + "# bogus shell script w/ sh-bang\n" + "exit 0\n")) + + target = self.mkdtemp() + dist = Distribution() + dist.command_obj["build"] = support.DummyCommand(build_scripts=source) + dist.command_obj["install"] = support.DummyCommand( + install_scripts=target, + force=1, + skip_build=1, + ) + cmd = install_scripts(dist) + cmd.finalize_options() + cmd.run() + + installed = os.listdir(target) + for name in expected: + self.assertIn(name, installed) + + +def test_suite(): + return unittest.makeSuite(InstallScriptsTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_log.py b/distutils/distutils/tests/test_log.py new file mode 100644 index 0000000..75cf900 --- /dev/null +++ b/distutils/distutils/tests/test_log.py @@ -0,0 +1,46 @@ +"""Tests for distutils.log""" + +import io +import sys +import unittest +from test.support import swap_attr, run_unittest + +from distutils import log + +class TestLog(unittest.TestCase): + def test_non_ascii(self): + # Issues #8663, #34421: test that non-encodable text is escaped with + # backslashreplace error handler and encodable non-ASCII text is + # output as is. + for errors in ('strict', 'backslashreplace', 'surrogateescape', + 'replace', 'ignore'): + with self.subTest(errors=errors): + stdout = io.TextIOWrapper(io.BytesIO(), + encoding='cp437', errors=errors) + stderr = io.TextIOWrapper(io.BytesIO(), + encoding='cp437', errors=errors) + old_threshold = log.set_threshold(log.DEBUG) + try: + with swap_attr(sys, 'stdout', stdout), \ + swap_attr(sys, 'stderr', stderr): + log.debug('Dεbug\tMėssãge') + log.fatal('Fαtal\tÈrrōr') + finally: + log.set_threshold(old_threshold) + + stdout.seek(0) + self.assertEqual(stdout.read().rstrip(), + 'Dεbug\tM?ss?ge' if errors == 'replace' else + 'Dεbug\tMssge' if errors == 'ignore' else + 'Dεbug\tM\\u0117ss\\xe3ge') + stderr.seek(0) + self.assertEqual(stderr.read().rstrip(), + 'Fαtal\t?rr?r' if errors == 'replace' else + 'Fαtal\trrr' if errors == 'ignore' else + 'Fαtal\t\\xc8rr\\u014dr') + +def test_suite(): + return unittest.makeSuite(TestLog) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_msvc9compiler.py b/distutils/distutils/tests/test_msvc9compiler.py new file mode 100644 index 0000000..77a07ef --- /dev/null +++ b/distutils/distutils/tests/test_msvc9compiler.py @@ -0,0 +1,184 @@ +"""Tests for distutils.msvc9compiler.""" +import sys +import unittest +import os + +from distutils.errors import DistutilsPlatformError +from distutils.tests import support +from test.support import run_unittest + +# A manifest with the only assembly reference being the msvcrt assembly, so +# should have the assembly completely stripped. Note that although the +# assembly has a reference the assembly is removed - that is +# currently a "feature", not a bug :) +_MANIFEST_WITH_ONLY_MSVC_REFERENCE = """\ + + + + + + + + + + + + + + + + + +""" + +# A manifest with references to assemblies other than msvcrt. When processed, +# this assembly should be returned with just the msvcrt part removed. +_MANIFEST_WITH_MULTIPLE_REFERENCES = """\ + + + + + + + + + + + + + + + + + + + + + + +""" + +_CLEANED_MANIFEST = """\ + + + + + + + + + + + + + + + + + + +""" + +if sys.platform=="win32": + from distutils.msvccompiler import get_build_version + if get_build_version()>=8.0: + SKIP_MESSAGE = None + else: + SKIP_MESSAGE = "These tests are only for MSVC8.0 or above" +else: + SKIP_MESSAGE = "These tests are only for win32" + +@unittest.skipUnless(SKIP_MESSAGE is None, SKIP_MESSAGE) +class msvc9compilerTestCase(support.TempdirManager, + unittest.TestCase): + + def test_no_compiler(self): + # makes sure query_vcvarsall raises + # a DistutilsPlatformError if the compiler + # is not found + from distutils.msvc9compiler import query_vcvarsall + def _find_vcvarsall(version): + return None + + from distutils import msvc9compiler + old_find_vcvarsall = msvc9compiler.find_vcvarsall + msvc9compiler.find_vcvarsall = _find_vcvarsall + try: + self.assertRaises(DistutilsPlatformError, query_vcvarsall, + 'wont find this version') + finally: + msvc9compiler.find_vcvarsall = old_find_vcvarsall + + def test_reg_class(self): + from distutils.msvc9compiler import Reg + self.assertRaises(KeyError, Reg.get_value, 'xxx', 'xxx') + + # looking for values that should exist on all + # windows registry versions. + path = r'Control Panel\Desktop' + v = Reg.get_value(path, 'dragfullwindows') + self.assertIn(v, ('0', '1', '2')) + + import winreg + HKCU = winreg.HKEY_CURRENT_USER + keys = Reg.read_keys(HKCU, 'xxxx') + self.assertEqual(keys, None) + + keys = Reg.read_keys(HKCU, r'Control Panel') + self.assertIn('Desktop', keys) + + def test_remove_visual_c_ref(self): + from distutils.msvc9compiler import MSVCCompiler + tempdir = self.mkdtemp() + manifest = os.path.join(tempdir, 'manifest') + f = open(manifest, 'w') + try: + f.write(_MANIFEST_WITH_MULTIPLE_REFERENCES) + finally: + f.close() + + compiler = MSVCCompiler() + compiler._remove_visual_c_ref(manifest) + + # see what we got + f = open(manifest) + try: + # removing trailing spaces + content = '\n'.join([line.rstrip() for line in f.readlines()]) + finally: + f.close() + + # makes sure the manifest was properly cleaned + self.assertEqual(content, _CLEANED_MANIFEST) + + def test_remove_entire_manifest(self): + from distutils.msvc9compiler import MSVCCompiler + tempdir = self.mkdtemp() + manifest = os.path.join(tempdir, 'manifest') + f = open(manifest, 'w') + try: + f.write(_MANIFEST_WITH_ONLY_MSVC_REFERENCE) + finally: + f.close() + + compiler = MSVCCompiler() + got = compiler._remove_visual_c_ref(manifest) + self.assertIsNone(got) + + +def test_suite(): + return unittest.makeSuite(msvc9compilerTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_msvccompiler.py b/distutils/distutils/tests/test_msvccompiler.py new file mode 100644 index 0000000..70a9c93 --- /dev/null +++ b/distutils/distutils/tests/test_msvccompiler.py @@ -0,0 +1,132 @@ +"""Tests for distutils._msvccompiler.""" +import sys +import unittest +import os + +from distutils.errors import DistutilsPlatformError +from distutils.tests import support +from test.support import run_unittest + + +SKIP_MESSAGE = (None if sys.platform == "win32" else + "These tests are only for win32") + +@unittest.skipUnless(SKIP_MESSAGE is None, SKIP_MESSAGE) +class msvccompilerTestCase(support.TempdirManager, + unittest.TestCase): + + def test_no_compiler(self): + import distutils._msvccompiler as _msvccompiler + # makes sure query_vcvarsall raises + # a DistutilsPlatformError if the compiler + # is not found + def _find_vcvarsall(plat_spec): + return None, None + + old_find_vcvarsall = _msvccompiler._find_vcvarsall + _msvccompiler._find_vcvarsall = _find_vcvarsall + try: + self.assertRaises(DistutilsPlatformError, + _msvccompiler._get_vc_env, + 'wont find this version') + finally: + _msvccompiler._find_vcvarsall = old_find_vcvarsall + + def test_compiler_options(self): + import distutils._msvccompiler as _msvccompiler + # suppress path to vcruntime from _find_vcvarsall to + # check that /MT is added to compile options + old_find_vcvarsall = _msvccompiler._find_vcvarsall + def _find_vcvarsall(plat_spec): + return old_find_vcvarsall(plat_spec)[0], None + _msvccompiler._find_vcvarsall = _find_vcvarsall + try: + compiler = _msvccompiler.MSVCCompiler() + compiler.initialize() + + self.assertIn('/MT', compiler.compile_options) + self.assertNotIn('/MD', compiler.compile_options) + finally: + _msvccompiler._find_vcvarsall = old_find_vcvarsall + + def test_vcruntime_copy(self): + import distutils._msvccompiler as _msvccompiler + # force path to a known file - it doesn't matter + # what we copy as long as its name is not in + # _msvccompiler._BUNDLED_DLLS + old_find_vcvarsall = _msvccompiler._find_vcvarsall + def _find_vcvarsall(plat_spec): + return old_find_vcvarsall(plat_spec)[0], __file__ + _msvccompiler._find_vcvarsall = _find_vcvarsall + try: + tempdir = self.mkdtemp() + compiler = _msvccompiler.MSVCCompiler() + compiler.initialize() + compiler._copy_vcruntime(tempdir) + + self.assertTrue(os.path.isfile(os.path.join( + tempdir, os.path.basename(__file__)))) + finally: + _msvccompiler._find_vcvarsall = old_find_vcvarsall + + def test_vcruntime_skip_copy(self): + import distutils._msvccompiler as _msvccompiler + + tempdir = self.mkdtemp() + compiler = _msvccompiler.MSVCCompiler() + compiler.initialize() + dll = compiler._vcruntime_redist + self.assertTrue(os.path.isfile(dll), dll or "") + + compiler._copy_vcruntime(tempdir) + + self.assertFalse(os.path.isfile(os.path.join( + tempdir, os.path.basename(dll))), dll or "") + + def test_get_vc_env_unicode(self): + import distutils._msvccompiler as _msvccompiler + + test_var = 'ṰḖṤṪ┅ṼẨṜ' + test_value = '₃⁴₅' + + # Ensure we don't early exit from _get_vc_env + old_distutils_use_sdk = os.environ.pop('DISTUTILS_USE_SDK', None) + os.environ[test_var] = test_value + try: + env = _msvccompiler._get_vc_env('x86') + self.assertIn(test_var.lower(), env) + self.assertEqual(test_value, env[test_var.lower()]) + finally: + os.environ.pop(test_var) + if old_distutils_use_sdk: + os.environ['DISTUTILS_USE_SDK'] = old_distutils_use_sdk + + def test_get_vc2017(self): + import distutils._msvccompiler as _msvccompiler + + # This function cannot be mocked, so pass it if we find VS 2017 + # and mark it skipped if we do not. + version, path = _msvccompiler._find_vc2017() + if version: + self.assertGreaterEqual(version, 15) + self.assertTrue(os.path.isdir(path)) + else: + raise unittest.SkipTest("VS 2017 is not installed") + + def test_get_vc2015(self): + import distutils._msvccompiler as _msvccompiler + + # This function cannot be mocked, so pass it if we find VS 2015 + # and mark it skipped if we do not. + version, path = _msvccompiler._find_vc2015() + if version: + self.assertGreaterEqual(version, 14) + self.assertTrue(os.path.isdir(path)) + else: + raise unittest.SkipTest("VS 2015 is not installed") + +def test_suite(): + return unittest.makeSuite(msvccompilerTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_register.py b/distutils/distutils/tests/test_register.py new file mode 100644 index 0000000..e68b0af --- /dev/null +++ b/distutils/distutils/tests/test_register.py @@ -0,0 +1,323 @@ +"""Tests for distutils.command.register.""" +import os +import unittest +import getpass +import urllib +import warnings + +from test.support import check_warnings, run_unittest + +from distutils.command import register as register_module +from distutils.command.register import register +from distutils.errors import DistutilsSetupError +from distutils.log import INFO + +from distutils.tests.test_config import BasePyPIRCCommandTestCase + +try: + import docutils +except ImportError: + docutils = None + +PYPIRC_NOPASSWORD = """\ +[distutils] + +index-servers = + server1 + +[server1] +username:me +""" + +WANTED_PYPIRC = """\ +[distutils] +index-servers = + pypi + +[pypi] +username:tarek +password:password +""" + +class Inputs(object): + """Fakes user inputs.""" + def __init__(self, *answers): + self.answers = answers + self.index = 0 + + def __call__(self, prompt=''): + try: + return self.answers[self.index] + finally: + self.index += 1 + +class FakeOpener(object): + """Fakes a PyPI server""" + def __init__(self): + self.reqs = [] + + def __call__(self, *args): + return self + + def open(self, req, data=None, timeout=None): + self.reqs.append(req) + return self + + def read(self): + return b'xxx' + + def getheader(self, name, default=None): + return { + 'content-type': 'text/plain; charset=utf-8', + }.get(name.lower(), default) + + +class RegisterTestCase(BasePyPIRCCommandTestCase): + + def setUp(self): + super(RegisterTestCase, self).setUp() + # patching the password prompt + self._old_getpass = getpass.getpass + def _getpass(prompt): + return 'password' + getpass.getpass = _getpass + urllib.request._opener = None + self.old_opener = urllib.request.build_opener + self.conn = urllib.request.build_opener = FakeOpener() + + def tearDown(self): + getpass.getpass = self._old_getpass + urllib.request._opener = None + urllib.request.build_opener = self.old_opener + super(RegisterTestCase, self).tearDown() + + def _get_cmd(self, metadata=None): + if metadata is None: + metadata = {'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx', + 'name': 'xxx', 'version': 'xxx'} + pkg_info, dist = self.create_dist(**metadata) + return register(dist) + + def test_create_pypirc(self): + # this test makes sure a .pypirc file + # is created when requested. + + # let's create a register instance + cmd = self._get_cmd() + + # we shouldn't have a .pypirc file yet + self.assertFalse(os.path.exists(self.rc)) + + # patching input and getpass.getpass + # so register gets happy + # + # Here's what we are faking : + # use your existing login (choice 1.) + # Username : 'tarek' + # Password : 'password' + # Save your login (y/N)? : 'y' + inputs = Inputs('1', 'tarek', 'y') + register_module.input = inputs.__call__ + # let's run the command + try: + cmd.run() + finally: + del register_module.input + + # we should have a brand new .pypirc file + self.assertTrue(os.path.exists(self.rc)) + + # with the content similar to WANTED_PYPIRC + f = open(self.rc) + try: + content = f.read() + self.assertEqual(content, WANTED_PYPIRC) + finally: + f.close() + + # now let's make sure the .pypirc file generated + # really works : we shouldn't be asked anything + # if we run the command again + def _no_way(prompt=''): + raise AssertionError(prompt) + register_module.input = _no_way + + cmd.show_response = 1 + cmd.run() + + # let's see what the server received : we should + # have 2 similar requests + self.assertEqual(len(self.conn.reqs), 2) + req1 = dict(self.conn.reqs[0].headers) + req2 = dict(self.conn.reqs[1].headers) + + self.assertEqual(req1['Content-length'], '1374') + self.assertEqual(req2['Content-length'], '1374') + self.assertIn(b'xxx', self.conn.reqs[1].data) + + def test_password_not_in_file(self): + + self.write_file(self.rc, PYPIRC_NOPASSWORD) + cmd = self._get_cmd() + cmd._set_config() + cmd.finalize_options() + cmd.send_metadata() + + # dist.password should be set + # therefore used afterwards by other commands + self.assertEqual(cmd.distribution.password, 'password') + + def test_registering(self): + # this test runs choice 2 + cmd = self._get_cmd() + inputs = Inputs('2', 'tarek', 'tarek@ziade.org') + register_module.input = inputs.__call__ + try: + # let's run the command + cmd.run() + finally: + del register_module.input + + # we should have send a request + self.assertEqual(len(self.conn.reqs), 1) + req = self.conn.reqs[0] + headers = dict(req.headers) + self.assertEqual(headers['Content-length'], '608') + self.assertIn(b'tarek', req.data) + + def test_password_reset(self): + # this test runs choice 3 + cmd = self._get_cmd() + inputs = Inputs('3', 'tarek@ziade.org') + register_module.input = inputs.__call__ + try: + # let's run the command + cmd.run() + finally: + del register_module.input + + # we should have send a request + self.assertEqual(len(self.conn.reqs), 1) + req = self.conn.reqs[0] + headers = dict(req.headers) + self.assertEqual(headers['Content-length'], '290') + self.assertIn(b'tarek', req.data) + + @unittest.skipUnless(docutils is not None, 'needs docutils') + def test_strict(self): + # testing the script option + # when on, the register command stops if + # the metadata is incomplete or if + # long_description is not reSt compliant + + # empty metadata + cmd = self._get_cmd({}) + cmd.ensure_finalized() + cmd.strict = 1 + self.assertRaises(DistutilsSetupError, cmd.run) + + # metadata are OK but long_description is broken + metadata = {'url': 'xxx', 'author': 'xxx', + 'author_email': 'éxéxé', + 'name': 'xxx', 'version': 'xxx', + 'long_description': 'title\n==\n\ntext'} + + cmd = self._get_cmd(metadata) + cmd.ensure_finalized() + cmd.strict = 1 + self.assertRaises(DistutilsSetupError, cmd.run) + + # now something that works + metadata['long_description'] = 'title\n=====\n\ntext' + cmd = self._get_cmd(metadata) + cmd.ensure_finalized() + cmd.strict = 1 + inputs = Inputs('1', 'tarek', 'y') + register_module.input = inputs.__call__ + # let's run the command + try: + cmd.run() + finally: + del register_module.input + + # strict is not by default + cmd = self._get_cmd() + cmd.ensure_finalized() + inputs = Inputs('1', 'tarek', 'y') + register_module.input = inputs.__call__ + # let's run the command + try: + cmd.run() + finally: + del register_module.input + + # and finally a Unicode test (bug #12114) + metadata = {'url': 'xxx', 'author': '\u00c9ric', + 'author_email': 'xxx', 'name': 'xxx', + 'version': 'xxx', + 'description': 'Something about esszet \u00df', + 'long_description': 'More things about esszet \u00df'} + + cmd = self._get_cmd(metadata) + cmd.ensure_finalized() + cmd.strict = 1 + inputs = Inputs('1', 'tarek', 'y') + register_module.input = inputs.__call__ + # let's run the command + try: + cmd.run() + finally: + del register_module.input + + @unittest.skipUnless(docutils is not None, 'needs docutils') + def test_register_invalid_long_description(self): + description = ':funkie:`str`' # mimic Sphinx-specific markup + metadata = {'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx', + 'name': 'xxx', 'version': 'xxx', + 'long_description': description} + cmd = self._get_cmd(metadata) + cmd.ensure_finalized() + cmd.strict = True + inputs = Inputs('2', 'tarek', 'tarek@ziade.org') + register_module.input = inputs + self.addCleanup(delattr, register_module, 'input') + + self.assertRaises(DistutilsSetupError, cmd.run) + + def test_check_metadata_deprecated(self): + # makes sure make_metadata is deprecated + cmd = self._get_cmd() + with check_warnings() as w: + warnings.simplefilter("always") + cmd.check_metadata() + self.assertEqual(len(w.warnings), 1) + + def test_list_classifiers(self): + cmd = self._get_cmd() + cmd.list_classifiers = 1 + cmd.run() + results = self.get_logs(INFO) + self.assertEqual(results, ['running check', 'xxx']) + + def test_show_response(self): + # test that the --show-response option return a well formatted response + cmd = self._get_cmd() + inputs = Inputs('1', 'tarek', 'y') + register_module.input = inputs.__call__ + cmd.show_response = 1 + try: + cmd.run() + finally: + del register_module.input + + results = self.get_logs(INFO) + self.assertEqual(results[3], 75 * '-' + '\nxxx\n' + 75 * '-') + + +def test_suite(): + return unittest.makeSuite(RegisterTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_sdist.py b/distutils/distutils/tests/test_sdist.py new file mode 100644 index 0000000..23db126 --- /dev/null +++ b/distutils/distutils/tests/test_sdist.py @@ -0,0 +1,492 @@ +"""Tests for distutils.command.sdist.""" +import os +import tarfile +import unittest +import warnings +import zipfile +from os.path import join +from textwrap import dedent +from test.support import captured_stdout, check_warnings, run_unittest + +try: + import zlib + ZLIB_SUPPORT = True +except ImportError: + ZLIB_SUPPORT = False + +try: + import grp + import pwd + UID_GID_SUPPORT = True +except ImportError: + UID_GID_SUPPORT = False + +from distutils.command.sdist import sdist, show_formats +from distutils.core import Distribution +from distutils.tests.test_config import BasePyPIRCCommandTestCase +from distutils.errors import DistutilsOptionError +from distutils.spawn import find_executable +from distutils.log import WARN +from distutils.filelist import FileList +from distutils.archive_util import ARCHIVE_FORMATS + +SETUP_PY = """ +from distutils.core import setup +import somecode + +setup(name='fake') +""" + +MANIFEST = """\ +# file GENERATED by distutils, do NOT edit +README +buildout.cfg +inroot.txt +setup.py +data%(sep)sdata.dt +scripts%(sep)sscript.py +some%(sep)sfile.txt +some%(sep)sother_file.txt +somecode%(sep)s__init__.py +somecode%(sep)sdoc.dat +somecode%(sep)sdoc.txt +""" + +class SDistTestCase(BasePyPIRCCommandTestCase): + + def setUp(self): + # PyPIRCCommandTestCase creates a temp dir already + # and put it in self.tmp_dir + super(SDistTestCase, self).setUp() + # setting up an environment + self.old_path = os.getcwd() + os.mkdir(join(self.tmp_dir, 'somecode')) + os.mkdir(join(self.tmp_dir, 'dist')) + # a package, and a README + self.write_file((self.tmp_dir, 'README'), 'xxx') + self.write_file((self.tmp_dir, 'somecode', '__init__.py'), '#') + self.write_file((self.tmp_dir, 'setup.py'), SETUP_PY) + os.chdir(self.tmp_dir) + + def tearDown(self): + # back to normal + os.chdir(self.old_path) + super(SDistTestCase, self).tearDown() + + def get_cmd(self, metadata=None): + """Returns a cmd""" + if metadata is None: + metadata = {'name': 'fake', 'version': '1.0', + 'url': 'xxx', 'author': 'xxx', + 'author_email': 'xxx'} + dist = Distribution(metadata) + dist.script_name = 'setup.py' + dist.packages = ['somecode'] + dist.include_package_data = True + cmd = sdist(dist) + cmd.dist_dir = 'dist' + return dist, cmd + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_prune_file_list(self): + # this test creates a project with some VCS dirs and an NFS rename + # file, then launches sdist to check they get pruned on all systems + + # creating VCS directories with some files in them + os.mkdir(join(self.tmp_dir, 'somecode', '.svn')) + self.write_file((self.tmp_dir, 'somecode', '.svn', 'ok.py'), 'xxx') + + os.mkdir(join(self.tmp_dir, 'somecode', '.hg')) + self.write_file((self.tmp_dir, 'somecode', '.hg', + 'ok'), 'xxx') + + os.mkdir(join(self.tmp_dir, 'somecode', '.git')) + self.write_file((self.tmp_dir, 'somecode', '.git', + 'ok'), 'xxx') + + self.write_file((self.tmp_dir, 'somecode', '.nfs0001'), 'xxx') + + # now building a sdist + dist, cmd = self.get_cmd() + + # zip is available universally + # (tar might not be installed under win32) + cmd.formats = ['zip'] + + cmd.ensure_finalized() + cmd.run() + + # now let's check what we have + dist_folder = join(self.tmp_dir, 'dist') + files = os.listdir(dist_folder) + self.assertEqual(files, ['fake-1.0.zip']) + + zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip')) + try: + content = zip_file.namelist() + finally: + zip_file.close() + + # making sure everything has been pruned correctly + expected = ['', 'PKG-INFO', 'README', 'setup.py', + 'somecode/', 'somecode/__init__.py'] + self.assertEqual(sorted(content), ['fake-1.0/' + x for x in expected]) + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + @unittest.skipIf(find_executable('tar') is None, + "The tar command is not found") + @unittest.skipIf(find_executable('gzip') is None, + "The gzip command is not found") + def test_make_distribution(self): + # now building a sdist + dist, cmd = self.get_cmd() + + # creating a gztar then a tar + cmd.formats = ['gztar', 'tar'] + cmd.ensure_finalized() + cmd.run() + + # making sure we have two files + dist_folder = join(self.tmp_dir, 'dist') + result = os.listdir(dist_folder) + result.sort() + self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz']) + + os.remove(join(dist_folder, 'fake-1.0.tar')) + os.remove(join(dist_folder, 'fake-1.0.tar.gz')) + + # now trying a tar then a gztar + cmd.formats = ['tar', 'gztar'] + + cmd.ensure_finalized() + cmd.run() + + result = os.listdir(dist_folder) + result.sort() + self.assertEqual(result, ['fake-1.0.tar', 'fake-1.0.tar.gz']) + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_add_defaults(self): + + # http://bugs.python.org/issue2279 + + # add_default should also include + # data_files and package_data + dist, cmd = self.get_cmd() + + # filling data_files by pointing files + # in package_data + dist.package_data = {'': ['*.cfg', '*.dat'], + 'somecode': ['*.txt']} + self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') + self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#') + + # adding some data in data_files + data_dir = join(self.tmp_dir, 'data') + os.mkdir(data_dir) + self.write_file((data_dir, 'data.dt'), '#') + some_dir = join(self.tmp_dir, 'some') + os.mkdir(some_dir) + # make sure VCS directories are pruned (#14004) + hg_dir = join(self.tmp_dir, '.hg') + os.mkdir(hg_dir) + self.write_file((hg_dir, 'last-message.txt'), '#') + # a buggy regex used to prevent this from working on windows (#6884) + self.write_file((self.tmp_dir, 'buildout.cfg'), '#') + self.write_file((self.tmp_dir, 'inroot.txt'), '#') + self.write_file((some_dir, 'file.txt'), '#') + self.write_file((some_dir, 'other_file.txt'), '#') + + dist.data_files = [('data', ['data/data.dt', + 'buildout.cfg', + 'inroot.txt', + 'notexisting']), + 'some/file.txt', + 'some/other_file.txt'] + + # adding a script + script_dir = join(self.tmp_dir, 'scripts') + os.mkdir(script_dir) + self.write_file((script_dir, 'script.py'), '#') + dist.scripts = [join('scripts', 'script.py')] + + cmd.formats = ['zip'] + cmd.use_defaults = True + + cmd.ensure_finalized() + cmd.run() + + # now let's check what we have + dist_folder = join(self.tmp_dir, 'dist') + files = os.listdir(dist_folder) + self.assertEqual(files, ['fake-1.0.zip']) + + zip_file = zipfile.ZipFile(join(dist_folder, 'fake-1.0.zip')) + try: + content = zip_file.namelist() + finally: + zip_file.close() + + # making sure everything was added + expected = ['', 'PKG-INFO', 'README', 'buildout.cfg', + 'data/', 'data/data.dt', 'inroot.txt', + 'scripts/', 'scripts/script.py', 'setup.py', + 'some/', 'some/file.txt', 'some/other_file.txt', + 'somecode/', 'somecode/__init__.py', 'somecode/doc.dat', + 'somecode/doc.txt'] + self.assertEqual(sorted(content), ['fake-1.0/' + x for x in expected]) + + # checking the MANIFEST + f = open(join(self.tmp_dir, 'MANIFEST')) + try: + manifest = f.read() + finally: + f.close() + self.assertEqual(manifest, MANIFEST % {'sep': os.sep}) + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_metadata_check_option(self): + # testing the `medata-check` option + dist, cmd = self.get_cmd(metadata={}) + + # this should raise some warnings ! + # with the `check` subcommand + cmd.ensure_finalized() + cmd.run() + warnings = [msg for msg in self.get_logs(WARN) if + msg.startswith('warning: check:')] + self.assertEqual(len(warnings), 2) + + # trying with a complete set of metadata + self.clear_logs() + dist, cmd = self.get_cmd() + cmd.ensure_finalized() + cmd.metadata_check = 0 + cmd.run() + warnings = [msg for msg in self.get_logs(WARN) if + msg.startswith('warning: check:')] + self.assertEqual(len(warnings), 0) + + def test_check_metadata_deprecated(self): + # makes sure make_metadata is deprecated + dist, cmd = self.get_cmd() + with check_warnings() as w: + warnings.simplefilter("always") + cmd.check_metadata() + self.assertEqual(len(w.warnings), 1) + + def test_show_formats(self): + with captured_stdout() as stdout: + show_formats() + + # the output should be a header line + one line per format + num_formats = len(ARCHIVE_FORMATS.keys()) + output = [line for line in stdout.getvalue().split('\n') + if line.strip().startswith('--formats=')] + self.assertEqual(len(output), num_formats) + + def test_finalize_options(self): + dist, cmd = self.get_cmd() + cmd.finalize_options() + + # default options set by finalize + self.assertEqual(cmd.manifest, 'MANIFEST') + self.assertEqual(cmd.template, 'MANIFEST.in') + self.assertEqual(cmd.dist_dir, 'dist') + + # formats has to be a string splitable on (' ', ',') or + # a stringlist + cmd.formats = 1 + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + cmd.formats = ['zip'] + cmd.finalize_options() + + # formats has to be known + cmd.formats = 'supazipa' + self.assertRaises(DistutilsOptionError, cmd.finalize_options) + + # the following tests make sure there is a nice error message instead + # of a traceback when parsing an invalid manifest template + + def _check_template(self, content): + dist, cmd = self.get_cmd() + os.chdir(self.tmp_dir) + self.write_file('MANIFEST.in', content) + cmd.ensure_finalized() + cmd.filelist = FileList() + cmd.read_template() + warnings = self.get_logs(WARN) + self.assertEqual(len(warnings), 1) + + def test_invalid_template_unknown_command(self): + self._check_template('taunt knights *') + + def test_invalid_template_wrong_arguments(self): + # this manifest command takes one argument + self._check_template('prune') + + @unittest.skipIf(os.name != 'nt', 'test relevant for Windows only') + def test_invalid_template_wrong_path(self): + # on Windows, trailing slashes are not allowed + # this used to crash instead of raising a warning: #8286 + self._check_template('include examples/') + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_get_file_list(self): + # make sure MANIFEST is recalculated + dist, cmd = self.get_cmd() + + # filling data_files by pointing files in package_data + dist.package_data = {'somecode': ['*.txt']} + self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') + cmd.formats = ['gztar'] + cmd.ensure_finalized() + cmd.run() + + f = open(cmd.manifest) + try: + manifest = [line.strip() for line in f.read().split('\n') + if line.strip() != ''] + finally: + f.close() + + self.assertEqual(len(manifest), 5) + + # adding a file + self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#') + + # make sure build_py is reinitialized, like a fresh run + build_py = dist.get_command_obj('build_py') + build_py.finalized = False + build_py.ensure_finalized() + + cmd.run() + + f = open(cmd.manifest) + try: + manifest2 = [line.strip() for line in f.read().split('\n') + if line.strip() != ''] + finally: + f.close() + + # do we have the new file in MANIFEST ? + self.assertEqual(len(manifest2), 6) + self.assertIn('doc2.txt', manifest2[-1]) + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_manifest_marker(self): + # check that autogenerated MANIFESTs have a marker + dist, cmd = self.get_cmd() + cmd.ensure_finalized() + cmd.run() + + f = open(cmd.manifest) + try: + manifest = [line.strip() for line in f.read().split('\n') + if line.strip() != ''] + finally: + f.close() + + self.assertEqual(manifest[0], + '# file GENERATED by distutils, do NOT edit') + + @unittest.skipUnless(ZLIB_SUPPORT, "Need zlib support to run") + def test_manifest_comments(self): + # make sure comments don't cause exceptions or wrong includes + contents = dedent("""\ + # bad.py + #bad.py + good.py + """) + dist, cmd = self.get_cmd() + cmd.ensure_finalized() + self.write_file((self.tmp_dir, cmd.manifest), contents) + self.write_file((self.tmp_dir, 'good.py'), '# pick me!') + self.write_file((self.tmp_dir, 'bad.py'), "# don't pick me!") + self.write_file((self.tmp_dir, '#bad.py'), "# don't pick me!") + cmd.run() + self.assertEqual(cmd.filelist.files, ['good.py']) + + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') + def test_manual_manifest(self): + # check that a MANIFEST without a marker is left alone + dist, cmd = self.get_cmd() + cmd.formats = ['gztar'] + cmd.ensure_finalized() + self.write_file((self.tmp_dir, cmd.manifest), 'README.manual') + self.write_file((self.tmp_dir, 'README.manual'), + 'This project maintains its MANIFEST file itself.') + cmd.run() + self.assertEqual(cmd.filelist.files, ['README.manual']) + + f = open(cmd.manifest) + try: + manifest = [line.strip() for line in f.read().split('\n') + if line.strip() != ''] + finally: + f.close() + + self.assertEqual(manifest, ['README.manual']) + + archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz') + archive = tarfile.open(archive_name) + try: + filenames = [tarinfo.name for tarinfo in archive] + finally: + archive.close() + self.assertEqual(sorted(filenames), ['fake-1.0', 'fake-1.0/PKG-INFO', + 'fake-1.0/README.manual']) + + @unittest.skipUnless(ZLIB_SUPPORT, "requires zlib") + @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support") + @unittest.skipIf(find_executable('tar') is None, + "The tar command is not found") + @unittest.skipIf(find_executable('gzip') is None, + "The gzip command is not found") + def test_make_distribution_owner_group(self): + # now building a sdist + dist, cmd = self.get_cmd() + + # creating a gztar and specifying the owner+group + cmd.formats = ['gztar'] + cmd.owner = pwd.getpwuid(0)[0] + cmd.group = grp.getgrgid(0)[0] + cmd.ensure_finalized() + cmd.run() + + # making sure we have the good rights + archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz') + archive = tarfile.open(archive_name) + try: + for member in archive.getmembers(): + self.assertEqual(member.uid, 0) + self.assertEqual(member.gid, 0) + finally: + archive.close() + + # building a sdist again + dist, cmd = self.get_cmd() + + # creating a gztar + cmd.formats = ['gztar'] + cmd.ensure_finalized() + cmd.run() + + # making sure we have the good rights + archive_name = join(self.tmp_dir, 'dist', 'fake-1.0.tar.gz') + archive = tarfile.open(archive_name) + + # note that we are not testing the group ownership here + # because, depending on the platforms and the container + # rights (see #7408) + try: + for member in archive.getmembers(): + self.assertEqual(member.uid, os.getuid()) + finally: + archive.close() + +def test_suite(): + return unittest.makeSuite(SDistTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_spawn.py b/distutils/distutils/tests/test_spawn.py new file mode 100644 index 0000000..0d45538 --- /dev/null +++ b/distutils/distutils/tests/test_spawn.py @@ -0,0 +1,103 @@ +"""Tests for distutils.spawn.""" +import os +import stat +import sys +import unittest +from unittest import mock +from test.support import run_unittest, unix_shell +from test import support as test_support + +from distutils.spawn import find_executable +from distutils.spawn import _nt_quote_args +from distutils.spawn import spawn +from distutils.errors import DistutilsExecError +from distutils.tests import support + +class SpawnTestCase(support.TempdirManager, + support.LoggingSilencer, + unittest.TestCase): + + def test_nt_quote_args(self): + + for (args, wanted) in ((['with space', 'nospace'], + ['"with space"', 'nospace']), + (['nochange', 'nospace'], + ['nochange', 'nospace'])): + res = _nt_quote_args(args) + self.assertEqual(res, wanted) + + + @unittest.skipUnless(os.name in ('nt', 'posix'), + 'Runs only under posix or nt') + def test_spawn(self): + tmpdir = self.mkdtemp() + + # creating something executable + # through the shell that returns 1 + if sys.platform != 'win32': + exe = os.path.join(tmpdir, 'foo.sh') + self.write_file(exe, '#!%s\nexit 1' % unix_shell) + else: + exe = os.path.join(tmpdir, 'foo.bat') + self.write_file(exe, 'exit 1') + + os.chmod(exe, 0o777) + self.assertRaises(DistutilsExecError, spawn, [exe]) + + # now something that works + if sys.platform != 'win32': + exe = os.path.join(tmpdir, 'foo.sh') + self.write_file(exe, '#!%s\nexit 0' % unix_shell) + else: + exe = os.path.join(tmpdir, 'foo.bat') + self.write_file(exe, 'exit 0') + + os.chmod(exe, 0o777) + spawn([exe]) # should work without any error + + def test_find_executable(self): + with test_support.temp_dir() as tmp_dir: + # use TESTFN to get a pseudo-unique filename + program_noeext = test_support.TESTFN + # Give the temporary program an ".exe" suffix for all. + # It's needed on Windows and not harmful on other platforms. + program = program_noeext + ".exe" + + filename = os.path.join(tmp_dir, program) + with open(filename, "wb"): + pass + os.chmod(filename, stat.S_IXUSR) + + # test path parameter + rv = find_executable(program, path=tmp_dir) + self.assertEqual(rv, filename) + + if sys.platform == 'win32': + # test without ".exe" extension + rv = find_executable(program_noeext, path=tmp_dir) + self.assertEqual(rv, filename) + + # test find in the current directory + with test_support.change_cwd(tmp_dir): + rv = find_executable(program) + self.assertEqual(rv, program) + + # test non-existent program + dont_exist_program = "dontexist_" + program + rv = find_executable(dont_exist_program , path=tmp_dir) + self.assertIsNone(rv) + + # test os.defpath: missing PATH environment variable + with test_support.EnvironmentVarGuard() as env: + with mock.patch('distutils.spawn.os.defpath', tmp_dir): + env.pop('PATH') + + rv = find_executable(program) + self.assertEqual(rv, filename) + + +def test_suite(): + return unittest.makeSuite(SpawnTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_sysconfig.py b/distutils/distutils/tests/test_sysconfig.py new file mode 100644 index 0000000..fe4a299 --- /dev/null +++ b/distutils/distutils/tests/test_sysconfig.py @@ -0,0 +1,198 @@ +"""Tests for distutils.sysconfig.""" +import os +import shutil +import subprocess +import sys +import textwrap +import unittest + +from distutils import sysconfig +from distutils.ccompiler import get_default_compiler +from distutils.tests import support +from test.support import TESTFN, run_unittest, check_warnings + +class SysconfigTestCase(support.EnvironGuard, unittest.TestCase): + def setUp(self): + super(SysconfigTestCase, self).setUp() + self.makefile = None + + def tearDown(self): + if self.makefile is not None: + os.unlink(self.makefile) + self.cleanup_testfn() + super(SysconfigTestCase, self).tearDown() + + def cleanup_testfn(self): + if os.path.isfile(TESTFN): + os.remove(TESTFN) + elif os.path.isdir(TESTFN): + shutil.rmtree(TESTFN) + + def test_get_config_h_filename(self): + config_h = sysconfig.get_config_h_filename() + self.assertTrue(os.path.isfile(config_h), config_h) + + def test_get_python_lib(self): + # XXX doesn't work on Linux when Python was never installed before + #self.assertTrue(os.path.isdir(lib_dir), lib_dir) + # test for pythonxx.lib? + self.assertNotEqual(sysconfig.get_python_lib(), + sysconfig.get_python_lib(prefix=TESTFN)) + + def test_get_config_vars(self): + cvars = sysconfig.get_config_vars() + self.assertIsInstance(cvars, dict) + self.assertTrue(cvars) + + def test_srcdir(self): + # See Issues #15322, #15364. + srcdir = sysconfig.get_config_var('srcdir') + + self.assertTrue(os.path.isabs(srcdir), srcdir) + self.assertTrue(os.path.isdir(srcdir), srcdir) + + if sysconfig.python_build: + # The python executable has not been installed so srcdir + # should be a full source checkout. + Python_h = os.path.join(srcdir, 'Include', 'Python.h') + self.assertTrue(os.path.exists(Python_h), Python_h) + self.assertTrue(sysconfig._is_python_source_dir(srcdir)) + elif os.name == 'posix': + self.assertEqual( + os.path.dirname(sysconfig.get_makefile_filename()), + srcdir) + + def test_srcdir_independent_of_cwd(self): + # srcdir should be independent of the current working directory + # See Issues #15322, #15364. + srcdir = sysconfig.get_config_var('srcdir') + cwd = os.getcwd() + try: + os.chdir('..') + srcdir2 = sysconfig.get_config_var('srcdir') + finally: + os.chdir(cwd) + self.assertEqual(srcdir, srcdir2) + + @unittest.skipUnless(get_default_compiler() == 'unix', + 'not testing if default compiler is not unix') + def test_customize_compiler(self): + os.environ['AR'] = 'my_ar' + os.environ['ARFLAGS'] = '-arflags' + + # make sure AR gets caught + class compiler: + compiler_type = 'unix' + + def set_executables(self, **kw): + self.exes = kw + + comp = compiler() + sysconfig.customize_compiler(comp) + self.assertEqual(comp.exes['archiver'], 'my_ar -arflags') + + def test_parse_makefile_base(self): + self.makefile = TESTFN + fd = open(self.makefile, 'w') + try: + fd.write(r"CONFIG_ARGS= '--arg1=optarg1' 'ENV=LIB'" '\n') + fd.write('VAR=$OTHER\nOTHER=foo') + finally: + fd.close() + d = sysconfig.parse_makefile(self.makefile) + self.assertEqual(d, {'CONFIG_ARGS': "'--arg1=optarg1' 'ENV=LIB'", + 'OTHER': 'foo'}) + + def test_parse_makefile_literal_dollar(self): + self.makefile = TESTFN + fd = open(self.makefile, 'w') + try: + fd.write(r"CONFIG_ARGS= '--arg1=optarg1' 'ENV=\$$LIB'" '\n') + fd.write('VAR=$OTHER\nOTHER=foo') + finally: + fd.close() + d = sysconfig.parse_makefile(self.makefile) + self.assertEqual(d, {'CONFIG_ARGS': r"'--arg1=optarg1' 'ENV=\$LIB'", + 'OTHER': 'foo'}) + + + def test_sysconfig_module(self): + import sysconfig as global_sysconfig + self.assertEqual(global_sysconfig.get_config_var('CFLAGS'), + sysconfig.get_config_var('CFLAGS')) + self.assertEqual(global_sysconfig.get_config_var('LDFLAGS'), + sysconfig.get_config_var('LDFLAGS')) + + @unittest.skipIf(sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'), + 'compiler flags customized') + def test_sysconfig_compiler_vars(self): + # On OS X, binary installers support extension module building on + # various levels of the operating system with differing Xcode + # configurations. This requires customization of some of the + # compiler configuration directives to suit the environment on + # the installed machine. Some of these customizations may require + # running external programs and, so, are deferred until needed by + # the first extension module build. With Python 3.3, only + # the Distutils version of sysconfig is used for extension module + # builds, which happens earlier in the Distutils tests. This may + # cause the following tests to fail since no tests have caused + # the global version of sysconfig to call the customization yet. + # The solution for now is to simply skip this test in this case. + # The longer-term solution is to only have one version of sysconfig. + + import sysconfig as global_sysconfig + if sysconfig.get_config_var('CUSTOMIZED_OSX_COMPILER'): + self.skipTest('compiler flags customized') + self.assertEqual(global_sysconfig.get_config_var('LDSHARED'), + sysconfig.get_config_var('LDSHARED')) + self.assertEqual(global_sysconfig.get_config_var('CC'), + sysconfig.get_config_var('CC')) + + @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, + 'EXT_SUFFIX required for this test') + def test_SO_deprecation(self): + self.assertWarns(DeprecationWarning, + sysconfig.get_config_var, 'SO') + + @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, + 'EXT_SUFFIX required for this test') + def test_SO_value(self): + with check_warnings(('', DeprecationWarning)): + self.assertEqual(sysconfig.get_config_var('SO'), + sysconfig.get_config_var('EXT_SUFFIX')) + + @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, + 'EXT_SUFFIX required for this test') + def test_SO_in_vars(self): + vars = sysconfig.get_config_vars() + self.assertIsNotNone(vars['SO']) + self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) + + def test_customize_compiler_before_get_config_vars(self): + # Issue #21923: test that a Distribution compiler + # instance can be called without an explicit call to + # get_config_vars(). + with open(TESTFN, 'w') as f: + f.writelines(textwrap.dedent('''\ + from distutils.core import Distribution + config = Distribution().get_command_obj('config') + # try_compile may pass or it may fail if no compiler + # is found but it should not raise an exception. + rc = config.try_compile('int x;') + ''')) + p = subprocess.Popen([str(sys.executable), TESTFN], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + universal_newlines=True) + outs, errs = p.communicate() + self.assertEqual(0, p.returncode, "Subprocess failed: " + outs) + + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(SysconfigTestCase)) + return suite + + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_text_file.py b/distutils/distutils/tests/test_text_file.py new file mode 100644 index 0000000..7e76240 --- /dev/null +++ b/distutils/distutils/tests/test_text_file.py @@ -0,0 +1,107 @@ +"""Tests for distutils.text_file.""" +import os +import unittest +from distutils.text_file import TextFile +from distutils.tests import support +from test.support import run_unittest + +TEST_DATA = """# test file + +line 3 \\ +# intervening comment + continues on next line +""" + +class TextFileTestCase(support.TempdirManager, unittest.TestCase): + + def test_class(self): + # old tests moved from text_file.__main__ + # so they are really called by the buildbots + + # result 1: no fancy options + result1 = ['# test file\n', '\n', 'line 3 \\\n', + '# intervening comment\n', + ' continues on next line\n'] + + # result 2: just strip comments + result2 = ["\n", + "line 3 \\\n", + " continues on next line\n"] + + # result 3: just strip blank lines + result3 = ["# test file\n", + "line 3 \\\n", + "# intervening comment\n", + " continues on next line\n"] + + # result 4: default, strip comments, blank lines, + # and trailing whitespace + result4 = ["line 3 \\", + " continues on next line"] + + # result 5: strip comments and blanks, plus join lines (but don't + # "collapse" joined lines + result5 = ["line 3 continues on next line"] + + # result 6: strip comments and blanks, plus join lines (and + # "collapse" joined lines + result6 = ["line 3 continues on next line"] + + def test_input(count, description, file, expected_result): + result = file.readlines() + self.assertEqual(result, expected_result) + + tmpdir = self.mkdtemp() + filename = os.path.join(tmpdir, "test.txt") + out_file = open(filename, "w") + try: + out_file.write(TEST_DATA) + finally: + out_file.close() + + in_file = TextFile(filename, strip_comments=0, skip_blanks=0, + lstrip_ws=0, rstrip_ws=0) + try: + test_input(1, "no processing", in_file, result1) + finally: + in_file.close() + + in_file = TextFile(filename, strip_comments=1, skip_blanks=0, + lstrip_ws=0, rstrip_ws=0) + try: + test_input(2, "strip comments", in_file, result2) + finally: + in_file.close() + + in_file = TextFile(filename, strip_comments=0, skip_blanks=1, + lstrip_ws=0, rstrip_ws=0) + try: + test_input(3, "strip blanks", in_file, result3) + finally: + in_file.close() + + in_file = TextFile(filename) + try: + test_input(4, "default processing", in_file, result4) + finally: + in_file.close() + + in_file = TextFile(filename, strip_comments=1, skip_blanks=1, + join_lines=1, rstrip_ws=1) + try: + test_input(5, "join lines without collapsing", in_file, result5) + finally: + in_file.close() + + in_file = TextFile(filename, strip_comments=1, skip_blanks=1, + join_lines=1, rstrip_ws=1, collapse_join=1) + try: + test_input(6, "join lines with collapsing", in_file, result6) + finally: + in_file.close() + +def test_suite(): + return unittest.makeSuite(TextFileTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_unixccompiler.py b/distutils/distutils/tests/test_unixccompiler.py new file mode 100644 index 0000000..efba27e --- /dev/null +++ b/distutils/distutils/tests/test_unixccompiler.py @@ -0,0 +1,149 @@ +"""Tests for distutils.unixccompiler.""" +import sys +import unittest +from test.support import EnvironmentVarGuard, run_unittest + +from distutils import sysconfig +from distutils.unixccompiler import UnixCCompiler + +class UnixCCompilerTestCase(unittest.TestCase): + + def setUp(self): + self._backup_platform = sys.platform + self._backup_get_config_var = sysconfig.get_config_var + class CompilerWrapper(UnixCCompiler): + def rpath_foo(self): + return self.runtime_library_dir_option('/foo') + self.cc = CompilerWrapper() + + def tearDown(self): + sys.platform = self._backup_platform + sysconfig.get_config_var = self._backup_get_config_var + + @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") + def test_runtime_libdir_option(self): + # Issue#5900 + # + # Ensure RUNPATH is added to extension modules with RPATH if + # GNU ld is used + + # darwin + sys.platform = 'darwin' + self.assertEqual(self.cc.rpath_foo(), '-L/foo') + + # hp-ux + sys.platform = 'hp-ux' + old_gcv = sysconfig.get_config_var + def gcv(v): + return 'xxx' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), ['+s', '-L/foo']) + + def gcv(v): + return 'gcc' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), ['-Wl,+s', '-L/foo']) + + def gcv(v): + return 'g++' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), ['-Wl,+s', '-L/foo']) + + sysconfig.get_config_var = old_gcv + + # irix646 + sys.platform = 'irix646' + self.assertEqual(self.cc.rpath_foo(), ['-rpath', '/foo']) + + # osf1V5 + sys.platform = 'osf1V5' + self.assertEqual(self.cc.rpath_foo(), ['-rpath', '/foo']) + + # GCC GNULD + sys.platform = 'bar' + def gcv(v): + if v == 'CC': + return 'gcc' + elif v == 'GNULD': + return 'yes' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), '-Wl,--enable-new-dtags,-R/foo') + + # GCC non-GNULD + sys.platform = 'bar' + def gcv(v): + if v == 'CC': + return 'gcc' + elif v == 'GNULD': + return 'no' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), '-Wl,-R/foo') + + # GCC GNULD with fully qualified configuration prefix + # see #7617 + sys.platform = 'bar' + def gcv(v): + if v == 'CC': + return 'x86_64-pc-linux-gnu-gcc-4.4.2' + elif v == 'GNULD': + return 'yes' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), '-Wl,--enable-new-dtags,-R/foo') + + # non-GCC GNULD + sys.platform = 'bar' + def gcv(v): + if v == 'CC': + return 'cc' + elif v == 'GNULD': + return 'yes' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), '-R/foo') + + # non-GCC non-GNULD + sys.platform = 'bar' + def gcv(v): + if v == 'CC': + return 'cc' + elif v == 'GNULD': + return 'no' + sysconfig.get_config_var = gcv + self.assertEqual(self.cc.rpath_foo(), '-R/foo') + + @unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for OS X') + def test_osx_cc_overrides_ldshared(self): + # Issue #18080: + # ensure that setting CC env variable also changes default linker + def gcv(v): + if v == 'LDSHARED': + return 'gcc-4.2 -bundle -undefined dynamic_lookup ' + return 'gcc-4.2' + sysconfig.get_config_var = gcv + with EnvironmentVarGuard() as env: + env['CC'] = 'my_cc' + del env['LDSHARED'] + sysconfig.customize_compiler(self.cc) + self.assertEqual(self.cc.linker_so[0], 'my_cc') + + @unittest.skipUnless(sys.platform == 'darwin', 'test only relevant for OS X') + def test_osx_explicit_ldshared(self): + # Issue #18080: + # ensure that setting CC env variable does not change + # explicit LDSHARED setting for linker + def gcv(v): + if v == 'LDSHARED': + return 'gcc-4.2 -bundle -undefined dynamic_lookup ' + return 'gcc-4.2' + sysconfig.get_config_var = gcv + with EnvironmentVarGuard() as env: + env['CC'] = 'my_cc' + env['LDSHARED'] = 'my_ld -bundle -dynamic' + sysconfig.customize_compiler(self.cc) + self.assertEqual(self.cc.linker_so[0], 'my_ld') + + +def test_suite(): + return unittest.makeSuite(UnixCCompilerTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_upload.py b/distutils/distutils/tests/test_upload.py new file mode 100644 index 0000000..c17d8e7 --- /dev/null +++ b/distutils/distutils/tests/test_upload.py @@ -0,0 +1,207 @@ +"""Tests for distutils.command.upload.""" +import os +import unittest +import unittest.mock as mock +from urllib.request import HTTPError + +from test.support import run_unittest + +from distutils.command import upload as upload_mod +from distutils.command.upload import upload +from distutils.core import Distribution +from distutils.errors import DistutilsError +from distutils.log import ERROR, INFO + +from distutils.tests.test_config import PYPIRC, BasePyPIRCCommandTestCase + +PYPIRC_LONG_PASSWORD = """\ +[distutils] + +index-servers = + server1 + server2 + +[server1] +username:me +password:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + +[server2] +username:meagain +password: secret +realm:acme +repository:http://another.pypi/ +""" + + +PYPIRC_NOPASSWORD = """\ +[distutils] + +index-servers = + server1 + +[server1] +username:me +""" + +class FakeOpen(object): + + def __init__(self, url, msg=None, code=None): + self.url = url + if not isinstance(url, str): + self.req = url + else: + self.req = None + self.msg = msg or 'OK' + self.code = code or 200 + + def getheader(self, name, default=None): + return { + 'content-type': 'text/plain; charset=utf-8', + }.get(name.lower(), default) + + def read(self): + return b'xyzzy' + + def getcode(self): + return self.code + + +class uploadTestCase(BasePyPIRCCommandTestCase): + + def setUp(self): + super(uploadTestCase, self).setUp() + self.old_open = upload_mod.urlopen + upload_mod.urlopen = self._urlopen + self.last_open = None + self.next_msg = None + self.next_code = None + + def tearDown(self): + upload_mod.urlopen = self.old_open + super(uploadTestCase, self).tearDown() + + def _urlopen(self, url): + self.last_open = FakeOpen(url, msg=self.next_msg, code=self.next_code) + return self.last_open + + def test_finalize_options(self): + + # new format + self.write_file(self.rc, PYPIRC) + dist = Distribution() + cmd = upload(dist) + cmd.finalize_options() + for attr, waited in (('username', 'me'), ('password', 'secret'), + ('realm', 'pypi'), + ('repository', 'https://upload.pypi.org/legacy/')): + self.assertEqual(getattr(cmd, attr), waited) + + def test_saved_password(self): + # file with no password + self.write_file(self.rc, PYPIRC_NOPASSWORD) + + # make sure it passes + dist = Distribution() + cmd = upload(dist) + cmd.finalize_options() + self.assertEqual(cmd.password, None) + + # make sure we get it as well, if another command + # initialized it at the dist level + dist.password = 'xxx' + cmd = upload(dist) + cmd.finalize_options() + self.assertEqual(cmd.password, 'xxx') + + def test_upload(self): + tmp = self.mkdtemp() + path = os.path.join(tmp, 'xxx') + self.write_file(path) + command, pyversion, filename = 'xxx', '2.6', path + dist_files = [(command, pyversion, filename)] + self.write_file(self.rc, PYPIRC_LONG_PASSWORD) + + # lets run it + pkg_dir, dist = self.create_dist(dist_files=dist_files) + cmd = upload(dist) + cmd.show_response = 1 + cmd.ensure_finalized() + cmd.run() + + # what did we send ? + headers = dict(self.last_open.req.headers) + self.assertEqual(headers['Content-length'], '2162') + content_type = headers['Content-type'] + self.assertTrue(content_type.startswith('multipart/form-data')) + self.assertEqual(self.last_open.req.get_method(), 'POST') + expected_url = 'https://upload.pypi.org/legacy/' + self.assertEqual(self.last_open.req.get_full_url(), expected_url) + self.assertTrue(b'xxx' in self.last_open.req.data) + self.assertIn(b'protocol_version', self.last_open.req.data) + + # The PyPI response body was echoed + results = self.get_logs(INFO) + self.assertEqual(results[-1], 75 * '-' + '\nxyzzy\n' + 75 * '-') + + # bpo-32304: archives whose last byte was b'\r' were corrupted due to + # normalization intended for Mac OS 9. + def test_upload_correct_cr(self): + # content that ends with \r should not be modified. + tmp = self.mkdtemp() + path = os.path.join(tmp, 'xxx') + self.write_file(path, content='yy\r') + command, pyversion, filename = 'xxx', '2.6', path + dist_files = [(command, pyversion, filename)] + self.write_file(self.rc, PYPIRC_LONG_PASSWORD) + + # other fields that ended with \r used to be modified, now are + # preserved. + pkg_dir, dist = self.create_dist( + dist_files=dist_files, + description='long description\r' + ) + cmd = upload(dist) + cmd.show_response = 1 + cmd.ensure_finalized() + cmd.run() + + headers = dict(self.last_open.req.headers) + self.assertEqual(headers['Content-length'], '2172') + self.assertIn(b'long description\r', self.last_open.req.data) + + def test_upload_fails(self): + self.next_msg = "Not Found" + self.next_code = 404 + self.assertRaises(DistutilsError, self.test_upload) + + def test_wrong_exception_order(self): + tmp = self.mkdtemp() + path = os.path.join(tmp, 'xxx') + self.write_file(path) + dist_files = [('xxx', '2.6', path)] # command, pyversion, filename + self.write_file(self.rc, PYPIRC_LONG_PASSWORD) + + pkg_dir, dist = self.create_dist(dist_files=dist_files) + tests = [ + (OSError('oserror'), 'oserror', OSError), + (HTTPError('url', 400, 'httperror', {}, None), + 'Upload failed (400): httperror', DistutilsError), + ] + for exception, expected, raised_exception in tests: + with self.subTest(exception=type(exception).__name__): + with mock.patch('distutils.command.upload.urlopen', + new=mock.Mock(side_effect=exception)): + with self.assertRaises(raised_exception): + cmd = upload(dist) + cmd.ensure_finalized() + cmd.run() + results = self.get_logs(ERROR) + self.assertIn(expected, results[-1]) + self.clear_logs() + + +def test_suite(): + return unittest.makeSuite(uploadTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_util.py b/distutils/distutils/tests/test_util.py new file mode 100644 index 0000000..4e9d79b --- /dev/null +++ b/distutils/distutils/tests/test_util.py @@ -0,0 +1,300 @@ +"""Tests for distutils.util.""" +import os +import sys +import unittest +from copy import copy +from test.support import run_unittest + +from distutils.errors import DistutilsPlatformError, DistutilsByteCompileError +from distutils.util import (get_platform, convert_path, change_root, + check_environ, split_quoted, strtobool, + rfc822_escape, byte_compile, + grok_environment_error) +from distutils import util # used to patch _environ_checked +from distutils.sysconfig import get_config_vars +from distutils import sysconfig +from distutils.tests import support +import _osx_support + +class UtilTestCase(support.EnvironGuard, unittest.TestCase): + + def setUp(self): + super(UtilTestCase, self).setUp() + # saving the environment + self.name = os.name + self.platform = sys.platform + self.version = sys.version + self.sep = os.sep + self.join = os.path.join + self.isabs = os.path.isabs + self.splitdrive = os.path.splitdrive + self._config_vars = copy(sysconfig._config_vars) + + # patching os.uname + if hasattr(os, 'uname'): + self.uname = os.uname + self._uname = os.uname() + else: + self.uname = None + self._uname = None + + os.uname = self._get_uname + + def tearDown(self): + # getting back the environment + os.name = self.name + sys.platform = self.platform + sys.version = self.version + os.sep = self.sep + os.path.join = self.join + os.path.isabs = self.isabs + os.path.splitdrive = self.splitdrive + if self.uname is not None: + os.uname = self.uname + else: + del os.uname + sysconfig._config_vars = copy(self._config_vars) + super(UtilTestCase, self).tearDown() + + def _set_uname(self, uname): + self._uname = uname + + def _get_uname(self): + return self._uname + + def test_get_platform(self): + + # windows XP, 32bits + os.name = 'nt' + sys.version = ('2.4.4 (#71, Oct 18 2006, 08:34:43) ' + '[MSC v.1310 32 bit (Intel)]') + sys.platform = 'win32' + self.assertEqual(get_platform(), 'win32') + + # windows XP, amd64 + os.name = 'nt' + sys.version = ('2.4.4 (#71, Oct 18 2006, 08:34:43) ' + '[MSC v.1310 32 bit (Amd64)]') + sys.platform = 'win32' + self.assertEqual(get_platform(), 'win-amd64') + + # windows XP, itanium + os.name = 'nt' + sys.version = ('2.4.4 (#71, Oct 18 2006, 08:34:43) ' + '[MSC v.1310 32 bit (Itanium)]') + sys.platform = 'win32' + self.assertEqual(get_platform(), 'win-ia64') + + # macbook + os.name = 'posix' + sys.version = ('2.5 (r25:51918, Sep 19 2006, 08:49:13) ' + '\n[GCC 4.0.1 (Apple Computer, Inc. build 5341)]') + sys.platform = 'darwin' + self._set_uname(('Darwin', 'macziade', '8.11.1', + ('Darwin Kernel Version 8.11.1: ' + 'Wed Oct 10 18:23:28 PDT 2007; ' + 'root:xnu-792.25.20~1/RELEASE_I386'), 'i386')) + _osx_support._remove_original_values(get_config_vars()) + get_config_vars()['MACOSX_DEPLOYMENT_TARGET'] = '10.3' + + get_config_vars()['CFLAGS'] = ('-fno-strict-aliasing -DNDEBUG -g ' + '-fwrapv -O3 -Wall -Wstrict-prototypes') + + cursize = sys.maxsize + sys.maxsize = (2 ** 31)-1 + try: + self.assertEqual(get_platform(), 'macosx-10.3-i386') + finally: + sys.maxsize = cursize + + # macbook with fat binaries (fat, universal or fat64) + _osx_support._remove_original_values(get_config_vars()) + get_config_vars()['MACOSX_DEPLOYMENT_TARGET'] = '10.4' + get_config_vars()['CFLAGS'] = ('-arch ppc -arch i386 -isysroot ' + '/Developer/SDKs/MacOSX10.4u.sdk ' + '-fno-strict-aliasing -fno-common ' + '-dynamic -DNDEBUG -g -O3') + + self.assertEqual(get_platform(), 'macosx-10.4-fat') + + _osx_support._remove_original_values(get_config_vars()) + os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.1' + self.assertEqual(get_platform(), 'macosx-10.4-fat') + + + _osx_support._remove_original_values(get_config_vars()) + get_config_vars()['CFLAGS'] = ('-arch x86_64 -arch i386 -isysroot ' + '/Developer/SDKs/MacOSX10.4u.sdk ' + '-fno-strict-aliasing -fno-common ' + '-dynamic -DNDEBUG -g -O3') + + self.assertEqual(get_platform(), 'macosx-10.4-intel') + + _osx_support._remove_original_values(get_config_vars()) + get_config_vars()['CFLAGS'] = ('-arch x86_64 -arch ppc -arch i386 -isysroot ' + '/Developer/SDKs/MacOSX10.4u.sdk ' + '-fno-strict-aliasing -fno-common ' + '-dynamic -DNDEBUG -g -O3') + self.assertEqual(get_platform(), 'macosx-10.4-fat3') + + _osx_support._remove_original_values(get_config_vars()) + get_config_vars()['CFLAGS'] = ('-arch ppc64 -arch x86_64 -arch ppc -arch i386 -isysroot ' + '/Developer/SDKs/MacOSX10.4u.sdk ' + '-fno-strict-aliasing -fno-common ' + '-dynamic -DNDEBUG -g -O3') + self.assertEqual(get_platform(), 'macosx-10.4-universal') + + _osx_support._remove_original_values(get_config_vars()) + get_config_vars()['CFLAGS'] = ('-arch x86_64 -arch ppc64 -isysroot ' + '/Developer/SDKs/MacOSX10.4u.sdk ' + '-fno-strict-aliasing -fno-common ' + '-dynamic -DNDEBUG -g -O3') + + self.assertEqual(get_platform(), 'macosx-10.4-fat64') + + for arch in ('ppc', 'i386', 'x86_64', 'ppc64'): + _osx_support._remove_original_values(get_config_vars()) + get_config_vars()['CFLAGS'] = ('-arch %s -isysroot ' + '/Developer/SDKs/MacOSX10.4u.sdk ' + '-fno-strict-aliasing -fno-common ' + '-dynamic -DNDEBUG -g -O3'%(arch,)) + + self.assertEqual(get_platform(), 'macosx-10.4-%s'%(arch,)) + + + # linux debian sarge + os.name = 'posix' + sys.version = ('2.3.5 (#1, Jul 4 2007, 17:28:59) ' + '\n[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)]') + sys.platform = 'linux2' + self._set_uname(('Linux', 'aglae', '2.6.21.1dedibox-r7', + '#1 Mon Apr 30 17:25:38 CEST 2007', 'i686')) + + self.assertEqual(get_platform(), 'linux-i686') + + # XXX more platforms to tests here + + def test_convert_path(self): + # linux/mac + os.sep = '/' + def _join(path): + return '/'.join(path) + os.path.join = _join + + self.assertEqual(convert_path('/home/to/my/stuff'), + '/home/to/my/stuff') + + # win + os.sep = '\\' + def _join(*path): + return '\\'.join(path) + os.path.join = _join + + self.assertRaises(ValueError, convert_path, '/home/to/my/stuff') + self.assertRaises(ValueError, convert_path, 'home/to/my/stuff/') + + self.assertEqual(convert_path('home/to/my/stuff'), + 'home\\to\\my\\stuff') + self.assertEqual(convert_path('.'), + os.curdir) + + def test_change_root(self): + # linux/mac + os.name = 'posix' + def _isabs(path): + return path[0] == '/' + os.path.isabs = _isabs + def _join(*path): + return '/'.join(path) + os.path.join = _join + + self.assertEqual(change_root('/root', '/old/its/here'), + '/root/old/its/here') + self.assertEqual(change_root('/root', 'its/here'), + '/root/its/here') + + # windows + os.name = 'nt' + def _isabs(path): + return path.startswith('c:\\') + os.path.isabs = _isabs + def _splitdrive(path): + if path.startswith('c:'): + return ('', path.replace('c:', '')) + return ('', path) + os.path.splitdrive = _splitdrive + def _join(*path): + return '\\'.join(path) + os.path.join = _join + + self.assertEqual(change_root('c:\\root', 'c:\\old\\its\\here'), + 'c:\\root\\old\\its\\here') + self.assertEqual(change_root('c:\\root', 'its\\here'), + 'c:\\root\\its\\here') + + # BugsBunny os (it's a great os) + os.name = 'BugsBunny' + self.assertRaises(DistutilsPlatformError, + change_root, 'c:\\root', 'its\\here') + + # XXX platforms to be covered: mac + + def test_check_environ(self): + util._environ_checked = 0 + if 'HOME' in os.environ: + del os.environ['HOME'] + + # posix without HOME + if os.name == 'posix': # this test won't run on windows + check_environ() + import pwd + self.assertEqual(os.environ['HOME'], pwd.getpwuid(os.getuid())[5]) + else: + check_environ() + + self.assertEqual(os.environ['PLAT'], get_platform()) + self.assertEqual(util._environ_checked, 1) + + def test_split_quoted(self): + self.assertEqual(split_quoted('""one"" "two" \'three\' \\four'), + ['one', 'two', 'three', 'four']) + + def test_strtobool(self): + yes = ('y', 'Y', 'yes', 'True', 't', 'true', 'True', 'On', 'on', '1') + no = ('n', 'no', 'f', 'false', 'off', '0', 'Off', 'No', 'N') + + for y in yes: + self.assertTrue(strtobool(y)) + + for n in no: + self.assertFalse(strtobool(n)) + + def test_rfc822_escape(self): + header = 'I am a\npoor\nlonesome\nheader\n' + res = rfc822_escape(header) + wanted = ('I am a%(8s)spoor%(8s)slonesome%(8s)s' + 'header%(8s)s') % {'8s': '\n'+8*' '} + self.assertEqual(res, wanted) + + def test_dont_write_bytecode(self): + # makes sure byte_compile raise a DistutilsError + # if sys.dont_write_bytecode is True + old_dont_write_bytecode = sys.dont_write_bytecode + sys.dont_write_bytecode = True + try: + self.assertRaises(DistutilsByteCompileError, byte_compile, []) + finally: + sys.dont_write_bytecode = old_dont_write_bytecode + + def test_grok_environment_error(self): + # test obsolete function to ensure backward compat (#4931) + exc = IOError("Unable to find batch file") + msg = grok_environment_error(exc) + self.assertEqual(msg, "error: Unable to find batch file") + + +def test_suite(): + return unittest.makeSuite(UtilTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_version.py b/distutils/distutils/tests/test_version.py new file mode 100644 index 0000000..15f14c7 --- /dev/null +++ b/distutils/distutils/tests/test_version.py @@ -0,0 +1,71 @@ +"""Tests for distutils.version.""" +import unittest +from distutils.version import LooseVersion +from distutils.version import StrictVersion +from test.support import run_unittest + +class VersionTestCase(unittest.TestCase): + + def test_prerelease(self): + version = StrictVersion('1.2.3a1') + self.assertEqual(version.version, (1, 2, 3)) + self.assertEqual(version.prerelease, ('a', 1)) + self.assertEqual(str(version), '1.2.3a1') + + version = StrictVersion('1.2.0') + self.assertEqual(str(version), '1.2') + + def test_cmp_strict(self): + versions = (('1.5.1', '1.5.2b2', -1), + ('161', '3.10a', ValueError), + ('8.02', '8.02', 0), + ('3.4j', '1996.07.12', ValueError), + ('3.2.pl0', '3.1.1.6', ValueError), + ('2g6', '11g', ValueError), + ('0.9', '2.2', -1), + ('1.2.1', '1.2', 1), + ('1.1', '1.2.2', -1), + ('1.2', '1.1', 1), + ('1.2.1', '1.2.2', -1), + ('1.2.2', '1.2', 1), + ('1.2', '1.2.2', -1), + ('0.4.0', '0.4', 0), + ('1.13++', '5.5.kw', ValueError)) + + for v1, v2, wanted in versions: + try: + res = StrictVersion(v1)._cmp(StrictVersion(v2)) + except ValueError: + if wanted is ValueError: + continue + else: + raise AssertionError(("cmp(%s, %s) " + "shouldn't raise ValueError") + % (v1, v2)) + self.assertEqual(res, wanted, + 'cmp(%s, %s) should be %s, got %s' % + (v1, v2, wanted, res)) + + + def test_cmp(self): + versions = (('1.5.1', '1.5.2b2', -1), + ('161', '3.10a', 1), + ('8.02', '8.02', 0), + ('3.4j', '1996.07.12', -1), + ('3.2.pl0', '3.1.1.6', 1), + ('2g6', '11g', -1), + ('0.960923', '2.2beta29', -1), + ('1.13++', '5.5.kw', -1)) + + + for v1, v2, wanted in versions: + res = LooseVersion(v1)._cmp(LooseVersion(v2)) + self.assertEqual(res, wanted, + 'cmp(%s, %s) should be %s, got %s' % + (v1, v2, wanted, res)) + +def test_suite(): + return unittest.makeSuite(VersionTestCase) + +if __name__ == "__main__": + run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_versionpredicate.py b/distutils/distutils/tests/test_versionpredicate.py new file mode 100644 index 0000000..28ae09d --- /dev/null +++ b/distutils/distutils/tests/test_versionpredicate.py @@ -0,0 +1,13 @@ +"""Tests harness for distutils.versionpredicate. + +""" + +import distutils.versionpredicate +import doctest +from test.support import run_unittest + +def test_suite(): + return doctest.DocTestSuite(distutils.versionpredicate) + +if __name__ == '__main__': + run_unittest(test_suite()) diff --git a/distutils/distutils/text_file.py b/distutils/distutils/text_file.py new file mode 100644 index 0000000..93abad3 --- /dev/null +++ b/distutils/distutils/text_file.py @@ -0,0 +1,286 @@ +"""text_file + +provides the TextFile class, which gives an interface to text files +that (optionally) takes care of stripping comments, ignoring blank +lines, and joining lines with backslashes.""" + +import sys, io + + +class TextFile: + """Provides a file-like object that takes care of all the things you + commonly want to do when processing a text file that has some + line-by-line syntax: strip comments (as long as "#" is your + comment character), skip blank lines, join adjacent lines by + escaping the newline (ie. backslash at end of line), strip + leading and/or trailing whitespace. All of these are optional + and independently controllable. + + Provides a 'warn()' method so you can generate warning messages that + report physical line number, even if the logical line in question + spans multiple physical lines. Also provides 'unreadline()' for + implementing line-at-a-time lookahead. + + Constructor is called as: + + TextFile (filename=None, file=None, **options) + + It bombs (RuntimeError) if both 'filename' and 'file' are None; + 'filename' should be a string, and 'file' a file object (or + something that provides 'readline()' and 'close()' methods). It is + recommended that you supply at least 'filename', so that TextFile + can include it in warning messages. If 'file' is not supplied, + TextFile creates its own using 'io.open()'. + + The options are all boolean, and affect the value returned by + 'readline()': + strip_comments [default: true] + strip from "#" to end-of-line, as well as any whitespace + leading up to the "#" -- unless it is escaped by a backslash + lstrip_ws [default: false] + strip leading whitespace from each line before returning it + rstrip_ws [default: true] + strip trailing whitespace (including line terminator!) from + each line before returning it + skip_blanks [default: true} + skip lines that are empty *after* stripping comments and + whitespace. (If both lstrip_ws and rstrip_ws are false, + then some lines may consist of solely whitespace: these will + *not* be skipped, even if 'skip_blanks' is true.) + join_lines [default: false] + if a backslash is the last non-newline character on a line + after stripping comments and whitespace, join the following line + to it to form one "logical line"; if N consecutive lines end + with a backslash, then N+1 physical lines will be joined to + form one logical line. + collapse_join [default: false] + strip leading whitespace from lines that are joined to their + predecessor; only matters if (join_lines and not lstrip_ws) + errors [default: 'strict'] + error handler used to decode the file content + + Note that since 'rstrip_ws' can strip the trailing newline, the + semantics of 'readline()' must differ from those of the builtin file + object's 'readline()' method! In particular, 'readline()' returns + None for end-of-file: an empty string might just be a blank line (or + an all-whitespace line), if 'rstrip_ws' is true but 'skip_blanks' is + not.""" + + default_options = { 'strip_comments': 1, + 'skip_blanks': 1, + 'lstrip_ws': 0, + 'rstrip_ws': 1, + 'join_lines': 0, + 'collapse_join': 0, + 'errors': 'strict', + } + + def __init__(self, filename=None, file=None, **options): + """Construct a new TextFile object. At least one of 'filename' + (a string) and 'file' (a file-like object) must be supplied. + They keyword argument options are described above and affect + the values returned by 'readline()'.""" + if filename is None and file is None: + raise RuntimeError("you must supply either or both of 'filename' and 'file'") + + # set values for all options -- either from client option hash + # or fallback to default_options + for opt in self.default_options.keys(): + if opt in options: + setattr(self, opt, options[opt]) + else: + setattr(self, opt, self.default_options[opt]) + + # sanity check client option hash + for opt in options.keys(): + if opt not in self.default_options: + raise KeyError("invalid TextFile option '%s'" % opt) + + if file is None: + self.open(filename) + else: + self.filename = filename + self.file = file + self.current_line = 0 # assuming that file is at BOF! + + # 'linebuf' is a stack of lines that will be emptied before we + # actually read from the file; it's only populated by an + # 'unreadline()' operation + self.linebuf = [] + + def open(self, filename): + """Open a new file named 'filename'. This overrides both the + 'filename' and 'file' arguments to the constructor.""" + self.filename = filename + self.file = io.open(self.filename, 'r', errors=self.errors) + self.current_line = 0 + + def close(self): + """Close the current file and forget everything we know about it + (filename, current line number).""" + file = self.file + self.file = None + self.filename = None + self.current_line = None + file.close() + + def gen_error(self, msg, line=None): + outmsg = [] + if line is None: + line = self.current_line + outmsg.append(self.filename + ", ") + if isinstance(line, (list, tuple)): + outmsg.append("lines %d-%d: " % tuple(line)) + else: + outmsg.append("line %d: " % line) + outmsg.append(str(msg)) + return "".join(outmsg) + + def error(self, msg, line=None): + raise ValueError("error: " + self.gen_error(msg, line)) + + def warn(self, msg, line=None): + """Print (to stderr) a warning message tied to the current logical + line in the current file. If the current logical line in the + file spans multiple physical lines, the warning refers to the + whole range, eg. "lines 3-5". If 'line' supplied, it overrides + the current line number; it may be a list or tuple to indicate a + range of physical lines, or an integer for a single physical + line.""" + sys.stderr.write("warning: " + self.gen_error(msg, line) + "\n") + + def readline(self): + """Read and return a single logical line from the current file (or + from an internal buffer if lines have previously been "unread" + with 'unreadline()'). If the 'join_lines' option is true, this + may involve reading multiple physical lines concatenated into a + single string. Updates the current line number, so calling + 'warn()' after 'readline()' emits a warning about the physical + line(s) just read. Returns None on end-of-file, since the empty + string can occur if 'rstrip_ws' is true but 'strip_blanks' is + not.""" + # If any "unread" lines waiting in 'linebuf', return the top + # one. (We don't actually buffer read-ahead data -- lines only + # get put in 'linebuf' if the client explicitly does an + # 'unreadline()'. + if self.linebuf: + line = self.linebuf[-1] + del self.linebuf[-1] + return line + + buildup_line = '' + + while True: + # read the line, make it None if EOF + line = self.file.readline() + if line == '': + line = None + + if self.strip_comments and line: + + # Look for the first "#" in the line. If none, never + # mind. If we find one and it's the first character, or + # is not preceded by "\", then it starts a comment -- + # strip the comment, strip whitespace before it, and + # carry on. Otherwise, it's just an escaped "#", so + # unescape it (and any other escaped "#"'s that might be + # lurking in there) and otherwise leave the line alone. + + pos = line.find("#") + if pos == -1: # no "#" -- no comments + pass + + # It's definitely a comment -- either "#" is the first + # character, or it's elsewhere and unescaped. + elif pos == 0 or line[pos-1] != "\\": + # Have to preserve the trailing newline, because it's + # the job of a later step (rstrip_ws) to remove it -- + # and if rstrip_ws is false, we'd better preserve it! + # (NB. this means that if the final line is all comment + # and has no trailing newline, we will think that it's + # EOF; I think that's OK.) + eol = (line[-1] == '\n') and '\n' or '' + line = line[0:pos] + eol + + # If all that's left is whitespace, then skip line + # *now*, before we try to join it to 'buildup_line' -- + # that way constructs like + # hello \\ + # # comment that should be ignored + # there + # result in "hello there". + if line.strip() == "": + continue + else: # it's an escaped "#" + line = line.replace("\\#", "#") + + # did previous line end with a backslash? then accumulate + if self.join_lines and buildup_line: + # oops: end of file + if line is None: + self.warn("continuation line immediately precedes " + "end-of-file") + return buildup_line + + if self.collapse_join: + line = line.lstrip() + line = buildup_line + line + + # careful: pay attention to line number when incrementing it + if isinstance(self.current_line, list): + self.current_line[1] = self.current_line[1] + 1 + else: + self.current_line = [self.current_line, + self.current_line + 1] + # just an ordinary line, read it as usual + else: + if line is None: # eof + return None + + # still have to be careful about incrementing the line number! + if isinstance(self.current_line, list): + self.current_line = self.current_line[1] + 1 + else: + self.current_line = self.current_line + 1 + + # strip whitespace however the client wants (leading and + # trailing, or one or the other, or neither) + if self.lstrip_ws and self.rstrip_ws: + line = line.strip() + elif self.lstrip_ws: + line = line.lstrip() + elif self.rstrip_ws: + line = line.rstrip() + + # blank line (whether we rstrip'ed or not)? skip to next line + # if appropriate + if (line == '' or line == '\n') and self.skip_blanks: + continue + + if self.join_lines: + if line[-1] == '\\': + buildup_line = line[:-1] + continue + + if line[-2:] == '\\\n': + buildup_line = line[0:-2] + '\n' + continue + + # well, I guess there's some actual content there: return it + return line + + def readlines(self): + """Read and return the list of all logical lines remaining in the + current file.""" + lines = [] + while True: + line = self.readline() + if line is None: + return lines + lines.append(line) + + def unreadline(self, line): + """Push 'line' (a string) onto an internal buffer that will be + checked by future 'readline()' calls. Handy for implementing + a parser with line-at-a-time lookahead.""" + self.linebuf.append(line) diff --git a/distutils/distutils/unixccompiler.py b/distutils/distutils/unixccompiler.py new file mode 100644 index 0000000..3f321c2 --- /dev/null +++ b/distutils/distutils/unixccompiler.py @@ -0,0 +1,322 @@ +"""distutils.unixccompiler + +Contains the UnixCCompiler class, a subclass of CCompiler that handles +the "typical" Unix-style command-line C compiler: + * macros defined with -Dname[=value] + * macros undefined with -Uname + * include search directories specified with -Idir + * libraries specified with -lllib + * library search directories specified with -Ldir + * compile handled by 'cc' (or similar) executable with -c option: + compiles .c to .o + * link static library handled by 'ar' command (possibly with 'ranlib') + * link shared library handled by 'cc -shared' +""" + +import os, sys, re + +from distutils import sysconfig +from distutils.dep_util import newer +from distutils.ccompiler import \ + CCompiler, gen_preprocess_options, gen_lib_options +from distutils.errors import \ + DistutilsExecError, CompileError, LibError, LinkError +from distutils import log + +if sys.platform == 'darwin': + import _osx_support + +# XXX Things not currently handled: +# * optimization/debug/warning flags; we just use whatever's in Python's +# Makefile and live with it. Is this adequate? If not, we might +# have to have a bunch of subclasses GNUCCompiler, SGICCompiler, +# SunCCompiler, and I suspect down that road lies madness. +# * even if we don't know a warning flag from an optimization flag, +# we need some way for outsiders to feed preprocessor/compiler/linker +# flags in to us -- eg. a sysadmin might want to mandate certain flags +# via a site config file, or a user might want to set something for +# compiling this module distribution only via the setup.py command +# line, whatever. As long as these options come from something on the +# current system, they can be as system-dependent as they like, and we +# should just happily stuff them into the preprocessor/compiler/linker +# options and carry on. + + +class UnixCCompiler(CCompiler): + + compiler_type = 'unix' + + # These are used by CCompiler in two places: the constructor sets + # instance attributes 'preprocessor', 'compiler', etc. from them, and + # 'set_executable()' allows any of these to be set. The defaults here + # are pretty generic; they will probably have to be set by an outsider + # (eg. using information discovered by the sysconfig about building + # Python extensions). + executables = {'preprocessor' : None, + 'compiler' : ["cc"], + 'compiler_so' : ["cc"], + 'compiler_cxx' : ["cc"], + 'linker_so' : ["cc", "-shared"], + 'linker_exe' : ["cc"], + 'archiver' : ["ar", "-cr"], + 'ranlib' : None, + } + + if sys.platform[:6] == "darwin": + executables['ranlib'] = ["ranlib"] + + # Needed for the filename generation methods provided by the base + # class, CCompiler. NB. whoever instantiates/uses a particular + # UnixCCompiler instance should set 'shared_lib_ext' -- we set a + # reasonable common default here, but it's not necessarily used on all + # Unices! + + src_extensions = [".c",".C",".cc",".cxx",".cpp",".m"] + obj_extension = ".o" + static_lib_extension = ".a" + shared_lib_extension = ".so" + dylib_lib_extension = ".dylib" + xcode_stub_lib_extension = ".tbd" + static_lib_format = shared_lib_format = dylib_lib_format = "lib%s%s" + xcode_stub_lib_format = dylib_lib_format + if sys.platform == "cygwin": + exe_extension = ".exe" + + def preprocess(self, source, output_file=None, macros=None, + include_dirs=None, extra_preargs=None, extra_postargs=None): + fixed_args = self._fix_compile_args(None, macros, include_dirs) + ignore, macros, include_dirs = fixed_args + pp_opts = gen_preprocess_options(macros, include_dirs) + pp_args = self.preprocessor + pp_opts + if output_file: + pp_args.extend(['-o', output_file]) + if extra_preargs: + pp_args[:0] = extra_preargs + if extra_postargs: + pp_args.extend(extra_postargs) + pp_args.append(source) + + # We need to preprocess: either we're being forced to, or we're + # generating output to stdout, or there's a target output file and + # the source file is newer than the target (or the target doesn't + # exist). + if self.force or output_file is None or newer(source, output_file): + if output_file: + self.mkpath(os.path.dirname(output_file)) + try: + self.spawn(pp_args) + except DistutilsExecError as msg: + raise CompileError(msg) + + def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts): + compiler_so = self.compiler_so + if sys.platform == 'darwin': + compiler_so = _osx_support.compiler_fixup(compiler_so, + cc_args + extra_postargs) + try: + self.spawn(compiler_so + cc_args + [src, '-o', obj] + + extra_postargs) + except DistutilsExecError as msg: + raise CompileError(msg) + + def create_static_lib(self, objects, output_libname, + output_dir=None, debug=0, target_lang=None): + objects, output_dir = self._fix_object_args(objects, output_dir) + + output_filename = \ + self.library_filename(output_libname, output_dir=output_dir) + + if self._need_link(objects, output_filename): + self.mkpath(os.path.dirname(output_filename)) + self.spawn(self.archiver + + [output_filename] + + objects + self.objects) + + # Not many Unices required ranlib anymore -- SunOS 4.x is, I + # think the only major Unix that does. Maybe we need some + # platform intelligence here to skip ranlib if it's not + # needed -- or maybe Python's configure script took care of + # it for us, hence the check for leading colon. + if self.ranlib: + try: + self.spawn(self.ranlib + [output_filename]) + except DistutilsExecError as msg: + raise LibError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + def link(self, target_desc, objects, + output_filename, output_dir=None, libraries=None, + library_dirs=None, runtime_library_dirs=None, + export_symbols=None, debug=0, extra_preargs=None, + extra_postargs=None, build_temp=None, target_lang=None): + objects, output_dir = self._fix_object_args(objects, output_dir) + fixed_args = self._fix_lib_args(libraries, library_dirs, + runtime_library_dirs) + libraries, library_dirs, runtime_library_dirs = fixed_args + + lib_opts = gen_lib_options(self, library_dirs, runtime_library_dirs, + libraries) + if not isinstance(output_dir, (str, type(None))): + raise TypeError("'output_dir' must be a string or None") + if output_dir is not None: + output_filename = os.path.join(output_dir, output_filename) + + if self._need_link(objects, output_filename): + ld_args = (objects + self.objects + + lib_opts + ['-o', output_filename]) + if debug: + ld_args[:0] = ['-g'] + if extra_preargs: + ld_args[:0] = extra_preargs + if extra_postargs: + ld_args.extend(extra_postargs) + self.mkpath(os.path.dirname(output_filename)) + try: + if target_desc == CCompiler.EXECUTABLE: + linker = self.linker_exe[:] + else: + linker = self.linker_so[:] + if target_lang == "c++" and self.compiler_cxx: + # skip over environment variable settings if /usr/bin/env + # is used to set up the linker's environment. + # This is needed on OSX. Note: this assumes that the + # normal and C++ compiler have the same environment + # settings. + i = 0 + if os.path.basename(linker[0]) == "env": + i = 1 + while '=' in linker[i]: + i += 1 + linker[i] = self.compiler_cxx[i] + + if sys.platform == 'darwin': + linker = _osx_support.compiler_fixup(linker, ld_args) + + self.spawn(linker + ld_args) + except DistutilsExecError as msg: + raise LinkError(msg) + else: + log.debug("skipping %s (up-to-date)", output_filename) + + # -- Miscellaneous methods ----------------------------------------- + # These are all used by the 'gen_lib_options() function, in + # ccompiler.py. + + def library_dir_option(self, dir): + return "-L" + dir + + def _is_gcc(self, compiler_name): + return "gcc" in compiler_name or "g++" in compiler_name + + def runtime_library_dir_option(self, dir): + # XXX Hackish, at the very least. See Python bug #445902: + # http://sourceforge.net/tracker/index.php + # ?func=detail&aid=445902&group_id=5470&atid=105470 + # Linkers on different platforms need different options to + # specify that directories need to be added to the list of + # directories searched for dependencies when a dynamic library + # is sought. GCC on GNU systems (Linux, FreeBSD, ...) has to + # be told to pass the -R option through to the linker, whereas + # other compilers and gcc on other systems just know this. + # Other compilers may need something slightly different. At + # this time, there's no way to determine this information from + # the configuration data stored in the Python installation, so + # we use this hack. + compiler = os.path.basename(sysconfig.get_config_var("CC")) + if sys.platform[:6] == "darwin": + # MacOSX's linker doesn't understand the -R flag at all + return "-L" + dir + elif sys.platform[:7] == "freebsd": + return "-Wl,-rpath=" + dir + elif sys.platform[:5] == "hp-ux": + if self._is_gcc(compiler): + return ["-Wl,+s", "-L" + dir] + return ["+s", "-L" + dir] + elif sys.platform[:7] == "irix646" or sys.platform[:6] == "osf1V5": + return ["-rpath", dir] + else: + if self._is_gcc(compiler): + # gcc on non-GNU systems does not need -Wl, but can + # use it anyway. Since distutils has always passed in + # -Wl whenever gcc was used in the past it is probably + # safest to keep doing so. + if sysconfig.get_config_var("GNULD") == "yes": + # GNU ld needs an extra option to get a RUNPATH + # instead of just an RPATH. + return "-Wl,--enable-new-dtags,-R" + dir + else: + return "-Wl,-R" + dir + else: + # No idea how --enable-new-dtags would be passed on to + # ld if this system was using GNU ld. Don't know if a + # system like this even exists. + return "-R" + dir + + def library_option(self, lib): + return "-l" + lib + + def find_library_file(self, dirs, lib, debug=0): + shared_f = self.library_filename(lib, lib_type='shared') + dylib_f = self.library_filename(lib, lib_type='dylib') + xcode_stub_f = self.library_filename(lib, lib_type='xcode_stub') + static_f = self.library_filename(lib, lib_type='static') + + if sys.platform == 'darwin': + # On OSX users can specify an alternate SDK using + # '-isysroot', calculate the SDK root if it is specified + # (and use it further on) + # + # Note that, as of Xcode 7, Apple SDKs may contain textual stub + # libraries with .tbd extensions rather than the normal .dylib + # shared libraries installed in /. The Apple compiler tool + # chain handles this transparently but it can cause problems + # for programs that are being built with an SDK and searching + # for specific libraries. Callers of find_library_file need to + # keep in mind that the base filename of the returned SDK library + # file might have a different extension from that of the library + # file installed on the running system, for example: + # /Applications/Xcode.app/Contents/Developer/Platforms/ + # MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/ + # usr/lib/libedit.tbd + # vs + # /usr/lib/libedit.dylib + cflags = sysconfig.get_config_var('CFLAGS') + m = re.search(r'-isysroot\s+(\S+)', cflags) + if m is None: + sysroot = '/' + else: + sysroot = m.group(1) + + + + for dir in dirs: + shared = os.path.join(dir, shared_f) + dylib = os.path.join(dir, dylib_f) + static = os.path.join(dir, static_f) + xcode_stub = os.path.join(dir, xcode_stub_f) + + if sys.platform == 'darwin' and ( + dir.startswith('/System/') or ( + dir.startswith('/usr/') and not dir.startswith('/usr/local/'))): + + shared = os.path.join(sysroot, dir[1:], shared_f) + dylib = os.path.join(sysroot, dir[1:], dylib_f) + static = os.path.join(sysroot, dir[1:], static_f) + xcode_stub = os.path.join(sysroot, dir[1:], xcode_stub_f) + + # We're second-guessing the linker here, with not much hard + # data to go on: GCC seems to prefer the shared library, so I'm + # assuming that *all* Unix C compilers do. And of course I'm + # ignoring even GCC's "-static" option. So sue me. + if os.path.exists(dylib): + return dylib + elif os.path.exists(xcode_stub): + return xcode_stub + elif os.path.exists(shared): + return shared + elif os.path.exists(static): + return static + + # Oops, didn't find it in *any* of 'dirs' + return None diff --git a/distutils/distutils/util.py b/distutils/distutils/util.py new file mode 100644 index 0000000..fdcf6fa --- /dev/null +++ b/distutils/distutils/util.py @@ -0,0 +1,557 @@ +"""distutils.util + +Miscellaneous utility functions -- anything that doesn't fit into +one of the other *util.py modules. +""" + +import os +import re +import importlib.util +import string +import sys +from distutils.errors import DistutilsPlatformError +from distutils.dep_util import newer +from distutils.spawn import spawn +from distutils import log +from distutils.errors import DistutilsByteCompileError + +def get_platform (): + """Return a string that identifies the current platform. This is used + mainly to distinguish platform-specific build directories and + platform-specific built distributions. Typically includes the OS name + and version and the architecture (as supplied by 'os.uname()'), + although the exact information included depends on the OS; eg. for IRIX + the architecture isn't particularly important (IRIX only runs on SGI + hardware), but for Linux the kernel version isn't particularly + important. + + Examples of returned values: + linux-i586 + linux-alpha (?) + solaris-2.6-sun4u + irix-5.3 + irix64-6.2 + + Windows will return one of: + win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) + win-ia64 (64bit Windows on Itanium) + win32 (all others - specifically, sys.platform is returned) + + For other non-POSIX platforms, currently just returns 'sys.platform'. + """ + if os.name == 'nt': + # sniff sys.version for architecture. + prefix = " bit (" + i = sys.version.find(prefix) + if i == -1: + return sys.platform + j = sys.version.find(")", i) + look = sys.version[i+len(prefix):j].lower() + if look == 'amd64': + return 'win-amd64' + if look == 'itanium': + return 'win-ia64' + return sys.platform + + # Set for cross builds explicitly + if "_PYTHON_HOST_PLATFORM" in os.environ: + return os.environ["_PYTHON_HOST_PLATFORM"] + + if os.name != "posix" or not hasattr(os, 'uname'): + # XXX what about the architecture? NT is Intel or Alpha, + # Mac OS is M68k or PPC, etc. + return sys.platform + + # Try to distinguish various flavours of Unix + + (osname, host, release, version, machine) = os.uname() + + # Convert the OS name to lowercase, remove '/' characters + # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") + osname = osname.lower().replace('/', '') + machine = machine.replace(' ', '_') + machine = machine.replace('/', '-') + + if osname[:5] == "linux": + # At least on Linux/Intel, 'machine' is the processor -- + # i386, etc. + # XXX what about Alpha, SPARC, etc? + return "%s-%s" % (osname, machine) + elif osname[:5] == "sunos": + if release[0] >= "5": # SunOS 5 == Solaris 2 + osname = "solaris" + release = "%d.%s" % (int(release[0]) - 3, release[2:]) + # We can't use "platform.architecture()[0]" because a + # bootstrap problem. We use a dict to get an error + # if some suspicious happens. + bitness = {2147483647:"32bit", 9223372036854775807:"64bit"} + machine += ".%s" % bitness[sys.maxsize] + # fall through to standard osname-release-machine representation + elif osname[:4] == "irix": # could be "irix64"! + return "%s-%s" % (osname, release) + elif osname[:3] == "aix": + return "%s-%s.%s" % (osname, version, release) + elif osname[:6] == "cygwin": + osname = "cygwin" + rel_re = re.compile (r'[\d.]+', re.ASCII) + m = rel_re.match(release) + if m: + release = m.group() + elif osname[:6] == "darwin": + import _osx_support, distutils.sysconfig + osname, release, machine = _osx_support.get_platform_osx( + distutils.sysconfig.get_config_vars(), + osname, release, machine) + + return "%s-%s-%s" % (osname, release, machine) + +# get_platform () + + +def convert_path (pathname): + """Return 'pathname' as a name that will work on the native filesystem, + i.e. split it on '/' and put it back together again using the current + directory separator. Needed because filenames in the setup script are + always supplied in Unix style, and have to be converted to the local + convention before we can actually use them in the filesystem. Raises + ValueError on non-Unix-ish systems if 'pathname' either starts or + ends with a slash. + """ + if os.sep == '/': + return pathname + if not pathname: + return pathname + if pathname[0] == '/': + raise ValueError("path '%s' cannot be absolute" % pathname) + if pathname[-1] == '/': + raise ValueError("path '%s' cannot end with '/'" % pathname) + + paths = pathname.split('/') + while '.' in paths: + paths.remove('.') + if not paths: + return os.curdir + return os.path.join(*paths) + +# convert_path () + + +def change_root (new_root, pathname): + """Return 'pathname' with 'new_root' prepended. If 'pathname' is + relative, this is equivalent to "os.path.join(new_root,pathname)". + Otherwise, it requires making 'pathname' relative and then joining the + two, which is tricky on DOS/Windows and Mac OS. + """ + if os.name == 'posix': + if not os.path.isabs(pathname): + return os.path.join(new_root, pathname) + else: + return os.path.join(new_root, pathname[1:]) + + elif os.name == 'nt': + (drive, path) = os.path.splitdrive(pathname) + if path[0] == '\\': + path = path[1:] + return os.path.join(new_root, path) + + else: + raise DistutilsPlatformError("nothing known about platform '%s'" % os.name) + + +_environ_checked = 0 +def check_environ (): + """Ensure that 'os.environ' has all the environment variables we + guarantee that users can use in config files, command-line options, + etc. Currently this includes: + HOME - user's home directory (Unix only) + PLAT - description of the current platform, including hardware + and OS (see 'get_platform()') + """ + global _environ_checked + if _environ_checked: + return + + if os.name == 'posix' and 'HOME' not in os.environ: + import pwd + os.environ['HOME'] = pwd.getpwuid(os.getuid())[5] + + if 'PLAT' not in os.environ: + os.environ['PLAT'] = get_platform() + + _environ_checked = 1 + + +def subst_vars (s, local_vars): + """Perform shell/Perl-style variable substitution on 'string'. Every + occurrence of '$' followed by a name is considered a variable, and + variable is substituted by the value found in the 'local_vars' + dictionary, or in 'os.environ' if it's not in 'local_vars'. + 'os.environ' is first checked/augmented to guarantee that it contains + certain values: see 'check_environ()'. Raise ValueError for any + variables not found in either 'local_vars' or 'os.environ'. + """ + check_environ() + def _subst (match, local_vars=local_vars): + var_name = match.group(1) + if var_name in local_vars: + return str(local_vars[var_name]) + else: + return os.environ[var_name] + + try: + return re.sub(r'\$([a-zA-Z_][a-zA-Z_0-9]*)', _subst, s) + except KeyError as var: + raise ValueError("invalid variable '$%s'" % var) + +# subst_vars () + + +def grok_environment_error (exc, prefix="error: "): + # Function kept for backward compatibility. + # Used to try clever things with EnvironmentErrors, + # but nowadays str(exception) produces good messages. + return prefix + str(exc) + + +# Needed by 'split_quoted()' +_wordchars_re = _squote_re = _dquote_re = None +def _init_regex(): + global _wordchars_re, _squote_re, _dquote_re + _wordchars_re = re.compile(r'[^\\\'\"%s ]*' % string.whitespace) + _squote_re = re.compile(r"'(?:[^'\\]|\\.)*'") + _dquote_re = re.compile(r'"(?:[^"\\]|\\.)*"') + +def split_quoted (s): + """Split a string up according to Unix shell-like rules for quotes and + backslashes. In short: words are delimited by spaces, as long as those + spaces are not escaped by a backslash, or inside a quoted string. + Single and double quotes are equivalent, and the quote characters can + be backslash-escaped. The backslash is stripped from any two-character + escape sequence, leaving only the escaped character. The quote + characters are stripped from any quoted string. Returns a list of + words. + """ + + # This is a nice algorithm for splitting up a single string, since it + # doesn't require character-by-character examination. It was a little + # bit of a brain-bender to get it working right, though... + if _wordchars_re is None: _init_regex() + + s = s.strip() + words = [] + pos = 0 + + while s: + m = _wordchars_re.match(s, pos) + end = m.end() + if end == len(s): + words.append(s[:end]) + break + + if s[end] in string.whitespace: # unescaped, unquoted whitespace: now + words.append(s[:end]) # we definitely have a word delimiter + s = s[end:].lstrip() + pos = 0 + + elif s[end] == '\\': # preserve whatever is being escaped; + # will become part of the current word + s = s[:end] + s[end+1:] + pos = end+1 + + else: + if s[end] == "'": # slurp singly-quoted string + m = _squote_re.match(s, end) + elif s[end] == '"': # slurp doubly-quoted string + m = _dquote_re.match(s, end) + else: + raise RuntimeError("this can't happen (bad char '%c')" % s[end]) + + if m is None: + raise ValueError("bad string (mismatched %s quotes?)" % s[end]) + + (beg, end) = m.span() + s = s[:beg] + s[beg+1:end-1] + s[end:] + pos = m.end() - 2 + + if pos >= len(s): + words.append(s) + break + + return words + +# split_quoted () + + +def execute (func, args, msg=None, verbose=0, dry_run=0): + """Perform some action that affects the outside world (eg. by + writing to the filesystem). Such actions are special because they + are disabled by the 'dry_run' flag. This method takes care of all + that bureaucracy for you; all you have to do is supply the + function to call and an argument tuple for it (to embody the + "external action" being performed), and an optional message to + print. + """ + if msg is None: + msg = "%s%r" % (func.__name__, args) + if msg[-2:] == ',)': # correct for singleton tuple + msg = msg[0:-2] + ')' + + log.info(msg) + if not dry_run: + func(*args) + + +def strtobool (val): + """Convert a string representation of truth to true (1) or false (0). + + True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values + are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if + 'val' is anything else. + """ + val = val.lower() + if val in ('y', 'yes', 't', 'true', 'on', '1'): + return 1 + elif val in ('n', 'no', 'f', 'false', 'off', '0'): + return 0 + else: + raise ValueError("invalid truth value %r" % (val,)) + + +def byte_compile (py_files, + optimize=0, force=0, + prefix=None, base_dir=None, + verbose=1, dry_run=0, + direct=None): + """Byte-compile a collection of Python source files to .pyc + files in a __pycache__ subdirectory. 'py_files' is a list + of files to compile; any files that don't end in ".py" are silently + skipped. 'optimize' must be one of the following: + 0 - don't optimize + 1 - normal optimization (like "python -O") + 2 - extra optimization (like "python -OO") + If 'force' is true, all files are recompiled regardless of + timestamps. + + The source filename encoded in each bytecode file defaults to the + filenames listed in 'py_files'; you can modify these with 'prefix' and + 'basedir'. 'prefix' is a string that will be stripped off of each + source filename, and 'base_dir' is a directory name that will be + prepended (after 'prefix' is stripped). You can supply either or both + (or neither) of 'prefix' and 'base_dir', as you wish. + + If 'dry_run' is true, doesn't actually do anything that would + affect the filesystem. + + Byte-compilation is either done directly in this interpreter process + with the standard py_compile module, or indirectly by writing a + temporary script and executing it. Normally, you should let + 'byte_compile()' figure out to use direct compilation or not (see + the source for details). The 'direct' flag is used by the script + generated in indirect mode; unless you know what you're doing, leave + it set to None. + """ + + # Late import to fix a bootstrap issue: _posixsubprocess is built by + # setup.py, but setup.py uses distutils. + import subprocess + + # nothing is done if sys.dont_write_bytecode is True + if sys.dont_write_bytecode: + raise DistutilsByteCompileError('byte-compiling is disabled.') + + # First, if the caller didn't force us into direct or indirect mode, + # figure out which mode we should be in. We take a conservative + # approach: choose direct mode *only* if the current interpreter is + # in debug mode and optimize is 0. If we're not in debug mode (-O + # or -OO), we don't know which level of optimization this + # interpreter is running with, so we can't do direct + # byte-compilation and be certain that it's the right thing. Thus, + # always compile indirectly if the current interpreter is in either + # optimize mode, or if either optimization level was requested by + # the caller. + if direct is None: + direct = (__debug__ and optimize == 0) + + # "Indirect" byte-compilation: write a temporary script and then + # run it with the appropriate flags. + if not direct: + try: + from tempfile import mkstemp + (script_fd, script_name) = mkstemp(".py") + except ImportError: + from tempfile import mktemp + (script_fd, script_name) = None, mktemp(".py") + log.info("writing byte-compilation script '%s'", script_name) + if not dry_run: + if script_fd is not None: + script = os.fdopen(script_fd, "w") + else: + script = open(script_name, "w") + + script.write("""\ +from distutils.util import byte_compile +files = [ +""") + + # XXX would be nice to write absolute filenames, just for + # safety's sake (script should be more robust in the face of + # chdir'ing before running it). But this requires abspath'ing + # 'prefix' as well, and that breaks the hack in build_lib's + # 'byte_compile()' method that carefully tacks on a trailing + # slash (os.sep really) to make sure the prefix here is "just + # right". This whole prefix business is rather delicate -- the + # problem is that it's really a directory, but I'm treating it + # as a dumb string, so trailing slashes and so forth matter. + + #py_files = map(os.path.abspath, py_files) + #if prefix: + # prefix = os.path.abspath(prefix) + + script.write(",\n".join(map(repr, py_files)) + "]\n") + script.write(""" +byte_compile(files, optimize=%r, force=%r, + prefix=%r, base_dir=%r, + verbose=%r, dry_run=0, + direct=1) +""" % (optimize, force, prefix, base_dir, verbose)) + + script.close() + + cmd = [sys.executable] + cmd.extend(subprocess._optim_args_from_interpreter_flags()) + cmd.append(script_name) + spawn(cmd, dry_run=dry_run) + execute(os.remove, (script_name,), "removing %s" % script_name, + dry_run=dry_run) + + # "Direct" byte-compilation: use the py_compile module to compile + # right here, right now. Note that the script generated in indirect + # mode simply calls 'byte_compile()' in direct mode, a weird sort of + # cross-process recursion. Hey, it works! + else: + from py_compile import compile + + for file in py_files: + if file[-3:] != ".py": + # This lets us be lazy and not filter filenames in + # the "install_lib" command. + continue + + # Terminology from the py_compile module: + # cfile - byte-compiled file + # dfile - purported source filename (same as 'file' by default) + if optimize >= 0: + opt = '' if optimize == 0 else optimize + cfile = importlib.util.cache_from_source( + file, optimization=opt) + else: + cfile = importlib.util.cache_from_source(file) + dfile = file + if prefix: + if file[:len(prefix)] != prefix: + raise ValueError("invalid prefix: filename %r doesn't start with %r" + % (file, prefix)) + dfile = dfile[len(prefix):] + if base_dir: + dfile = os.path.join(base_dir, dfile) + + cfile_base = os.path.basename(cfile) + if direct: + if force or newer(file, cfile): + log.info("byte-compiling %s to %s", file, cfile_base) + if not dry_run: + compile(file, cfile, dfile) + else: + log.debug("skipping byte-compilation of %s to %s", + file, cfile_base) + +# byte_compile () + +def rfc822_escape (header): + """Return a version of the string escaped for inclusion in an + RFC-822 header, by ensuring there are 8 spaces space after each newline. + """ + lines = header.split('\n') + sep = '\n' + 8 * ' ' + return sep.join(lines) + +# 2to3 support + +def run_2to3(files, fixer_names=None, options=None, explicit=None): + """Invoke 2to3 on a list of Python files. + The files should all come from the build area, as the + modification is done in-place. To reduce the build time, + only files modified since the last invocation of this + function should be passed in the files argument.""" + + if not files: + return + + # Make this class local, to delay import of 2to3 + from lib2to3.refactor import RefactoringTool, get_fixers_from_package + class DistutilsRefactoringTool(RefactoringTool): + def log_error(self, msg, *args, **kw): + log.error(msg, *args) + + def log_message(self, msg, *args): + log.info(msg, *args) + + def log_debug(self, msg, *args): + log.debug(msg, *args) + + if fixer_names is None: + fixer_names = get_fixers_from_package('lib2to3.fixes') + r = DistutilsRefactoringTool(fixer_names, options=options) + r.refactor(files, write=True) + +def copydir_run_2to3(src, dest, template=None, fixer_names=None, + options=None, explicit=None): + """Recursively copy a directory, only copying new and changed files, + running run_2to3 over all newly copied Python modules afterward. + + If you give a template string, it's parsed like a MANIFEST.in. + """ + from distutils.dir_util import mkpath + from distutils.file_util import copy_file + from distutils.filelist import FileList + filelist = FileList() + curdir = os.getcwd() + os.chdir(src) + try: + filelist.findall() + finally: + os.chdir(curdir) + filelist.files[:] = filelist.allfiles + if template: + for line in template.splitlines(): + line = line.strip() + if not line: continue + filelist.process_template_line(line) + copied = [] + for filename in filelist.files: + outname = os.path.join(dest, filename) + mkpath(os.path.dirname(outname)) + res = copy_file(os.path.join(src, filename), outname, update=1) + if res[1]: copied.append(outname) + run_2to3([fn for fn in copied if fn.lower().endswith('.py')], + fixer_names=fixer_names, options=options, explicit=explicit) + return copied + +class Mixin2to3: + '''Mixin class for commands that run 2to3. + To configure 2to3, setup scripts may either change + the class variables, or inherit from individual commands + to override how 2to3 is invoked.''' + + # provide list of fixers to run; + # defaults to all from lib2to3.fixers + fixer_names = None + + # options dictionary + options = None + + # list of fixers to invoke even though they are marked as explicit + explicit = None + + def run_2to3(self, files): + return run_2to3(files, self.fixer_names, self.options, self.explicit) diff --git a/distutils/distutils/version.py b/distutils/distutils/version.py new file mode 100644 index 0000000..af14cc1 --- /dev/null +++ b/distutils/distutils/version.py @@ -0,0 +1,343 @@ +# +# distutils/version.py +# +# Implements multiple version numbering conventions for the +# Python Module Distribution Utilities. +# +# $Id$ +# + +"""Provides classes to represent module version numbers (one class for +each style of version numbering). There are currently two such classes +implemented: StrictVersion and LooseVersion. + +Every version number class implements the following interface: + * the 'parse' method takes a string and parses it to some internal + representation; if the string is an invalid version number, + 'parse' raises a ValueError exception + * the class constructor takes an optional string argument which, + if supplied, is passed to 'parse' + * __str__ reconstructs the string that was passed to 'parse' (or + an equivalent string -- ie. one that will generate an equivalent + version number instance) + * __repr__ generates Python code to recreate the version number instance + * _cmp compares the current instance with either another instance + of the same class or a string (which will be parsed to an instance + of the same class, thus must follow the same rules) +""" + +import re + +class Version: + """Abstract base class for version numbering classes. Just provides + constructor (__init__) and reproducer (__repr__), because those + seem to be the same for all version numbering classes; and route + rich comparisons to _cmp. + """ + + def __init__ (self, vstring=None): + if vstring: + self.parse(vstring) + + def __repr__ (self): + return "%s ('%s')" % (self.__class__.__name__, str(self)) + + def __eq__(self, other): + c = self._cmp(other) + if c is NotImplemented: + return c + return c == 0 + + def __lt__(self, other): + c = self._cmp(other) + if c is NotImplemented: + return c + return c < 0 + + def __le__(self, other): + c = self._cmp(other) + if c is NotImplemented: + return c + return c <= 0 + + def __gt__(self, other): + c = self._cmp(other) + if c is NotImplemented: + return c + return c > 0 + + def __ge__(self, other): + c = self._cmp(other) + if c is NotImplemented: + return c + return c >= 0 + + +# Interface for version-number classes -- must be implemented +# by the following classes (the concrete ones -- Version should +# be treated as an abstract class). +# __init__ (string) - create and take same action as 'parse' +# (string parameter is optional) +# parse (string) - convert a string representation to whatever +# internal representation is appropriate for +# this style of version numbering +# __str__ (self) - convert back to a string; should be very similar +# (if not identical to) the string supplied to parse +# __repr__ (self) - generate Python code to recreate +# the instance +# _cmp (self, other) - compare two version numbers ('other' may +# be an unparsed version string, or another +# instance of your version class) + + +class StrictVersion (Version): + + """Version numbering for anal retentives and software idealists. + Implements the standard interface for version number classes as + described above. A version number consists of two or three + dot-separated numeric components, with an optional "pre-release" tag + on the end. The pre-release tag consists of the letter 'a' or 'b' + followed by a number. If the numeric components of two version + numbers are equal, then one with a pre-release tag will always + be deemed earlier (lesser) than one without. + + The following are valid version numbers (shown in the order that + would be obtained by sorting according to the supplied cmp function): + + 0.4 0.4.0 (these two are equivalent) + 0.4.1 + 0.5a1 + 0.5b3 + 0.5 + 0.9.6 + 1.0 + 1.0.4a3 + 1.0.4b1 + 1.0.4 + + The following are examples of invalid version numbers: + + 1 + 2.7.2.2 + 1.3.a4 + 1.3pl1 + 1.3c4 + + The rationale for this version numbering system will be explained + in the distutils documentation. + """ + + version_re = re.compile(r'^(\d+) \. (\d+) (\. (\d+))? ([ab](\d+))?$', + re.VERBOSE | re.ASCII) + + + def parse (self, vstring): + match = self.version_re.match(vstring) + if not match: + raise ValueError("invalid version number '%s'" % vstring) + + (major, minor, patch, prerelease, prerelease_num) = \ + match.group(1, 2, 4, 5, 6) + + if patch: + self.version = tuple(map(int, [major, minor, patch])) + else: + self.version = tuple(map(int, [major, minor])) + (0,) + + if prerelease: + self.prerelease = (prerelease[0], int(prerelease_num)) + else: + self.prerelease = None + + + def __str__ (self): + + if self.version[2] == 0: + vstring = '.'.join(map(str, self.version[0:2])) + else: + vstring = '.'.join(map(str, self.version)) + + if self.prerelease: + vstring = vstring + self.prerelease[0] + str(self.prerelease[1]) + + return vstring + + + def _cmp (self, other): + if isinstance(other, str): + other = StrictVersion(other) + + if self.version != other.version: + # numeric versions don't match + # prerelease stuff doesn't matter + if self.version < other.version: + return -1 + else: + return 1 + + # have to compare prerelease + # case 1: neither has prerelease; they're equal + # case 2: self has prerelease, other doesn't; other is greater + # case 3: self doesn't have prerelease, other does: self is greater + # case 4: both have prerelease: must compare them! + + if (not self.prerelease and not other.prerelease): + return 0 + elif (self.prerelease and not other.prerelease): + return -1 + elif (not self.prerelease and other.prerelease): + return 1 + elif (self.prerelease and other.prerelease): + if self.prerelease == other.prerelease: + return 0 + elif self.prerelease < other.prerelease: + return -1 + else: + return 1 + else: + assert False, "never get here" + +# end class StrictVersion + + +# The rules according to Greg Stein: +# 1) a version number has 1 or more numbers separated by a period or by +# sequences of letters. If only periods, then these are compared +# left-to-right to determine an ordering. +# 2) sequences of letters are part of the tuple for comparison and are +# compared lexicographically +# 3) recognize the numeric components may have leading zeroes +# +# The LooseVersion class below implements these rules: a version number +# string is split up into a tuple of integer and string components, and +# comparison is a simple tuple comparison. This means that version +# numbers behave in a predictable and obvious way, but a way that might +# not necessarily be how people *want* version numbers to behave. There +# wouldn't be a problem if people could stick to purely numeric version +# numbers: just split on period and compare the numbers as tuples. +# However, people insist on putting letters into their version numbers; +# the most common purpose seems to be: +# - indicating a "pre-release" version +# ('alpha', 'beta', 'a', 'b', 'pre', 'p') +# - indicating a post-release patch ('p', 'pl', 'patch') +# but of course this can't cover all version number schemes, and there's +# no way to know what a programmer means without asking him. +# +# The problem is what to do with letters (and other non-numeric +# characters) in a version number. The current implementation does the +# obvious and predictable thing: keep them as strings and compare +# lexically within a tuple comparison. This has the desired effect if +# an appended letter sequence implies something "post-release": +# eg. "0.99" < "0.99pl14" < "1.0", and "5.001" < "5.001m" < "5.002". +# +# However, if letters in a version number imply a pre-release version, +# the "obvious" thing isn't correct. Eg. you would expect that +# "1.5.1" < "1.5.2a2" < "1.5.2", but under the tuple/lexical comparison +# implemented here, this just isn't so. +# +# Two possible solutions come to mind. The first is to tie the +# comparison algorithm to a particular set of semantic rules, as has +# been done in the StrictVersion class above. This works great as long +# as everyone can go along with bondage and discipline. Hopefully a +# (large) subset of Python module programmers will agree that the +# particular flavour of bondage and discipline provided by StrictVersion +# provides enough benefit to be worth using, and will submit their +# version numbering scheme to its domination. The free-thinking +# anarchists in the lot will never give in, though, and something needs +# to be done to accommodate them. +# +# Perhaps a "moderately strict" version class could be implemented that +# lets almost anything slide (syntactically), and makes some heuristic +# assumptions about non-digits in version number strings. This could +# sink into special-case-hell, though; if I was as talented and +# idiosyncratic as Larry Wall, I'd go ahead and implement a class that +# somehow knows that "1.2.1" < "1.2.2a2" < "1.2.2" < "1.2.2pl3", and is +# just as happy dealing with things like "2g6" and "1.13++". I don't +# think I'm smart enough to do it right though. +# +# In any case, I've coded the test suite for this module (see +# ../test/test_version.py) specifically to fail on things like comparing +# "1.2a2" and "1.2". That's not because the *code* is doing anything +# wrong, it's because the simple, obvious design doesn't match my +# complicated, hairy expectations for real-world version numbers. It +# would be a snap to fix the test suite to say, "Yep, LooseVersion does +# the Right Thing" (ie. the code matches the conception). But I'd rather +# have a conception that matches common notions about version numbers. + +class LooseVersion (Version): + + """Version numbering for anarchists and software realists. + Implements the standard interface for version number classes as + described above. A version number consists of a series of numbers, + separated by either periods or strings of letters. When comparing + version numbers, the numeric components will be compared + numerically, and the alphabetic components lexically. The following + are all valid version numbers, in no particular order: + + 1.5.1 + 1.5.2b2 + 161 + 3.10a + 8.02 + 3.4j + 1996.07.12 + 3.2.pl0 + 3.1.1.6 + 2g6 + 11g + 0.960923 + 2.2beta29 + 1.13++ + 5.5.kw + 2.0b1pl0 + + In fact, there is no such thing as an invalid version number under + this scheme; the rules for comparison are simple and predictable, + but may not always give the results you want (for some definition + of "want"). + """ + + component_re = re.compile(r'(\d+ | [a-z]+ | \.)', re.VERBOSE) + + def __init__ (self, vstring=None): + if vstring: + self.parse(vstring) + + + def parse (self, vstring): + # I've given up on thinking I can reconstruct the version string + # from the parsed tuple -- so I just store the string here for + # use by __str__ + self.vstring = vstring + components = [x for x in self.component_re.split(vstring) + if x and x != '.'] + for i, obj in enumerate(components): + try: + components[i] = int(obj) + except ValueError: + pass + + self.version = components + + + def __str__ (self): + return self.vstring + + + def __repr__ (self): + return "LooseVersion ('%s')" % str(self) + + + def _cmp (self, other): + if isinstance(other, str): + other = LooseVersion(other) + + if self.version == other.version: + return 0 + if self.version < other.version: + return -1 + if self.version > other.version: + return 1 + + +# end class LooseVersion diff --git a/distutils/distutils/versionpredicate.py b/distutils/distutils/versionpredicate.py new file mode 100644 index 0000000..062c98f --- /dev/null +++ b/distutils/distutils/versionpredicate.py @@ -0,0 +1,166 @@ +"""Module for parsing and testing package version predicate strings. +""" +import re +import distutils.version +import operator + + +re_validPackage = re.compile(r"(?i)^\s*([a-z_]\w*(?:\.[a-z_]\w*)*)(.*)", + re.ASCII) +# (package) (rest) + +re_paren = re.compile(r"^\s*\((.*)\)\s*$") # (list) inside of parentheses +re_splitComparison = re.compile(r"^\s*(<=|>=|<|>|!=|==)\s*([^\s,]+)\s*$") +# (comp) (version) + + +def splitUp(pred): + """Parse a single version comparison. + + Return (comparison string, StrictVersion) + """ + res = re_splitComparison.match(pred) + if not res: + raise ValueError("bad package restriction syntax: %r" % pred) + comp, verStr = res.groups() + return (comp, distutils.version.StrictVersion(verStr)) + +compmap = {"<": operator.lt, "<=": operator.le, "==": operator.eq, + ">": operator.gt, ">=": operator.ge, "!=": operator.ne} + +class VersionPredicate: + """Parse and test package version predicates. + + >>> v = VersionPredicate('pyepat.abc (>1.0, <3333.3a1, !=1555.1b3)') + + The `name` attribute provides the full dotted name that is given:: + + >>> v.name + 'pyepat.abc' + + The str() of a `VersionPredicate` provides a normalized + human-readable version of the expression:: + + >>> print(v) + pyepat.abc (> 1.0, < 3333.3a1, != 1555.1b3) + + The `satisfied_by()` method can be used to determine with a given + version number is included in the set described by the version + restrictions:: + + >>> v.satisfied_by('1.1') + True + >>> v.satisfied_by('1.4') + True + >>> v.satisfied_by('1.0') + False + >>> v.satisfied_by('4444.4') + False + >>> v.satisfied_by('1555.1b3') + False + + `VersionPredicate` is flexible in accepting extra whitespace:: + + >>> v = VersionPredicate(' pat( == 0.1 ) ') + >>> v.name + 'pat' + >>> v.satisfied_by('0.1') + True + >>> v.satisfied_by('0.2') + False + + If any version numbers passed in do not conform to the + restrictions of `StrictVersion`, a `ValueError` is raised:: + + >>> v = VersionPredicate('p1.p2.p3.p4(>=1.0, <=1.3a1, !=1.2zb3)') + Traceback (most recent call last): + ... + ValueError: invalid version number '1.2zb3' + + It the module or package name given does not conform to what's + allowed as a legal module or package name, `ValueError` is + raised:: + + >>> v = VersionPredicate('foo-bar') + Traceback (most recent call last): + ... + ValueError: expected parenthesized list: '-bar' + + >>> v = VersionPredicate('foo bar (12.21)') + Traceback (most recent call last): + ... + ValueError: expected parenthesized list: 'bar (12.21)' + + """ + + def __init__(self, versionPredicateStr): + """Parse a version predicate string. + """ + # Fields: + # name: package name + # pred: list of (comparison string, StrictVersion) + + versionPredicateStr = versionPredicateStr.strip() + if not versionPredicateStr: + raise ValueError("empty package restriction") + match = re_validPackage.match(versionPredicateStr) + if not match: + raise ValueError("bad package name in %r" % versionPredicateStr) + self.name, paren = match.groups() + paren = paren.strip() + if paren: + match = re_paren.match(paren) + if not match: + raise ValueError("expected parenthesized list: %r" % paren) + str = match.groups()[0] + self.pred = [splitUp(aPred) for aPred in str.split(",")] + if not self.pred: + raise ValueError("empty parenthesized list in %r" + % versionPredicateStr) + else: + self.pred = [] + + def __str__(self): + if self.pred: + seq = [cond + " " + str(ver) for cond, ver in self.pred] + return self.name + " (" + ", ".join(seq) + ")" + else: + return self.name + + def satisfied_by(self, version): + """True if version is compatible with all the predicates in self. + The parameter version must be acceptable to the StrictVersion + constructor. It may be either a string or StrictVersion. + """ + for cond, ver in self.pred: + if not compmap[cond](version, ver): + return False + return True + + +_provision_rx = None + +def split_provision(value): + """Return the name and optional version number of a provision. + + The version number, if given, will be returned as a `StrictVersion` + instance, otherwise it will be `None`. + + >>> split_provision('mypkg') + ('mypkg', None) + >>> split_provision(' mypkg( 1.2 ) ') + ('mypkg', StrictVersion ('1.2')) + """ + global _provision_rx + if _provision_rx is None: + _provision_rx = re.compile( + r"([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)(?:\s*\(\s*([^)\s]+)\s*\))?$", + re.ASCII) + value = value.strip() + m = _provision_rx.match(value) + if not m: + raise ValueError("illegal provides specification: %r" % value) + ver = m.group(2) or None + if ver: + ver = distutils.version.StrictVersion(ver) + return m.group(1), ver diff --git a/scripts/update.py b/scripts/update.py index 8c3bb12..bcbc9a5 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -12,6 +12,7 @@ "cgitb", "chunk", "crypt", + "distutils", # removed in 3.10 "imghdr", "mailcap", # "msilib", # cmodule _msi From 908fd4b99056b4a5572174fa3624cee065f86eda Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 12 May 2024 11:27:19 +0900 Subject: [PATCH 09/47] distutils 3.7.17 --- distutils/Doc/distutils.rst | 44 +++++++ distutils/LICENSE | 48 +++++++ distutils/README.rst | 8 ++ distutils/distutils/_msvccompiler.py | 118 ++++++------------ distutils/distutils/ccompiler.py | 3 +- distutils/distutils/cmd.py | 31 ----- distutils/distutils/command/bdist_wininst.py | 3 + distutils/distutils/command/build.py | 2 +- distutils/distutils/command/build_ext.py | 34 +---- distutils/distutils/command/check.py | 3 +- distutils/distutils/command/sdist.py | 55 ++++++-- distutils/distutils/config.py | 1 - distutils/distutils/cygwinccompiler.py | 4 +- distutils/distutils/dist.py | 32 ++++- distutils/distutils/msvc9compiler.py | 6 +- distutils/distutils/msvccompiler.py | 2 +- distutils/distutils/spawn.py | 39 +++--- distutils/distutils/sysconfig.py | 40 ++++-- distutils/distutils/tests/__init__.py | 6 + distutils/distutils/tests/includetest.rst | 1 + .../distutils/tests/test_archive_util.py | 2 +- distutils/distutils/tests/test_build_ext.py | 30 ++--- distutils/distutils/tests/test_check.py | 16 ++- distutils/distutils/tests/test_dist.py | 74 ++++++++++- distutils/distutils/tests/test_file_util.py | 10 +- .../distutils/tests/test_msvccompiler.py | 51 -------- distutils/distutils/tests/test_spawn.py | 47 ++++++- distutils/distutils/tests/test_sysconfig.py | 94 ++++++++++++-- .../distutils/tests/test_unixccompiler.py | 8 -- distutils/distutils/tests/test_util.py | 41 +++--- distutils/distutils/unixccompiler.py | 14 ++- distutils/distutils/util.py | 44 +++---- distutils/pyproject.toml | 25 ++++ distutils/tests/test_distutils.py | 18 +++ 34 files changed, 630 insertions(+), 324 deletions(-) create mode 100644 distutils/Doc/distutils.rst create mode 100644 distutils/LICENSE create mode 100644 distutils/README.rst create mode 100644 distutils/distutils/tests/includetest.rst create mode 100644 distutils/pyproject.toml create mode 100644 distutils/tests/test_distutils.py diff --git a/distutils/Doc/distutils.rst b/distutils/Doc/distutils.rst new file mode 100644 index 0000000..62abc85 --- /dev/null +++ b/distutils/Doc/distutils.rst @@ -0,0 +1,44 @@ +:mod:`distutils` --- Building and installing Python modules +=========================================================== + +.. module:: distutils + :synopsis: Support for building and installing Python modules into an + existing Python installation. + +.. sectionauthor:: Fred L. Drake, Jr. + +-------------- + +The :mod:`distutils` package provides support for building and installing +additional modules into a Python installation. The new modules may be either +100%-pure Python, or may be extension modules written in C, or may be +collections of Python packages which include modules coded in both Python and C. + +Most Python users will *not* want to use this module directly, but instead +use the cross-version tools maintained by the Python Packaging Authority. In +particular, +`setuptools `__ is an +enhanced alternative to :mod:`distutils` that provides: + +* support for declaring project dependencies +* additional mechanisms for configuring which files to include in source + releases (including plugins for integration with version control systems) +* the ability to declare project "entry points", which can be used as the + basis for application plugin systems +* the ability to automatically generate Windows command line executables at + installation time rather than needing to prebuild them +* consistent behaviour across all supported Python versions + +The recommended `pip `__ installer runs all +``setup.py`` scripts with ``setuptools``, even if the script itself only +imports ``distutils``. Refer to the +`Python Packaging User Guide `_ for more +information. + +For the benefits of packaging tool authors and users seeking a deeper +understanding of the details of the current packaging and distribution +system, the legacy :mod:`distutils` based user documentation and API +reference remain available: + +* :ref:`install-index` +* :ref:`distutils-index` diff --git a/distutils/LICENSE b/distutils/LICENSE new file mode 100644 index 0000000..6a0baed --- /dev/null +++ b/distutils/LICENSE @@ -0,0 +1,48 @@ +Copyright © 2001-2023 Python Software Foundation; All Rights Reserved + +This code originally taken from the Python 3.11.3 distribution +and it is therefore now released under the following Python-style +license: + +1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and + the Individual or Organization ("Licensee") accessing and + otherwise using nntplib software in source or binary form and + its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby + grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, + analyze, test, perform and/or display publicly, prepare derivative works, + distribute, and otherwise use nntplib alone or in any derivative + version, provided, however, that PSF's License Agreement and PSF's notice of + copyright, i.e., "Copyright © 2001-2023 Python Software Foundation; All Rights + Reserved" are retained in nntplib alone or in any derivative version + prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on or + incorporates nntplib or any part thereof, and wants to make the + derivative work available to others as provided herein, then Licensee hereby + agrees to include in any such work a brief summary of the + changes made to nntplib. + +4. PSF is making nntplib available to Licensee on an "AS IS" basis. + PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF + EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR + WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE + USE OF NNTPLIB WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF NNTPLIB + FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF + MODIFYING, DISTRIBUTING, OR OTHERWISE USING NNTPLIB, OR ANY DERIVATIVE + THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material breach of + its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any relationship + of agency, partnership, or joint venture between PSF and Licensee. This License + Agreement does not grant permission to use PSF trademarks or trade name in a + trademark sense to endorse or promote products or services of Licensee, or any + third party. + +8. By copying, installing or otherwise using nntplib, Licensee agrees + to be bound by the terms and conditions of this License Agreement. diff --git a/distutils/README.rst b/distutils/README.rst new file mode 100644 index 0000000..911af1a --- /dev/null +++ b/distutils/README.rst @@ -0,0 +1,8 @@ +Dead battery redistribution +=========================== + +Python is moving forward! Python finally started to remove dead batteries. +For more information, see `PEP 594 `_. + +If your project depends on a module that has been removed from the standard, +here is the redistribution of the dead batteries. diff --git a/distutils/distutils/_msvccompiler.py b/distutils/distutils/_msvccompiler.py index 30b3b47..37ac478 100644 --- a/distutils/distutils/_msvccompiler.py +++ b/distutils/distutils/_msvccompiler.py @@ -56,58 +56,47 @@ def _find_vc2015(): return best_version, best_dir def _find_vc2017(): - import _distutils_findvs - import threading + """Returns "15, path" based on the result of invoking vswhere.exe + If no install is found, returns "None, None" - best_version = 0, # tuple for full version comparisons - best_dir = None + The version is returned to avoid unnecessarily changing the function + result. It may be ignored when the path is not None. + + If vswhere.exe is not available, by definition, VS 2017 is not + installed. + """ + import json + + root = os.environ.get("ProgramFiles(x86)") or os.environ.get("ProgramFiles") + if not root: + return None, None - # We need to call findall() on its own thread because it will - # initialize COM. - all_packages = [] - def _getall(): - all_packages.extend(_distutils_findvs.findall()) - t = threading.Thread(target=_getall) - t.start() - t.join() - - for name, version_str, path, packages in all_packages: - if 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64' in packages: - vc_dir = os.path.join(path, 'VC', 'Auxiliary', 'Build') - if not os.path.isdir(vc_dir): - continue - try: - version = tuple(int(i) for i in version_str.split('.')) - except (ValueError, TypeError): - continue - if version > best_version: - best_version, best_dir = version, vc_dir try: - best_version = best_version[0] - except IndexError: - best_version = None - return best_version, best_dir + path = subprocess.check_output([ + os.path.join(root, "Microsoft Visual Studio", "Installer", "vswhere.exe"), + "-latest", + "-prerelease", + "-requires", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "-property", "installationPath", + "-products", "*", + ], encoding="mbcs", errors="strict").strip() + except (subprocess.CalledProcessError, OSError, UnicodeDecodeError): + return None, None + + path = os.path.join(path, "VC", "Auxiliary", "Build") + if os.path.isdir(path): + return 15, path + + return None, None def _find_vcvarsall(plat_spec): - best_version, best_dir = _find_vc2017() - vcruntime = None - vcruntime_plat = 'x64' if 'amd64' in plat_spec else 'x86' - if best_version: - vcredist = os.path.join(best_dir, "..", "..", "redist", "MSVC", "**", - "Microsoft.VC141.CRT", "vcruntime140.dll") - try: - import glob - vcruntime = glob.glob(vcredist, recursive=True)[-1] - except (ImportError, OSError, LookupError): - vcruntime = None + # bpo-38597: Removed vcruntime return value + _, best_dir = _find_vc2017() - if not best_version: + if not best_dir: best_version, best_dir = _find_vc2015() - if best_version: - vcruntime = os.path.join(best_dir, 'redist', vcruntime_plat, - "Microsoft.VC140.CRT", "vcruntime140.dll") - if not best_version: + if not best_dir: log.debug("No suitable Visual C++ version found") return None, None @@ -116,11 +105,7 @@ def _find_vcvarsall(plat_spec): log.debug("%s cannot be found", vcvarsall) return None, None - if not vcruntime or not os.path.isfile(vcruntime): - log.debug("%s cannot be found", vcruntime) - vcruntime = None - - return vcvarsall, vcruntime + return vcvarsall, None def _get_vc_env(plat_spec): if os.getenv("DISTUTILS_USE_SDK"): @@ -129,7 +114,7 @@ def _get_vc_env(plat_spec): for key, value in os.environ.items() } - vcvarsall, vcruntime = _find_vcvarsall(plat_spec) + vcvarsall, _ = _find_vcvarsall(plat_spec) if not vcvarsall: raise DistutilsPlatformError("Unable to find vcvarsall.bat") @@ -150,8 +135,6 @@ def _get_vc_env(plat_spec): if key and value } - if vcruntime: - env['py_vcruntime_redist'] = vcruntime return env def _find_exe(exe, paths=None): @@ -179,12 +162,6 @@ def _find_exe(exe, paths=None): 'win-amd64' : 'x86_amd64', } -# A set containing the DLLs that are guaranteed to be available for -# all micro versions of this Python version. Known extension -# dependencies that are not in this set will be copied to the output -# path. -_BUNDLED_DLLS = frozenset(['vcruntime140.dll']) - class MSVCCompiler(CCompiler) : """Concrete class that implements an interface to Microsoft Visual C++, as defined by the CCompiler abstract class.""" @@ -248,7 +225,6 @@ def initialize(self, plat_name=None): self.rc = _find_exe("rc.exe", paths) # resource compiler self.mc = _find_exe("mc.exe", paths) # message compiler self.mt = _find_exe("mt.exe", paths) # message compiler - self._vcruntime_redist = vc_env.get('py_vcruntime_redist', '') for dir in vc_env.get('include', '').split(os.pathsep): if dir: @@ -259,13 +235,12 @@ def initialize(self, plat_name=None): self.add_library_dir(dir.rstrip(os.sep)) self.preprocess_options = None - # If vcruntime_redist is available, link against it dynamically. Otherwise, - # use /MT[d] to build statically, then switch from libucrt[d].lib to ucrt[d].lib - # later to dynamically link to ucrtbase but not vcruntime. + # bpo-38597: Always compile with dynamic linking + # Future releases of Python 3.x will include all past + # versions of vcruntime*.dll for compatibility. self.compile_options = [ - '/nologo', '/Ox', '/W3', '/GL', '/DNDEBUG' + '/nologo', '/Ox', '/W3', '/GL', '/DNDEBUG', '/MD' ] - self.compile_options.append('/MD' if self._vcruntime_redist else '/MT') self.compile_options_debug = [ '/nologo', '/Od', '/MDd', '/Zi', '/W3', '/D_DEBUG' @@ -274,8 +249,6 @@ def initialize(self, plat_name=None): ldflags = [ '/nologo', '/INCREMENTAL:NO', '/LTCG' ] - if not self._vcruntime_redist: - ldflags.extend(('/nodefaultlib:libucrt.lib', 'ucrt.lib')) ldflags_debug = [ '/nologo', '/INCREMENTAL:NO', '/LTCG', '/DEBUG:FULL' @@ -517,24 +490,11 @@ def link(self, try: log.debug('Executing "%s" %s', self.linker, ' '.join(ld_args)) self.spawn([self.linker] + ld_args) - self._copy_vcruntime(output_dir) except DistutilsExecError as msg: raise LinkError(msg) else: log.debug("skipping %s (up-to-date)", output_filename) - def _copy_vcruntime(self, output_dir): - vcruntime = self._vcruntime_redist - if not vcruntime or not os.path.isfile(vcruntime): - return - - if os.path.basename(vcruntime).lower() in _BUNDLED_DLLS: - return - - log.debug('Copying "%s"', vcruntime) - vcruntime = shutil.copy(vcruntime, output_dir) - os.chmod(vcruntime, stat.S_IWRITE) - def spawn(self, cmd): old_path = os.getenv('path') try: diff --git a/distutils/distutils/ccompiler.py b/distutils/distutils/ccompiler.py index b71d1d3..b70e5e4 100644 --- a/distutils/distutils/ccompiler.py +++ b/distutils/distutils/ccompiler.py @@ -781,8 +781,9 @@ def has_function(self, funcname, includes=None, include_dirs=None, for incl in includes: f.write("""#include "%s"\n""" % incl) f.write("""\ -main (int argc, char **argv) { +int main (int argc, char **argv) { %s(); + return 0; } """ % funcname) finally: diff --git a/distutils/distutils/cmd.py b/distutils/distutils/cmd.py index 939f795..dba3191 100644 --- a/distutils/distutils/cmd.py +++ b/distutils/distutils/cmd.py @@ -401,34 +401,3 @@ def make_file(self, infiles, outfile, func, args, # Otherwise, print the "skip" message else: log.debug(skip_msg) - -# XXX 'install_misc' class not currently used -- it was the base class for -# both 'install_scripts' and 'install_data', but they outgrew it. It might -# still be useful for 'install_headers', though, so I'm keeping it around -# for the time being. - -class install_misc(Command): - """Common base class for installing some files in a subdirectory. - Currently used by install_data and install_scripts. - """ - - user_options = [('install-dir=', 'd', "directory to install the files to")] - - def initialize_options (self): - self.install_dir = None - self.outfiles = [] - - def _install_dir_from(self, dirname): - self.set_undefined_options('install', (dirname, 'install_dir')) - - def _copy_files(self, filelist): - self.outfiles = [] - if not filelist: - return - self.mkpath(self.install_dir) - for f in filelist: - self.copy_file(f, self.install_dir) - self.outfiles.append(os.path.join(self.install_dir, f)) - - def get_outputs(self): - return self.outfiles diff --git a/distutils/distutils/command/bdist_wininst.py b/distutils/distutils/command/bdist_wininst.py index fde5675..15434c3 100644 --- a/distutils/distutils/command/bdist_wininst.py +++ b/distutils/distutils/command/bdist_wininst.py @@ -55,6 +55,9 @@ class bdist_wininst(Command): boolean_options = ['keep-temp', 'no-target-compile', 'no-target-optimize', 'skip-build'] + # bpo-10945: bdist_wininst requires mbcs encoding only available on Windows + _unsupported = (sys.platform != "win32") + def initialize_options(self): self.bdist_dir = None self.plat_name = None diff --git a/distutils/distutils/command/build.py b/distutils/distutils/command/build.py index c6f52e6..a86df0b 100644 --- a/distutils/distutils/command/build.py +++ b/distutils/distutils/command/build.py @@ -116,7 +116,7 @@ def finalize_options(self): self.build_scripts = os.path.join(self.build_base, 'scripts-%d.%d' % sys.version_info[:2]) - if self.executable is None: + if self.executable is None and sys.executable: self.executable = os.path.normpath(sys.executable) if isinstance(self.parallel, str): diff --git a/distutils/distutils/command/build_ext.py b/distutils/distutils/command/build_ext.py index 8ed4065..0428466 100644 --- a/distutils/distutils/command/build_ext.py +++ b/distutils/distutils/command/build_ext.py @@ -161,9 +161,10 @@ def finalize_options(self): # Put the Python "system" include dir at the end, so that # any local include dirs take precedence. - self.include_dirs.append(py_include) + self.include_dirs.extend(py_include.split(os.path.pathsep)) if plat_py_include != py_include: - self.include_dirs.append(plat_py_include) + self.include_dirs.extend( + plat_py_include.split(os.path.pathsep)) self.ensure_string_list('libraries') self.ensure_string_list('link_objects') @@ -208,16 +209,16 @@ def finalize_options(self): if self.plat_name == 'win32': suffix = 'win32' else: - # win-amd64 or win-ia64 + # win-amd64 suffix = self.plat_name[4:] new_lib = os.path.join(sys.exec_prefix, 'PCbuild') if suffix: new_lib = os.path.join(new_lib, suffix) self.library_dirs.append(new_lib) - # for extensions under Cygwin and AtheOS Python's library directory must be + # For extensions under Cygwin, Python's library directory must be # appended to library_dirs - if sys.platform[:6] == 'cygwin' or sys.platform[:6] == 'atheos': + if sys.platform[:6] == 'cygwin': if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")): # building third party extensions self.library_dirs.append(os.path.join(sys.prefix, "lib", @@ -715,29 +716,6 @@ def get_libraries(self, ext): return ext.libraries + [pythonlib] else: return ext.libraries - elif sys.platform[:6] == "cygwin": - template = "python%d.%d" - pythonlib = (template % - (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) - # don't extend ext.libraries, it may be shared with other - # extensions, it is a reference to the original list - return ext.libraries + [pythonlib] - elif sys.platform[:6] == "atheos": - from distutils import sysconfig - - template = "python%d.%d" - pythonlib = (template % - (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff)) - # Get SHLIBS from Makefile - extra = [] - for lib in sysconfig.get_config_var('SHLIBS').split(): - if lib.startswith('-l'): - extra.append(lib[2:]) - else: - extra.append(lib) - # don't extend ext.libraries, it may be shared with other - # extensions, it is a reference to the original list - return ext.libraries + [pythonlib, "m"] + extra elif sys.platform == 'darwin': # Don't use the default code below return ext.libraries diff --git a/distutils/distutils/command/check.py b/distutils/distutils/command/check.py index 7ebe707..04c2f96 100644 --- a/distutils/distutils/command/check.py +++ b/distutils/distutils/command/check.py @@ -120,7 +120,8 @@ def check_restructuredtext(self): def _check_rst_data(self, data): """Returns warnings when the provided data doesn't compile.""" - source_path = StringIO() + # the include and csv_table directives need this to be a path + source_path = self.distribution.script_name or 'setup.py' parser = Parser() settings = frontend.OptionParser(components=(Parser,)).get_default_values() settings.tab_width = 4 diff --git a/distutils/distutils/command/sdist.py b/distutils/distutils/command/sdist.py index 4fd1d47..52eaa15 100644 --- a/distutils/distutils/command/sdist.py +++ b/distutils/distutils/command/sdist.py @@ -4,17 +4,19 @@ import os import sys -from types import * from glob import glob from warnings import warn from distutils.core import Command -from distutils import dir_util, dep_util, file_util, archive_util +from distutils import dir_util +from distutils import file_util +from distutils import archive_util from distutils.text_file import TextFile -from distutils.errors import * from distutils.filelist import FileList from distutils import log from distutils.util import convert_path +from distutils.errors import DistutilsTemplateError, DistutilsOptionError + def show_formats(): """Print all possible values for the 'formats' option (used by @@ -30,6 +32,7 @@ def show_formats(): FancyGetopt(formats).print_help( "List of available source distribution formats:") + class sdist(Command): description = "create a source distribution (tarball, zip file, etc.)" @@ -93,6 +96,8 @@ def checking_metadata(self): sub_commands = [('check', checking_metadata)] + READMES = ('README', 'README.txt', 'README.rst') + def initialize_options(self): # 'template' and 'manifest' are, respectively, the names of # the manifest template and manifest file. @@ -216,13 +221,39 @@ def add_defaults(self): Warns if (README or README.txt) or setup.py are missing; everything else is optional. """ - standards = [('README', 'README.txt'), self.distribution.script_name] + self._add_defaults_standards() + self._add_defaults_optional() + self._add_defaults_python() + self._add_defaults_data_files() + self._add_defaults_ext() + self._add_defaults_c_libs() + self._add_defaults_scripts() + + @staticmethod + def _cs_path_exists(fspath): + """ + Case-sensitive path existence check + + >>> sdist._cs_path_exists(__file__) + True + >>> sdist._cs_path_exists(__file__.upper()) + False + """ + if not os.path.exists(fspath): + return False + # make absolute so we always have a directory + abspath = os.path.abspath(fspath) + directory, filename = os.path.split(abspath) + return filename in os.listdir(directory) + + def _add_defaults_standards(self): + standards = [self.READMES, self.distribution.script_name] for fn in standards: if isinstance(fn, tuple): alts = fn got_it = False for fn in alts: - if os.path.exists(fn): + if self._cs_path_exists(fn): got_it = True self.filelist.append(fn) break @@ -231,16 +262,18 @@ def add_defaults(self): self.warn("standard file not found: should have one of " + ', '.join(alts)) else: - if os.path.exists(fn): + if self._cs_path_exists(fn): self.filelist.append(fn) else: self.warn("standard file '%s' not found" % fn) + def _add_defaults_optional(self): optional = ['test/test*.py', 'setup.cfg'] for pattern in optional: files = filter(os.path.isfile, glob(pattern)) self.filelist.extend(files) + def _add_defaults_python(self): # build_py is used to get: # - python modules # - files defined in package_data @@ -256,28 +289,34 @@ def add_defaults(self): for filename in filenames: self.filelist.append(os.path.join(src_dir, filename)) + def _add_defaults_data_files(self): # getting distribution.data_files if self.distribution.has_data_files(): for item in self.distribution.data_files: - if isinstance(item, str): # plain file + if isinstance(item, str): + # plain file item = convert_path(item) if os.path.isfile(item): self.filelist.append(item) - else: # a (dirname, filenames) tuple + else: + # a (dirname, filenames) tuple dirname, filenames = item for f in filenames: f = convert_path(f) if os.path.isfile(f): self.filelist.append(f) + def _add_defaults_ext(self): if self.distribution.has_ext_modules(): build_ext = self.get_finalized_command('build_ext') self.filelist.extend(build_ext.get_source_files()) + def _add_defaults_c_libs(self): if self.distribution.has_c_libraries(): build_clib = self.get_finalized_command('build_clib') self.filelist.extend(build_clib.get_source_files()) + def _add_defaults_scripts(self): if self.distribution.has_scripts(): build_scripts = self.get_finalized_command('build_scripts') self.filelist.extend(build_scripts.get_source_files()) diff --git a/distutils/distutils/config.py b/distutils/distutils/config.py index bf8d8dd..2171abd 100644 --- a/distutils/distutils/config.py +++ b/distutils/distutils/config.py @@ -51,7 +51,6 @@ def _read_pypirc(self): if os.path.exists(rc): self.announce('Using PyPI login from %s' % rc) repository = self.repository or self.DEFAULT_REPOSITORY - realm = self.realm or self.DEFAULT_REALM config = RawConfigParser() config.read(rc) diff --git a/distutils/distutils/cygwinccompiler.py b/distutils/distutils/cygwinccompiler.py index 1c36990..6c5d777 100644 --- a/distutils/distutils/cygwinccompiler.py +++ b/distutils/distutils/cygwinccompiler.py @@ -234,8 +234,8 @@ def link(self, target_desc, objects, output_filename, output_dir=None, # who wants symbols and a many times larger output file # should explicitly switch the debug mode on # otherwise we let dllwrap/ld strip the output file - # (On my machine: 10KB < stripped_file < ??100KB - # unstripped_file = stripped_file + XXX KB + # (On my machine: 10KiB < stripped_file < ??100KiB + # unstripped_file = stripped_file + XXX KiB # ( XXX=254 for a typical python extension)) if not debug: extra_preargs.append("-s") diff --git a/distutils/distutils/dist.py b/distutils/distutils/dist.py index 62a2451..6cf0a0d 100644 --- a/distutils/distutils/dist.py +++ b/distutils/distutils/dist.py @@ -27,6 +27,20 @@ command_re = re.compile(r'^[a-zA-Z]([a-zA-Z0-9_]*)$') +def _ensure_list(value, fieldname): + if isinstance(value, str): + # a string containing comma separated values is okay. It will + # be converted to a list by Distribution.finalize_options(). + pass + elif not isinstance(value, list): + # passing a tuple or an iterator perhaps, warn and convert + typename = type(value).__name__ + msg = f"Warning: '{fieldname}' should be a list, got type '{typename}'" + log.log(log.WARN, msg) + value = list(value) + return value + + class Distribution: """The core of the Distutils. Most of the work hiding behind 'setup' is really done within a Distribution instance, which farms the work out @@ -257,10 +271,7 @@ def __init__(self, attrs=None): setattr(self, key, val) else: msg = "Unknown distribution option: %s" % repr(key) - if warnings is not None: - warnings.warn(msg) - else: - sys.stderr.write(msg + "\n") + warnings.warn(msg) # no-user-cfg is handled before other command line args # because other args override the config files, and this @@ -1188,12 +1199,21 @@ def get_long_description(self): def get_keywords(self): return self.keywords or [] + def set_keywords(self, value): + self.keywords = _ensure_list(value, 'keywords') + def get_platforms(self): return self.platforms or ["UNKNOWN"] + def set_platforms(self, value): + self.platforms = _ensure_list(value, 'platforms') + def get_classifiers(self): return self.classifiers or [] + def set_classifiers(self, value): + self.classifiers = _ensure_list(value, 'classifiers') + def get_download_url(self): return self.download_url or "UNKNOWN" @@ -1205,7 +1225,7 @@ def set_requires(self, value): import distutils.versionpredicate for v in value: distutils.versionpredicate.VersionPredicate(v) - self.requires = value + self.requires = list(value) def get_provides(self): return self.provides or [] @@ -1224,7 +1244,7 @@ def set_obsoletes(self, value): import distutils.versionpredicate for v in value: distutils.versionpredicate.VersionPredicate(v) - self.obsoletes = value + self.obsoletes = list(value) def fix_help_options(options): """Convert a 4-tuple 'help_options' list as found in various command diff --git a/distutils/distutils/msvc9compiler.py b/distutils/distutils/msvc9compiler.py index 2119127..4c0036a 100644 --- a/distutils/distutils/msvc9compiler.py +++ b/distutils/distutils/msvc9compiler.py @@ -55,7 +55,6 @@ PLAT_TO_VCVARS = { 'win32' : 'x86', 'win-amd64' : 'amd64', - 'win-ia64' : 'ia64', } class Reg: @@ -255,7 +254,7 @@ def query_vcvarsall(version, arch="x86"): """Launch vcvarsall.bat and read the settings from its environment """ vcvarsall = find_vcvarsall(version) - interesting = set(("include", "lib", "libpath", "path")) + interesting = {"include", "lib", "libpath", "path"} result = {} if vcvarsall is None: @@ -344,7 +343,7 @@ def initialize(self, plat_name=None): if plat_name is None: plat_name = get_platform() # sanity check for platforms to prevent obscure errors later. - ok_plats = 'win32', 'win-amd64', 'win-ia64' + ok_plats = 'win32', 'win-amd64' if plat_name not in ok_plats: raise DistutilsPlatformError("--plat-name must be one of %s" % (ok_plats,)) @@ -362,7 +361,6 @@ def initialize(self, plat_name=None): # to cross compile, you use 'x86_amd64'. # On AMD64, 'vcvars32.bat amd64' is a native build env; to cross # compile use 'x86' (ie, it runs the x86 compiler directly) - # No idea how itanium handles this, if at all. if plat_name == get_platform() or plat_name == 'win32': # native build or cross-compile to win32 plat_spec = PLAT_TO_VCVARS[plat_name] diff --git a/distutils/distutils/msvccompiler.py b/distutils/distutils/msvccompiler.py index 1048cd4..d1de2fb 100644 --- a/distutils/distutils/msvccompiler.py +++ b/distutils/distutils/msvccompiler.py @@ -172,7 +172,7 @@ def get_build_version(): def get_build_architecture(): """Return the processor architecture. - Possible results are "Intel", "Itanium", or "AMD64". + Possible results are "Intel" or "AMD64". """ prefix = " bit (" diff --git a/distutils/distutils/spawn.py b/distutils/distutils/spawn.py index 5387688..d3a12c2 100644 --- a/distutils/distutils/spawn.py +++ b/distutils/distutils/spawn.py @@ -172,21 +172,32 @@ def find_executable(executable, path=None): A string listing directories separated by 'os.pathsep'; defaults to os.environ['PATH']. Returns the complete filename or None if not found. """ - if path is None: - path = os.environ.get('PATH', os.defpath) - - paths = path.split(os.pathsep) - base, ext = os.path.splitext(executable) - + _, ext = os.path.splitext(executable) if (sys.platform == 'win32') and (ext != '.exe'): executable = executable + '.exe' - if not os.path.isfile(executable): - for p in paths: - f = os.path.join(p, executable) - if os.path.isfile(f): - # the file exists, we have a shot at spawn working - return f - return None - else: + if os.path.isfile(executable): return executable + + if path is None: + path = os.environ.get('PATH', None) + if path is None: + try: + path = os.confstr("CS_PATH") + except (AttributeError, ValueError): + # os.confstr() or CS_PATH is not available + path = os.defpath + # bpo-35755: Don't use os.defpath if the PATH environment variable is + # set to an empty string + + # PATH='' doesn't match, whereas PATH=':' looks in the current directory + if not path: + return None + + paths = path.split(os.pathsep) + for p in paths: + f = os.path.join(p, executable) + if os.path.isfile(f): + # the file exists, we have a shot at spawn working + return f + return None diff --git a/distutils/distutils/sysconfig.py b/distutils/distutils/sysconfig.py index 2bcd1dd..0a034ee 100644 --- a/distutils/distutils/sysconfig.py +++ b/distutils/distutils/sysconfig.py @@ -23,15 +23,18 @@ BASE_EXEC_PREFIX = os.path.normpath(sys.base_exec_prefix) # Path to the base directory of the project. On Windows the binary may -# live in project/PCBuild/win32 or project/PCBuild/amd64. +# live in project/PCbuild/win32 or project/PCbuild/amd64. # set for cross builds if "_PYTHON_PROJECT_BASE" in os.environ: project_base = os.path.abspath(os.environ["_PYTHON_PROJECT_BASE"]) else: - project_base = os.path.dirname(os.path.abspath(sys.executable)) -if (os.name == 'nt' and - project_base.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))): - project_base = os.path.dirname(os.path.dirname(project_base)) + if sys.executable: + project_base = os.path.dirname(os.path.abspath(sys.executable)) + else: + # sys.executable can be empty if argv[0] has been changed and Python is + # unable to retrieve the real program name + project_base = os.getcwd() + # python_build: (Boolean) if true, we're either building Python or # building an extension with an un-installed Python, so we use @@ -43,16 +46,26 @@ def _is_python_source_dir(d): if os.path.isfile(os.path.join(d, "Modules", fn)): return True return False + _sys_home = getattr(sys, '_home', None) -if (_sys_home and os.name == 'nt' and - _sys_home.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))): - _sys_home = os.path.dirname(os.path.dirname(_sys_home)) + +if os.name == 'nt': + def _fix_pcbuild(d): + if d and os.path.normcase(d).startswith( + os.path.normcase(os.path.join(PREFIX, "PCbuild"))): + return PREFIX + return d + project_base = _fix_pcbuild(project_base) + _sys_home = _fix_pcbuild(_sys_home) + def _python_build(): if _sys_home: return _is_python_source_dir(_sys_home) return _is_python_source_dir(project_base) + python_build = _python_build() + # Calculate the build qualifier flags if they are defined. Adding the flags # to the include and lib directories only makes sense for an installation, not # an in-source build. @@ -101,6 +114,11 @@ def get_python_inc(plat_specific=0, prefix=None): python_dir = 'python' + get_python_version() + build_flags return os.path.join(prefix, "include", python_dir) elif os.name == "nt": + if python_build: + # Include both the include and PC dir to ensure we can find + # pyconfig.h + return (os.path.join(prefix, "include") + os.path.pathsep + + os.path.join(prefix, "PC")) return os.path.join(prefix, "include") else: raise DistutilsPlatformError( @@ -170,8 +188,8 @@ def customize_compiler(compiler): _osx_support.customize_compiler(_config_vars) _config_vars['CUSTOMIZED_OSX_COMPILER'] = 'True' - (cc, cxx, opt, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \ - get_config_vars('CC', 'CXX', 'OPT', 'CFLAGS', + (cc, cxx, cflags, ccshared, ldshared, shlib_suffix, ar, ar_flags) = \ + get_config_vars('CC', 'CXX', 'CFLAGS', 'CCSHARED', 'LDSHARED', 'SHLIB_SUFFIX', 'AR', 'ARFLAGS') if 'CC' in os.environ: @@ -194,7 +212,7 @@ def customize_compiler(compiler): if 'LDFLAGS' in os.environ: ldshared = ldshared + ' ' + os.environ['LDFLAGS'] if 'CFLAGS' in os.environ: - cflags = opt + ' ' + os.environ['CFLAGS'] + cflags = cflags + ' ' + os.environ['CFLAGS'] ldshared = ldshared + ' ' + os.environ['CFLAGS'] if 'CPPFLAGS' in os.environ: cpp = cpp + ' ' + os.environ['CPPFLAGS'] diff --git a/distutils/distutils/tests/__init__.py b/distutils/distutils/tests/__init__.py index 1b939cb..5d2e69e 100644 --- a/distutils/distutils/tests/__init__.py +++ b/distutils/distutils/tests/__init__.py @@ -15,6 +15,7 @@ import os import sys import unittest +import warnings from test.support import run_unittest @@ -22,6 +23,7 @@ def test_suite(): + old_filters = warnings.filters[:] suite = unittest.TestSuite() for fn in os.listdir(here): if fn.startswith("test") and fn.endswith(".py"): @@ -29,6 +31,10 @@ def test_suite(): __import__(modname) module = sys.modules[modname] suite.addTest(module.test_suite()) + # bpo-40055: Save/restore warnings filters to leave them unchanged. + # Importing tests imports docutils which imports pkg_resources which adds a + # warnings filter. + warnings.filters[:] = old_filters return suite diff --git a/distutils/distutils/tests/includetest.rst b/distutils/distutils/tests/includetest.rst new file mode 100644 index 0000000..d7b4ae3 --- /dev/null +++ b/distutils/distutils/tests/includetest.rst @@ -0,0 +1 @@ +This should be included. diff --git a/distutils/distutils/tests/test_archive_util.py b/distutils/distutils/tests/test_archive_util.py index 18a0313..e9aad0e 100644 --- a/distutils/distutils/tests/test_archive_util.py +++ b/distutils/distutils/tests/test_archive_util.py @@ -163,7 +163,7 @@ def test_tarfile_vs_tar(self): # now create another tarball using `tar` tarball2 = os.path.join(tmpdir, 'archive2.tar.gz') tar_cmd = ['tar', '-cf', 'archive2.tar', 'dist'] - gzip_cmd = ['gzip', '-f9', 'archive2.tar'] + gzip_cmd = ['gzip', '-f', '-9', 'archive2.tar'] old_dir = os.getcwd() os.chdir(tmpdir) try: diff --git a/distutils/distutils/tests/test_build_ext.py b/distutils/distutils/tests/test_build_ext.py index c6502d6..d042859 100644 --- a/distutils/distutils/tests/test_build_ext.py +++ b/distutils/distutils/tests/test_build_ext.py @@ -44,6 +44,17 @@ def setUp(self): self.temp_cwd.__enter__() self.addCleanup(self.temp_cwd.__exit__, None, None, None) + def tearDown(self): + # Get everything back to normal + support.unload('xx') + sys.path = self.sys_path[0] + sys.path[:] = self.sys_path[1] + import site + site.USER_BASE = self.old_user_base + from distutils.command import build_ext + build_ext.USER_BASE = self.old_user_base + super(BuildExtTestCase, self).tearDown() + def build_ext(self, *args, **kwargs): return build_ext(*args, **kwargs) @@ -91,17 +102,6 @@ def test_build_ext(self): self.assertIsInstance(xx.Null(), xx.Null) self.assertIsInstance(xx.Str(), xx.Str) - def tearDown(self): - # Get everything back to normal - support.unload('xx') - sys.path = self.sys_path[0] - sys.path[:] = self.sys_path[1] - import site - site.USER_BASE = self.old_user_base - from distutils.command import build_ext - build_ext.USER_BASE = self.old_user_base - super(BuildExtTestCase, self).tearDown() - def test_solaris_enable_shared(self): dist = Distribution({'name': 'xx'}) cmd = self.build_ext(dist) @@ -177,10 +177,12 @@ def test_finalize_options(self): cmd.finalize_options() py_include = sysconfig.get_python_inc() - self.assertIn(py_include, cmd.include_dirs) + for p in py_include.split(os.path.pathsep): + self.assertIn(p, cmd.include_dirs) plat_py_include = sysconfig.get_python_inc(plat_specific=1) - self.assertIn(plat_py_include, cmd.include_dirs) + for p in plat_py_include.split(os.path.pathsep): + self.assertIn(p, cmd.include_dirs) # make sure cmd.libraries is turned into a list # if it's a string @@ -468,7 +470,7 @@ def _try_compile_deployment_target(self, operator, target): # format the target value as defined in the Apple # Availability Macros. We can't use the macro names since # at least one value we test with will not exist yet. - if target[1] < 10: + if target[:2] < (10, 10): # for 10.1 through 10.9.x -> "10n0" target = '%02d%01d0' % target else: diff --git a/distutils/distutils/tests/test_check.py b/distutils/distutils/tests/test_check.py index 3d22868..e534aca 100644 --- a/distutils/distutils/tests/test_check.py +++ b/distutils/distutils/tests/test_check.py @@ -1,4 +1,5 @@ """Tests for distutils.command.check.""" +import os import textwrap import unittest from test.support import run_unittest @@ -13,13 +14,19 @@ pygments = None +HERE = os.path.dirname(__file__) + + class CheckTestCase(support.LoggingSilencer, support.TempdirManager, unittest.TestCase): - def _run(self, metadata=None, **options): + def _run(self, metadata=None, cwd=None, **options): if metadata is None: metadata = {} + if cwd is not None: + old_dir = os.getcwd() + os.chdir(cwd) pkg_info, dist = self.create_dist(**metadata) cmd = check(dist) cmd.initialize_options() @@ -27,6 +34,8 @@ def _run(self, metadata=None, **options): setattr(cmd, name, value) cmd.ensure_finalized() cmd.run() + if cwd is not None: + os.chdir(old_dir) return cmd def test_check_metadata(self): @@ -99,6 +108,11 @@ def test_check_restructuredtext(self): cmd = self._run(metadata, strict=1, restructuredtext=1) self.assertEqual(cmd._warnings, 0) + # check that includes work to test #31292 + metadata['long_description'] = 'title\n=====\n\n.. include:: includetest.rst' + cmd = self._run(metadata, cwd=HERE, strict=1, restructuredtext=1) + self.assertEqual(cmd._warnings, 0) + @unittest.skipUnless(HAS_DOCUTILS, "won't test without docutils") def test_check_restructuredtext_with_syntax_highlight(self): # Don't fail if there is a `code` or `code-block` directive diff --git a/distutils/distutils/tests/test_dist.py b/distutils/distutils/tests/test_dist.py index 1f104ce..0a19f0f 100644 --- a/distutils/distutils/tests/test_dist.py +++ b/distutils/distutils/tests/test_dist.py @@ -11,7 +11,9 @@ from distutils.dist import Distribution, fix_help_options, DistributionMetadata from distutils.cmd import Command -from test.support import TESTFN, captured_stdout, run_unittest +from test.support import ( + TESTFN, captured_stdout, captured_stderr, run_unittest +) from distutils.tests import support from distutils import log @@ -195,6 +197,13 @@ def test_finalize_options(self): self.assertEqual(dist.metadata.platforms, ['one', 'two']) self.assertEqual(dist.metadata.keywords, ['one', 'two']) + attrs = {'keywords': 'foo bar', + 'platforms': 'foo bar'} + dist = Distribution(attrs=attrs) + dist.finalize_options() + self.assertEqual(dist.metadata.platforms, ['foo bar']) + self.assertEqual(dist.metadata.keywords, ['foo bar']) + def test_get_command_packages(self): dist = Distribution() self.assertEqual(dist.command_packages, None) @@ -312,6 +321,13 @@ def test_requires_illegal(self): "version": "1.0", "requires": ["my.pkg (splat)"]}) + def test_requires_to_list(self): + attrs = {"name": "package", + "requires": iter(["other"])} + dist = Distribution(attrs) + self.assertIsInstance(dist.metadata.requires, list) + + def test_obsoletes(self): attrs = {"name": "package", "version": "1.0", @@ -334,13 +350,69 @@ def test_obsoletes_illegal(self): "version": "1.0", "obsoletes": ["my.pkg (splat)"]}) + def test_obsoletes_to_list(self): + attrs = {"name": "package", + "obsoletes": iter(["other"])} + dist = Distribution(attrs) + self.assertIsInstance(dist.metadata.obsoletes, list) + def test_classifier(self): attrs = {'name': 'Boa', 'version': '3.0', 'classifiers': ['Programming Language :: Python :: 3']} dist = Distribution(attrs) + self.assertEqual(dist.get_classifiers(), + ['Programming Language :: Python :: 3']) meta = self.format_metadata(dist) self.assertIn('Metadata-Version: 1.1', meta) + def test_classifier_invalid_type(self): + attrs = {'name': 'Boa', 'version': '3.0', + 'classifiers': ('Programming Language :: Python :: 3',)} + with captured_stderr() as error: + d = Distribution(attrs) + # should have warning about passing a non-list + self.assertIn('should be a list', error.getvalue()) + # should be converted to a list + self.assertIsInstance(d.metadata.classifiers, list) + self.assertEqual(d.metadata.classifiers, + list(attrs['classifiers'])) + + def test_keywords(self): + attrs = {'name': 'Monty', 'version': '1.0', + 'keywords': ['spam', 'eggs', 'life of brian']} + dist = Distribution(attrs) + self.assertEqual(dist.get_keywords(), + ['spam', 'eggs', 'life of brian']) + + def test_keywords_invalid_type(self): + attrs = {'name': 'Monty', 'version': '1.0', + 'keywords': ('spam', 'eggs', 'life of brian')} + with captured_stderr() as error: + d = Distribution(attrs) + # should have warning about passing a non-list + self.assertIn('should be a list', error.getvalue()) + # should be converted to a list + self.assertIsInstance(d.metadata.keywords, list) + self.assertEqual(d.metadata.keywords, list(attrs['keywords'])) + + def test_platforms(self): + attrs = {'name': 'Monty', 'version': '1.0', + 'platforms': ['GNU/Linux', 'Some Evil Platform']} + dist = Distribution(attrs) + self.assertEqual(dist.get_platforms(), + ['GNU/Linux', 'Some Evil Platform']) + + def test_platforms_invalid_types(self): + attrs = {'name': 'Monty', 'version': '1.0', + 'platforms': ('GNU/Linux', 'Some Evil Platform')} + with captured_stderr() as error: + d = Distribution(attrs) + # should have warning about passing a non-list + self.assertIn('should be a list', error.getvalue()) + # should be converted to a list + self.assertIsInstance(d.metadata.platforms, list) + self.assertEqual(d.metadata.platforms, list(attrs['platforms'])) + def test_download_url(self): attrs = {'name': 'Boa', 'version': '3.0', 'download_url': 'http://example.org/boa'} diff --git a/distutils/distutils/tests/test_file_util.py b/distutils/distutils/tests/test_file_util.py index 03040af..a4e2d02 100644 --- a/distutils/distutils/tests/test_file_util.py +++ b/distutils/distutils/tests/test_file_util.py @@ -8,7 +8,7 @@ from distutils import log from distutils.tests import support from distutils.errors import DistutilsFileError -from test.support import run_unittest +from test.support import run_unittest, unlink class FileUtilTestCase(support.TempdirManager, unittest.TestCase): @@ -80,6 +80,14 @@ def test_move_file_exception_unpacking_unlink(self): def test_copy_file_hard_link(self): with open(self.source, 'w') as f: f.write('some content') + # Check first that copy_file() will not fall back on copying the file + # instead of creating the hard link. + try: + os.link(self.source, self.target) + except OSError as e: + self.skipTest('os.link: %s' % e) + else: + unlink(self.target) st = os.stat(self.source) copy_file(self.source, self.target, link='hard') st2 = os.stat(self.source) diff --git a/distutils/distutils/tests/test_msvccompiler.py b/distutils/distutils/tests/test_msvccompiler.py index 70a9c93..b518d6a 100644 --- a/distutils/distutils/tests/test_msvccompiler.py +++ b/distutils/distutils/tests/test_msvccompiler.py @@ -32,57 +32,6 @@ def _find_vcvarsall(plat_spec): finally: _msvccompiler._find_vcvarsall = old_find_vcvarsall - def test_compiler_options(self): - import distutils._msvccompiler as _msvccompiler - # suppress path to vcruntime from _find_vcvarsall to - # check that /MT is added to compile options - old_find_vcvarsall = _msvccompiler._find_vcvarsall - def _find_vcvarsall(plat_spec): - return old_find_vcvarsall(plat_spec)[0], None - _msvccompiler._find_vcvarsall = _find_vcvarsall - try: - compiler = _msvccompiler.MSVCCompiler() - compiler.initialize() - - self.assertIn('/MT', compiler.compile_options) - self.assertNotIn('/MD', compiler.compile_options) - finally: - _msvccompiler._find_vcvarsall = old_find_vcvarsall - - def test_vcruntime_copy(self): - import distutils._msvccompiler as _msvccompiler - # force path to a known file - it doesn't matter - # what we copy as long as its name is not in - # _msvccompiler._BUNDLED_DLLS - old_find_vcvarsall = _msvccompiler._find_vcvarsall - def _find_vcvarsall(plat_spec): - return old_find_vcvarsall(plat_spec)[0], __file__ - _msvccompiler._find_vcvarsall = _find_vcvarsall - try: - tempdir = self.mkdtemp() - compiler = _msvccompiler.MSVCCompiler() - compiler.initialize() - compiler._copy_vcruntime(tempdir) - - self.assertTrue(os.path.isfile(os.path.join( - tempdir, os.path.basename(__file__)))) - finally: - _msvccompiler._find_vcvarsall = old_find_vcvarsall - - def test_vcruntime_skip_copy(self): - import distutils._msvccompiler as _msvccompiler - - tempdir = self.mkdtemp() - compiler = _msvccompiler.MSVCCompiler() - compiler.initialize() - dll = compiler._vcruntime_redist - self.assertTrue(os.path.isfile(dll), dll or "") - - compiler._copy_vcruntime(tempdir) - - self.assertFalse(os.path.isfile(os.path.join( - tempdir, os.path.basename(dll))), dll or "") - def test_get_vc_env_unicode(self): import distutils._msvccompiler as _msvccompiler diff --git a/distutils/distutils/tests/test_spawn.py b/distutils/distutils/tests/test_spawn.py index 0d45538..f9ae69e 100644 --- a/distutils/distutils/tests/test_spawn.py +++ b/distutils/distutils/tests/test_spawn.py @@ -87,11 +87,52 @@ def test_find_executable(self): rv = find_executable(dont_exist_program , path=tmp_dir) self.assertIsNone(rv) - # test os.defpath: missing PATH environment variable + # PATH='': no match, except in the current directory with test_support.EnvironmentVarGuard() as env: - with mock.patch('distutils.spawn.os.defpath', tmp_dir): - env.pop('PATH') + env['PATH'] = '' + with unittest.mock.patch('distutils.spawn.os.confstr', + return_value=tmp_dir, create=True), \ + unittest.mock.patch('distutils.spawn.os.defpath', + tmp_dir): + rv = find_executable(program) + self.assertIsNone(rv) + + # look in current directory + with test_support.change_cwd(tmp_dir): + rv = find_executable(program) + self.assertEqual(rv, program) + + # PATH=':': explicitly looks in the current directory + with test_support.EnvironmentVarGuard() as env: + env['PATH'] = os.pathsep + with unittest.mock.patch('distutils.spawn.os.confstr', + return_value='', create=True), \ + unittest.mock.patch('distutils.spawn.os.defpath', ''): + rv = find_executable(program) + self.assertIsNone(rv) + + # look in current directory + with test_support.change_cwd(tmp_dir): + rv = find_executable(program) + self.assertEqual(rv, program) + + # missing PATH: test os.confstr("CS_PATH") and os.defpath + with test_support.EnvironmentVarGuard() as env: + env.pop('PATH', None) + + # without confstr + with unittest.mock.patch('distutils.spawn.os.confstr', + side_effect=ValueError, + create=True), \ + unittest.mock.patch('distutils.spawn.os.defpath', + tmp_dir): + rv = find_executable(program) + self.assertEqual(rv, filename) + # with confstr + with unittest.mock.patch('distutils.spawn.os.confstr', + return_value=tmp_dir, create=True), \ + unittest.mock.patch('distutils.spawn.os.defpath', ''): rv = find_executable(program) self.assertEqual(rv, filename) diff --git a/distutils/distutils/tests/test_sysconfig.py b/distutils/distutils/tests/test_sysconfig.py index fe4a299..236755d 100644 --- a/distutils/distutils/tests/test_sysconfig.py +++ b/distutils/distutils/tests/test_sysconfig.py @@ -1,4 +1,5 @@ """Tests for distutils.sysconfig.""" +import contextlib import os import shutil import subprocess @@ -9,7 +10,7 @@ from distutils import sysconfig from distutils.ccompiler import get_default_compiler from distutils.tests import support -from test.support import TESTFN, run_unittest, check_warnings +from test.support import TESTFN, run_unittest, check_warnings, swap_item class SysconfigTestCase(support.EnvironGuard, unittest.TestCase): def setUp(self): @@ -74,12 +75,7 @@ def test_srcdir_independent_of_cwd(self): os.chdir(cwd) self.assertEqual(srcdir, srcdir2) - @unittest.skipUnless(get_default_compiler() == 'unix', - 'not testing if default compiler is not unix') - def test_customize_compiler(self): - os.environ['AR'] = 'my_ar' - os.environ['ARFLAGS'] = '-arflags' - + def customize_compiler(self): # make sure AR gets caught class compiler: compiler_type = 'unix' @@ -87,9 +83,89 @@ class compiler: def set_executables(self, **kw): self.exes = kw + sysconfig_vars = { + 'AR': 'sc_ar', + 'CC': 'sc_cc', + 'CXX': 'sc_cxx', + 'ARFLAGS': '--sc-arflags', + 'CFLAGS': '--sc-cflags', + 'CCSHARED': '--sc-ccshared', + 'LDSHARED': 'sc_ldshared', + 'SHLIB_SUFFIX': 'sc_shutil_suffix', + + # On macOS, disable _osx_support.customize_compiler() + 'CUSTOMIZED_OSX_COMPILER': 'True', + } + comp = compiler() - sysconfig.customize_compiler(comp) - self.assertEqual(comp.exes['archiver'], 'my_ar -arflags') + with contextlib.ExitStack() as cm: + for key, value in sysconfig_vars.items(): + cm.enter_context(swap_item(sysconfig._config_vars, key, value)) + sysconfig.customize_compiler(comp) + + return comp + + @unittest.skipUnless(get_default_compiler() == 'unix', + 'not testing if default compiler is not unix') + def test_customize_compiler(self): + # Make sure that sysconfig._config_vars is initialized + sysconfig.get_config_vars() + + os.environ['AR'] = 'env_ar' + os.environ['CC'] = 'env_cc' + os.environ['CPP'] = 'env_cpp' + os.environ['CXX'] = 'env_cxx --env-cxx-flags' + os.environ['LDSHARED'] = 'env_ldshared' + os.environ['LDFLAGS'] = '--env-ldflags' + os.environ['ARFLAGS'] = '--env-arflags' + os.environ['CFLAGS'] = '--env-cflags' + os.environ['CPPFLAGS'] = '--env-cppflags' + + comp = self.customize_compiler() + self.assertEqual(comp.exes['archiver'], + 'env_ar --env-arflags') + self.assertEqual(comp.exes['preprocessor'], + 'env_cpp --env-cppflags') + self.assertEqual(comp.exes['compiler'], + 'env_cc --sc-cflags --env-cflags --env-cppflags') + self.assertEqual(comp.exes['compiler_so'], + ('env_cc --sc-cflags ' + '--env-cflags ''--env-cppflags --sc-ccshared')) + self.assertEqual(comp.exes['compiler_cxx'], + 'env_cxx --env-cxx-flags') + self.assertEqual(comp.exes['linker_exe'], + 'env_cc') + self.assertEqual(comp.exes['linker_so'], + ('env_ldshared --env-ldflags --env-cflags' + ' --env-cppflags')) + self.assertEqual(comp.shared_lib_extension, 'sc_shutil_suffix') + + del os.environ['AR'] + del os.environ['CC'] + del os.environ['CPP'] + del os.environ['CXX'] + del os.environ['LDSHARED'] + del os.environ['LDFLAGS'] + del os.environ['ARFLAGS'] + del os.environ['CFLAGS'] + del os.environ['CPPFLAGS'] + + comp = self.customize_compiler() + self.assertEqual(comp.exes['archiver'], + 'sc_ar --sc-arflags') + self.assertEqual(comp.exes['preprocessor'], + 'sc_cc -E') + self.assertEqual(comp.exes['compiler'], + 'sc_cc --sc-cflags') + self.assertEqual(comp.exes['compiler_so'], + 'sc_cc --sc-cflags --sc-ccshared') + self.assertEqual(comp.exes['compiler_cxx'], + 'sc_cxx') + self.assertEqual(comp.exes['linker_exe'], + 'sc_cc') + self.assertEqual(comp.exes['linker_so'], + 'sc_ldshared') + self.assertEqual(comp.shared_lib_extension, 'sc_shutil_suffix') def test_parse_makefile_base(self): self.makefile = TESTFN diff --git a/distutils/distutils/tests/test_unixccompiler.py b/distutils/distutils/tests/test_unixccompiler.py index efba27e..eef702c 100644 --- a/distutils/distutils/tests/test_unixccompiler.py +++ b/distutils/distutils/tests/test_unixccompiler.py @@ -51,14 +51,6 @@ def gcv(v): sysconfig.get_config_var = old_gcv - # irix646 - sys.platform = 'irix646' - self.assertEqual(self.cc.rpath_foo(), ['-rpath', '/foo']) - - # osf1V5 - sys.platform = 'osf1V5' - self.assertEqual(self.cc.rpath_foo(), ['-rpath', '/foo']) - # GCC GNULD sys.platform = 'bar' def gcv(v): diff --git a/distutils/distutils/tests/test_util.py b/distutils/distutils/tests/test_util.py index 4e9d79b..bf0d433 100644 --- a/distutils/distutils/tests/test_util.py +++ b/distutils/distutils/tests/test_util.py @@ -4,6 +4,7 @@ import unittest from copy import copy from test.support import run_unittest +from unittest import mock from distutils.errors import DistutilsPlatformError, DistutilsByteCompileError from distutils.util import (get_platform, convert_path, change_root, @@ -78,13 +79,6 @@ def test_get_platform(self): sys.platform = 'win32' self.assertEqual(get_platform(), 'win-amd64') - # windows XP, itanium - os.name = 'nt' - sys.version = ('2.4.4 (#71, Oct 18 2006, 08:34:43) ' - '[MSC v.1310 32 bit (Itanium)]') - sys.platform = 'win32' - self.assertEqual(get_platform(), 'win-ia64') - # macbook os.name = 'posix' sys.version = ('2.5 (r25:51918, Sep 19 2006, 08:49:13) ' @@ -241,20 +235,35 @@ def _join(*path): def test_check_environ(self): util._environ_checked = 0 - if 'HOME' in os.environ: - del os.environ['HOME'] + os.environ.pop('HOME', None) - # posix without HOME - if os.name == 'posix': # this test won't run on windows - check_environ() - import pwd - self.assertEqual(os.environ['HOME'], pwd.getpwuid(os.getuid())[5]) - else: - check_environ() + check_environ() self.assertEqual(os.environ['PLAT'], get_platform()) self.assertEqual(util._environ_checked, 1) + @unittest.skipUnless(os.name == 'posix', 'specific to posix') + def test_check_environ_getpwuid(self): + util._environ_checked = 0 + os.environ.pop('HOME', None) + + import pwd + + # only set pw_dir field, other fields are not used + result = pwd.struct_passwd((None, None, None, None, None, + '/home/distutils', None)) + with mock.patch.object(pwd, 'getpwuid', return_value=result): + check_environ() + self.assertEqual(os.environ['HOME'], '/home/distutils') + + util._environ_checked = 0 + os.environ.pop('HOME', None) + + # bpo-10496: Catch pwd.getpwuid() error + with mock.patch.object(pwd, 'getpwuid', side_effect=KeyError): + check_environ() + self.assertNotIn('HOME', os.environ) + def test_split_quoted(self): self.assertEqual(split_quoted('""one"" "two" \'three\' \\four'), ['one', 'two', 'three', 'four']) diff --git a/distutils/distutils/unixccompiler.py b/distutils/distutils/unixccompiler.py index 3f321c2..4d7a6de 100644 --- a/distutils/distutils/unixccompiler.py +++ b/distutils/distutils/unixccompiler.py @@ -188,7 +188,15 @@ def link(self, target_desc, objects, i = 1 while '=' in linker[i]: i += 1 - linker[i] = self.compiler_cxx[i] + + if os.path.basename(linker[i]) == 'ld_so_aix': + # AIX platforms prefix the compiler with the ld_so_aix + # script, so we need to adjust our linker index + offset = 1 + else: + offset = 0 + + linker[i+offset] = self.compiler_cxx[i] if sys.platform == 'darwin': linker = _osx_support.compiler_fixup(linker, ld_args) @@ -233,8 +241,6 @@ def runtime_library_dir_option(self, dir): if self._is_gcc(compiler): return ["-Wl,+s", "-L" + dir] return ["+s", "-L" + dir] - elif sys.platform[:7] == "irix646" or sys.platform[:6] == "osf1V5": - return ["-rpath", dir] else: if self._is_gcc(compiler): # gcc on non-GNU systems does not need -Wl, but can @@ -282,7 +288,7 @@ def find_library_file(self, dirs, lib, debug=0): # vs # /usr/lib/libedit.dylib cflags = sysconfig.get_config_var('CFLAGS') - m = re.search(r'-isysroot\s+(\S+)', cflags) + m = re.search(r'-isysroot\s*(\S+)', cflags) if m is None: sysroot = '/' else: diff --git a/distutils/distutils/util.py b/distutils/distutils/util.py index fdcf6fa..30a21e4 100644 --- a/distutils/distutils/util.py +++ b/distutils/distutils/util.py @@ -16,41 +16,28 @@ from distutils.errors import DistutilsByteCompileError def get_platform (): - """Return a string that identifies the current platform. This is used - mainly to distinguish platform-specific build directories and - platform-specific built distributions. Typically includes the OS name - and version and the architecture (as supplied by 'os.uname()'), - although the exact information included depends on the OS; eg. for IRIX - the architecture isn't particularly important (IRIX only runs on SGI - hardware), but for Linux the kernel version isn't particularly - important. + """Return a string that identifies the current platform. This is used mainly to + distinguish platform-specific build directories and platform-specific built + distributions. Typically includes the OS name and version and the + architecture (as supplied by 'os.uname()'), although the exact information + included depends on the OS; eg. on Linux, the kernel version isn't + particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u - irix-5.3 - irix64-6.2 Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) - win-ia64 (64bit Windows on Itanium) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. + """ if os.name == 'nt': - # sniff sys.version for architecture. - prefix = " bit (" - i = sys.version.find(prefix) - if i == -1: - return sys.platform - j = sys.version.find(")", i) - look = sys.version[i+len(prefix):j].lower() - if look == 'amd64': + if 'amd64' in sys.version.lower(): return 'win-amd64' - if look == 'itanium': - return 'win-ia64' return sys.platform # Set for cross builds explicitly @@ -66,8 +53,8 @@ def get_platform (): (osname, host, release, version, machine) = os.uname() - # Convert the OS name to lowercase, remove '/' characters - # (to accommodate BSD/OS), and translate spaces (for "Power Macintosh") + # Convert the OS name to lowercase, remove '/' characters, and translate + # spaces (for "Power Macintosh") osname = osname.lower().replace('/', '') machine = machine.replace(' ', '_') machine = machine.replace('/', '-') @@ -87,8 +74,6 @@ def get_platform (): bitness = {2147483647:"32bit", 9223372036854775807:"64bit"} machine += ".%s" % bitness[sys.maxsize] # fall through to standard osname-release-machine representation - elif osname[:4] == "irix": # could be "irix64"! - return "%s-%s" % (osname, release) elif osname[:3] == "aix": return "%s-%s.%s" % (osname, version, release) elif osname[:6] == "cygwin": @@ -172,8 +157,13 @@ def check_environ (): return if os.name == 'posix' and 'HOME' not in os.environ: - import pwd - os.environ['HOME'] = pwd.getpwuid(os.getuid())[5] + try: + import pwd + os.environ['HOME'] = pwd.getpwuid(os.getuid())[5] + except (ImportError, KeyError): + # bpo-10496: if the current user identifier doesn't exist in the + # password database, do nothing + pass if 'PLAT' not in os.environ: os.environ['PLAT'] = get_platform() diff --git a/distutils/pyproject.toml b/distutils/pyproject.toml new file mode 100644 index 0000000..1432681 --- /dev/null +++ b/distutils/pyproject.toml @@ -0,0 +1,25 @@ +[project] +name = "standard-distutils" +version = "3.7.17" +description = "Standard library distutils redistribution. \"dead battery\"." +keywords = ["stdlib"] +authors = [ + { name = "Python Developers", email = "python-deadlib@youknowone.org" } +] +readme = "README.rst" +license = {name = "PSF", file = "LICENSE"} +classifiers = [ + "License :: OSI Approved :: Python Software Foundation License", + "Topic :: Software Development :: Libraries", + "Programming Language :: Python :: 3", +] + +[tool.setuptools.packages] +find = {include = ["distutils*"]} + +[project.urls] +"Homepage" = "https://github.com/youknowone/python-deadlib" + +[build-system] +requires = ["setuptools>=61.0"] +build-backend = "setuptools.build_meta" diff --git a/distutils/tests/test_distutils.py b/distutils/tests/test_distutils.py new file mode 100644 index 0000000..d613abe --- /dev/null +++ b/distutils/tests/test_distutils.py @@ -0,0 +1,18 @@ +"""Tests for distutils. + +The tests for distutils are defined in the distutils.tests package; +the test_suite() function there returns a test suite that's ready to +be run. +""" + +import distutils.tests +import test.support + + +def test_main(): + test.support.run_unittest(distutils.tests.test_suite()) + test.support.reap_children() + + +if __name__ == "__main__": + test_main() From aea6ce357754aa31e5ccd4787169357ba60b4e08 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 12 May 2024 11:28:25 +0900 Subject: [PATCH 10/47] distutils 3.8.19 --- distutils/distutils/README | 2 - distutils/distutils/_msvccompiler.py | 9 ++ distutils/distutils/archive_util.py | 22 ++--- distutils/distutils/ccompiler.py | 2 +- distutils/distutils/command/bdist_msi.py | 24 +++--- distutils/distutils/command/bdist_rpm.py | 8 +- distutils/distutils/command/bdist_wininst.py | 84 +++++++++++-------- distutils/distutils/command/build_ext.py | 54 ++++++++---- distutils/distutils/command/build_py.py | 6 +- distutils/distutils/command/config.py | 37 ++++---- distutils/distutils/command/install.py | 2 +- distutils/distutils/command/sdist.py | 15 ++-- distutils/distutils/command/upload.py | 15 ++-- distutils/distutils/spawn.py | 2 +- distutils/distutils/sysconfig.py | 5 +- distutils/distutils/tests/__init__.py | 14 ++-- distutils/distutils/tests/support.py | 5 +- distutils/distutils/tests/test_bdist.py | 6 +- .../distutils/tests/test_bdist_wininst.py | 9 +- distutils/distutils/tests/test_build_ext.py | 70 +++++++++++----- distutils/distutils/tests/test_config.py | 1 + distutils/distutils/tests/test_config_cmd.py | 5 ++ distutils/distutils/tests/test_dist.py | 2 +- distutils/distutils/unixccompiler.py | 2 +- distutils/distutils/util.py | 55 +++++++----- distutils/pyproject.toml | 2 +- 26 files changed, 267 insertions(+), 191 deletions(-) diff --git a/distutils/distutils/README b/distutils/distutils/README index 408a203..23f4885 100644 --- a/distutils/distutils/README +++ b/distutils/distutils/README @@ -8,6 +8,4 @@ The Distutils-SIG web page is also a good starting point: http://www.python.org/sigs/distutils-sig/ -WARNING : Distutils must remain compatible with 2.3 - $Id$ diff --git a/distutils/distutils/_msvccompiler.py b/distutils/distutils/_msvccompiler.py index 37ac478..03a5986 100644 --- a/distutils/distutils/_msvccompiler.py +++ b/distutils/distutils/_msvccompiler.py @@ -89,6 +89,13 @@ def _find_vc2017(): return None, None +PLAT_SPEC_TO_RUNTIME = { + 'x86' : 'x86', + 'x86_amd64' : 'x64', + 'x86_arm' : 'arm', + 'x86_arm64' : 'arm64' +} + def _find_vcvarsall(plat_spec): # bpo-38597: Removed vcruntime return value _, best_dir = _find_vc2017() @@ -160,6 +167,8 @@ def _find_exe(exe, paths=None): PLAT_TO_VCVARS = { 'win32' : 'x86', 'win-amd64' : 'x86_amd64', + 'win-arm32' : 'x86_arm', + 'win-arm64' : 'x86_arm64' } class MSVCCompiler(CCompiler) : diff --git a/distutils/distutils/archive_util.py b/distutils/distutils/archive_util.py index b002dc3..565a311 100644 --- a/distutils/distutils/archive_util.py +++ b/distutils/distutils/archive_util.py @@ -166,21 +166,21 @@ def make_zipfile(base_name, base_dir, verbose=0, dry_run=0): zip = zipfile.ZipFile(zip_filename, "w", compression=zipfile.ZIP_STORED) - if base_dir != os.curdir: - path = os.path.normpath(os.path.join(base_dir, '')) - zip.write(path, path) - log.info("adding '%s'", path) - for dirpath, dirnames, filenames in os.walk(base_dir): - for name in dirnames: - path = os.path.normpath(os.path.join(dirpath, name, '')) + with zip: + if base_dir != os.curdir: + path = os.path.normpath(os.path.join(base_dir, '')) zip.write(path, path) log.info("adding '%s'", path) - for name in filenames: - path = os.path.normpath(os.path.join(dirpath, name)) - if os.path.isfile(path): + for dirpath, dirnames, filenames in os.walk(base_dir): + for name in dirnames: + path = os.path.normpath(os.path.join(dirpath, name, '')) zip.write(path, path) log.info("adding '%s'", path) - zip.close() + for name in filenames: + path = os.path.normpath(os.path.join(dirpath, name)) + if os.path.isfile(path): + zip.write(path, path) + log.info("adding '%s'", path) return zip_filename diff --git a/distutils/distutils/ccompiler.py b/distutils/distutils/ccompiler.py index b70e5e4..4cfc6c7 100644 --- a/distutils/distutils/ccompiler.py +++ b/distutils/distutils/ccompiler.py @@ -545,7 +545,7 @@ def compile(self, sources, output_dir=None, macros=None, 'extra_preargs' and 'extra_postargs' are implementation- dependent. On platforms that have the notion of a command-line (e.g. Unix, DOS/Windows), they are most likely lists of strings: extra - command-line arguments to prepand/append to the compiler command + command-line arguments to prepend/append to the compiler command line. On other platforms, consult the implementation class documentation. In any event, they are intended as an escape hatch for those occasions when the abstract compiler framework doesn't diff --git a/distutils/distutils/command/bdist_msi.py b/distutils/distutils/command/bdist_msi.py index 80104c3..f335a34 100644 --- a/distutils/distutils/command/bdist_msi.py +++ b/distutils/distutils/command/bdist_msi.py @@ -390,18 +390,18 @@ def add_scripts(self): # entries for each version as the above code does if self.pre_install_script: scriptfn = os.path.join(self.bdist_dir, "preinstall.bat") - f = open(scriptfn, "w") - # The batch file will be executed with [PYTHON], so that %1 - # is the path to the Python interpreter; %0 will be the path - # of the batch file. - # rem =""" - # %1 %0 - # exit - # """ - # - f.write('rem ="""\n%1 %0\nexit\n"""\n') - f.write(open(self.pre_install_script).read()) - f.close() + with open(scriptfn, "w") as f: + # The batch file will be executed with [PYTHON], so that %1 + # is the path to the Python interpreter; %0 will be the path + # of the batch file. + # rem =""" + # %1 %0 + # exit + # """ + # + f.write('rem ="""\n%1 %0\nexit\n"""\n') + with open(self.pre_install_script) as fin: + f.write(fin.read()) add_data(self.db, "Binary", [("PreInstall", msilib.Binary(scriptfn)) ]) diff --git a/distutils/distutils/command/bdist_rpm.py b/distutils/distutils/command/bdist_rpm.py index 02f10dd..74381cc 100644 --- a/distutils/distutils/command/bdist_rpm.py +++ b/distutils/distutils/command/bdist_rpm.py @@ -309,10 +309,7 @@ def run(self): # build package log.info("building RPMs") - rpm_cmd = ['rpm'] - if os.path.exists('/usr/bin/rpmbuild') or \ - os.path.exists('/bin/rpmbuild'): - rpm_cmd = ['rpmbuild'] + rpm_cmd = ['rpmbuild'] if self.source_only: # what kind of RPMs? rpm_cmd.append('-bs') @@ -537,7 +534,8 @@ def _make_spec_file(self): '', '%' + rpm_opt,]) if val: - spec_file.extend(open(val, 'r').read().split('\n')) + with open(val) as f: + spec_file.extend(f.read().split('\n')) else: spec_file.append(default) diff --git a/distutils/distutils/command/bdist_wininst.py b/distutils/distutils/command/bdist_wininst.py index 15434c3..b5ed6f0 100644 --- a/distutils/distutils/command/bdist_wininst.py +++ b/distutils/distutils/command/bdist_wininst.py @@ -3,7 +3,9 @@ Implements the Distutils 'bdist_wininst' command: create a windows installer exe-program.""" -import sys, os +import os +import sys +import warnings from distutils.core import Command from distutils.util import get_platform from distutils.dir_util import create_tree, remove_tree @@ -58,6 +60,12 @@ class bdist_wininst(Command): # bpo-10945: bdist_wininst requires mbcs encoding only available on Windows _unsupported = (sys.platform != "win32") + def __init__(self, *args, **kw): + super().__init__(*args, **kw) + warnings.warn("bdist_wininst command is deprecated since Python 3.8, " + "use bdist_wheel (wheel packages) instead", + DeprecationWarning, 2) + def initialize_options(self): self.bdist_dir = None self.plat_name = None @@ -250,47 +258,49 @@ def create_exe(self, arcname, fullname, bitmap=None): self.announce("creating %s" % installer_name) if bitmap: - bitmapdata = open(bitmap, "rb").read() + with open(bitmap, "rb") as f: + bitmapdata = f.read() bitmaplen = len(bitmapdata) else: bitmaplen = 0 - file = open(installer_name, "wb") - file.write(self.get_exe_bytes()) - if bitmap: - file.write(bitmapdata) - - # Convert cfgdata from unicode to ascii, mbcs encoded - if isinstance(cfgdata, str): - cfgdata = cfgdata.encode("mbcs") - - # Append the pre-install script - cfgdata = cfgdata + b"\0" - if self.pre_install_script: - # We need to normalize newlines, so we open in text mode and - # convert back to bytes. "latin-1" simply avoids any possible - # failures. - with open(self.pre_install_script, "r", - encoding="latin-1") as script: - script_data = script.read().encode("latin-1") - cfgdata = cfgdata + script_data + b"\n\0" - else: - # empty pre-install script + with open(installer_name, "wb") as file: + file.write(self.get_exe_bytes()) + if bitmap: + file.write(bitmapdata) + + # Convert cfgdata from unicode to ascii, mbcs encoded + if isinstance(cfgdata, str): + cfgdata = cfgdata.encode("mbcs") + + # Append the pre-install script cfgdata = cfgdata + b"\0" - file.write(cfgdata) - - # The 'magic number' 0x1234567B is used to make sure that the - # binary layout of 'cfgdata' is what the wininst.exe binary - # expects. If the layout changes, increment that number, make - # the corresponding changes to the wininst.exe sources, and - # recompile them. - header = struct.pack("> 24, (sys.hexversion >> 16) & 0xff, - sysconfig.get_config_var('ABIFLAGS')) - return ext.libraries + [pythonlib] - else: - return ext.libraries + # On Android only the main executable and LD_PRELOADs are considered + # to be RTLD_GLOBAL, all the dependencies of the main executable + # remain RTLD_LOCAL and so the shared libraries must be linked with + # libpython when python is built with a shared python library (issue + # bpo-21536). + # On Cygwin (and if required, other POSIX-like platforms based on + # Windows like MinGW) it is simply necessary that all symbols in + # shared libraries are resolved at link time. + from distutils.sysconfig import get_config_var + link_libpython = False + if get_config_var('Py_ENABLE_SHARED'): + # A native build on an Android device or on Cygwin + if hasattr(sys, 'getandroidapilevel'): + link_libpython = True + elif sys.platform == 'cygwin': + link_libpython = True + elif '_PYTHON_HOST_PLATFORM' in os.environ: + # We are cross-compiling for one of the relevant platforms + if get_config_var('ANDROID_API_LEVEL') != 0: + link_libpython = True + elif get_config_var('MACHDEP') == 'cygwin': + link_libpython = True + + if link_libpython: + ldversion = get_config_var('LDVERSION') + return ext.libraries + ['python' + ldversion] + + return ext.libraries diff --git a/distutils/distutils/command/build_py.py b/distutils/distutils/command/build_py.py index cf0ca57..edc2171 100644 --- a/distutils/distutils/command/build_py.py +++ b/distutils/distutils/command/build_py.py @@ -5,7 +5,7 @@ import os import importlib.util import sys -from glob import glob +import glob from distutils.core import Command from distutils.errors import * @@ -125,7 +125,7 @@ def find_data_files(self, package, src_dir): files = [] for pattern in globs: # Each pattern has to be converted to a platform-specific path - filelist = glob(os.path.join(src_dir, convert_path(pattern))) + filelist = glob.glob(os.path.join(glob.escape(src_dir), convert_path(pattern))) # Files that match more than one pattern are only added once files.extend([fn for fn in filelist if fn not in files and os.path.isfile(fn)]) @@ -216,7 +216,7 @@ def check_module(self, module, module_file): def find_package_modules(self, package, package_dir): self.check_package(package, package_dir) - module_files = glob(os.path.join(package_dir, "*.py")) + module_files = glob.glob(os.path.join(glob.escape(package_dir), "*.py")) modules = [] setup_script = os.path.abspath(self.distribution.script_name) diff --git a/distutils/distutils/command/config.py b/distutils/distutils/command/config.py index 4ae153d..aeda408 100644 --- a/distutils/distutils/command/config.py +++ b/distutils/distutils/command/config.py @@ -106,15 +106,14 @@ def _check_compiler(self): def _gen_temp_sourcefile(self, body, headers, lang): filename = "_configtest" + LANG_EXT[lang] - file = open(filename, "w") - if headers: - for header in headers: - file.write("#include <%s>\n" % header) - file.write("\n") - file.write(body) - if body[-1] != "\n": - file.write("\n") - file.close() + with open(filename, "w") as file: + if headers: + for header in headers: + file.write("#include <%s>\n" % header) + file.write("\n") + file.write(body) + if body[-1] != "\n": + file.write("\n") return filename def _preprocess(self, body, headers, include_dirs, lang): @@ -203,17 +202,16 @@ def search_cpp(self, pattern, body=None, headers=None, include_dirs=None, if isinstance(pattern, str): pattern = re.compile(pattern) - file = open(out) - match = False - while True: - line = file.readline() - if line == '': - break - if pattern.search(line): - match = True - break + with open(out) as file: + match = False + while True: + line = file.readline() + if line == '': + break + if pattern.search(line): + match = True + break - file.close() self._clean() return match @@ -330,7 +328,6 @@ def check_header(self, header, include_dirs=None, library_dirs=None, return self.try_cpp(body="/* No body */", headers=[header], include_dirs=include_dirs) - def dump_file(filename, head=None): """Dumps a file content into log.info. diff --git a/distutils/distutils/command/install.py b/distutils/distutils/command/install.py index 0258d3d..c625c95 100644 --- a/distutils/distutils/command/install.py +++ b/distutils/distutils/command/install.py @@ -223,7 +223,7 @@ def initialize_options(self): def finalize_options(self): """Finalizes options.""" - # This method (and its pliant slaves, like 'finalize_unix()', + # This method (and its helpers, like 'finalize_unix()', # 'finalize_other()', and 'select_scheme()') is where the default # installation directories for modules, extension modules, and # anything else we care to install from a Python module diff --git a/distutils/distutils/command/sdist.py b/distutils/distutils/command/sdist.py index 52eaa15..b4996fc 100644 --- a/distutils/distutils/command/sdist.py +++ b/distutils/distutils/command/sdist.py @@ -407,14 +407,13 @@ def read_manifest(self): distribution. """ log.info("reading manifest file '%s'", self.manifest) - manifest = open(self.manifest) - for line in manifest: - # ignore comments and blank lines - line = line.strip() - if line.startswith('#') or not line: - continue - self.filelist.append(line) - manifest.close() + with open(self.manifest) as manifest: + for line in manifest: + # ignore comments and blank lines + line = line.strip() + if line.startswith('#') or not line: + continue + self.filelist.append(line) def make_release_tree(self, base_dir, files): """Create the directory tree that will become the source diff --git a/distutils/distutils/command/upload.py b/distutils/distutils/command/upload.py index 32dda35..11afa24 100644 --- a/distutils/distutils/command/upload.py +++ b/distutils/distutils/command/upload.py @@ -121,18 +121,13 @@ def upload_file(self, command, pyversion, filename): 'requires': meta.get_requires(), 'obsoletes': meta.get_obsoletes(), } - comment = '' - if command == 'bdist_rpm': - dist, version, id = platform.dist() - if dist: - comment = 'built for %s %s' % (dist, version) - elif command == 'bdist_dumb': - comment = 'built for %s' % platform.platform(terse=1) - data['comment'] = comment + + data['comment'] = '' if self.sign: - data['gpg_signature'] = (os.path.basename(filename) + ".asc", - open(filename+".asc", "rb").read()) + with open(filename + ".asc", "rb") as f: + data['gpg_signature'] = (os.path.basename(filename) + ".asc", + f.read()) # set up the authentication user_pass = (self.username + ":" + self.password).encode('ascii') diff --git a/distutils/distutils/spawn.py b/distutils/distutils/spawn.py index d3a12c2..ceb9494 100644 --- a/distutils/distutils/spawn.py +++ b/distutils/distutils/spawn.py @@ -81,7 +81,6 @@ def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0): "command %r failed with exit status %d" % (cmd, rc)) if sys.platform == 'darwin': - from distutils import sysconfig _cfg_target = None _cfg_target_split = None @@ -95,6 +94,7 @@ def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0): if sys.platform == 'darwin': global _cfg_target, _cfg_target_split if _cfg_target is None: + from distutils import sysconfig _cfg_target = sysconfig.get_config_var( 'MACOSX_DEPLOYMENT_TARGET') or '' if _cfg_target: diff --git a/distutils/distutils/sysconfig.py b/distutils/distutils/sysconfig.py index 0a034ee..b51629e 100644 --- a/distutils/distutils/sysconfig.py +++ b/distutils/distutils/sysconfig.py @@ -15,6 +15,7 @@ import sys from .errors import DistutilsPlatformError +from .util import get_platform, get_host_platform # These are needed in a couple of spots, so just compute them once. PREFIX = os.path.normpath(sys.prefix) @@ -39,10 +40,8 @@ # python_build: (Boolean) if true, we're either building Python or # building an extension with an un-installed Python, so we use # different (hard-wired) directories. -# Setup.local is available for Makefile builds including VPATH builds, -# Setup.dist is available on Windows def _is_python_source_dir(d): - for fn in ("Setup.dist", "Setup.local"): + for fn in ("Setup", "Setup.local"): if os.path.isfile(os.path.join(d, "Modules", fn)): return True return False diff --git a/distutils/distutils/tests/__init__.py b/distutils/distutils/tests/__init__.py index 5d2e69e..6803721 100644 --- a/distutils/distutils/tests/__init__.py +++ b/distutils/distutils/tests/__init__.py @@ -15,26 +15,24 @@ import os import sys import unittest -import warnings -from test.support import run_unittest +from test.support import run_unittest, save_restore_warnings_filters here = os.path.dirname(__file__) or os.curdir def test_suite(): - old_filters = warnings.filters[:] suite = unittest.TestSuite() for fn in os.listdir(here): if fn.startswith("test") and fn.endswith(".py"): modname = "distutils.tests." + fn[:-3] - __import__(modname) + # bpo-40055: Save/restore warnings filters to leave them unchanged. + # Importing tests imports docutils which imports pkg_resources + # which adds a warnings filter. + with save_restore_warnings_filters(): + __import__(modname) module = sys.modules[modname] suite.addTest(module.test_suite()) - # bpo-40055: Save/restore warnings filters to leave them unchanged. - # Importing tests imports docutils which imports pkg_resources which adds a - # warnings filter. - warnings.filters[:] = old_filters return suite diff --git a/distutils/distutils/tests/support.py b/distutils/distutils/tests/support.py index 7385c6b..0413098 100644 --- a/distutils/distutils/tests/support.py +++ b/distutils/distutils/tests/support.py @@ -6,6 +6,7 @@ import unittest import sysconfig from copy import deepcopy +import test.support from distutils import log from distutils.log import DEBUG, INFO, WARN, ERROR, FATAL @@ -64,8 +65,8 @@ def tearDown(self): os.chdir(self.old_cwd) super().tearDown() while self.tempdirs: - d = self.tempdirs.pop() - shutil.rmtree(d, os.name in ('nt', 'cygwin')) + tmpdir = self.tempdirs.pop() + test.support.rmtree(tmpdir) def mkdtemp(self): """Create a temporary directory that will be cleaned up. diff --git a/distutils/distutils/tests/test_bdist.py b/distutils/distutils/tests/test_bdist.py index c80b3ed..130d8bf 100644 --- a/distutils/distutils/tests/test_bdist.py +++ b/distutils/distutils/tests/test_bdist.py @@ -2,6 +2,7 @@ import os import unittest from test.support import run_unittest +import warnings from distutils.command.bdist import bdist from distutils.tests import support @@ -38,7 +39,10 @@ def test_skip_build(self): names.append('bdist_msi') for name in names: - subcmd = cmd.get_finalized_command(name) + with warnings.catch_warnings(): + warnings.filterwarnings('ignore', 'bdist_wininst command is deprecated', + DeprecationWarning) + subcmd = cmd.get_finalized_command(name) if getattr(subcmd, '_unsupported', False): # command is not supported on this build continue diff --git a/distutils/distutils/tests/test_bdist_wininst.py b/distutils/distutils/tests/test_bdist_wininst.py index 4c19bba..5c3d025 100644 --- a/distutils/distutils/tests/test_bdist_wininst.py +++ b/distutils/distutils/tests/test_bdist_wininst.py @@ -1,10 +1,14 @@ """Tests for distutils.command.bdist_wininst.""" +import sys +import platform import unittest -from test.support import run_unittest +from test.support import run_unittest, check_warnings from distutils.command.bdist_wininst import bdist_wininst from distutils.tests import support +@unittest.skipIf(sys.platform == 'win32' and platform.machine() == 'ARM64', + 'bdist_wininst is not supported in this install') @unittest.skipIf(getattr(bdist_wininst, '_unsupported', False), 'bdist_wininst is not supported in this install') class BuildWinInstTestCase(support.TempdirManager, @@ -17,7 +21,8 @@ def test_get_exe_bytes(self): # this test makes sure it works now for every platform # let's create a command pkg_pth, dist = self.create_dist() - cmd = bdist_wininst(dist) + with check_warnings(("", DeprecationWarning)): + cmd = bdist_wininst(dist) cmd.ensure_finalized() # let's run the code that finds the right wininst*.exe file diff --git a/distutils/distutils/tests/test_build_ext.py b/distutils/distutils/tests/test_build_ext.py index d042859..808c0dc 100644 --- a/distutils/distutils/tests/test_build_ext.py +++ b/distutils/distutils/tests/test_build_ext.py @@ -15,6 +15,7 @@ import unittest from test import support +from test.support.script_helper import assert_python_ok # http://bugs.python.org/issue4373 # Don't load the xx module more than once. @@ -26,11 +27,8 @@ class BuildExtTestCase(TempdirManager, unittest.TestCase): def setUp(self): # Create a simple test environment - # Note that we're making changes to sys.path super(BuildExtTestCase, self).setUp() self.tmp_dir = self.mkdtemp() - self.sys_path = sys.path, sys.path[:] - sys.path.append(self.tmp_dir) import site self.old_user_base = site.USER_BASE site.USER_BASE = self.mkdtemp() @@ -40,15 +38,11 @@ def setUp(self): # bpo-30132: On Windows, a .pdb file may be created in the current # working directory. Create a temporary working directory to cleanup # everything at the end of the test. - self.temp_cwd = support.temp_cwd() - self.temp_cwd.__enter__() - self.addCleanup(self.temp_cwd.__exit__, None, None, None) + change_cwd = support.change_cwd(self.tmp_dir) + change_cwd.__enter__() + self.addCleanup(change_cwd.__exit__, None, None, None) def tearDown(self): - # Get everything back to normal - support.unload('xx') - sys.path = self.sys_path[0] - sys.path[:] = self.sys_path[1] import site site.USER_BASE = self.old_user_base from distutils.command import build_ext @@ -88,19 +82,34 @@ def test_build_ext(self): else: ALREADY_TESTED = type(self).__name__ - import xx + code = textwrap.dedent(f""" + tmp_dir = {self.tmp_dir!r} - for attr in ('error', 'foo', 'new', 'roj'): - self.assertTrue(hasattr(xx, attr)) + import sys + import unittest + from test import support - self.assertEqual(xx.foo(2, 5), 7) - self.assertEqual(xx.foo(13,15), 28) - self.assertEqual(xx.new().demo(), None) - if support.HAVE_DOCSTRINGS: - doc = 'This is a template module just for instruction.' - self.assertEqual(xx.__doc__, doc) - self.assertIsInstance(xx.Null(), xx.Null) - self.assertIsInstance(xx.Str(), xx.Str) + sys.path.insert(0, tmp_dir) + import xx + + class Tests(unittest.TestCase): + def test_xx(self): + for attr in ('error', 'foo', 'new', 'roj'): + self.assertTrue(hasattr(xx, attr)) + + self.assertEqual(xx.foo(2, 5), 7) + self.assertEqual(xx.foo(13,15), 28) + self.assertEqual(xx.new().demo(), None) + if support.HAVE_DOCSTRINGS: + doc = 'This is a template module just for instruction.' + self.assertEqual(xx.__doc__, doc) + self.assertIsInstance(xx.Null(), xx.Null) + self.assertIsInstance(xx.Str(), xx.Str) + + + unittest.main() + """) + assert_python_ok('-c', code) def test_solaris_enable_shared(self): dist = Distribution({'name': 'xx'}) @@ -295,6 +304,19 @@ def test_get_source_files(self): cmd.ensure_finalized() self.assertEqual(cmd.get_source_files(), ['xxx']) + def test_unicode_module_names(self): + modules = [ + Extension('foo', ['aaa'], optional=False), + Extension('föö', ['uuu'], optional=False), + ] + dist = Distribution({'name': 'xx', 'ext_modules': modules}) + cmd = self.build_ext(dist) + cmd.ensure_finalized() + self.assertRegex(cmd.get_ext_filename(modules[0].name), r'foo(_d)?\..*') + self.assertRegex(cmd.get_ext_filename(modules[1].name), r'föö(_d)?\..*') + self.assertEqual(cmd.get_export_symbols(modules[0]), ['PyInit_foo']) + self.assertEqual(cmd.get_export_symbols(modules[1]), ['PyInitU_f_gkaa']) + def test_compiler_option(self): # cmd.compiler is an option and # should not be overridden by a compiler instance @@ -475,7 +497,11 @@ def _try_compile_deployment_target(self, operator, target): target = '%02d%01d0' % target else: # for 10.10 and beyond -> "10nn00" - target = '%02d%02d00' % target + if len(target) >= 2: + target = '%02d%02d00' % target + else: + # 11 and later can have no minor version (11 instead of 11.0) + target = '%02d0000' % target deptarget_ext = Extension( 'deptarget', [deptarget_c], diff --git a/distutils/distutils/tests/test_config.py b/distutils/distutils/tests/test_config.py index 77ef788..344084a 100644 --- a/distutils/distutils/tests/test_config.py +++ b/distutils/distutils/tests/test_config.py @@ -60,6 +60,7 @@ def setUp(self): super(BasePyPIRCCommandTestCase, self).setUp() self.tmp_dir = self.mkdtemp() os.environ['HOME'] = self.tmp_dir + os.environ['USERPROFILE'] = self.tmp_dir self.rc = os.path.join(self.tmp_dir, '.pypirc') self.dist = Distribution() diff --git a/distutils/distutils/tests/test_config_cmd.py b/distutils/distutils/tests/test_config_cmd.py index 6e566e7..8bd2c94 100644 --- a/distutils/distutils/tests/test_config_cmd.py +++ b/distutils/distutils/tests/test_config_cmd.py @@ -39,11 +39,16 @@ def test_dump_file(self): @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") def test_search_cpp(self): + import shutil cmd = missing_compiler_executable(['preprocessor']) if cmd is not None: self.skipTest('The %r command is not found' % cmd) pkg_dir, dist = self.create_dist() cmd = config(dist) + cmd._check_compiler() + compiler = cmd.compiler + if sys.platform[:3] == "aix" and "xlc" in compiler.preprocessor[0].lower(): + self.skipTest('xlc: The -E option overrides the -P, -o, and -qsyntaxonly options') # simple pattern searches match = cmd.search_cpp(pattern='xxx', body='/* xxx */') diff --git a/distutils/distutils/tests/test_dist.py b/distutils/distutils/tests/test_dist.py index 0a19f0f..cc34725 100644 --- a/distutils/distutils/tests/test_dist.py +++ b/distutils/distutils/tests/test_dist.py @@ -463,7 +463,7 @@ def test_custom_pydistutils(self): # win32-style if sys.platform == 'win32': # home drive should be found - os.environ['HOME'] = temp_dir + os.environ['USERPROFILE'] = temp_dir files = dist.find_config_files() self.assertIn(user_filename, files, '%r not found in %r' % (user_filename, files)) diff --git a/distutils/distutils/unixccompiler.py b/distutils/distutils/unixccompiler.py index 4d7a6de..f0792de 100644 --- a/distutils/distutils/unixccompiler.py +++ b/distutils/distutils/unixccompiler.py @@ -290,7 +290,7 @@ def find_library_file(self, dirs, lib, debug=0): cflags = sysconfig.get_config_var('CFLAGS') m = re.search(r'-isysroot\s*(\S+)', cflags) if m is None: - sysroot = '/' + sysroot = _osx_support._default_sysroot(sysconfig.get_config_var('CC')) else: sysroot = m.group(1) diff --git a/distutils/distutils/util.py b/distutils/distutils/util.py index 30a21e4..17a94bc 100644 --- a/distutils/distutils/util.py +++ b/distutils/distutils/util.py @@ -15,7 +15,7 @@ from distutils import log from distutils.errors import DistutilsByteCompileError -def get_platform (): +def get_host_platform(): """Return a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the @@ -38,6 +38,10 @@ def get_platform (): if os.name == 'nt': if 'amd64' in sys.version.lower(): return 'win-amd64' + if '(arm)' in sys.version.lower(): + return 'win-arm32' + if '(arm64)' in sys.version.lower(): + return 'win-arm64' return sys.platform # Set for cross builds explicitly @@ -90,8 +94,16 @@ def get_platform (): return "%s-%s-%s" % (osname, release, machine) -# get_platform () - +def get_platform(): + if os.name == 'nt': + TARGET_TO_PLAT = { + 'x86' : 'win32', + 'x64' : 'win-amd64', + 'arm' : 'win-arm32', + } + return TARGET_TO_PLAT.get(os.environ.get('VSCMD_ARG_TGT_ARCH')) or get_host_platform() + else: + return get_host_platform() def convert_path (pathname): """Return 'pathname' as a name that will work on the native filesystem, @@ -378,35 +390,34 @@ def byte_compile (py_files, else: script = open(script_name, "w") - script.write("""\ + with script: + script.write("""\ from distutils.util import byte_compile files = [ """) - # XXX would be nice to write absolute filenames, just for - # safety's sake (script should be more robust in the face of - # chdir'ing before running it). But this requires abspath'ing - # 'prefix' as well, and that breaks the hack in build_lib's - # 'byte_compile()' method that carefully tacks on a trailing - # slash (os.sep really) to make sure the prefix here is "just - # right". This whole prefix business is rather delicate -- the - # problem is that it's really a directory, but I'm treating it - # as a dumb string, so trailing slashes and so forth matter. - - #py_files = map(os.path.abspath, py_files) - #if prefix: - # prefix = os.path.abspath(prefix) - - script.write(",\n".join(map(repr, py_files)) + "]\n") - script.write(""" + # XXX would be nice to write absolute filenames, just for + # safety's sake (script should be more robust in the face of + # chdir'ing before running it). But this requires abspath'ing + # 'prefix' as well, and that breaks the hack in build_lib's + # 'byte_compile()' method that carefully tacks on a trailing + # slash (os.sep really) to make sure the prefix here is "just + # right". This whole prefix business is rather delicate -- the + # problem is that it's really a directory, but I'm treating it + # as a dumb string, so trailing slashes and so forth matter. + + #py_files = map(os.path.abspath, py_files) + #if prefix: + # prefix = os.path.abspath(prefix) + + script.write(",\n".join(map(repr, py_files)) + "]\n") + script.write(""" byte_compile(files, optimize=%r, force=%r, prefix=%r, base_dir=%r, verbose=%r, dry_run=0, direct=1) """ % (optimize, force, prefix, base_dir, verbose)) - script.close() - cmd = [sys.executable] cmd.extend(subprocess._optim_args_from_interpreter_flags()) cmd.append(script_name) diff --git a/distutils/pyproject.toml b/distutils/pyproject.toml index 1432681..4a24929 100644 --- a/distutils/pyproject.toml +++ b/distutils/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-distutils" -version = "3.7.17" +version = "3.8.19" description = "Standard library distutils redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ From 512b59910a23de65fd722aa422e698f1c380d941 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 12 May 2024 11:37:08 +0900 Subject: [PATCH 11/47] Add distutils --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3f510a6..f39612d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Python dead batteries redistribution Python is moving forward! Python finally started to remove dead batteries. -For more information, see [PEP 594](https://peps.python.org/pep-0594/). +For more information, see [PEP 594](https://peps.python.org/pep-0594/) and [PEP 632](https://peps.python.org/pep-0632/). If your project depends on a module that has been removed from the standard, here is the redistribution of the dead batteries in pure Python. @@ -18,6 +18,7 @@ pip install standard-uu # e.g. `uu` can be installed by standard-uu - [cgitb](https://pypi.org/project/standard-cgitb/) - [chunk](https://pypi.org/project/standard-chunk/) - [crypt](https://pypi.org/project/standard-crypt/) +- [distutils](https://pypi.org/project/standard-distutils/) - [imghdr](https://pypi.org/project/standard-imghdr/) - [mailcap](https://pypi.org/project/standard-mailcap/) - [nntplib](https://pypi.org/project/standard-nntplib/) From a67a7c6338a08e9da2ffae268c3cab3be02d5f83 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 12 May 2024 12:06:42 +0900 Subject: [PATCH 12/47] distutils 3.9.19 --- distutils/distutils/README | 4 +- distutils/distutils/_msvccompiler.py | 4 - distutils/distutils/bcppcompiler.py | 4 +- distutils/distutils/ccompiler.py | 4 +- distutils/distutils/command/bdist_msi.py | 10 +- distutils/distutils/command/bdist_rpm.py | 1 - distutils/distutils/command/bdist_wininst.py | 2 +- distutils/distutils/command/build_ext.py | 3 +- distutils/distutils/command/check.py | 14 +- distutils/distutils/command/install.py | 5 +- distutils/distutils/command/upload.py | 26 +++- distutils/distutils/cygwinccompiler.py | 2 - distutils/distutils/msvc9compiler.py | 5 +- distutils/distutils/msvccompiler.py | 2 +- distutils/distutils/spawn.py | 148 +++++-------------- distutils/distutils/sysconfig.py | 12 +- distutils/distutils/tests/support.py | 2 - distutils/distutils/tests/test_bdist_msi.py | 5 +- distutils/distutils/tests/test_bdist_rpm.py | 4 +- distutils/distutils/tests/test_build_clib.py | 1 - distutils/distutils/tests/test_config_cmd.py | 1 - distutils/distutils/tests/test_dist.py | 2 +- distutils/distutils/tests/test_install.py | 3 +- distutils/distutils/tests/test_spawn.py | 19 +-- distutils/distutils/tests/test_upload.py | 26 +++- distutils/distutils/tests/test_version.py | 16 ++ distutils/distutils/unixccompiler.py | 3 +- distutils/distutils/util.py | 3 +- distutils/distutils/version.py | 4 + distutils/pyproject.toml | 2 +- distutils/tests/test_distutils.py | 10 +- 31 files changed, 168 insertions(+), 179 deletions(-) diff --git a/distutils/distutils/README b/distutils/distutils/README index 23f4885..73bd251 100644 --- a/distutils/distutils/README +++ b/distutils/distutils/README @@ -2,10 +2,10 @@ This directory contains the Distutils package. There's a full documentation available at: - http://docs.python.org/distutils/ + https://docs.python.org/distutils/ The Distutils-SIG web page is also a good starting point: - http://www.python.org/sigs/distutils-sig/ + https://www.python.org/sigs/distutils-sig/ $Id$ diff --git a/distutils/distutils/_msvccompiler.py b/distutils/distutils/_msvccompiler.py index 03a5986..af8099a 100644 --- a/distutils/distutils/_msvccompiler.py +++ b/distutils/distutils/_msvccompiler.py @@ -14,8 +14,6 @@ # ported to VS 2015 by Steve Dower import os -import shutil -import stat import subprocess import winreg @@ -65,8 +63,6 @@ def _find_vc2017(): If vswhere.exe is not available, by definition, VS 2017 is not installed. """ - import json - root = os.environ.get("ProgramFiles(x86)") or os.environ.get("ProgramFiles") if not root: return None, None diff --git a/distutils/distutils/bcppcompiler.py b/distutils/distutils/bcppcompiler.py index 9f4c432..071fea5 100644 --- a/distutils/distutils/bcppcompiler.py +++ b/distutils/distutils/bcppcompiler.py @@ -14,10 +14,10 @@ import os from distutils.errors import \ - DistutilsExecError, DistutilsPlatformError, \ + DistutilsExecError, \ CompileError, LibError, LinkError, UnknownFileError from distutils.ccompiler import \ - CCompiler, gen_preprocess_options, gen_lib_options + CCompiler, gen_preprocess_options from distutils.file_util import write_file from distutils.dep_util import newer from distutils import log diff --git a/distutils/distutils/ccompiler.py b/distutils/distutils/ccompiler.py index 4cfc6c7..4c47f2e 100644 --- a/distutils/distutils/ccompiler.py +++ b/distutils/distutils/ccompiler.py @@ -8,7 +8,7 @@ from distutils.spawn import spawn from distutils.file_util import move_file from distutils.dir_util import mkpath -from distutils.dep_util import newer_pairwise, newer_group +from distutils.dep_util import newer_group from distutils.util import split_quoted, execute from distutils import log @@ -392,7 +392,7 @@ def _fix_compile_args(self, output_dir, macros, include_dirs): return output_dir, macros, include_dirs def _prep_compile(self, sources, output_dir, depends=None): - """Decide which souce files must be recompiled. + """Decide which source files must be recompiled. Determine the list of object files corresponding to 'sources', and figure out which ones really need to be recompiled. diff --git a/distutils/distutils/command/bdist_msi.py b/distutils/distutils/command/bdist_msi.py index f335a34..0863a18 100644 --- a/distutils/distutils/command/bdist_msi.py +++ b/distutils/distutils/command/bdist_msi.py @@ -6,7 +6,9 @@ Implements the bdist_msi command. """ -import sys, os +import os +import sys +import warnings from distutils.core import Command from distutils.dir_util import remove_tree from distutils.sysconfig import get_python_version @@ -122,6 +124,12 @@ class bdist_msi(Command): '3.5', '3.6', '3.7', '3.8', '3.9'] other_version = 'X' + def __init__(self, *args, **kw): + super().__init__(*args, **kw) + warnings.warn("bdist_msi command is deprecated since Python 3.9, " + "use bdist_wheel (wheel packages) instead", + DeprecationWarning, 2) + def initialize_options(self): self.bdist_dir = None self.plat_name = None diff --git a/distutils/distutils/command/bdist_rpm.py b/distutils/distutils/command/bdist_rpm.py index 74381cc..550cbfa 100644 --- a/distutils/distutils/command/bdist_rpm.py +++ b/distutils/distutils/command/bdist_rpm.py @@ -6,7 +6,6 @@ import subprocess, sys, os from distutils.core import Command from distutils.debug import DEBUG -from distutils.util import get_platform from distutils.file_util import write_file from distutils.errors import * from distutils.sysconfig import get_python_version diff --git a/distutils/distutils/command/bdist_wininst.py b/distutils/distutils/command/bdist_wininst.py index b5ed6f0..0e9ddaa 100644 --- a/distutils/distutils/command/bdist_wininst.py +++ b/distutils/distutils/command/bdist_wininst.py @@ -8,7 +8,7 @@ import warnings from distutils.core import Command from distutils.util import get_platform -from distutils.dir_util import create_tree, remove_tree +from distutils.dir_util import remove_tree from distutils.errors import * from distutils.sysconfig import get_python_version from distutils import log diff --git a/distutils/distutils/command/build_ext.py b/distutils/distutils/command/build_ext.py index dbcd9d1..1a9bd12 100644 --- a/distutils/distutils/command/build_ext.py +++ b/distutils/distutils/command/build_ext.py @@ -490,7 +490,8 @@ def build_extension(self, ext): "in 'ext_modules' option (extension '%s'), " "'sources' must be present and must be " "a list of source filenames" % ext.name) - sources = list(sources) + # sort to make the resulting .so file build reproducible + sources = sorted(sources) ext_path = self.get_ext_fullpath(ext.name) depends = sources + ext.depends diff --git a/distutils/distutils/command/check.py b/distutils/distutils/command/check.py index 04c2f96..73a30f3 100644 --- a/distutils/distutils/command/check.py +++ b/distutils/distutils/command/check.py @@ -11,7 +11,6 @@ from docutils.parsers.rst import Parser from docutils import frontend from docutils import nodes - from io import StringIO class SilentReporter(Reporter): @@ -80,8 +79,11 @@ def run(self): def check_metadata(self): """Ensures that all required elements of meta-data are supplied. - name, version, URL, (author and author_email) or - (maintainer and maintainer_email)). + Required fields: + name, version, URL + + Recommended fields: + (author and author_email) or (maintainer and maintainer_email) Warns if any are missing. """ @@ -97,15 +99,15 @@ def check_metadata(self): if metadata.author: if not metadata.author_email: self.warn("missing meta-data: if 'author' supplied, " + - "'author_email' must be supplied too") + "'author_email' should be supplied too") elif metadata.maintainer: if not metadata.maintainer_email: self.warn("missing meta-data: if 'maintainer' supplied, " + - "'maintainer_email' must be supplied too") + "'maintainer_email' should be supplied too") else: self.warn("missing meta-data: either (author and author_email) " + "or (maintainer and maintainer_email) " + - "must be supplied") + "should be supplied") def check_restructuredtext(self): """Checks if the long string fields are reST-compliant.""" diff --git a/distutils/distutils/command/install.py b/distutils/distutils/command/install.py index c625c95..aaa300e 100644 --- a/distutils/distutils/command/install.py +++ b/distutils/distutils/command/install.py @@ -30,14 +30,14 @@ INSTALL_SCHEMES = { 'unix_prefix': { 'purelib': '$base/lib/python$py_version_short/site-packages', - 'platlib': '$platbase/lib/python$py_version_short/site-packages', + 'platlib': '$platbase/$platlibdir/python$py_version_short/site-packages', 'headers': '$base/include/python$py_version_short$abiflags/$dist_name', 'scripts': '$base/bin', 'data' : '$base', }, 'unix_home': { 'purelib': '$base/lib/python', - 'platlib': '$base/lib/python', + 'platlib': '$base/$platlibdir/python', 'headers': '$base/include/python/$dist_name', 'scripts': '$base/bin', 'data' : '$base', @@ -298,6 +298,7 @@ def finalize_options(self): 'sys_exec_prefix': exec_prefix, 'exec_prefix': exec_prefix, 'abiflags': abiflags, + 'platlibdir': sys.platlibdir, } if HAS_USER_SITE: diff --git a/distutils/distutils/command/upload.py b/distutils/distutils/command/upload.py index 11afa24..e0ecb65 100644 --- a/distutils/distutils/command/upload.py +++ b/distutils/distutils/command/upload.py @@ -7,16 +7,26 @@ import os import io -import platform import hashlib from base64 import standard_b64encode -from urllib.request import urlopen, Request, HTTPError +from urllib.error import HTTPError +from urllib.request import urlopen, Request from urllib.parse import urlparse from distutils.errors import DistutilsError, DistutilsOptionError from distutils.core import PyPIRCCommand from distutils.spawn import spawn from distutils import log + +# PyPI Warehouse supports MD5, SHA256, and Blake2 (blake2-256) +# https://bugs.python.org/issue40698 +_FILE_CONTENT_DIGESTS = { + "md5_digest": getattr(hashlib, "md5", None), + "sha256_digest": getattr(hashlib, "sha256", None), + "blake2_256_digest": getattr(hashlib, "blake2b", None), +} + + class upload(PyPIRCCommand): description = "upload binary package to PyPI" @@ -88,6 +98,7 @@ def upload_file(self, command, pyversion, filename): content = f.read() finally: f.close() + meta = self.distribution.metadata data = { # action @@ -102,7 +113,6 @@ def upload_file(self, command, pyversion, filename): 'content': (os.path.basename(filename),content), 'filetype': command, 'pyversion': pyversion, - 'md5_digest': hashlib.md5(content).hexdigest(), # additional meta-data 'metadata_version': '1.0', @@ -124,6 +134,16 @@ def upload_file(self, command, pyversion, filename): data['comment'] = '' + # file content digests + for digest_name, digest_cons in _FILE_CONTENT_DIGESTS.items(): + if digest_cons is None: + continue + try: + data[digest_name] = digest_cons(content).hexdigest() + except ValueError: + # hash digest not available or blocked by security policy + pass + if self.sign: with open(filename + ".asc", "rb") as f: data['gpg_signature'] = (os.path.basename(filename) + ".asc", diff --git a/distutils/distutils/cygwinccompiler.py b/distutils/distutils/cygwinccompiler.py index 6c5d777..66c12dd 100644 --- a/distutils/distutils/cygwinccompiler.py +++ b/distutils/distutils/cygwinccompiler.py @@ -51,12 +51,10 @@ from subprocess import Popen, PIPE, check_output import re -from distutils.ccompiler import gen_preprocess_options, gen_lib_options from distutils.unixccompiler import UnixCCompiler from distutils.file_util import write_file from distutils.errors import (DistutilsExecError, CCompilerError, CompileError, UnknownFileError) -from distutils import log from distutils.version import LooseVersion from distutils.spawn import find_executable diff --git a/distutils/distutils/msvc9compiler.py b/distutils/distutils/msvc9compiler.py index 4c0036a..a7976fb 100644 --- a/distutils/distutils/msvc9compiler.py +++ b/distutils/distutils/msvc9compiler.py @@ -19,8 +19,7 @@ from distutils.errors import DistutilsExecError, DistutilsPlatformError, \ CompileError, LibError, LinkError -from distutils.ccompiler import CCompiler, gen_preprocess_options, \ - gen_lib_options +from distutils.ccompiler import CCompiler, gen_lib_options from distutils import log from distutils.util import get_platform @@ -674,7 +673,7 @@ def manifest_get_embed_info(self, target_desc, ld_args): # If a manifest should be embedded, return a tuple of # (manifest_filename, resource_id). Returns None if no manifest # should be embedded. See http://bugs.python.org/issue7833 for why - # we want to avoid any manifest for extension modules if we can) + # we want to avoid any manifest for extension modules if we can. for arg in ld_args: if arg.startswith("/MANIFESTFILE:"): temp_manifest = arg.split(":", 1)[1] diff --git a/distutils/distutils/msvccompiler.py b/distutils/distutils/msvccompiler.py index d1de2fb..d5857cb 100644 --- a/distutils/distutils/msvccompiler.py +++ b/distutils/distutils/msvccompiler.py @@ -13,7 +13,7 @@ DistutilsExecError, DistutilsPlatformError, \ CompileError, LibError, LinkError from distutils.ccompiler import \ - CCompiler, gen_preprocess_options, gen_lib_options + CCompiler, gen_lib_options from distutils import log _can_read_reg = False diff --git a/distutils/distutils/spawn.py b/distutils/distutils/spawn.py index ceb9494..31df3f7 100644 --- a/distutils/distutils/spawn.py +++ b/distutils/distutils/spawn.py @@ -8,11 +8,18 @@ import sys import os +import subprocess from distutils.errors import DistutilsPlatformError, DistutilsExecError from distutils.debug import DEBUG from distutils import log + +if sys.platform == 'darwin': + _cfg_target = None + _cfg_target_split = None + + def spawn(cmd, search_path=1, verbose=0, dry_run=0): """Run another program, specified as a command list 'cmd', in a new process. @@ -32,64 +39,16 @@ def spawn(cmd, search_path=1, verbose=0, dry_run=0): # cmd is documented as a list, but just in case some code passes a tuple # in, protect our %-formatting code against horrible death cmd = list(cmd) - if os.name == 'posix': - _spawn_posix(cmd, search_path, dry_run=dry_run) - elif os.name == 'nt': - _spawn_nt(cmd, search_path, dry_run=dry_run) - else: - raise DistutilsPlatformError( - "don't know how to spawn programs on platform '%s'" % os.name) - -def _nt_quote_args(args): - """Quote command-line arguments for DOS/Windows conventions. - - Just wraps every argument which contains blanks in double quotes, and - returns a new argument list. - """ - # XXX this doesn't seem very robust to me -- but if the Windows guys - # say it'll work, I guess I'll have to accept it. (What if an arg - # contains quotes? What other magic characters, other than spaces, - # have to be escaped? Is there an escaping mechanism other than - # quoting?) - for i, arg in enumerate(args): - if ' ' in arg: - args[i] = '"%s"' % arg - return args - -def _spawn_nt(cmd, search_path=1, verbose=0, dry_run=0): - executable = cmd[0] - cmd = _nt_quote_args(cmd) - if search_path: - # either we find one or it stays the same - executable = find_executable(executable) or executable - log.info(' '.join([executable] + cmd[1:])) - if not dry_run: - # spawn for NT requires a full path to the .exe - try: - rc = os.spawnv(os.P_WAIT, executable, cmd) - except OSError as exc: - # this seems to happen when the command isn't found - if not DEBUG: - cmd = executable - raise DistutilsExecError( - "command %r failed: %s" % (cmd, exc.args[-1])) - if rc != 0: - # and this reflects the command running but failing - if not DEBUG: - cmd = executable - raise DistutilsExecError( - "command %r failed with exit status %d" % (cmd, rc)) -if sys.platform == 'darwin': - _cfg_target = None - _cfg_target_split = None - -def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0): log.info(' '.join(cmd)) if dry_run: return - executable = cmd[0] - exec_fn = search_path and os.execvp or os.execv + + if search_path: + executable = find_executable(cmd[0]) + if executable is not None: + cmd[0] = executable + env = None if sys.platform == 'darwin': global _cfg_target, _cfg_target_split @@ -100,71 +59,38 @@ def _spawn_posix(cmd, search_path=1, verbose=0, dry_run=0): if _cfg_target: _cfg_target_split = [int(x) for x in _cfg_target.split('.')] if _cfg_target: - # ensure that the deployment target of build process is not less - # than that used when the interpreter was built. This ensures - # extension modules are built with correct compatibility values + # Ensure that the deployment target of the build process is not + # less than 10.3 if the interpreter was built for 10.3 or later. + # This ensures extension modules are built with correct + # compatibility values, specifically LDSHARED which can use + # '-undefined dynamic_lookup' which only works on >= 10.3. cur_target = os.environ.get('MACOSX_DEPLOYMENT_TARGET', _cfg_target) - if _cfg_target_split > [int(x) for x in cur_target.split('.')]: + cur_target_split = [int(x) for x in cur_target.split('.')] + if _cfg_target_split[:2] >= [10, 3] and cur_target_split[:2] < [10, 3]: my_msg = ('$MACOSX_DEPLOYMENT_TARGET mismatch: ' - 'now "%s" but "%s" during configure' + 'now "%s" but "%s" during configure;' + 'must use 10.3 or later' % (cur_target, _cfg_target)) raise DistutilsPlatformError(my_msg) env = dict(os.environ, MACOSX_DEPLOYMENT_TARGET=cur_target) - exec_fn = search_path and os.execvpe or os.execve - pid = os.fork() - if pid == 0: # in the child - try: - if env is None: - exec_fn(executable, cmd) - else: - exec_fn(executable, cmd, env) - except OSError as e: - if not DEBUG: - cmd = executable - sys.stderr.write("unable to execute %r: %s\n" - % (cmd, e.strerror)) - os._exit(1) + try: + proc = subprocess.Popen(cmd, env=env) + proc.wait() + exitcode = proc.returncode + except OSError as exc: if not DEBUG: - cmd = executable - sys.stderr.write("unable to execute %r for unknown reasons" % cmd) - os._exit(1) - else: # in the parent - # Loop until the child either exits or is terminated by a signal - # (ie. keep waiting if it's merely stopped) - while True: - try: - pid, status = os.waitpid(pid, 0) - except OSError as exc: - if not DEBUG: - cmd = executable - raise DistutilsExecError( - "command %r failed: %s" % (cmd, exc.args[-1])) - if os.WIFSIGNALED(status): - if not DEBUG: - cmd = executable - raise DistutilsExecError( - "command %r terminated by signal %d" - % (cmd, os.WTERMSIG(status))) - elif os.WIFEXITED(status): - exit_status = os.WEXITSTATUS(status) - if exit_status == 0: - return # hey, it succeeded! - else: - if not DEBUG: - cmd = executable - raise DistutilsExecError( - "command %r failed with exit status %d" - % (cmd, exit_status)) - elif os.WIFSTOPPED(status): - continue - else: - if not DEBUG: - cmd = executable - raise DistutilsExecError( - "unknown error executing %r: termination status %d" - % (cmd, status)) + cmd = cmd[0] + raise DistutilsExecError( + "command %r failed: %s" % (cmd, exc.args[-1])) from exc + + if exitcode: + if not DEBUG: + cmd = cmd[0] + raise DistutilsExecError( + "command %r failed with exit code %s" % (cmd, exitcode)) + def find_executable(executable, path=None): """Tries to find 'executable' in the directories listed in 'path'. diff --git a/distutils/distutils/sysconfig.py b/distutils/distutils/sysconfig.py index b51629e..37feae5 100644 --- a/distutils/distutils/sysconfig.py +++ b/distutils/distutils/sysconfig.py @@ -15,7 +15,6 @@ import sys from .errors import DistutilsPlatformError -from .util import get_platform, get_host_platform # These are needed in a couple of spots, so just compute them once. PREFIX = os.path.normpath(sys.prefix) @@ -146,8 +145,15 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None): prefix = plat_specific and EXEC_PREFIX or PREFIX if os.name == "posix": - libpython = os.path.join(prefix, - "lib", "python" + get_python_version()) + if plat_specific or standard_lib: + # Platform-specific modules (any module from a non-pure-Python + # module distribution) or standard Python library modules. + libdir = sys.platlibdir + else: + # Pure Python + libdir = "lib" + libpython = os.path.join(prefix, libdir, + "python" + get_python_version()) if standard_lib: return libpython else: diff --git a/distutils/distutils/tests/support.py b/distutils/distutils/tests/support.py index 0413098..259af88 100644 --- a/distutils/distutils/tests/support.py +++ b/distutils/distutils/tests/support.py @@ -39,8 +39,6 @@ def _log(self, level, msg, args): self.logs.append((level, msg, args)) def get_logs(self, *levels): - def _format(msg, args): - return msg % args return [msg % args for level, msg, args in self.logs if level in levels] diff --git a/distutils/distutils/tests/test_bdist_msi.py b/distutils/distutils/tests/test_bdist_msi.py index 15d8bdf..418e60e 100644 --- a/distutils/distutils/tests/test_bdist_msi.py +++ b/distutils/distutils/tests/test_bdist_msi.py @@ -1,7 +1,7 @@ """Tests for distutils.command.bdist_msi.""" import sys import unittest -from test.support import run_unittest +from test.support import run_unittest, check_warnings from distutils.tests import support @@ -14,7 +14,8 @@ def test_minimal(self): # minimal test XXX need more tests from distutils.command.bdist_msi import bdist_msi project_dir, dist = self.create_dist() - cmd = bdist_msi(dist) + with check_warnings(("", DeprecationWarning)): + cmd = bdist_msi(dist) cmd.ensure_finalized() diff --git a/distutils/distutils/tests/test_bdist_rpm.py b/distutils/distutils/tests/test_bdist_rpm.py index 6453a02..ba4382f 100644 --- a/distutils/distutils/tests/test_bdist_rpm.py +++ b/distutils/distutils/tests/test_bdist_rpm.py @@ -44,7 +44,7 @@ def tearDown(self): # spurious sdtout/stderr output under Mac OS X @unittest.skipUnless(sys.platform.startswith('linux'), 'spurious sdtout/stderr output under Mac OS X') - @requires_zlib + @requires_zlib() @unittest.skipIf(find_executable('rpm') is None, 'the rpm command is not found') @unittest.skipIf(find_executable('rpmbuild') is None, @@ -87,7 +87,7 @@ def test_quiet(self): # spurious sdtout/stderr output under Mac OS X @unittest.skipUnless(sys.platform.startswith('linux'), 'spurious sdtout/stderr output under Mac OS X') - @requires_zlib + @requires_zlib() # http://bugs.python.org/issue1533164 @unittest.skipIf(find_executable('rpm') is None, 'the rpm command is not found') diff --git a/distutils/distutils/tests/test_build_clib.py b/distutils/distutils/tests/test_build_clib.py index 85d0990..abd8313 100644 --- a/distutils/distutils/tests/test_build_clib.py +++ b/distutils/distutils/tests/test_build_clib.py @@ -8,7 +8,6 @@ from distutils.command.build_clib import build_clib from distutils.errors import DistutilsSetupError from distutils.tests import support -from distutils.spawn import find_executable class BuildCLibTestCase(support.TempdirManager, support.LoggingSilencer, diff --git a/distutils/distutils/tests/test_config_cmd.py b/distutils/distutils/tests/test_config_cmd.py index 8bd2c94..9aeab07 100644 --- a/distutils/distutils/tests/test_config_cmd.py +++ b/distutils/distutils/tests/test_config_cmd.py @@ -39,7 +39,6 @@ def test_dump_file(self): @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") def test_search_cpp(self): - import shutil cmd = missing_compiler_executable(['preprocessor']) if cmd is not None: self.skipTest('The %r command is not found' % cmd) diff --git a/distutils/distutils/tests/test_dist.py b/distutils/distutils/tests/test_dist.py index cc34725..60956da 100644 --- a/distutils/distutils/tests/test_dist.py +++ b/distutils/distutils/tests/test_dist.py @@ -8,7 +8,7 @@ from unittest import mock -from distutils.dist import Distribution, fix_help_options, DistributionMetadata +from distutils.dist import Distribution, fix_help_options from distutils.cmd import Command from test.support import ( diff --git a/distutils/distutils/tests/test_install.py b/distutils/distutils/tests/test_install.py index 287ab19..51c80e0 100644 --- a/distutils/distutils/tests/test_install.py +++ b/distutils/distutils/tests/test_install.py @@ -58,7 +58,8 @@ def check_path(got, expected): libdir = os.path.join(destination, "lib", "python") check_path(cmd.install_lib, libdir) - check_path(cmd.install_platlib, libdir) + platlibdir = os.path.join(destination, sys.platlibdir, "python") + check_path(cmd.install_platlib, platlibdir) check_path(cmd.install_purelib, libdir) check_path(cmd.install_headers, os.path.join(destination, "include", "python", "foopkg")) diff --git a/distutils/distutils/tests/test_spawn.py b/distutils/distutils/tests/test_spawn.py index f9ae69e..ad50381 100644 --- a/distutils/distutils/tests/test_spawn.py +++ b/distutils/distutils/tests/test_spawn.py @@ -2,13 +2,11 @@ import os import stat import sys -import unittest -from unittest import mock +import unittest.mock from test.support import run_unittest, unix_shell from test import support as test_support from distutils.spawn import find_executable -from distutils.spawn import _nt_quote_args from distutils.spawn import spawn from distutils.errors import DistutilsExecError from distutils.tests import support @@ -17,16 +15,6 @@ class SpawnTestCase(support.TempdirManager, support.LoggingSilencer, unittest.TestCase): - def test_nt_quote_args(self): - - for (args, wanted) in ((['with space', 'nospace'], - ['"with space"', 'nospace']), - (['nochange', 'nospace'], - ['nochange', 'nospace'])): - res = _nt_quote_args(args) - self.assertEqual(res, wanted) - - @unittest.skipUnless(os.name in ('nt', 'posix'), 'Runs only under posix or nt') def test_spawn(self): @@ -136,6 +124,11 @@ def test_find_executable(self): rv = find_executable(program) self.assertEqual(rv, filename) + def test_spawn_missing_exe(self): + with self.assertRaises(DistutilsExecError) as ctx: + spawn(['does-not-exist']) + self.assertIn("command 'does-not-exist' failed", str(ctx.exception)) + def test_suite(): return unittest.makeSuite(SpawnTestCase) diff --git a/distutils/distutils/tests/test_upload.py b/distutils/distutils/tests/test_upload.py index c17d8e7..74f0bc0 100644 --- a/distutils/distutils/tests/test_upload.py +++ b/distutils/distutils/tests/test_upload.py @@ -2,7 +2,7 @@ import os import unittest import unittest.mock as mock -from urllib.request import HTTPError +from urllib.error import HTTPError from test.support import run_unittest @@ -130,14 +130,30 @@ def test_upload(self): # what did we send ? headers = dict(self.last_open.req.headers) - self.assertEqual(headers['Content-length'], '2162') + self.assertGreaterEqual(int(headers['Content-length']), 2162) content_type = headers['Content-type'] self.assertTrue(content_type.startswith('multipart/form-data')) self.assertEqual(self.last_open.req.get_method(), 'POST') expected_url = 'https://upload.pypi.org/legacy/' self.assertEqual(self.last_open.req.get_full_url(), expected_url) - self.assertTrue(b'xxx' in self.last_open.req.data) - self.assertIn(b'protocol_version', self.last_open.req.data) + data = self.last_open.req.data + self.assertIn(b'xxx',data) + self.assertIn(b'protocol_version', data) + self.assertIn(b'sha256_digest', data) + self.assertIn( + b'cd2eb0837c9b4c962c22d2ff8b5441b7b45805887f051d39bf133b583baf' + b'6860', + data + ) + if b'md5_digest' in data: + self.assertIn(b'f561aaf6ef0bf14d4208bb46a4ccb3ad', data) + if b'blake2_256_digest' in data: + self.assertIn( + b'b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be' + b'6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadcc' + b'ce443f1534330a', + data + ) # The PyPI response body was echoed results = self.get_logs(INFO) @@ -166,7 +182,7 @@ def test_upload_correct_cr(self): cmd.run() headers = dict(self.last_open.req.headers) - self.assertEqual(headers['Content-length'], '2172') + self.assertGreaterEqual(int(headers['Content-length']), 2172) self.assertIn(b'long description\r', self.last_open.req.data) def test_upload_fails(self): diff --git a/distutils/distutils/tests/test_version.py b/distutils/distutils/tests/test_version.py index 15f14c7..8671cd2 100644 --- a/distutils/distutils/tests/test_version.py +++ b/distutils/distutils/tests/test_version.py @@ -45,6 +45,14 @@ def test_cmp_strict(self): self.assertEqual(res, wanted, 'cmp(%s, %s) should be %s, got %s' % (v1, v2, wanted, res)) + res = StrictVersion(v1)._cmp(v2) + self.assertEqual(res, wanted, + 'cmp(%s, %s) should be %s, got %s' % + (v1, v2, wanted, res)) + res = StrictVersion(v1)._cmp(object()) + self.assertIs(res, NotImplemented, + 'cmp(%s, %s) should be NotImplemented, got %s' % + (v1, v2, res)) def test_cmp(self): @@ -63,6 +71,14 @@ def test_cmp(self): self.assertEqual(res, wanted, 'cmp(%s, %s) should be %s, got %s' % (v1, v2, wanted, res)) + res = LooseVersion(v1)._cmp(v2) + self.assertEqual(res, wanted, + 'cmp(%s, %s) should be %s, got %s' % + (v1, v2, wanted, res)) + res = LooseVersion(v1)._cmp(object()) + self.assertIs(res, NotImplemented, + 'cmp(%s, %s) should be NotImplemented, got %s' % + (v1, v2, res)) def test_suite(): return unittest.makeSuite(VersionTestCase) diff --git a/distutils/distutils/unixccompiler.py b/distutils/distutils/unixccompiler.py index f0792de..d00c489 100644 --- a/distutils/distutils/unixccompiler.py +++ b/distutils/distutils/unixccompiler.py @@ -215,7 +215,8 @@ def library_dir_option(self, dir): return "-L" + dir def _is_gcc(self, compiler_name): - return "gcc" in compiler_name or "g++" in compiler_name + # clang uses same syntax for rpath as gcc + return any(name in compiler_name for name in ("gcc", "g++", "clang")) def runtime_library_dir_option(self, dir): # XXX Hackish, at the very least. See Python bug #445902: diff --git a/distutils/distutils/util.py b/distutils/distutils/util.py index 17a94bc..4b002ec 100644 --- a/distutils/distutils/util.py +++ b/distutils/distutils/util.py @@ -79,7 +79,8 @@ def get_host_platform(): machine += ".%s" % bitness[sys.maxsize] # fall through to standard osname-release-machine representation elif osname[:3] == "aix": - return "%s-%s.%s" % (osname, version, release) + from _aix_support import aix_platform + return aix_platform() elif osname[:6] == "cygwin": osname = "cygwin" rel_re = re.compile (r'[\d.]+', re.ASCII) diff --git a/distutils/distutils/version.py b/distutils/distutils/version.py index af14cc1..c33beba 100644 --- a/distutils/distutils/version.py +++ b/distutils/distutils/version.py @@ -166,6 +166,8 @@ def __str__ (self): def _cmp (self, other): if isinstance(other, str): other = StrictVersion(other) + elif not isinstance(other, StrictVersion): + return NotImplemented if self.version != other.version: # numeric versions don't match @@ -331,6 +333,8 @@ def __repr__ (self): def _cmp (self, other): if isinstance(other, str): other = LooseVersion(other) + elif not isinstance(other, LooseVersion): + return NotImplemented if self.version == other.version: return 0 diff --git a/distutils/pyproject.toml b/distutils/pyproject.toml index 4a24929..1f6f644 100644 --- a/distutils/pyproject.toml +++ b/distutils/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-distutils" -version = "3.8.19" +version = "3.9.19" description = "Standard library distutils redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/distutils/tests/test_distutils.py b/distutils/tests/test_distutils.py index d613abe..849aa73 100644 --- a/distutils/tests/test_distutils.py +++ b/distutils/tests/test_distutils.py @@ -7,12 +7,16 @@ import distutils.tests import test.support +import unittest +def load_tests(*_): + # used by unittest + return distutils.tests.test_suite() -def test_main(): - test.support.run_unittest(distutils.tests.test_suite()) + +def tearDownModule(): test.support.reap_children() if __name__ == "__main__": - test_main() + unittest.main() From f414bf4d6e6907dc1fa344569be40e4228085425 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 14 Oct 2024 22:41:53 +0100 Subject: [PATCH 13/47] update LAST_RELEASES to latest versions --- scripts/update.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/update.py b/scripts/update.py index bcbc9a5..5bc266c 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -40,11 +40,12 @@ "3.5": "3.5.10", "3.6": "3.6.15", "3.7": "3.7.17", - "3.8": "3.8.19", - "3.9": "3.9.19", - "3.10": "3.10.14", - "3.11": "3.11.9", - "3.12": "3.12.2", + "3.8": "3.8.20", + "3.9": "3.9.20", + "3.10": "3.10.15", + "3.11": "3.11.10", + "3.12": "3.12.7", + "3.13": "3.13.0", } From aca122f55339ec200434a58a64e3c4d797c8629b Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 14 Oct 2024 22:53:13 +0100 Subject: [PATCH 14/47] Only remove lib_path when it exists The allows for running the tests against versions of python where a given library has already been removed --- scripts/update.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/update.py b/scripts/update.py index 5bc266c..916d2ea 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -142,10 +142,11 @@ def run_test(name, version): cwd = os.getcwd() try: - if lib_path.endswith(".py"): - os.remove(lib_path) - else: - shutil.rmtree(lib_path) + if os.path.isfile(lib_path): + if lib_path.endswith(".py"): + os.remove(lib_path) + else: + shutil.rmtree(lib_path) os.chdir(name) os.putenv("PYTHONPATH", f"{os.getcwd()}/src") r = os.system( From 328b393dc5756a56b3cc090e0b3aebb00c291e5f Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 14 Oct 2024 23:04:47 +0100 Subject: [PATCH 15/47] Install dependencies (if any) before running unit tests Allows for modules to pull in dependencies where they previously used other now-deprecated libraries from python core. --- scripts/update.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/scripts/update.py b/scripts/update.py index 916d2ea..d763b60 100644 --- a/scripts/update.py +++ b/scripts/update.py @@ -135,8 +135,8 @@ def run_test(name, version): PYENV_ROOT = os.environ["PYENV_ROOT"] minor_version = LAST_RELEASES[version] - - lib_path = f"{PYENV_ROOT}/versions/{minor_version}/lib/python{version}/{name}" + python_dir = f"{PYENV_ROOT}/versions/{minor_version}" + lib_path = f"{python_dir}/lib/python{version}/{name}" if not os.path.exists(lib_path): lib_path += ".py" @@ -150,7 +150,11 @@ def run_test(name, version): os.chdir(name) os.putenv("PYTHONPATH", f"{os.getcwd()}/src") r = os.system( - f"{PYENV_ROOT}/versions/{minor_version}/bin/python -m unittest tests/test_{name}.py" + f"{python_dir}/bin/python -m pip install --root-user-action=ignore ." + ) + assert r == 0, r + r = os.system( + f"{python_dir}/bin/python -m unittest tests/test_{name}.py" ) assert r == 0, r finally: From 782932efd89538d4a43183fc9bb6dd5fc34a7fe3 Mon Sep 17 00:00:00 2001 From: "Jeong, YunWon" <69878+youknowone@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:56:21 +0900 Subject: [PATCH 16/47] Update README.md From c82f235b04f39ad56d5cf677f00afe2b1b8e9654 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Tue, 15 Oct 2024 19:39:16 +0100 Subject: [PATCH 17/47] Add Dockerfile for running tests without a local installation of pyenv Also updates README.md with details of how to run the tests --- README.md | 17 +++++++++++++++++ scripts/Dockerfile | 10 ++++++++++ 2 files changed, 27 insertions(+) create mode 100644 scripts/Dockerfile diff --git a/README.md b/README.md index f39612d..074ad74 100644 --- a/README.md +++ b/README.md @@ -56,3 +56,20 @@ There could be one more step - though this is a rejected idea in PEP 594. If we I'm not sure if this is the best way, but it will give developers the option to choose whether or not to do. I really hope that finally Python developers could decide to remove even more batteries in future. + + +## Tests + +The tests depend upon having [pyenv](https://github.com/pyenv/pyenv) installed and can be running with the command: +`python scripts/run_test.py ${MODULE_NAME} ${PYTHON_VERSION}` +Where: + +* MODULE_NAME is the name of directory in this repository, or `ALL` to run tests for all modules +* PYTHON_VERSION is the major and minor number of a valid python version, seperated by a `.` + +For example: +`python scripts/run_test.py aifc 3.13` + + +Alternatively, if you prefer to run your tests inside a docker container, you can run: +`docker build . -f scripts/Dockerfile -t test && docker run -e MODULE_NAME=aifc -e PYTHON_VERSION=3.12 -t test` \ No newline at end of file diff --git a/scripts/Dockerfile b/scripts/Dockerfile new file mode 100644 index 0000000..eaf72a1 --- /dev/null +++ b/scripts/Dockerfile @@ -0,0 +1,10 @@ +FROM advian/pyenv:alpine-3.20 + +ENV MODULE_NAME=ALL +ENV PYTHON_VERSION=3.13 +ENV CPYTHON_SRC=/usr/local/bin/python + +COPY . . +RUN pip install -r requirements.txt + +CMD [ "python scripts/run_test.py ${MODULE_NAME} ${PYTHON_VERSION}" ] \ No newline at end of file From 7132c61f93d5728f77d344692331ad25382bbcaf Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Tue, 15 Oct 2024 19:42:06 +0100 Subject: [PATCH 18/47] markdown tweaks --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 074ad74..1bcabce 100644 --- a/README.md +++ b/README.md @@ -61,15 +61,17 @@ I really hope that finally Python developers could decide to remove even more ba ## Tests The tests depend upon having [pyenv](https://github.com/pyenv/pyenv) installed and can be running with the command: + `python scripts/run_test.py ${MODULE_NAME} ${PYTHON_VERSION}` + Where: -* MODULE_NAME is the name of directory in this repository, or `ALL` to run tests for all modules -* PYTHON_VERSION is the major and minor number of a valid python version, seperated by a `.` +* _MODULE_NAME_ is the name of directory in this repository, or `ALL` to run tests for all modules +* _PYTHON_VERSION_ is the major and minor number of a valid python version, seperated by a `.` -For example: -`python scripts/run_test.py aifc 3.13` +For example: `python scripts/run_test.py aifc 3.13` Alternatively, if you prefer to run your tests inside a docker container, you can run: + `docker build . -f scripts/Dockerfile -t test && docker run -e MODULE_NAME=aifc -e PYTHON_VERSION=3.12 -t test` \ No newline at end of file From 722ebb086046ecfd726568f5bb5492cf0dd56c58 Mon Sep 17 00:00:00 2001 From: "Jeong, YunWon" <69878+youknowone@users.noreply.github.com> Date: Tue, 15 Oct 2024 13:43:56 +0900 Subject: [PATCH 19/47] Update README.md --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 1bcabce..019b76b 100644 --- a/README.md +++ b/README.md @@ -33,12 +33,14 @@ pip install standard-uu # e.g. `uu` can be installed by standard-uu ## Contribution guideline -Please do *NOT* submit any new features or any compatibility work. -This repository is archiving the old standard library installable via pip. -If you find any broken packages or missing features, please look for other projects that are actively developing alternative packages or fork this project. +Please do **NOT** submit any new features or anything beyond minimal compatibility work. +This repository is intended to archive the old standard library installable via pip, with *very minimal* compatibility support. -Please report any bug or submit patches if you encounter any issues with package generation. -Patches related to files under `template` and `scripts` are welcome! +If you find any missing features or broken packages due to changes in Python, rather than incomplete packaging, +please seek out other projects that are actively developing alternative packages or consider forking this project. + +Feel free to report any bugs or submit patches if you encounter issues with package generation. +Exception: Feature patches related to files under `template` and `scripts` are welcome! ## To Python developers From 4f8446807233e5f8b1303556dc753a31a7292c7f Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Sun, 20 Oct 2024 02:35:23 +0100 Subject: [PATCH 20/47] Update aifc module to support python 3.13 (#9) * Add audiofiles needed by aifc tests to run in python 3.13 Previously, the tests were relying on files which exist in python core. * Fixes https://github.com/youknowone/python-deadlib/issues/7 * remove deprecated error from aifc * Migrate aifc's dependencies which aren't supported by python 3.13 Python 3.13 removes various libraries from its core, including `chunk` and `audioop`, which are used by aifc. `audioop` has a replacement `audioop-lts` which is a drop in replacement for the core module - install that for versions 3.13 and above. `chunk` has a replacement called `chunkmuncher` which is on a slighly different namespace - switch to using this for all verions of python. * Move aifc audiodata into tests directory The tests depend on the audiotests.py file from python core, which hardcodes the directory name. Forking a copy of the file here to avoid tight coupling with python's own tests. --------- Co-authored-by: Jeong, YunWon <69878+youknowone@users.noreply.github.com> --- aifc/aifc/__init__.py | 12 +- aifc/pyproject.toml | 4 + aifc/tests/audiodata/Sine-1000Hz-300ms.aif | Bin 0 -> 61696 bytes aifc/tests/audiodata/pluck-alaw.aifc | Bin 0 -> 6910 bytes aifc/tests/audiodata/pluck-pcm16.aiff | Bin 0 -> 13506 bytes aifc/tests/audiodata/pluck-pcm24.aiff | Bin 0 -> 20120 bytes aifc/tests/audiodata/pluck-pcm32.aiff | Bin 0 -> 26734 bytes aifc/tests/audiodata/pluck-pcm8.aiff | Bin 0 -> 6892 bytes aifc/tests/audiodata/pluck-pcm8.wav | Bin 0 -> 6756 bytes aifc/tests/audiodata/pluck-ulaw.aifc | Bin 0 -> 6910 bytes aifc/tests/audiotests.py | 330 +++++++++++++++++++++ aifc/tests/test_aifc.py | 6 +- 12 files changed, 344 insertions(+), 8 deletions(-) create mode 100644 aifc/tests/audiodata/Sine-1000Hz-300ms.aif create mode 100644 aifc/tests/audiodata/pluck-alaw.aifc create mode 100644 aifc/tests/audiodata/pluck-pcm16.aiff create mode 100644 aifc/tests/audiodata/pluck-pcm24.aiff create mode 100644 aifc/tests/audiodata/pluck-pcm32.aiff create mode 100644 aifc/tests/audiodata/pluck-pcm8.aiff create mode 100644 aifc/tests/audiodata/pluck-pcm8.wav create mode 100644 aifc/tests/audiodata/pluck-ulaw.aifc create mode 100644 aifc/tests/audiotests.py diff --git a/aifc/aifc/__init__.py b/aifc/aifc/__init__.py index 5254987..e48e770 100644 --- a/aifc/aifc/__init__.py +++ b/aifc/aifc/__init__.py @@ -141,8 +141,8 @@ __all__ = ["Error", "open"] -warnings._deprecated(__name__, remove=(3, 13)) - +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) class Error(Exception): pass @@ -255,9 +255,11 @@ def _write_float(f, x): _write_ulong(f, himant) _write_ulong(f, lomant) -with warnings.catch_warnings(): - warnings.simplefilter("ignore", DeprecationWarning) - from chunk import Chunk +# python-deadlib: replace removed library chunk with third party library +# with warnings.catch_warnings(): +# warnings.simplefilter("ignore", DeprecationWarning) +# from chunk import Chunk +from chunkmuncher.chunk import Chunk from collections import namedtuple _aifc_params = namedtuple('_aifc_params', diff --git a/aifc/pyproject.toml b/aifc/pyproject.toml index bc56653..c02f801 100644 --- a/aifc/pyproject.toml +++ b/aifc/pyproject.toml @@ -13,6 +13,10 @@ classifiers = [ "Topic :: Software Development :: Libraries", "Programming Language :: Python :: 3", ] +dependencies = [ + "chunkmuncher>=0.0.2", # chunkmuncher sits of different namespace to python core chunk module, so can install it on all versions + "audioop-lts; python_version >= '3.13'", # audioop uses same namespace as python core module, so only install it on versions where it's not included +] [tool.setuptools.packages] find = {include = ["aifc*"]} diff --git a/aifc/tests/audiodata/Sine-1000Hz-300ms.aif b/aifc/tests/audiodata/Sine-1000Hz-300ms.aif new file mode 100644 index 0000000000000000000000000000000000000000..bf08f5ce859429eeeab213fd29a201b0d851b9c3 GIT binary patch literal 61696 zcmeI&F-t;G6ae5$QxH_-;Ns*IlCzCQp$4VU8$`!`gF`emiG#nv&1lHMO=u9Bnj^xc zA!uj`8XOw)(9%Ds;dAhL-@EtvIOu!tp7YgOXQwHBejOawYKN`U)#tR6)>7K9rtRwH z-PNkSdeu%&&QjXC|7m#_0TB=Z5fA|p5CIVo0TB=Z5fA|p_}>x8vgT1ruj{|ha^q>^ zDc{TYij(4`+$y&!rAn!qtLEx&^|$6_^D>)dv-Y4p=qx&m?x;J8ZM0*59FKm{KgPxQ zm?!3odEahkL#!Vm;0~h2hVSwKRrKNzgT}+KU%-b zKggfRU&+78AIjg#Kg*x1U#P#RAF1D|KdPUqU#q|K1N;C#zz^^P`~W||5AXy006)MF z@B{n+Kfn+01N;C#zz^^P`~W||5AXy006)MF@B{n+Kfn+01N;C#zz^^P`~W||5AXy0 z06)MF@B{n+Kfn+01N;C#zz^^P`~W||5AXy006)MF@B{n+Kfn+01N;C#zz^^P`~W|| z5AXy006)MF@B{n+Kfn+01N;C#zz^^P`~W||5AXy006)MF@B{n+Kfn+01N;C#zz^^P z`~W||5AXy006)MF@B{n+Kfn+01N;C#zz^^P`~W||5AXy006)MF@B{n+Kfn+01N;C# zzz^^P`~W||5AXy006)MF@B{n+Kfn+01N;C#zz^^P`~W||5AXy006)MF@B{n+Kfn+0 z1N;C#zz^^P`~W||5AXy006)MF@B{n+Kfn+01N;C#zz^^P`~W||5AXy006)MF@B{q7 HU;BY?t&pq( literal 0 HcmV?d00001 diff --git a/aifc/tests/audiodata/pluck-alaw.aifc b/aifc/tests/audiodata/pluck-alaw.aifc new file mode 100644 index 0000000000000000000000000000000000000000..3b7fbd2af75a0a190b0a507ec43afbf8bd2b2267 GIT binary patch literal 6910 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 B^uhoD literal 0 HcmV?d00001 diff --git a/aifc/tests/audiodata/pluck-pcm16.aiff b/aifc/tests/audiodata/pluck-pcm16.aiff new file mode 100644 index 0000000000000000000000000000000000000000..6c8c40d14092893a4b4af626f6caf5c8c826017d GIT binary patch literal 13506 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 literal 0 HcmV?d00001 diff --git a/aifc/tests/audiodata/pluck-pcm8.aiff b/aifc/tests/audiodata/pluck-pcm8.aiff new file mode 100644 index 0000000000000000000000000000000000000000..5de4f3b2d879bae0a41710cea4d0b1aad9309124 GIT binary patch literal 6892 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 D#5wot literal 0 HcmV?d00001 diff --git a/aifc/tests/audiodata/pluck-ulaw.aifc b/aifc/tests/audiodata/pluck-ulaw.aifc new file mode 100644 index 0000000000000000000000000000000000000000..3085cf097fb18a839a3ae5b9a47bd75cdef5f8a5 GIT binary patch literal 6910 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 0: + i += 1 + fout.writeframes(f.readframes(i)) + n -= i + fout.close() + fout = self.fout = self.module.open(TESTFN, 'rb') + f.rewind() + self.assertEqual(f.getparams(), fout.getparams()) + self.assertEqual(f.readframes(f.getnframes()), + fout.readframes(fout.getnframes())) + + def test_read_not_from_start(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + with open(self.sndfilepath, 'rb') as f: + testfile.write(f.read()) + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + with self.module.open(testfile, 'rb') as f: + self.assertEqual(f.getnchannels(), self.nchannels) + self.assertEqual(f.getsampwidth(), self.sampwidth) + self.assertEqual(f.getframerate(), self.framerate) + self.assertEqual(f.getnframes(), self.sndfilenframes) + self.assertEqual(f.readframes(self.nframes), self.frames) diff --git a/aifc/tests/test_aifc.py b/aifc/tests/test_aifc.py index d3863d4..84ed8c2 100644 --- a/aifc/tests/test_aifc.py +++ b/aifc/tests/test_aifc.py @@ -3,7 +3,7 @@ from test.support.warnings_helper import check_no_resource_warning, import_deprecated import unittest from unittest import mock -from test import audiotests +from tests import audiotests import io import sys import struct @@ -152,11 +152,11 @@ class AifcMiscTest(unittest.TestCase): def test_skipunknown(self): #Issue 2245 #This file contains chunk types aifc doesn't recognize. - f = aifc.open(findfile('Sine-1000Hz-300ms.aif')) + f = aifc.open(findfile('Sine-1000Hz-300ms.aif', subdir='tests/audiodata')) f.close() def test_close_opened_files_on_error(self): - non_aifc_file = findfile('pluck-pcm8.wav', subdir='audiodata') + non_aifc_file = findfile('pluck-pcm8.wav', subdir='tests/audiodata') with check_no_resource_warning(self): with self.assertRaises(aifc.Error): # Try opening a non-AIFC file, with the expectation that From 6907d45bfabd9f390f137a0853ffac73a4249c83 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Sun, 20 Oct 2024 02:36:32 +0100 Subject: [PATCH 21/47] Update sunau module to support python 3.13 (#12) * stop deprecation RuntimeError in sunau module * add audioo-lts as a dependency of sunau module, for versions of python where its not included in the core * Include relevant audiodata files from python core for sunau tests Also includes audiotests.py, so the tests aren't tightly coupled to the python core tests --- sunau/pyproject.toml | 3 + sunau/sunau/__init__.py | 3 +- sunau/tests/audiodata/pluck-pcm16.au | Bin 0 -> 13252 bytes sunau/tests/audiodata/pluck-pcm24.au | Bin 0 -> 19866 bytes sunau/tests/audiodata/pluck-pcm32.au | Bin 0 -> 26480 bytes sunau/tests/audiodata/pluck-pcm8.au | Bin 0 -> 6638 bytes sunau/tests/audiodata/pluck-ulaw.au | Bin 0 -> 6638 bytes sunau/tests/audiotests.py | 330 +++++++++++++++++++++++++++ sunau/tests/test_sunau.py | 2 +- 9 files changed, 336 insertions(+), 2 deletions(-) create mode 100644 sunau/tests/audiodata/pluck-pcm16.au create mode 100644 sunau/tests/audiodata/pluck-pcm24.au create mode 100644 sunau/tests/audiodata/pluck-pcm32.au create mode 100644 sunau/tests/audiodata/pluck-pcm8.au create mode 100644 sunau/tests/audiodata/pluck-ulaw.au create mode 100644 sunau/tests/audiotests.py diff --git a/sunau/pyproject.toml b/sunau/pyproject.toml index c9da8c7..0066aee 100644 --- a/sunau/pyproject.toml +++ b/sunau/pyproject.toml @@ -13,6 +13,9 @@ classifiers = [ "Topic :: Software Development :: Libraries", "Programming Language :: Python :: 3", ] +dependencies = [ + "audioop-lts; python_version >= '3.13'", # audioop uses same namespace as python core module, so only install it on versions where it's not included +] [tool.setuptools.packages] find = {include = ["sunau*"]} diff --git a/sunau/sunau/__init__.py b/sunau/sunau/__init__.py index c6caab9..cdc6d91 100644 --- a/sunau/sunau/__init__.py +++ b/sunau/sunau/__init__.py @@ -106,7 +106,8 @@ from collections import namedtuple import warnings -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) _sunau_params = namedtuple('_sunau_params', diff --git a/sunau/tests/audiodata/pluck-pcm16.au b/sunau/tests/audiodata/pluck-pcm16.au new file mode 100644 index 0000000000000000000000000000000000000000..398f07f071974314161f1f364d005586921eba1d GIT binary patch literal 13252 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 Sc_W7FgxYhTfS>2TI`IF$J<(PG literal 0 HcmV?d00001 diff --git a/sunau/tests/audiodata/pluck-pcm24.au b/sunau/tests/audiodata/pluck-pcm24.au new file mode 100644 index 0000000000000000000000000000000000000000..0bb230418a3844b81637c7b4b1ea3f18f3bfe2d6 GIT binary patch literal 19866 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 Q5k_cPsXyxS68(SuFDCQN5C8xG literal 0 HcmV?d00001 diff --git a/sunau/tests/audiodata/pluck-pcm32.au b/sunau/tests/audiodata/pluck-pcm32.au new file mode 100644 index 0000000000000000000000000000000000000000..92ee5965e40197bd2a086841f37f0d7ca681a03b GIT binary patch literal 26480 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/sunau/tests/audiodata/pluck-ulaw.au b/sunau/tests/audiodata/pluck-ulaw.au new file mode 100644 index 0000000000000000000000000000000000000000..11103535c6b6a401da742a3c76db68baf2c38ba1 GIT binary patch literal 6638 zcmWmGXH?tQnl5lp=A6mQIZkmU1|-poDjf+ms!$hIfCPwUT(Q%u<7Do=bIv50#6D?m zGy|fj($yPHLhY~K5e64*W8*Z(PU7TTW`B9V{noSB^X|1a@{KcHd-m*kWzU`?zTNpR zd-lNg?at>y=RUuC$-GB#O?(?n{z2pNa}Gp&fJ zr9-G<(nZ>f)qm@Wv0YHTJoT9fIlgD&W8ogr=To1}pe7GXQ|A7z)F`jWKbw9|^1{>? z%D833tvKrQd3~89NtKX&U@a&I^aWUu+zcaPo}(e_SJ?1IY|W?Ky=VSAnz?*Mo*^9* zemk~j{A1yNi05bjQ=UEto;{-YL_4Gts{cO!7wNxEUQlEjz(GXypV1;{Uvg{0K?oI0 z23-bUPC>wDvCq|kPw7r#j;C-xX?eNli+e(|N+p;|6Mr(XXW~Casgi^9AFB{@$b5|Q zg6yIzmVcN^HuSotT*fa5!_|oK`LZFcRqw(Vixl0ba-wvPWO#O1bHH}I z^{+TE{Oc48Bp#9k)`90CU!!(}kK+FtzSQkgLR2Ed=SvaYMfr8<9x-G3Th)F`S;s#7KKR$kQxNd(F@RSg7g9M$ zb485%`32vS+!7bQc4p)_xZ`iz2uq(jW%f(S0nuLR$FqM@eYx^qOE0VA)boZfmZr4V zSYY7Kxr}dR~>Q5iEgSlAdpykJNq2 zQ-@{@1X=%NuIM@G$8-BsG~>s{Sj~QwT6b}ARLhrNkp72oujC7Px-s?yV%HQWT?VIu zV!>-*U&58N>p2Atxw?O!1Izf@bZbS=#hQ59myF&Xj@6}>&Pv34q<^2QQ5`aVY&xmk ztK89CTo}|!cFhCAKTE!nub2+-3UDvN@kw8U3qgm$HIS9W!HlZ~nDa%7z0yNd<4U|a zqw^vKR>Cj-l1W>)>X&8xlIJ9sXD=yUSo%M!m$ZLTKs6T@dUZPGg~@c`bK)U+pLrh_ zhCK{RO#B9<104eAK<1ML&@0%g0A}VT(MytP`GOTvdx>DjY@;s}Te=>vyd}FT{&x|3 z>a+P5b)OqQ(Y~NKtp3NsHw(Y2znRgA{#9Hl|I!lE2rdG{;}Uy8e9$Z4q=d;-3H&N? z$&8U6ns`yTH7~X$P_Ls$b1>Oo6^U6V%|zK1@k@eO$tN>M)O_QA>Eo4q)mK-(FmCJm z=Lf{ki(_RMtm*7SMTxtn0MrM9Kw^{R=^|7gdB%Vj$Bw-q$ekYxWe}BFeFzNVYTk8f zz?3)JCxDE-DEwTCSC*OoX6(`aMK8C1>YQAeRa}w0D0*S`>lHn3KMsTdC#iQ$BqS#J z`^<^#euh{>5<>VdP9)EdKEhx~@ZQXN=n$&EQnQjR9UUth-aCFtJfVQv|HnOG+-u4V zeRiYQ`kSg(5-<46q7z zrs>j!$bRya4lR<8$Om8GOT^byh+AKEf3tqT7xUxAKmK9Atr`_)kN;KNrn&llGVZ|c z-Ot7M$1g*Uq-G$**#4c-Iqo=YX#dz@g^E6d$Vw3;PNqyE2IwLMY5ew}sBixePIN_E z(bQM*RZYSh`;PYYd~TbP&kN}M7X=xLYmbQ7L$H_xLR^2G6da!hLCH${UDqdfMv>PK zj~-Okmk2X)2`Y#rc?vPuB%FS8n9?uojU7yuTw7f(9V`5rh-=z+O1b^{(!h*YyRWFuZFFZ2y6 zuZrY+)Ns7upd%e6O<0V-6+fRMD;QoF9o6;XuF9|F55=ixN(C@+`jspR`-mx7eQEL^ z6BENt14l*=Yc&Ku6p?rkbRLT1!I3vo^%L`##S`QC;~?pww-R6quq-YLQm3m* zM(0Pa&tD^4HTN>cK)xF}f;4f;HPq-W$b7u?y71yy|FG+N+{6KZo;#e%g2aFh#WTUz zGR5T}OT0=qe|f53Oc8_T57vS*O<-v}0A7IUIReS>fb=Tm>WTjEMG18Tm?T-8+?zYN zlqrgxkdJ>ketB$m6e8aD3miF;qD%lm_CuhF{fL1o=u)f-tL{}^nbl1}6bINxpggb; zq=6Wbwk?ThxLR z`!6GtAyUv-;#BV1YH&i-Khith&k`^e;RVnXYw{FyxV~2)>rWg^5s6gaE??H@6fw8< z=jB7kGv(04%)^;T6rVA=idjr_Vxz;RUWH5s_P&gYg#^z zk-6z9ywq7Ff2Vg;)C(OXlzCjQb`+K@#vvW)YEBT zKqZ(*SP$kLg5-fjNkfGqwP)1YzgymjW^V1>g515~HXFA_wc~S@OR@O}6H-9Bq>-W#xtwnu&<@Ou zt2D+2Qhr887A%StoBH?zeLs&R8<9jw*;Uh3kxO!fcNhUn*JbFTS+Eoox<;qfX=v+M zTA)RwpO^`2AVr50z#wL_0C#;(IHDd{9MTB&%SL7o1_?(ZStWAgz*t|uY!nvEMB9i1 z3s=X*6Upz#Kq1MM>1KE-5|LNf5Ykz7tR7r2km_X_gjW*c;&YPb2t!l+Vd-_v z=(5yqchNVAg;`nIWtGO&(TTnR;aJfezTZou*NXMUzvMk_2#EY+`b8wNyAf zG%_ZX%Czo4{jut|@x}RhCB?VbCnZCJBcsdD&`1o{Djy#lxvtxRCnSPWp{Po9HKwQ% z>pZ(;f80_^ET;qNX_0jDMrkG(6bng3y|XA79~l<$<>E!Xl^d$`VaVAzINYlb=cOZq z!+hDVWpE7U=-kx6*x=lISa5oL8XWdE>Pc=PF+0H2S?u>%?FycU$j0Xv5HTxE{PRVBOMD#i%rbP00;v0gg`N3<}ZkpdL74BL_r`?g@lNG zQaCg;I)2oU$tt8tJbm+nvijHK3qS}gLWS@k;5lj3a*N!c14`e-{ODd4X~ZUW83Y=e zl9|4eFLa5d`ce0Yc6@eD6Yv(3kw|!9o|7{*Gr}L^ADhVxpqs^8eYznH<9s|8lubg- zq1KQYsAK~5uGFNm;-cAW;Z=cFxYEdgAmh?tX*!gsX-aMr1o?{5NwHeDU00cdf}xQ% z!py?>#5n(%2&%z&M8SUJ$TICD2nWe+%$~`550#2aDq^>a0F^D@hxGYPV_Lxis~wUX zmw`-I!=)vPm9WG;Hp`bxXy-ZtRBRri2yV-hofS?^j0c3U8MIck(!V%rq<4d{2|1@x zGg*zOQDuPQ3=EbT3^|+4tAOWA8{R46q$v`HfQVMU<1koiM!iKOf8~J*%p*)mK zgdlS>4N!HimFZttmQ0UNj;;tB=Q`I2*aFlhQiYcOERZitk(2q;lG%Ydfui1)LQ2hh zij*NL;VFo;+-RBTvBd^Ap^Uo4F|AZr?nt8~<>bIDPy@FZOXX`VLYXd1Q?rG%4Usjv*>W|6qw?njui7j@bR)r^X4 zgf*rXX2CD0PHHL?6&s4Suq6hJ$;SON4s_m6lS*zq2?HKBm{@%EK zUcaiURl}AGBL)t)41q>uk&$|oB_D^ykRm*VL!tG^OBDzMY@NbzvxeRqSY1 z)|ESR;W@O5u&8#gK2SXtKVm;ay>9$@A}Cv3(!HyL8}kB-$J=R0JSx95+mvm}Ct@(f zM@;ntrOBoyD^WT)P~H_FcM)7TJ;6v;cBtLqh3`~8Wsw@Ups`v5x`-%rHj3J|Z3`m` zn|?X8h%o1bR(iTwS;g5HLY^ykxu615M0ky?>rlE@7nquC9o#~E5Up(^`AYPqW{Qfd zx)C(*=v^ATu4qYTwRx6(BG0BjI~v#!hZTUM2FuF}<~7u;`)c?ak{|3k*9; z!%_a>4sKbUMzRrYHrZ_+r&sJS0|oB0{#l;_P@9)bg%*@A`tY~bB6?v78p}g3p*a{l zwvGT)YMb<%ui9`Xq#5lzd9(fWUG8E%z}E4UzXOpCz-?ig(Kf(g^#ubG_o5TyZuZH& zyQalp!kV*O|Gc?#3SWb%D8$zltzeE~2t_Qszf{N6z4pjYwC%2!t7Wa@=buh2^Bg?G z3DpnwwW!N$YqVnQ5w|6{8It<6ZoH?~r}iowYO8Lw#GD1RM(%$^`2G`a~~SdIC_@OsqR|CVOPM`Wh(-ndCZ}QYttdMztqnN z>H`Y5+NL#A&Dr+q;MT+PP8_SSf=saDwy_mhD()d+nWU=@^-wqSLV01EeinH_F=HQdHxrj1I3DUx*u+pz_Xsr#FTszf&?>6}ifsLk=mpBPG z@Dv;c|31M~rlWgWSicqC&fBEjX?u9`iS-%q)V!^ZuKImI#QM-mu+=y%{@=s$h&)si zqC|j*Dx~pf?PqNHK!yL|CjEUP7sDv72o;A3bUYbFy=5t}(gCaISx_C81v^9JNN7zR(fGB_I{?~Q9Qb9U>bH`%qADWg zc3Ggfnn)(_h(M`5dEx7W05nxNL>cVgXy;Aj|{;B!6jRF@?w>dP^58EzC0Xc3+arAM(?JuSIlg+K|=@Vk)QcKt+;j-n*RmM|x8L!|N;S~FHd(Zl-_7B|OFWg)T0j`LB%~EYCvxb4Y zE{j+01$>M^TX-p=4eJ6HZ@CW_YTo31M>$R4;#nMOfOM*yR$5znv&={`(eBoex#)KM z(VAmzC$>%lZ+o6BZ!Jaap0It*%GovV*>5@kx591qRQotVQ}};PlaK1dh3hwtKBAo^ zw%}{3X<_oY3PxE~*-n|6WTdWFF&Z(gxOP?-ulvzS$E%)aru&O)HeU#c+PW;|*7t4e zfX}INExVh%^#NN*7t#e+{Iz~un6+_yhxtYc4`0V%tWzFUvMN~R=gY0TW{6e8#&WT( z^tRTH-@DzXy&sq#F0ESw0cX_yhPA@lWsBM)4vllc+2OA7xr6$UKDgxP`SBszjpGlh z-!1RJH&B^d)Vt(b60`hFIY2T}e9Wdgd=s{r+S*Rvs>dxmXo}-F7IjQdE>S@>hZ5Tx9m(C z%XZ6t2QUIUAmXTX{pL0L7yOI6n?(wiM_ad=pU`@WTgvOYnKx*i6jo(3DOzbE+i8EW zD(i3!~^H?YrhJ zCaaoIU(!(B)WO|p4Rra>Sbtl+>sVX!Z93Zly8ZRtoF2fio3+i+>T-IQeak+puOUzt zuG#2(Q1bz)yOdK?d!P9$olRwv{~$XkHd>TXUq!4dX0saGxKCSx9f4D}56#=adL*#v zJ_RuB$9Byiun4RIryX2Zz+>E1ExvYtd6;#h>wf(o^_17h9*T_` zW^k)YYl&<|V=L#w=5Sl!1n{nT$G#B?ZF=5uFo9O!F0cly?Dq6Kz;Q-BChv;R?0eHs z3Nh9@?=}5G?I~}iH=M6}z-Xq`QBP6=yEy}lPF6)Nv7Xk@()4C?loveadc*Rg{Z=rt z;rqo^1#p1-z>VFME5LmR$9dOn-ZfW!5B-!7E!wuleM~=F(N1eTTXUb;Mz5!KQ6dyO z&CBRvk!y?VsSVtwGu(~V;8D+6>uxcDwT-|dcfErR>;ShMR>v~1?%+Cqc3Zv1UGs*Y z9;8NFZ?}HWe3R5g;dIyCXB}g(X*}u%6`*+-=UDWbl6p!*Q`2egoz_s7ugCVg?Y@8g zMsVBHR~j{TWI&F zPMVAH1B+EtT3^}F&~$>k-5Tx;oVK60J@DOF58d;%x@w&tIPW@L&K0M}+2K0nad}sL ztA4M)e%EZg+3~RU9OVSLh12k``fX+ty_xnM%}sYP?y+iX%j-!E^-bN}N3D_0;3?n( z+m2^*J-p@ba@V@fI`6ssE|U{*o^T!Y_aL?UkeZlWUdubY&CbY4-`l`XuB}M)cIcnJ22YFok!QnW z^H@Chy=}hjfIVml*+SoinQN@g_U+cEtXHXBOzs)>qne{E4)ZwU2E)w^Rh_A4G?F-s z=9ZS%d3Uk&tuPRFW|L!H+&ubpLahLmar{+J5n8G-sIhH fds6cT?I@$=c*A$Kr*_S5#$Bd|8LD~q(Let`eo3ow literal 0 HcmV?d00001 diff --git a/sunau/tests/audiotests.py b/sunau/tests/audiotests.py new file mode 100644 index 0000000..b7b3858 --- /dev/null +++ b/sunau/tests/audiotests.py @@ -0,0 +1,330 @@ +from test.support import findfile +from test.support.os_helper import TESTFN, unlink +import array +import io +import pickle + + +class UnseekableIO(io.FileIO): + def tell(self): + raise io.UnsupportedOperation + + def seek(self, *args, **kwargs): + raise io.UnsupportedOperation + + +class AudioTests: + close_fd = False + + def setUp(self): + self.f = self.fout = None + + def tearDown(self): + if self.f is not None: + self.f.close() + if self.fout is not None: + self.fout.close() + unlink(TESTFN) + + def check_params(self, f, nchannels, sampwidth, framerate, nframes, + comptype, compname): + self.assertEqual(f.getnchannels(), nchannels) + self.assertEqual(f.getsampwidth(), sampwidth) + self.assertEqual(f.getframerate(), framerate) + self.assertEqual(f.getnframes(), nframes) + self.assertEqual(f.getcomptype(), comptype) + self.assertEqual(f.getcompname(), compname) + + params = f.getparams() + self.assertEqual(params, + (nchannels, sampwidth, framerate, nframes, comptype, compname)) + self.assertEqual(params.nchannels, nchannels) + self.assertEqual(params.sampwidth, sampwidth) + self.assertEqual(params.framerate, framerate) + self.assertEqual(params.nframes, nframes) + self.assertEqual(params.comptype, comptype) + self.assertEqual(params.compname, compname) + + for proto in range(pickle.HIGHEST_PROTOCOL + 1): + dump = pickle.dumps(params, proto) + self.assertEqual(pickle.loads(dump), params) + + +class AudioWriteTests(AudioTests): + + def create_file(self, testfile): + f = self.fout = self.module.open(testfile, 'wb') + f.setnchannels(self.nchannels) + f.setsampwidth(self.sampwidth) + f.setframerate(self.framerate) + f.setcomptype(self.comptype, self.compname) + return f + + def check_file(self, testfile, nframes, frames): + with self.module.open(testfile, 'rb') as f: + self.assertEqual(f.getnchannels(), self.nchannels) + self.assertEqual(f.getsampwidth(), self.sampwidth) + self.assertEqual(f.getframerate(), self.framerate) + self.assertEqual(f.getnframes(), nframes) + self.assertEqual(f.readframes(nframes), frames) + + def test_write_params(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(self.frames) + self.check_params(f, self.nchannels, self.sampwidth, self.framerate, + self.nframes, self.comptype, self.compname) + f.close() + + def test_write_context_manager_calls_close(self): + # Close checks for a minimum header and will raise an error + # if it is not set, so this proves that close is called. + with self.assertRaises(self.module.Error): + with self.module.open(TESTFN, 'wb'): + pass + with self.assertRaises(self.module.Error): + with open(TESTFN, 'wb') as testfile: + with self.module.open(testfile): + pass + + def test_context_manager_with_open_file(self): + with open(TESTFN, 'wb') as testfile: + with self.module.open(testfile) as f: + f.setnchannels(self.nchannels) + f.setsampwidth(self.sampwidth) + f.setframerate(self.framerate) + f.setcomptype(self.comptype, self.compname) + self.assertEqual(testfile.closed, self.close_fd) + with open(TESTFN, 'rb') as testfile: + with self.module.open(testfile) as f: + self.assertFalse(f.getfp().closed) + params = f.getparams() + self.assertEqual(params.nchannels, self.nchannels) + self.assertEqual(params.sampwidth, self.sampwidth) + self.assertEqual(params.framerate, self.framerate) + if not self.close_fd: + self.assertIsNone(f.getfp()) + self.assertEqual(testfile.closed, self.close_fd) + + def test_context_manager_with_filename(self): + # If the file doesn't get closed, this test won't fail, but it will + # produce a resource leak warning. + with self.module.open(TESTFN, 'wb') as f: + f.setnchannels(self.nchannels) + f.setsampwidth(self.sampwidth) + f.setframerate(self.framerate) + f.setcomptype(self.comptype, self.compname) + with self.module.open(TESTFN) as f: + self.assertFalse(f.getfp().closed) + params = f.getparams() + self.assertEqual(params.nchannels, self.nchannels) + self.assertEqual(params.sampwidth, self.sampwidth) + self.assertEqual(params.framerate, self.framerate) + if not self.close_fd: + self.assertIsNone(f.getfp()) + + def test_write(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(self.frames) + f.close() + + self.check_file(TESTFN, self.nframes, self.frames) + + def test_write_bytearray(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(bytearray(self.frames)) + f.close() + + self.check_file(TESTFN, self.nframes, self.frames) + + def test_write_array(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(array.array('h', self.frames)) + f.close() + + self.check_file(TESTFN, self.nframes, self.frames) + + def test_write_memoryview(self): + f = self.create_file(TESTFN) + f.setnframes(self.nframes) + f.writeframes(memoryview(self.frames)) + f.close() + + self.check_file(TESTFN, self.nframes, self.frames) + + def test_incompleted_write(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes + 1) + f.writeframes(self.frames) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + def test_multiple_writes(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes) + framesize = self.nchannels * self.sampwidth + f.writeframes(self.frames[:-framesize]) + f.writeframes(self.frames[-framesize:]) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + def test_overflowed_write(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes - 1) + f.writeframes(self.frames) + f.close() + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes, self.frames) + + def test_unseekable_read(self): + with self.create_file(TESTFN) as f: + f.setnframes(self.nframes) + f.writeframes(self.frames) + + with UnseekableIO(TESTFN, 'rb') as testfile: + self.check_file(testfile, self.nframes, self.frames) + + def test_unseekable_write(self): + with UnseekableIO(TESTFN, 'wb') as testfile: + with self.create_file(testfile) as f: + f.setnframes(self.nframes) + f.writeframes(self.frames) + + self.check_file(TESTFN, self.nframes, self.frames) + + def test_unseekable_incompleted_write(self): + with UnseekableIO(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes + 1) + try: + f.writeframes(self.frames) + except OSError: + pass + try: + f.close() + except OSError: + pass + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + self.check_file(testfile, self.nframes + 1, self.frames) + + def test_unseekable_overflowed_write(self): + with UnseekableIO(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + f = self.create_file(testfile) + f.setnframes(self.nframes - 1) + try: + f.writeframes(self.frames) + except OSError: + pass + try: + f.close() + except OSError: + pass + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + framesize = self.nchannels * self.sampwidth + self.check_file(testfile, self.nframes - 1, self.frames[:-framesize]) + + +class AudioTestsWithSourceFile(AudioTests): + + @classmethod + def setUpClass(cls): + cls.sndfilepath = findfile(cls.sndfilename, subdir='tests/audiodata') + + def test_read_params(self): + f = self.f = self.module.open(self.sndfilepath) + #self.assertEqual(f.getfp().name, self.sndfilepath) + self.check_params(f, self.nchannels, self.sampwidth, self.framerate, + self.sndfilenframes, self.comptype, self.compname) + + def test_close(self): + with open(self.sndfilepath, 'rb') as testfile: + f = self.f = self.module.open(testfile) + self.assertFalse(testfile.closed) + f.close() + self.assertEqual(testfile.closed, self.close_fd) + with open(TESTFN, 'wb') as testfile: + fout = self.fout = self.module.open(testfile, 'wb') + self.assertFalse(testfile.closed) + with self.assertRaises(self.module.Error): + fout.close() + self.assertEqual(testfile.closed, self.close_fd) + fout.close() # do nothing + + def test_read(self): + framesize = self.nchannels * self.sampwidth + chunk1 = self.frames[:2 * framesize] + chunk2 = self.frames[2 * framesize: 4 * framesize] + f = self.f = self.module.open(self.sndfilepath) + self.assertEqual(f.readframes(0), b'') + self.assertEqual(f.tell(), 0) + self.assertEqual(f.readframes(2), chunk1) + f.rewind() + pos0 = f.tell() + self.assertEqual(pos0, 0) + self.assertEqual(f.readframes(2), chunk1) + pos2 = f.tell() + self.assertEqual(pos2, 2) + self.assertEqual(f.readframes(2), chunk2) + f.setpos(pos2) + self.assertEqual(f.readframes(2), chunk2) + f.setpos(pos0) + self.assertEqual(f.readframes(2), chunk1) + with self.assertRaises(self.module.Error): + f.setpos(-1) + with self.assertRaises(self.module.Error): + f.setpos(f.getnframes() + 1) + + def test_copy(self): + f = self.f = self.module.open(self.sndfilepath) + fout = self.fout = self.module.open(TESTFN, 'wb') + fout.setparams(f.getparams()) + i = 0 + n = f.getnframes() + while n > 0: + i += 1 + fout.writeframes(f.readframes(i)) + n -= i + fout.close() + fout = self.fout = self.module.open(TESTFN, 'rb') + f.rewind() + self.assertEqual(f.getparams(), fout.getparams()) + self.assertEqual(f.readframes(f.getnframes()), + fout.readframes(fout.getnframes())) + + def test_read_not_from_start(self): + with open(TESTFN, 'wb') as testfile: + testfile.write(b'ababagalamaga') + with open(self.sndfilepath, 'rb') as f: + testfile.write(f.read()) + + with open(TESTFN, 'rb') as testfile: + self.assertEqual(testfile.read(13), b'ababagalamaga') + with self.module.open(testfile, 'rb') as f: + self.assertEqual(f.getnchannels(), self.nchannels) + self.assertEqual(f.getsampwidth(), self.sampwidth) + self.assertEqual(f.getframerate(), self.framerate) + self.assertEqual(f.getnframes(), self.sndfilenframes) + self.assertEqual(f.readframes(self.nframes), self.frames) diff --git a/sunau/tests/test_sunau.py b/sunau/tests/test_sunau.py index 40408b0..ced7e8b 100644 --- a/sunau/tests/test_sunau.py +++ b/sunau/tests/test_sunau.py @@ -1,5 +1,5 @@ import unittest -from test import audiotests +from tests import audiotests import io import struct import sys From 067441de714cee14171406b79e8277e4f8a73c8f Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Sun, 20 Oct 2024 02:37:18 +0100 Subject: [PATCH 22/47] Update various modules to support python 3.13 (#13) * Keep deprecation as warning, but don't throw error --- cgi/cgi/__init__.py | 4 +++- cgitb/cgitb/__init__.py | 3 ++- chunk/chunk/__init__.py | 3 ++- nntplib/nntplib/__init__.py | 3 ++- pipes/pipes/__init__.py | 3 ++- telnetlib/telnetlib/__init__.py | 3 ++- uu/uu/__init__.py | 3 ++- xdrlib/xdrlib/__init__.py | 3 ++- 8 files changed, 17 insertions(+), 8 deletions(-) diff --git a/cgi/cgi/__init__.py b/cgi/cgi/__init__.py index 8787567..80258dc 100755 --- a/cgi/cgi/__init__.py +++ b/cgi/cgi/__init__.py @@ -54,7 +54,9 @@ "print_environ_usage"] -warnings._deprecated(__name__, remove=(3,13)) +# python-deadlib: Remove deprecation warning +# # python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) # Logging support # =============== diff --git a/cgitb/cgitb/__init__.py b/cgitb/cgitb/__init__.py index f6b97f2..d809d61 100644 --- a/cgitb/cgitb/__init__.py +++ b/cgitb/cgitb/__init__.py @@ -34,7 +34,8 @@ import warnings from html import escape as html_escape -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) def reset(): diff --git a/chunk/chunk/__init__.py b/chunk/chunk/__init__.py index 618781e..5d3b1e8 100644 --- a/chunk/chunk/__init__.py +++ b/chunk/chunk/__init__.py @@ -50,7 +50,8 @@ import warnings -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) class Chunk: def __init__(self, file, align=True, bigendian=True, inclheader=False): diff --git a/nntplib/nntplib/__init__.py b/nntplib/nntplib/__init__.py index dddea05..aef0a5e 100644 --- a/nntplib/nntplib/__init__.py +++ b/nntplib/nntplib/__init__.py @@ -86,7 +86,8 @@ "decode_header", ] -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) # maximal line length when calling readline(). This is to prevent # reading arbitrary length lines. RFC 3977 limits NNTP line length to diff --git a/pipes/pipes/__init__.py b/pipes/pipes/__init__.py index 61d63b4..9dfa23c 100644 --- a/pipes/pipes/__init__.py +++ b/pipes/pipes/__init__.py @@ -65,7 +65,8 @@ # (quote used to be an undocumented but used function in pipes) from shlex import quote -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) __all__ = ["Template"] diff --git a/telnetlib/telnetlib/__init__.py b/telnetlib/telnetlib/__init__.py index 62d6361..299f226 100644 --- a/telnetlib/telnetlib/__init__.py +++ b/telnetlib/telnetlib/__init__.py @@ -39,7 +39,8 @@ from time import monotonic as _time import warnings -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) __all__ = ["Telnet"] diff --git a/uu/uu/__init__.py b/uu/uu/__init__.py index 26bb59a..de0ce33 100644 --- a/uu/uu/__init__.py +++ b/uu/uu/__init__.py @@ -35,7 +35,8 @@ import sys import warnings -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) __all__ = ["Error", "encode", "decode"] diff --git a/xdrlib/xdrlib/__init__.py b/xdrlib/xdrlib/__init__.py index f8c2c18..a02cf55 100644 --- a/xdrlib/xdrlib/__init__.py +++ b/xdrlib/xdrlib/__init__.py @@ -9,7 +9,8 @@ from functools import wraps import warnings -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) __all__ = ["Error", "Packer", "Unpacker", "ConversionError"] From e8a0a57e6dc5bf45bf7559ef849f21d60097e00c Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Sun, 20 Oct 2024 13:47:40 +0900 Subject: [PATCH 23/47] add internal dependencies for asynchat, smtpd --- asynchat/pyproject.toml | 3 +++ smtpd/pyproject.toml | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/asynchat/pyproject.toml b/asynchat/pyproject.toml index d9bf532..aae99d8 100644 --- a/asynchat/pyproject.toml +++ b/asynchat/pyproject.toml @@ -13,6 +13,9 @@ classifiers = [ "Topic :: Software Development :: Libraries", "Programming Language :: Python :: 3", ] +dependencies = [ + "standard-asyncore; python_version >= '3.12'", +] [tool.setuptools.packages] find = {include = ["asynchat*"]} diff --git a/smtpd/pyproject.toml b/smtpd/pyproject.toml index 70079d8..b002541 100644 --- a/smtpd/pyproject.toml +++ b/smtpd/pyproject.toml @@ -13,6 +13,10 @@ classifiers = [ "Topic :: Software Development :: Libraries", "Programming Language :: Python :: 3", ] +dependencies = [ + "standard-asyncore; python_version >= '3.12'", + "standard-asynchat; python_version >= '3.12'", +] [tool.setuptools.packages] find = {include = ["smtpd*"]} From 7ff576ef744e8bf25983604809653bc6ff0821d1 Mon Sep 17 00:00:00 2001 From: "Jeong, YunWon" <69878+youknowone@users.noreply.github.com> Date: Mon, 21 Oct 2024 14:31:56 +0900 Subject: [PATCH 24/47] Update remaining modules to support Python 3.13 (#14) * Fix asyncore, asynchat, smtpd not to raise RuntimeError * Fix mailcap not to raise RuntimeError * Fix crypt, imghdr, sndhdr not to raise RuntimeError --------- Co-authored-by: Luke Blaney --- asynchat/asynchat/__init__.py | 11 ++++++----- asyncore/asyncore/__init__.py | 8 +++++--- crypt/crypt/__init__.py | 3 ++- imghdr/imghdr/__init__.py | 3 ++- mailcap/mailcap/__init__.py | 10 ++++++---- smtpd/smtpd/__init__.py | 11 ++++++----- sndhdr/sndhdr/__init__.py | 3 ++- 7 files changed, 29 insertions(+), 20 deletions(-) diff --git a/asynchat/asynchat/__init__.py b/asynchat/asynchat/__init__.py index bed797e..2633055 100644 --- a/asynchat/asynchat/__init__.py +++ b/asynchat/asynchat/__init__.py @@ -48,12 +48,13 @@ import asyncore from collections import deque -from warnings import _deprecated - -_DEPRECATION_MSG = ('The {name} module is deprecated and will be removed in ' - 'Python {remove}. The recommended replacement is asyncio') -_deprecated(__name__, _DEPRECATION_MSG, remove=(3, 12)) +import warnings +# python-deadlib: Replace deprecation warning not to raise exception +_DEPRECATION_MSG = (f'The {__name__} module was removed in ' + 'Python 3.12. The recommended replacement is asyncio. ' + 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') +warnings.warn(_DEPRECATION_MSG, DeprecationWarning) class async_chat(asyncore.dispatcher): diff --git a/asyncore/asyncore/__init__.py b/asyncore/asyncore/__init__.py index 57c8687..d1b1c0e 100644 --- a/asyncore/asyncore/__init__.py +++ b/asyncore/asyncore/__init__.py @@ -57,9 +57,11 @@ ENOTCONN, ESHUTDOWN, EISCONN, EBADF, ECONNABORTED, EPIPE, EAGAIN, \ errorcode -_DEPRECATION_MSG = ('The {name} module is deprecated and will be removed in ' - 'Python {remove}. The recommended replacement is asyncio') -warnings._deprecated(__name__, _DEPRECATION_MSG, remove=(3, 12)) +# python-deadlib: Replace deprecation warning not to raise exception +_DEPRECATION_MSG = (f'The {__name__} module was removed in ' + 'Python 3.12. The recommended replacement is asyncio. ' + 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') +warnings.warn(_DEPRECATION_MSG, DeprecationWarning) _DISCONNECTED = frozenset({ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE, diff --git a/crypt/crypt/__init__.py b/crypt/crypt/__init__.py index de4a14a..96caa6d 100644 --- a/crypt/crypt/__init__.py +++ b/crypt/crypt/__init__.py @@ -17,7 +17,8 @@ from collections import namedtuple as _namedtuple -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) _saltchars = _string.ascii_letters + _string.digits + './' diff --git a/imghdr/imghdr/__init__.py b/imghdr/imghdr/__init__.py index 3386888..74867a2 100644 --- a/imghdr/imghdr/__init__.py +++ b/imghdr/imghdr/__init__.py @@ -6,7 +6,8 @@ __all__ = ["what"] -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) #-------------------------# diff --git a/mailcap/mailcap/__init__.py b/mailcap/mailcap/__init__.py index 2f4656e..d99b017 100644 --- a/mailcap/mailcap/__init__.py +++ b/mailcap/mailcap/__init__.py @@ -7,10 +7,12 @@ __all__ = ["getcaps","findmatch"] -_DEPRECATION_MSG = ('The {name} module is deprecated and will be removed in ' - 'Python {remove}. See the mimetypes module for an ' - 'alternative.') -warnings._deprecated(__name__, _DEPRECATION_MSG, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +_DEPRECATION_MSG = ('The {__name__} module was removed in ' + 'Python 3.13. See the mimetypes module for an ' + 'alternative.' + 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') +warnings.warn(_DEPRECATION_MSG, DeprecationWarning) def lineno_sort_key(entry): diff --git a/smtpd/smtpd/__init__.py b/smtpd/smtpd/__init__.py index b23579f..7612ee0 100755 --- a/smtpd/smtpd/__init__.py +++ b/smtpd/smtpd/__init__.py @@ -77,18 +77,19 @@ import time import socket import collections -from warnings import _deprecated, warn +from warnings import warn from email._header_value_parser import get_addr_spec, get_angle_addr __all__ = [ "SMTPChannel", "SMTPServer", "DebuggingServer", "PureProxy", ] -_DEPRECATION_MSG = ('The {name} module is deprecated and unmaintained and will ' - 'be removed in Python {remove}. Please see aiosmtpd ' +_DEPRECATION_MSG = ('The {__name__} module was ' + 'removed in Python 3.12. Please see aiosmtpd ' '(https://aiosmtpd.readthedocs.io/) for the recommended ' - 'replacement.') -_deprecated(__name__, _DEPRECATION_MSG, remove=(3, 12)) + 'replacement. ' + 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') +warn(_DEPRECATION_MSG, DeprecationWarning) # These are imported after the above warning so that users get the correct diff --git a/sndhdr/sndhdr/__init__.py b/sndhdr/sndhdr/__init__.py index 45def9a..18dd978 100644 --- a/sndhdr/sndhdr/__init__.py +++ b/sndhdr/sndhdr/__init__.py @@ -29,7 +29,8 @@ import warnings -warnings._deprecated(__name__, remove=(3, 13)) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) # The file structure is top-down except that the test program and its # subroutine come last. From 9b1266df639a266735eb2d46efef4cabeec37c49 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sun, 27 Oct 2024 10:53:15 +0100 Subject: [PATCH 25/47] Format DeprecationWarning --- aifc/aifc/__init__.py | 7 ++++++- asynchat/asynchat/__init__.py | 10 ++++++---- asyncore/asyncore/__init__.py | 10 ++++++---- cgi/cgi/__init__.py | 10 +++++++--- cgitb/cgitb/__init__.py | 7 ++++++- chunk/chunk/__init__.py | 7 ++++++- crypt/crypt/__init__.py | 7 ++++++- imghdr/imghdr/__init__.py | 7 ++++++- mailcap/mailcap/__init__.py | 11 ++++++----- nntplib/nntplib/__init__.py | 7 ++++++- pipes/pipes/__init__.py | 7 ++++++- smtpd/smtpd/__init__.py | 14 ++++++++------ sndhdr/sndhdr/__init__.py | 7 ++++++- sunau/sunau/__init__.py | 7 ++++++- telnetlib/telnetlib/__init__.py | 7 ++++++- uu/uu/__init__.py | 7 ++++++- xdrlib/xdrlib/__init__.py | 7 ++++++- 17 files changed, 105 insertions(+), 34 deletions(-) diff --git a/aifc/aifc/__init__.py b/aifc/aifc/__init__.py index e48e770..3843456 100644 --- a/aifc/aifc/__init__.py +++ b/aifc/aifc/__init__.py @@ -142,7 +142,12 @@ # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) class Error(Exception): pass diff --git a/asynchat/asynchat/__init__.py b/asynchat/asynchat/__init__.py index 2633055..de3aea5 100644 --- a/asynchat/asynchat/__init__.py +++ b/asynchat/asynchat/__init__.py @@ -51,10 +51,12 @@ import warnings # python-deadlib: Replace deprecation warning not to raise exception -_DEPRECATION_MSG = (f'The {__name__} module was removed in ' - 'Python 3.12. The recommended replacement is asyncio. ' - 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') -warnings.warn(_DEPRECATION_MSG, DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.12. The recommended replacement is asyncio. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) class async_chat(asyncore.dispatcher): diff --git a/asyncore/asyncore/__init__.py b/asyncore/asyncore/__init__.py index d1b1c0e..30cc582 100644 --- a/asyncore/asyncore/__init__.py +++ b/asyncore/asyncore/__init__.py @@ -58,10 +58,12 @@ errorcode # python-deadlib: Replace deprecation warning not to raise exception -_DEPRECATION_MSG = (f'The {__name__} module was removed in ' - 'Python 3.12. The recommended replacement is asyncio. ' - 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') -warnings.warn(_DEPRECATION_MSG, DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.12. The recommended replacement is asyncio. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) _DISCONNECTED = frozenset({ECONNRESET, ENOTCONN, ESHUTDOWN, ECONNABORTED, EPIPE, diff --git a/cgi/cgi/__init__.py b/cgi/cgi/__init__.py index 80258dc..736b885 100755 --- a/cgi/cgi/__init__.py +++ b/cgi/cgi/__init__.py @@ -54,9 +54,13 @@ "print_environ_usage"] -# python-deadlib: Remove deprecation warning -# # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +# python-deadlib: Replace deprecation warning not to raise exception +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) # Logging support # =============== diff --git a/cgitb/cgitb/__init__.py b/cgitb/cgitb/__init__.py index d809d61..93d56fc 100644 --- a/cgitb/cgitb/__init__.py +++ b/cgitb/cgitb/__init__.py @@ -35,7 +35,12 @@ from html import escape as html_escape # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) def reset(): diff --git a/chunk/chunk/__init__.py b/chunk/chunk/__init__.py index 5d3b1e8..424cbab 100644 --- a/chunk/chunk/__init__.py +++ b/chunk/chunk/__init__.py @@ -51,7 +51,12 @@ import warnings # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) class Chunk: def __init__(self, file, align=True, bigendian=True, inclheader=False): diff --git a/crypt/crypt/__init__.py b/crypt/crypt/__init__.py index 96caa6d..732e53b 100644 --- a/crypt/crypt/__init__.py +++ b/crypt/crypt/__init__.py @@ -18,7 +18,12 @@ # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) _saltchars = _string.ascii_letters + _string.digits + './' diff --git a/imghdr/imghdr/__init__.py b/imghdr/imghdr/__init__.py index 74867a2..1fb09ac 100644 --- a/imghdr/imghdr/__init__.py +++ b/imghdr/imghdr/__init__.py @@ -7,7 +7,12 @@ # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) #-------------------------# diff --git a/mailcap/mailcap/__init__.py b/mailcap/mailcap/__init__.py index d99b017..3054063 100644 --- a/mailcap/mailcap/__init__.py +++ b/mailcap/mailcap/__init__.py @@ -8,11 +8,12 @@ # python-deadlib: Replace deprecation warning not to raise exception -_DEPRECATION_MSG = ('The {__name__} module was removed in ' - 'Python 3.13. See the mimetypes module for an ' - 'alternative.' - 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') -warnings.warn(_DEPRECATION_MSG, DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. See the mimetypes module for an alternative. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) def lineno_sort_key(entry): diff --git a/nntplib/nntplib/__init__.py b/nntplib/nntplib/__init__.py index aef0a5e..a08b925 100644 --- a/nntplib/nntplib/__init__.py +++ b/nntplib/nntplib/__init__.py @@ -87,7 +87,12 @@ ] # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) # maximal line length when calling readline(). This is to prevent # reading arbitrary length lines. RFC 3977 limits NNTP line length to diff --git a/pipes/pipes/__init__.py b/pipes/pipes/__init__.py index 9dfa23c..1057bfb 100644 --- a/pipes/pipes/__init__.py +++ b/pipes/pipes/__init__.py @@ -66,7 +66,12 @@ from shlex import quote # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) __all__ = ["Template"] diff --git a/smtpd/smtpd/__init__.py b/smtpd/smtpd/__init__.py index 7612ee0..d293819 100755 --- a/smtpd/smtpd/__init__.py +++ b/smtpd/smtpd/__init__.py @@ -84,12 +84,14 @@ "SMTPChannel", "SMTPServer", "DebuggingServer", "PureProxy", ] -_DEPRECATION_MSG = ('The {__name__} module was ' - 'removed in Python 3.12. Please see aiosmtpd ' - '(https://aiosmtpd.readthedocs.io/) for the recommended ' - 'replacement. ' - 'Please be aware that you are currently NOT using standard "{__name__}", but instead a separately installed "standard-{__name__}".') -warn(_DEPRECATION_MSG, DeprecationWarning) +# python-deadlib: Replace deprecation warning not to raise exception +warn( + f"{__name__} was removed in Python 3.12. Please see " + "aiosmtpd (https://aiosmtpd.readthedocs.io/) for the recommended replacement." + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) # These are imported after the above warning so that users get the correct diff --git a/sndhdr/sndhdr/__init__.py b/sndhdr/sndhdr/__init__.py index 18dd978..370e636 100644 --- a/sndhdr/sndhdr/__init__.py +++ b/sndhdr/sndhdr/__init__.py @@ -30,7 +30,12 @@ import warnings # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) # The file structure is top-down except that the test program and its # subroutine come last. diff --git a/sunau/sunau/__init__.py b/sunau/sunau/__init__.py index cdc6d91..426b307 100644 --- a/sunau/sunau/__init__.py +++ b/sunau/sunau/__init__.py @@ -107,7 +107,12 @@ import warnings # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) _sunau_params = namedtuple('_sunau_params', diff --git a/telnetlib/telnetlib/__init__.py b/telnetlib/telnetlib/__init__.py index 299f226..ba2d2ac 100644 --- a/telnetlib/telnetlib/__init__.py +++ b/telnetlib/telnetlib/__init__.py @@ -40,7 +40,12 @@ import warnings # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) __all__ = ["Telnet"] diff --git a/uu/uu/__init__.py b/uu/uu/__init__.py index de0ce33..a40842c 100644 --- a/uu/uu/__init__.py +++ b/uu/uu/__init__.py @@ -36,7 +36,12 @@ import warnings # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) __all__ = ["Error", "encode", "decode"] diff --git a/xdrlib/xdrlib/__init__.py b/xdrlib/xdrlib/__init__.py index a02cf55..bbeeca7 100644 --- a/xdrlib/xdrlib/__init__.py +++ b/xdrlib/xdrlib/__init__.py @@ -10,7 +10,12 @@ import warnings # python-deadlib: Replace deprecation warning not to raise exception -warnings.warn(f"{__name__} was removed in Python 3.13. Please be aware that you are currently NOT using standard '{__name__}', but instead a separately installed 'standard-{__name__}'.", DeprecationWarning) +warnings.warn( + f"{__name__} was removed in Python 3.13. " + f"Please be aware that you are currently NOT using standard '{__name__}', " + f"but instead a separately installed 'standard-{__name__}'.", + DeprecationWarning, +) __all__ = ["Error", "Packer", "Unpacker", "ConversionError"] From ccb1eb0ffadf2e28eb59e375ba5d81aff9d322de Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sun, 27 Oct 2024 10:55:54 +0100 Subject: [PATCH 26/47] Increase stacklevel for DeprecationWarning --- aifc/aifc/__init__.py | 2 +- asynchat/asynchat/__init__.py | 2 +- asyncore/asyncore/__init__.py | 2 +- cgi/cgi/__init__.py | 2 +- cgitb/cgitb/__init__.py | 2 +- chunk/chunk/__init__.py | 2 +- crypt/crypt/__init__.py | 2 +- imghdr/imghdr/__init__.py | 2 +- mailcap/mailcap/__init__.py | 2 +- nntplib/nntplib/__init__.py | 2 +- pipes/pipes/__init__.py | 2 +- smtpd/smtpd/__init__.py | 2 +- sndhdr/sndhdr/__init__.py | 2 +- sunau/sunau/__init__.py | 2 +- telnetlib/telnetlib/__init__.py | 2 +- uu/uu/__init__.py | 2 +- xdrlib/xdrlib/__init__.py | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aifc/aifc/__init__.py b/aifc/aifc/__init__.py index 3843456..4ae35b6 100644 --- a/aifc/aifc/__init__.py +++ b/aifc/aifc/__init__.py @@ -146,7 +146,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) class Error(Exception): diff --git a/asynchat/asynchat/__init__.py b/asynchat/asynchat/__init__.py index de3aea5..60914a5 100644 --- a/asynchat/asynchat/__init__.py +++ b/asynchat/asynchat/__init__.py @@ -55,7 +55,7 @@ f"{__name__} was removed in Python 3.12. The recommended replacement is asyncio. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/asyncore/asyncore/__init__.py b/asyncore/asyncore/__init__.py index 30cc582..c44a92c 100644 --- a/asyncore/asyncore/__init__.py +++ b/asyncore/asyncore/__init__.py @@ -62,7 +62,7 @@ f"{__name__} was removed in Python 3.12. The recommended replacement is asyncio. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/cgi/cgi/__init__.py b/cgi/cgi/__init__.py index 736b885..412fa6c 100755 --- a/cgi/cgi/__init__.py +++ b/cgi/cgi/__init__.py @@ -59,7 +59,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) # Logging support diff --git a/cgitb/cgitb/__init__.py b/cgitb/cgitb/__init__.py index 93d56fc..3f29f54 100644 --- a/cgitb/cgitb/__init__.py +++ b/cgitb/cgitb/__init__.py @@ -39,7 +39,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/chunk/chunk/__init__.py b/chunk/chunk/__init__.py index 424cbab..d3ad4b3 100644 --- a/chunk/chunk/__init__.py +++ b/chunk/chunk/__init__.py @@ -55,7 +55,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) class Chunk: diff --git a/crypt/crypt/__init__.py b/crypt/crypt/__init__.py index 732e53b..debb895 100644 --- a/crypt/crypt/__init__.py +++ b/crypt/crypt/__init__.py @@ -22,7 +22,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/imghdr/imghdr/__init__.py b/imghdr/imghdr/__init__.py index 1fb09ac..c448ffa 100644 --- a/imghdr/imghdr/__init__.py +++ b/imghdr/imghdr/__init__.py @@ -11,7 +11,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/mailcap/mailcap/__init__.py b/mailcap/mailcap/__init__.py index 3054063..0ef05a3 100644 --- a/mailcap/mailcap/__init__.py +++ b/mailcap/mailcap/__init__.py @@ -12,7 +12,7 @@ f"{__name__} was removed in Python 3.13. See the mimetypes module for an alternative. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/nntplib/nntplib/__init__.py b/nntplib/nntplib/__init__.py index a08b925..a4e22b4 100644 --- a/nntplib/nntplib/__init__.py +++ b/nntplib/nntplib/__init__.py @@ -91,7 +91,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) # maximal line length when calling readline(). This is to prevent diff --git a/pipes/pipes/__init__.py b/pipes/pipes/__init__.py index 1057bfb..16a7e5a 100644 --- a/pipes/pipes/__init__.py +++ b/pipes/pipes/__init__.py @@ -70,7 +70,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) __all__ = ["Template"] diff --git a/smtpd/smtpd/__init__.py b/smtpd/smtpd/__init__.py index d293819..278f86c 100755 --- a/smtpd/smtpd/__init__.py +++ b/smtpd/smtpd/__init__.py @@ -90,7 +90,7 @@ "aiosmtpd (https://aiosmtpd.readthedocs.io/) for the recommended replacement." f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/sndhdr/sndhdr/__init__.py b/sndhdr/sndhdr/__init__.py index 370e636..fe18b56 100644 --- a/sndhdr/sndhdr/__init__.py +++ b/sndhdr/sndhdr/__init__.py @@ -34,7 +34,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) # The file structure is top-down except that the test program and its diff --git a/sunau/sunau/__init__.py b/sunau/sunau/__init__.py index 426b307..751bc3a 100644 --- a/sunau/sunau/__init__.py +++ b/sunau/sunau/__init__.py @@ -111,7 +111,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) diff --git a/telnetlib/telnetlib/__init__.py b/telnetlib/telnetlib/__init__.py index ba2d2ac..054d4e7 100644 --- a/telnetlib/telnetlib/__init__.py +++ b/telnetlib/telnetlib/__init__.py @@ -44,7 +44,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) __all__ = ["Telnet"] diff --git a/uu/uu/__init__.py b/uu/uu/__init__.py index a40842c..8190f98 100644 --- a/uu/uu/__init__.py +++ b/uu/uu/__init__.py @@ -40,7 +40,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) __all__ = ["Error", "encode", "decode"] diff --git a/xdrlib/xdrlib/__init__.py b/xdrlib/xdrlib/__init__.py index bbeeca7..46216ae 100644 --- a/xdrlib/xdrlib/__init__.py +++ b/xdrlib/xdrlib/__init__.py @@ -14,7 +14,7 @@ f"{__name__} was removed in Python 3.13. " f"Please be aware that you are currently NOT using standard '{__name__}', " f"but instead a separately installed 'standard-{__name__}'.", - DeprecationWarning, + DeprecationWarning, stacklevel=2 ) __all__ = ["Error", "Packer", "Unpacker", "ConversionError"] From 6a82282fdff581a916fa5efe3cb030bff640c69d Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sun, 27 Oct 2024 11:07:05 +0100 Subject: [PATCH 27/47] Use SPDX license identifier --- aifc/pyproject.toml | 2 +- asynchat/pyproject.toml | 2 +- asyncore/pyproject.toml | 2 +- cgi/pyproject.toml | 2 +- cgitb/pyproject.toml | 2 +- chunk/pyproject.toml | 2 +- crypt/pyproject.toml | 2 +- distutils/pyproject.toml | 2 +- imghdr/pyproject.toml | 2 +- mailcap/pyproject.toml | 2 +- nntplib/pyproject.toml | 2 +- pipes/pyproject.toml | 2 +- smtpd/pyproject.toml | 2 +- sndhdr/pyproject.toml | 2 +- sunau/pyproject.toml | 2 +- telnetlib/pyproject.toml | 2 +- template/pyproject.toml | 2 +- uu/pyproject.toml | 2 +- xdrlib/pyproject.toml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/aifc/pyproject.toml b/aifc/pyproject.toml index c02f801..3f91312 100644 --- a/aifc/pyproject.toml +++ b/aifc/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/asynchat/pyproject.toml b/asynchat/pyproject.toml index aae99d8..dded938 100644 --- a/asynchat/pyproject.toml +++ b/asynchat/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/asyncore/pyproject.toml b/asyncore/pyproject.toml index 51b8d7f..5d1e4e3 100644 --- a/asyncore/pyproject.toml +++ b/asyncore/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/cgi/pyproject.toml b/cgi/pyproject.toml index 519bd92..16678c8 100644 --- a/cgi/pyproject.toml +++ b/cgi/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/cgitb/pyproject.toml b/cgitb/pyproject.toml index c92ab8c..f43bbe7 100644 --- a/cgitb/pyproject.toml +++ b/cgitb/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/chunk/pyproject.toml b/chunk/pyproject.toml index cc2a48a..418e4b8 100644 --- a/chunk/pyproject.toml +++ b/chunk/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index 5c6b19e..7a04a2c 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/distutils/pyproject.toml b/distutils/pyproject.toml index 1f6f644..20de420 100644 --- a/distutils/pyproject.toml +++ b/distutils/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/imghdr/pyproject.toml b/imghdr/pyproject.toml index 38c6de1..eb2c346 100644 --- a/imghdr/pyproject.toml +++ b/imghdr/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/mailcap/pyproject.toml b/mailcap/pyproject.toml index 12b7498..3bc4602 100644 --- a/mailcap/pyproject.toml +++ b/mailcap/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/nntplib/pyproject.toml b/nntplib/pyproject.toml index e1377e8..6ca5242 100644 --- a/nntplib/pyproject.toml +++ b/nntplib/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/pipes/pyproject.toml b/pipes/pyproject.toml index 3eccaba..15705a3 100644 --- a/pipes/pyproject.toml +++ b/pipes/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/smtpd/pyproject.toml b/smtpd/pyproject.toml index b002541..aee3a4b 100644 --- a/smtpd/pyproject.toml +++ b/smtpd/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/sndhdr/pyproject.toml b/sndhdr/pyproject.toml index bba2b51..9b20c49 100644 --- a/sndhdr/pyproject.toml +++ b/sndhdr/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/sunau/pyproject.toml b/sunau/pyproject.toml index 0066aee..875a8d0 100644 --- a/sunau/pyproject.toml +++ b/sunau/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/telnetlib/pyproject.toml b/telnetlib/pyproject.toml index ab5bedb..f46e92a 100644 --- a/telnetlib/pyproject.toml +++ b/telnetlib/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/template/pyproject.toml b/template/pyproject.toml index 65072a7..6a67d21 100644 --- a/template/pyproject.toml +++ b/template/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/uu/pyproject.toml b/uu/pyproject.toml index 4cfd2dd..be3a88a 100644 --- a/uu/pyproject.toml +++ b/uu/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", diff --git a/xdrlib/pyproject.toml b/xdrlib/pyproject.toml index 8e0f149..ce01a88 100644 --- a/xdrlib/pyproject.toml +++ b/xdrlib/pyproject.toml @@ -7,7 +7,7 @@ authors = [ { name = "Python Developers", email = "python-deadlib@youknowone.org" } ] readme = "README.rst" -license = {name = "PSF", file = "LICENSE"} +license = { text = "PSF-2.0" } classifiers = [ "License :: OSI Approved :: Python Software Foundation License", "Topic :: Software Development :: Libraries", From d985d7a9017281e978e52248597b5ec7e1579c0c Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sun, 27 Oct 2024 11:07:43 +0100 Subject: [PATCH 28/47] Update setuptools build version --- asynchat/pyproject.toml | 2 +- asyncore/pyproject.toml | 2 +- cgi/pyproject.toml | 2 +- cgitb/pyproject.toml | 2 +- chunk/pyproject.toml | 2 +- crypt/pyproject.toml | 2 +- distutils/pyproject.toml | 2 +- imghdr/pyproject.toml | 2 +- mailcap/pyproject.toml | 2 +- nntplib/pyproject.toml | 2 +- pipes/pyproject.toml | 2 +- smtpd/pyproject.toml | 2 +- sndhdr/pyproject.toml | 2 +- sunau/pyproject.toml | 2 +- telnetlib/pyproject.toml | 2 +- template/pyproject.toml | 2 +- uu/pyproject.toml | 2 +- xdrlib/pyproject.toml | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/asynchat/pyproject.toml b/asynchat/pyproject.toml index dded938..ba6f3b4 100644 --- a/asynchat/pyproject.toml +++ b/asynchat/pyproject.toml @@ -24,5 +24,5 @@ find = {include = ["asynchat*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/asyncore/pyproject.toml b/asyncore/pyproject.toml index 5d1e4e3..71f274a 100644 --- a/asyncore/pyproject.toml +++ b/asyncore/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["asyncore*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/cgi/pyproject.toml b/cgi/pyproject.toml index 16678c8..25d3c74 100644 --- a/cgi/pyproject.toml +++ b/cgi/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["cgi*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/cgitb/pyproject.toml b/cgitb/pyproject.toml index f43bbe7..6e10caa 100644 --- a/cgitb/pyproject.toml +++ b/cgitb/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["cgitb*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/chunk/pyproject.toml b/chunk/pyproject.toml index 418e4b8..c512a8f 100644 --- a/chunk/pyproject.toml +++ b/chunk/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["chunk*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index 7a04a2c..8856258 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["crypt*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/distutils/pyproject.toml b/distutils/pyproject.toml index 20de420..90245ca 100644 --- a/distutils/pyproject.toml +++ b/distutils/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["distutils*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/imghdr/pyproject.toml b/imghdr/pyproject.toml index eb2c346..33cf732 100644 --- a/imghdr/pyproject.toml +++ b/imghdr/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["imghdr*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/mailcap/pyproject.toml b/mailcap/pyproject.toml index 3bc4602..2ad54ae 100644 --- a/mailcap/pyproject.toml +++ b/mailcap/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["mailcap*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/nntplib/pyproject.toml b/nntplib/pyproject.toml index 6ca5242..d4b87e4 100644 --- a/nntplib/pyproject.toml +++ b/nntplib/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["nntplib*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/pipes/pyproject.toml b/pipes/pyproject.toml index 15705a3..2a5da00 100644 --- a/pipes/pyproject.toml +++ b/pipes/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["pipes*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/smtpd/pyproject.toml b/smtpd/pyproject.toml index aee3a4b..81c4259 100644 --- a/smtpd/pyproject.toml +++ b/smtpd/pyproject.toml @@ -25,5 +25,5 @@ find = {include = ["smtpd*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/sndhdr/pyproject.toml b/sndhdr/pyproject.toml index 9b20c49..9eb31ec 100644 --- a/sndhdr/pyproject.toml +++ b/sndhdr/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["sndhdr*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/sunau/pyproject.toml b/sunau/pyproject.toml index 875a8d0..8190655 100644 --- a/sunau/pyproject.toml +++ b/sunau/pyproject.toml @@ -24,5 +24,5 @@ find = {include = ["sunau*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/telnetlib/pyproject.toml b/telnetlib/pyproject.toml index f46e92a..82a415d 100644 --- a/telnetlib/pyproject.toml +++ b/telnetlib/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["telnetlib*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/template/pyproject.toml b/template/pyproject.toml index 6a67d21..2e7fb09 100644 --- a/template/pyproject.toml +++ b/template/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["{name}*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/uu/pyproject.toml b/uu/pyproject.toml index be3a88a..853652e 100644 --- a/uu/pyproject.toml +++ b/uu/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["uu*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" diff --git a/xdrlib/pyproject.toml b/xdrlib/pyproject.toml index ce01a88..8c13abe 100644 --- a/xdrlib/pyproject.toml +++ b/xdrlib/pyproject.toml @@ -21,5 +21,5 @@ find = {include = ["xdrlib*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=61.0"] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" From 1e81629f280368f25f813ebceab763fa8780b218 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 21 Oct 2024 21:25:45 +0100 Subject: [PATCH 29/47] Add imghdrdata directory for imghdr tests Copied from cpython 3.12 Fixes https://github.com/youknowone/python-deadlib/issues/17 --- imghdr/tests/imghdrdata/python-raw.jpg | Bin 0 -> 525 bytes imghdr/tests/imghdrdata/python.bmp | Bin 0 -> 1162 bytes imghdr/tests/imghdrdata/python.exr | Bin 0 -> 2635 bytes imghdr/tests/imghdrdata/python.gif | Bin 0 -> 405 bytes imghdr/tests/imghdrdata/python.jpg | Bin 0 -> 543 bytes imghdr/tests/imghdrdata/python.pbm | 3 +++ imghdr/tests/imghdrdata/python.pgm | Bin 0 -> 269 bytes imghdr/tests/imghdrdata/python.png | Bin 0 -> 1020 bytes imghdr/tests/imghdrdata/python.ppm | Bin 0 -> 781 bytes imghdr/tests/imghdrdata/python.ras | Bin 0 -> 1056 bytes imghdr/tests/imghdrdata/python.sgi | Bin 0 -> 1967 bytes imghdr/tests/imghdrdata/python.tiff | Bin 0 -> 1326 bytes imghdr/tests/imghdrdata/python.webp | Bin 0 -> 432 bytes imghdr/tests/imghdrdata/python.xbm | 6 ++++++ imghdr/tests/test_imghdr.py | 8 ++++---- 15 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 imghdr/tests/imghdrdata/python-raw.jpg create mode 100644 imghdr/tests/imghdrdata/python.bmp create mode 100644 imghdr/tests/imghdrdata/python.exr create mode 100644 imghdr/tests/imghdrdata/python.gif create mode 100644 imghdr/tests/imghdrdata/python.jpg create mode 100644 imghdr/tests/imghdrdata/python.pbm create mode 100644 imghdr/tests/imghdrdata/python.pgm create mode 100644 imghdr/tests/imghdrdata/python.png create mode 100644 imghdr/tests/imghdrdata/python.ppm create mode 100644 imghdr/tests/imghdrdata/python.ras create mode 100644 imghdr/tests/imghdrdata/python.sgi create mode 100644 imghdr/tests/imghdrdata/python.tiff create mode 100644 imghdr/tests/imghdrdata/python.webp create mode 100644 imghdr/tests/imghdrdata/python.xbm diff --git a/imghdr/tests/imghdrdata/python-raw.jpg b/imghdr/tests/imghdrdata/python-raw.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11940b3410ddf052a996d705006236172e153c25 GIT binary patch literal 525 zcmex=y%&ai23_z|RGYc!5B7=~js90j-!~eG!c$gW1&R`Z~uxAiib}37`_~0{Pp(|5m zJ_{y4QBB>qE9ySbOP zKJvD_{#YsalT_xtD}`PbTbf>YcWM=8%AM6!wEp;hr&P(BcMGFR`>uMdNsVspZfvbq z)SQvNGJDES&s6`NCt5WHy&JVYRNee!(@+<>kM~>BLWeUip3Sn2+3vjgdR1z~#+!kP z9s5&uT>f}CgGKYeg@3zkm>$@Kuy5IWvpVFN`tQ8^QxZg)l7xGA1kKPeXYDMiOn73{ ZnSZ#cZ+TG9D}~;D6_WDoYwQ2t1OUankdy!b literal 0 HcmV?d00001 diff --git a/imghdr/tests/imghdrdata/python.bmp b/imghdr/tests/imghdrdata/python.bmp new file mode 100644 index 0000000000000000000000000000000000000000..675f95191a45fdb3ae845996d6871b86286f848a GIT binary patch literal 1162 zcmZ{kYempK|q2sSaMQcOvV!f#cTTaT5pwGN1$s5CJv=mUkMll5Jgcy;ItSC?Tnd^`$!ZyO|7%HXiN}owe^9#6tKCr10S#!uzCDIGzdHNjmWMc9{p|zePQa{W;AvB4VXGT z`>Y5WM+&f)Y5BJ0OR`&Y#e7pvBu<7?XPJl`HRPB@gg%1MhyQDN3OWN`{bX)5G|R z)Zkw1O;Wu2St}P^;?17p-|QWcLE;K)~*-(-^GMc0W0vFmLgqB#t_8FRmYt=IheKYf;2%Ew2~5z(0uc Bxh4Pr literal 0 HcmV?d00001 diff --git a/imghdr/tests/imghdrdata/python.exr b/imghdr/tests/imghdrdata/python.exr new file mode 100644 index 0000000000000000000000000000000000000000..773c81ee1fb850cdbb6cccd3ae5edabb80146481 GIT binary patch literal 2635 zcmcJROK2NM7{@2=N@|-p=|Qy*&7%~@59(Nt9qrD{DhX+Ai$Y5vmGPwyR7-LMiexOs zO(7|QBFmSQLUHU%A5d)h)E0`IT#^`yB17rp;>J*toManH+guzM3T?lco%Qb8Dm`_U z-I?7P&G(!C_n$$NfzZCk5JIEp6S-U}TYyG3Qz)XB;oBLs51zd6n%^((`4Zdn<=mbx zXf%Ied?HmSWb!#zTTGu!6cZzvTr&R-dOLq9oIy|Xh_W1ln%~JxVLY37_dmyFGr82+ ziDYU5*)0)eJaZ|PJyRG@jTX-(ikUo0XY+|7Qbe56>B8tlDwQ**e<_tK!UU7yGT>-%92u@w`Iw28!})*_a_yz24^?ozV2MpXdU;Ku^*wQX}p@{+1<} z944FkwBDgtw7vaJJdewG04sP}-3Z(LT!xbUicALU=?P8sIy(_srzm=b4$^1nJu=^d zBTi8C4}DIL>D$_D3ywNQ(KzEC-w6uNF&vqP)gg41WXS+HV-1|4>vshO=jbqgXJ0aejz_j|O*+FQksQ&7#*YR< z-0ngTv3@tj62*{B6wMpu;8C_tzo6V1ZNeE`jVN%`AlH0dm&q%nli1GSYIuQTo81*0 zo(NZiJ7ZBegHsG~f57|?frD?eRvgR565YZB;5vRSs*mU`IwhRZ6wa6t6miJ)MtC8F z(Cd&Br!y*oViG8>vrj>fRqS>~RZxt{y@?Rt-cF7sdPk5Kf&99*EXO7B_w*WlgPx!t zlQ@Q-h{9LrQx`(XAS{a`E}J8F834afDjY<3RnWqx-U*e1eC7kf8IzESL&jM{ zH;x&9vj>vmP2fn1GlOSv&W>&}h`jLQjC0&(JnB;9lNNq$XMTK9IHQKQVJDar7&>V*RY0J)-yFx(5`FA~<58 znssSF0eOYH1h?{Bxu@O-bGmr_xEh`cO$Y4Loog|GW2!ei4_d$vcNN$@21z9I9$8v4f>{mUEw%pB{&D*w+T|IZ}<&?W!V zE$hWJ=*K<((=h+kF#Xjw`qMf8*E#vsKL6M{?9N61+Cl%@ME~AP|KCpk;#L3SSpVl@ z^5Jgv<8S@xYX9qOGGK=`W{@^#kv3_QH)xhOYL+={mO5{nI&hpjaGX4Go;`D-K6Ii# zcBMdgrb2tFLwu`4eXT`*uSS5eM}e|PgS1G6wn~P&Oo_Zqio8sUzfX<9P>;h>k;ec3 z{{R30A^!_WZDD6+O<`wgV`~RzVQp<;JumN z4?hnVHy<}AC$AtcAHRTrpa2(-kg$+|Fpw<(GK3MNlbMABs8N8MlN%^XBKUuRL6Cz% zfI)znQHg;`kdaxC@&6G9F|bn^kN`UiD^OfTfPs;Pkp<{tm=q%u(B-V`974i^N(>^L zhDJbDq9A{w0ydzqvLFK^6Du<-LWYq^keP**O_4#!P*g0j@!|hl3_Q$?KxZ%uGT1YS zEW4B?U3~DFu+WvMGM@#LpQxtp+ZFXD)74?)Q-w_-OXV+}+VSg?!s={V53|O-aJN mJA!6tn6q{kRVF+!>dZgf)VDmS=aoY5z6wcs_O=#+*1b_a3c>-Bw{Bd$c<%p6IREU0^XE<-od)M4GXMy?WS0N{ literal 0 HcmV?d00001 diff --git a/imghdr/tests/imghdrdata/python.png b/imghdr/tests/imghdrdata/python.png new file mode 100644 index 0000000000000000000000000000000000000000..1a987f79fcd248a94fcd1c45934136919cc0ffdd GIT binary patch literal 1020 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=IjczVPIf98sHP+3RK|Nd%&x0mrdb3^NeXgE;8`zKjPE1 z-=lS#bM0E&l7*Hz)6CK)KokT`Jofjl*UzhVK(0|jJCOW))eK0QW=sN-Z_a^CHp`qW zZ3toj!K1^je{VVh8E%c6%+ewSu^cS{_bjjjNq`0qVGWL+OG*#Ek0`S+6kuj7&jreo3K z(Y(c_ZmmPba-Xg}|NsAYtzYk0xx%hwkyZX|v&<=;t=ruiHabHjtJ|Ce>W+IPA)ZgQ?!ZC|$Z|8gnk%7jDF#&p$6AgEMe;uIFrk^Al-!^-G$=KGCmYgs2(3;7>L0);>u7?Zr+ zU80zGF9pTWS5Ftm5Q)pl2@Fhb%Qk%AND~V)W7Fv9>FVq3?M_c`nE~Gk@#z{`)21Y8cxw21 z>3R1~7n?p&cm0Yf$tzZ^TRAm6KqTZ*K-kLFYr<0lPM-<7e&I@1Mo!kc?98iSNf$ab zuUyT}&d+)EA}90hrRNC-25-!=UcY?%`o)|4x37%M5)Dj^w=;awUArbXC-<$z8%Y_N zxpS(2tNF|^+1Y*g&{5GxRogj(m-%&HD*ImWLj-nwqKP5A*5>tbL0Yt;W_if978W=oX{an^LB{Ts5zOa#I literal 0 HcmV?d00001 diff --git a/imghdr/tests/imghdrdata/python.ppm b/imghdr/tests/imghdrdata/python.ppm new file mode 100644 index 0000000000000000000000000000000000000000..7d9cdb3215877b4604de4c177fc81ebb645b8290 GIT binary patch literal 781 zcmWGA<1#c;Ff`*bGBxF5KmvZf2fW&Lc{Fcvsaxw%vD~I`o_WSJBzbhEPuHIR|Npzz zuXn6mVOO%qDu1?F<`i^ANPN%M?QRVlovK&al`gg}m}{Oj4Xb*;{v$qJ`#oB>IoGbW zEm>%pGtDe*fO9I=FWsDhN%DlDD>}Lub)@# zfNlxsKkU=F$D?H{#MwaeAHjtJ|Ce=v>b=@`x;Jieu32qgw$vkbAW8H;-vqNBmUp_ z`+pmvSRbMosQ%C_A)p#$@c%hf@r&cOuaBC%KBV<}pW^G?5H49eJC|cLygR|t7(RqR+G|1 z8);jZU5(OAXX%HeBr~nZNTCbM4;67pIQ)B_xycaof#29U=l#9^=Q)>cwJDb*63JXI zK@!Py`YV~nKND4hwYYUS{>)>TPThw-uO6|7>xAfoRb`4K+Z+=9D|$DBrKlNPhGPxT zWZ!@~^BN-4Dj-k3xPsR39+MR|?2o>g0l zp4OQ18|}K>`Z`r+jZ>LwbISLeM?`8lyNrq4fN}nlO{E=3EN+9juxWJWT%NfWs*GwV z_h0t8J|7s|EQlZDPyX#y&!)Ywv7{ZAv&}G_elRvO<@;v#`Hi7F3v|3517_g8W?1Z% zhwyR2xfbutxBX_W^vx`UCzY|ANNWp!yfl!j1>P!vp4BS$;|m@k?!;Z_j^0Gfq3ezE zsgceLMsoF|GdtybORaRS_SfeFg7`fJ z__7Na+5&t^06tKz$6Z5ih#~(ij?pDgRQm)Tk%em|_M_gB=VYGfG5lloA;RNN5 zxz2B$Du?@dn8WQ_>2S9MJKRkHOm;_wl(U0~sl+T|9w8~O{^ zVlgq%yDW$U+%viTn2Qm_{T)-x1rN^pMbxLy_G6F-f|PIYRc(6(ZU`96~>T0F5h z=V!OAHmNRuLeGKfxp4mM&*S{GCcMRYPb}e?s_@74T!}l(X-toQ9~~LEmNPSbesW?w zril&0vDgfu%u8EnGVq|B{WyD&rNba`|5g1p|4Cd+9kpJWnLhRX*s+n3E=_OV;I*%M zY*9vr30g^Al%I|KsQx2=1C!aqq&Vz(WaMm&5w+LVRMRySz`|!@G4`&A^&Z$yl_=u0 zt+1HQ%!HUy73byfyv|lplT)^v|4QTRrbupVsLh(0tH4G@?9=|9@~X-g)~|8emRrp1 ze#Dw4Ie-2zOk+%@P)V`FN;eV)&JrTu-&p@5UHtvBwheY##10Mg?WR|@qDWEhatq5u zEQEuOdi&zA#aSsemz6pTt(iIsTuMkB^UWdu8?X6R>PR_pZgPU15uvXRef;5G7eX#M zcNu#GAsr77Z}hlJ<(J}cmC)O3o+>FSSe;|d&Z0lmI_+&uZ*8lq-s-E^L_bXZ$|m4y zKX&A^Xz%`x$es|nigMU8#8UAPhu4PTu~X=2kJ}~N^CYX1MO^DEw6jHdv!S+1@+q6> z!W8=jp3sS-Ukvv5bV(5tC(V Y#PP3(1`fX8p^CuZbqNQ(CtZT;AGbYjjQ{`u literal 0 HcmV?d00001 diff --git a/imghdr/tests/imghdrdata/python.tiff b/imghdr/tests/imghdrdata/python.tiff new file mode 100644 index 0000000000000000000000000000000000000000..39d0bfcec02533ade8934a8796aebb8990c9d389 GIT binary patch literal 1326 zcmZ{kYe(N;1=o3>C6iK^NjBVVur+_Bv`_wuaafkG@48y9bf^^$>oj7DD%5;{sDlOE7sh%6W8^ zHdQL~>Z@h?%35i9sZpXmZwyK=V=V6HA{sU;lGCVYLVIt4=!0B-{U`qtBV%3@DGgv|wwpgepN!VX?X zuM16{8&xT|rbbb}n^B6)`JN@ai;Xy^`8kqNWB#&- zgHJmF#34StwlYyJCWfFy(}0;bbRJ7kRA&T=p1%qegj$B8b?b1$8thpa^KedR6Wd`- ze-K0XWzWx3xlVjc$L3-)?<%wt%)z;p*q58of$d3FBAXm{KBj#a@Ua2og?v64if!`O zVoW}CP;#Loi$%D97{*RGJBs;9e7+@*+OvEFE(6tc^oEg~Ep!#U=uxxlrSfvR8njyW fXuf-=%w_kUu8C|tS<3P=v-PRE3}1bkRx9`m*;LyH literal 0 HcmV?d00001 diff --git a/imghdr/tests/imghdrdata/python.webp b/imghdr/tests/imghdrdata/python.webp new file mode 100644 index 0000000000000000000000000000000000000000..e824ec7fb1c7fa85716d27454e9d1715a896d4b4 GIT binary patch literal 432 zcmV;h0Z;x?Nk&Gf0RRA3MM6+kP&il$0000G0000F000jF06|PpNW%aC00AeWsF5V) zdgmBl=ie%sh?xI$agE?6Fyi5hcQVMq5nO{SFzB#&6^?jOHNglB0#A~lYOqxq9M-mN zMlVjrc09K2cl)m?t|6lTNzwg}koUSoNhBLOC6P4q6m1U2)8!T*^a~Wekl};38Zw?X zf`1(;eol4>`-q;ik?)yvM(8qv+xW~#viC(WeIWfd7mOh?RxPF0Ya_f}@)trH( z*>09~iWo5uimEJ7H2N@t-@0p1QYp19&*@YY3IPBB09H^qAie+q0FVLzodGHk01yBJ z05m1A0(3A>2!#xM104t~{pbMx{dA!H0-GO-_d|S~H}=vDuhaiEXyWdty~%GI^s2>U zuDYL>gx^7;JK9_1@A%8{y?^1a`ak6f?DV^4U;nBp*?-Aw=Z5C2m$~G|^phiuU)_&6 zRUm(rPy9Lf|8LT31L&W;gP3M*vDFj*b{FQc{#}aXpGUv5`oI1i9rF^8{#?(&`uP~c az0c1dkvX6N{h9$wF)ZG^*?X$20000=+R1SM literal 0 HcmV?d00001 diff --git a/imghdr/tests/imghdrdata/python.xbm b/imghdr/tests/imghdrdata/python.xbm new file mode 100644 index 0000000..cfbee2e --- /dev/null +++ b/imghdr/tests/imghdrdata/python.xbm @@ -0,0 +1,6 @@ +#define python_width 16 +#define python_height 16 +static char python_bits[] = { + 0xDF, 0xFE, 0x8F, 0xFD, 0x5F, 0xFB, 0xAB, 0xFE, 0xB5, 0x8D, 0xDA, 0x8F, + 0xA5, 0x86, 0xFA, 0x83, 0x1A, 0x80, 0x0D, 0x80, 0x0D, 0x80, 0x0F, 0xE0, + 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0xFC, 0xFF, 0xFF, }; diff --git a/imghdr/tests/test_imghdr.py b/imghdr/tests/test_imghdr.py index 208c8ee..7329735 100644 --- a/imghdr/tests/test_imghdr.py +++ b/imghdr/tests/test_imghdr.py @@ -36,7 +36,7 @@ def seek(self, *args, **kwargs): class TestImghdr(unittest.TestCase): @classmethod def setUpClass(cls): - cls.testfile = findfile('python.png', subdir='imghdrdata') + cls.testfile = findfile('python.png', subdir='tests/imghdrdata') with open(cls.testfile, 'rb') as stream: cls.testdata = stream.read() @@ -45,7 +45,7 @@ def tearDown(self): def test_data(self): for filename, expected in TEST_FILES: - filename = findfile(filename, subdir='imghdrdata') + filename = findfile(filename, subdir='tests/imghdrdata') self.assertEqual(imghdr.what(filename), expected) with open(filename, 'rb') as stream: self.assertEqual(imghdr.what(stream), expected) @@ -57,7 +57,7 @@ def test_data(self): def test_pathlike_filename(self): for filename, expected in TEST_FILES: with self.subTest(filename=filename): - filename = findfile(filename, subdir='imghdrdata') + filename = findfile(filename, subdir='tests/imghdrdata') self.assertEqual(imghdr.what(pathlib.Path(filename)), expected) def test_register_test(self): @@ -104,7 +104,7 @@ def test_string_data(self): with warnings.catch_warnings(): warnings.simplefilter("ignore", BytesWarning) for filename, _ in TEST_FILES: - filename = findfile(filename, subdir='imghdrdata') + filename = findfile(filename, subdir='tests/imghdrdata') with open(filename, 'rb') as stream: data = stream.read().decode('latin1') with self.assertRaises(TypeError): From e99783cc8a16f6d301643810214b21bca3f95836 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 21 Oct 2024 21:32:43 +0100 Subject: [PATCH 30/47] Add sndhdrdata directory for sndhdr tests Copied from cpython 3.12 Fixes https://github.com/youknowone/python-deadlib/issues/20 --- sndhdr/tests/sndhdrdata/README | 5 +++++ sndhdr/tests/sndhdrdata/sndhdr.8svx | Bin 0 -> 110 bytes sndhdr/tests/sndhdrdata/sndhdr.aifc | Bin 0 -> 106 bytes sndhdr/tests/sndhdrdata/sndhdr.aiff | Bin 0 -> 108 bytes sndhdr/tests/sndhdrdata/sndhdr.au | Bin 0 -> 64 bytes sndhdr/tests/sndhdrdata/sndhdr.hcom | Bin 0 -> 256 bytes sndhdr/tests/sndhdrdata/sndhdr.sndt | Bin 0 -> 129 bytes sndhdr/tests/sndhdrdata/sndhdr.voc | Bin 0 -> 63 bytes sndhdr/tests/sndhdrdata/sndhdr.wav | Bin 0 -> 64 bytes sndhdr/tests/test_sndhdr.py | 4 ++-- 10 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 sndhdr/tests/sndhdrdata/README create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.8svx create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.aifc create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.aiff create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.au create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.hcom create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.sndt create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.voc create mode 100644 sndhdr/tests/sndhdrdata/sndhdr.wav diff --git a/sndhdr/tests/sndhdrdata/README b/sndhdr/tests/sndhdrdata/README new file mode 100644 index 0000000..b2cb664 --- /dev/null +++ b/sndhdr/tests/sndhdrdata/README @@ -0,0 +1,5 @@ +Sound file samples used by Lib/test/test_sndhdr.py and generated using the +following commands: + + dd if=/dev/zero of=sndhdr.raw bs=20 count=1 + sox -s -2 -c 2 -r 44100 sndhdr.raw sndhdr. diff --git a/sndhdr/tests/sndhdrdata/sndhdr.8svx b/sndhdr/tests/sndhdrdata/sndhdr.8svx new file mode 100644 index 0000000000000000000000000000000000000000..8cd6cde5e09f356d47b031db7bae33697a6f751b GIT binary patch literal 110 zcmZ?s5AtPTU`VqF4vPr$a0vpkMSz$Uh{0fu3nK#q5IOq!`2z(M+%j`g6_Sfm6H8K4 y6p|_xg7ZuBQWRV(k~0$X(o+=_oIM=ks0T>0|y bOB9mxa|?=6i;GiJ7=nZSK(aDm1vm%*H%bt5 literal 0 HcmV?d00001 diff --git a/sndhdr/tests/sndhdrdata/sndhdr.aiff b/sndhdr/tests/sndhdrdata/sndhdr.aiff new file mode 100644 index 0000000000000000000000000000000000000000..8c279a762f1c7074f9e91356b7b81b3da420db03 GIT binary patch literal 108 zcmZ?s5AtPTU`TQFbaQj|_YDEEr5G4bB$=NDvIGK(@{?1Gi&Ik+k}4H~^CN&NK&pip bn1CcJgMb6y8W$i72!ezCKr9(B2L}NFoskd! literal 0 HcmV?d00001 diff --git a/sndhdr/tests/sndhdrdata/sndhdr.au b/sndhdr/tests/sndhdrdata/sndhdr.au new file mode 100644 index 0000000000000000000000000000000000000000..67c9e8fdd995efb47517e64f0f0dc98301f111ec GIT binary patch literal 64 ucmdNZ&P!onV9)_#5g=w}U|8bG2SA%aW5!`a^#D8~$yX9UuW42=K(1L+2+7)>bv&sPOH literal 0 HcmV?d00001 diff --git a/sndhdr/tests/sndhdrdata/sndhdr.sndt b/sndhdr/tests/sndhdrdata/sndhdr.sndt new file mode 100644 index 0000000000000000000000000000000000000000..e1ca9cb185d157fa27853c90ffa8c420f755e297 GIT binary patch literal 129 zcmWIc5A}1AVqjopfB+EfvW9_yi-Cn9peR2%wYWGnMIotDAviw*s)TA(eM5ai0|0H< B3kLuI literal 0 HcmV?d00001 diff --git a/sndhdr/tests/sndhdrdata/sndhdr.voc b/sndhdr/tests/sndhdrdata/sndhdr.voc new file mode 100644 index 0000000000000000000000000000000000000000..53a91fd1eae30b3e57105092831a49d26787a5c3 GIT binary patch literal 63 vcmZ=RN=+=uEK5}g%g;zB;s=5N literal 0 HcmV?d00001 diff --git a/sndhdr/tests/test_sndhdr.py b/sndhdr/tests/test_sndhdr.py index 4d97437..e8fbe4f 100644 --- a/sndhdr/tests/test_sndhdr.py +++ b/sndhdr/tests/test_sndhdr.py @@ -18,7 +18,7 @@ def test_data(self): ('sndhdr.voc', ('voc', 0, 1, -1, 8)), ('sndhdr.wav', ('wav', 44100, 2, 5, 16)), ): - filename = findfile(filename, subdir="sndhdrdata") + filename = findfile(filename, subdir="tests/sndhdrdata") what = sndhdr.what(filename) self.assertNotEqual(what, None, filename) self.assertSequenceEqual(what, expected) @@ -29,7 +29,7 @@ def test_data(self): self.assertEqual(what.sampwidth, expected[4]) def test_pickleable(self): - filename = findfile('sndhdr.aifc', subdir="sndhdrdata") + filename = findfile('sndhdr.aifc', subdir="tests/sndhdrdata") what = sndhdr.what(filename) for proto in range(pickle.HIGHEST_PROTOCOL + 1): dump = pickle.dumps(what, proto) From 2de4e1d4a7b247cd5b299b945c972f337bcb6eb8 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 21 Oct 2024 21:35:09 +0100 Subject: [PATCH 31/47] Add mailcap.txt for mailcap tests Copied from cpython 3.12 Fixes https://github.com/youknowone/python-deadlib/issues/18 --- mailcap/tests/mailcap.txt | 39 +++++++++++++++++++++++++++++++++++ mailcap/tests/test_mailcap.py | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 mailcap/tests/mailcap.txt diff --git a/mailcap/tests/mailcap.txt b/mailcap/tests/mailcap.txt new file mode 100644 index 0000000..08a76e6 --- /dev/null +++ b/mailcap/tests/mailcap.txt @@ -0,0 +1,39 @@ +# Mailcap file for test_mailcap; based on RFC 1524 +# Referred to by test_mailcap.py + +# +# This is a comment. +# + +application/frame; showframe %s; print="cat %s | lp" +application/postscript; ps-to-terminal %s;\ + needsterminal +application/postscript; ps-to-terminal %s; \ + compose=idraw %s +application/x-dvi; xdvi %s +application/x-movie; movieplayer %s; compose=moviemaker %s; \ + description="Movie"; \ + x11-bitmap="/usr/lib/Zmail/bitmaps/movie.xbm" +application/*; echo "This is \"%t\" but \ + is 50 \% Greek to me" \; cat %s; copiousoutput + +audio/basic; showaudio %s; compose=audiocompose %s; edit=audiocompose %s;\ +description="An audio fragment" +audio/* ; /usr/local/bin/showaudio %t + +image/rgb; display %s +#image/gif; display %s +image/x-xwindowdump; display %s + +# The continuation char shouldn't \ +# make a difference in a comment. + +message/external-body; showexternal %s %{access-type} %{name} %{site} \ + %{directory} %{mode} %{server}; needsterminal; composetyped = extcompose %s; \ + description="A reference to data stored in an external location" + +text/richtext; shownonascii iso-8859-8 -e richtext -p %s; test=test "`echo \ + %{charset} | tr '[A-Z]' '[a-z]'`" = iso-8859-8; copiousoutput + +video/*; animate %s +video/mpeg; mpeg_play %s \ No newline at end of file diff --git a/mailcap/tests/test_mailcap.py b/mailcap/tests/test_mailcap.py index 8a94b0c..23ea2f3 100644 --- a/mailcap/tests/test_mailcap.py +++ b/mailcap/tests/test_mailcap.py @@ -11,7 +11,7 @@ # Location of mailcap file -MAILCAPFILE = test.support.findfile("mailcap.txt") +MAILCAPFILE = test.support.findfile("tests/mailcap.txt") # Dict to act as mock mailcap entry for this test # The keys and values should match the contents of MAILCAPFILE From bdb80cf87cd5c186d40cab51e25f2f1bd6bc8c62 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 21 Oct 2024 21:58:36 +0100 Subject: [PATCH 32/47] Add internal dependency for sndhdr --- sndhdr/pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sndhdr/pyproject.toml b/sndhdr/pyproject.toml index bba2b51..aaffff2 100644 --- a/sndhdr/pyproject.toml +++ b/sndhdr/pyproject.toml @@ -13,6 +13,9 @@ classifiers = [ "Topic :: Software Development :: Libraries", "Programming Language :: Python :: 3", ] +dependencies = [ + "standard-aifc; python_version >= '3.13'", +] [tool.setuptools.packages] find = {include = ["sndhdr*"]} From 83e38ff03eefc36803ce0773c00819b7db3f4f02 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:17:03 +0100 Subject: [PATCH 33/47] Add test __init__ files --- aifc/tests/__init__.py | 0 asynchat/tests/__init__.py | 0 asyncore/tests/__init__.py | 0 cgi/tests/__init__.py | 0 cgitb/tests/__init__.py | 0 crypt/tests/__init__.py | 0 distutils/tests/__init__.py | 0 imghdr/tests/__init__.py | 0 mailcap/tests/__init__.py | 0 nntplib/tests/__init__.py | 0 pipes/tests/__init__.py | 0 smtpd/tests/__init__.py | 0 sndhdr/tests/__init__.py | 0 sunau/tests/__init__.py | 0 telnetlib/tests/__init__.py | 0 uu/tests/__init__.py | 0 xdrlib/tests/__init__.py | 0 17 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 aifc/tests/__init__.py create mode 100644 asynchat/tests/__init__.py create mode 100644 asyncore/tests/__init__.py create mode 100644 cgi/tests/__init__.py create mode 100644 cgitb/tests/__init__.py create mode 100644 crypt/tests/__init__.py create mode 100644 distutils/tests/__init__.py create mode 100644 imghdr/tests/__init__.py create mode 100644 mailcap/tests/__init__.py create mode 100644 nntplib/tests/__init__.py create mode 100644 pipes/tests/__init__.py create mode 100644 smtpd/tests/__init__.py create mode 100644 sndhdr/tests/__init__.py create mode 100644 sunau/tests/__init__.py create mode 100644 telnetlib/tests/__init__.py create mode 100644 uu/tests/__init__.py create mode 100644 xdrlib/tests/__init__.py diff --git a/aifc/tests/__init__.py b/aifc/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asynchat/tests/__init__.py b/asynchat/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asyncore/tests/__init__.py b/asyncore/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cgi/tests/__init__.py b/cgi/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/cgitb/tests/__init__.py b/cgitb/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/crypt/tests/__init__.py b/crypt/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/distutils/tests/__init__.py b/distutils/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/imghdr/tests/__init__.py b/imghdr/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mailcap/tests/__init__.py b/mailcap/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nntplib/tests/__init__.py b/nntplib/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pipes/tests/__init__.py b/pipes/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smtpd/tests/__init__.py b/smtpd/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sndhdr/tests/__init__.py b/sndhdr/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/sunau/tests/__init__.py b/sunau/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/telnetlib/tests/__init__.py b/telnetlib/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/uu/tests/__init__.py b/uu/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xdrlib/tests/__init__.py b/xdrlib/tests/__init__.py new file mode 100644 index 0000000..e69de29 From 099806ce833ac0053eae410936bebe6222caaac4 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:09:33 +0100 Subject: [PATCH 34/47] Add basic CI tests for Python 3.13 --- .github/workflows/tests.yaml | 53 ++++++++++++++++++++++++++++++++++++ scripts/helper.py | 20 ++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 .github/workflows/tests.yaml create mode 100644 scripts/helper.py diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..d22b192 --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,53 @@ +name: Tests + +on: + push: + branches: + - main + pull_request: ~ + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + generate-test-matrix: + name: Generate test matrix + runs-on: ubuntu-latest + outputs: + folders: ${{ steps.get-folders.outputs.folders }} + steps: + - name: Check out code from Github + uses: actions/checkout@v4 + - name: Get folders with tests + id: get-folders + run: | + FOLDERS=$(find . -maxdepth 2 -type d -name 'tests' \ + | cut -d "/" -f2 | sort -u \ + | jq -Rsc 'split("\n") | map( {folder: select(length > 0) })') + echo "folders: ${FOLDERS}" + echo "folders=${FOLDERS}" >> $GITHUB_OUTPUT + + tests: + name: Run tests + runs-on: ubuntu-latest + needs: [generate-test-matrix] + strategy: + fail-fast: false + matrix: + include: ${{ fromJson(needs.generate-test-matrix.outputs.folders) }} + steps: + - name: Check out code from Github + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + check-latest: true + - name: Run tests + run: | + cd ${{ matrix.folder }} + pip install packaging + python ../scripts/helper.py | xargs -I % pip install "../%" + pip install . + python -m unittest diff --git a/scripts/helper.py b/scripts/helper.py new file mode 100644 index 0000000..3a51a73 --- /dev/null +++ b/scripts/helper.py @@ -0,0 +1,20 @@ +from pathlib import Path +import tomllib + +from packaging.requirements import Requirement + +def get_deadlib_names() -> None: + content = tomllib.loads(Path("pyproject.toml").read_text()) + dependencies = [ + Requirement(s).name for s in content["project"].get("dependencies", []) + ] + names = [ + name.partition("standard-")[2] + for name in dependencies if name.startswith("standard-") + ] + for name in names: + print(name) + + +if __name__ == "__main__": + get_deadlib_names() From 7fa1b6cff0eb1ad1a33b891ca0b47100da703739 Mon Sep 17 00:00:00 2001 From: Luke Blaney Date: Mon, 28 Oct 2024 22:57:28 +0000 Subject: [PATCH 35/47] run CI tests across multiple versions of python (#1) --- .github/workflows/tests.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index d22b192..b7adcdf 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -24,7 +24,7 @@ jobs: run: | FOLDERS=$(find . -maxdepth 2 -type d -name 'tests' \ | cut -d "/" -f2 | sort -u \ - | jq -Rsc 'split("\n") | map( {folder: select(length > 0) })') + | jq -Rsc 'split("\n") | map( select(length > 0) )') echo "folders: ${FOLDERS}" echo "folders=${FOLDERS}" >> $GITHUB_OUTPUT @@ -35,14 +35,15 @@ jobs: strategy: fail-fast: false matrix: - include: ${{ fromJson(needs.generate-test-matrix.outputs.folders) }} + folder: ${{ fromJson(needs.generate-test-matrix.outputs.folders) }} + version: ["3.11", "3.12", "3.13"] steps: - name: Check out code from Github uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: - python-version: "3.13" + python-version: ${{ matrix.version }} check-latest: true - name: Run tests run: | From c2f66a00da9207c5cf1b287366468bc979f439c2 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Mon, 28 Oct 2024 18:40:32 +0900 Subject: [PATCH 36/47] Add _crypt --- .github/workflows/_crypt.yml | 158 ++++++++++++++++++++++++++++++++ .github/workflows/tests.yaml | 2 + .gitignore | 1 + _crypt/.gitignore | 72 +++++++++++++++ _crypt/Cargo.lock | 171 +++++++++++++++++++++++++++++++++++ _crypt/Cargo.toml | 16 ++++ _crypt/pyproject.toml | 15 +++ _crypt/src/lib.rs | 46 ++++++++++ crypt/crypt/__init__.py | 6 +- crypt/pyproject.toml | 5 +- 10 files changed, 490 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/_crypt.yml create mode 100644 _crypt/.gitignore create mode 100644 _crypt/Cargo.lock create mode 100644 _crypt/Cargo.toml create mode 100644 _crypt/pyproject.toml create mode 100644 _crypt/src/lib.rs diff --git a/.github/workflows/_crypt.yml b/.github/workflows/_crypt.yml new file mode 100644 index 0000000..13e3741 --- /dev/null +++ b/.github/workflows/_crypt.yml @@ -0,0 +1,158 @@ +# This file is autogenerated by maturin v1.7.4 +# To update, run +# +# maturin generate-ci github +# +name: native _crypt + +on: + push: + branches: + - main + tags: + - '*' + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + linux: + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: ubuntu-latest + target: x86_64 + - runner: ubuntu-latest + target: x86 + - runner: ubuntu-latest + target: aarch64 + - runner: ubuntu-latest + target: armv7 + - runner: ubuntu-latest + target: s390x + - runner: ubuntu-latest + target: ppc64le + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.13 + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + working-directory: ./_crypt + target: ${{ matrix.platform.target }} + args: --release --out dist --find-interpreter + sccache: 'true' + manylinux: auto + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-linux-${{ matrix.platform.target }} + path: _crypt/dist + + musllinux: + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: ubuntu-latest + target: x86_64 + - runner: ubuntu-latest + target: x86 + - runner: ubuntu-latest + target: aarch64 + - runner: ubuntu-latest + target: armv7 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + working-directory: ./_crypt + target: ${{ matrix.platform.target }} + args: --release --out dist --find-interpreter + sccache: 'true' + manylinux: musllinux_1_2 + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-musllinux-${{ matrix.platform.target }} + path: _crypt/dist + + macos: + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: macos-12 + target: x86_64 + - runner: macos-14 + target: aarch64 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - name: Build wheels + uses: PyO3/maturin-action@v1 + with: + working-directory: ./_crypt + target: ${{ matrix.platform.target }} + args: --release --out dist --find-interpreter + sccache: 'true' + - name: Upload wheels + uses: actions/upload-artifact@v4 + with: + name: wheels-macos-${{ matrix.platform.target }} + path: _crypt/dist + + sdist: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build sdist + uses: PyO3/maturin-action@v1 + with: + rust-toolchain: 1.82.0 + working-directory: ./_crypt + command: sdist + args: --out dist + - name: Upload sdist + uses: actions/upload-artifact@v4 + with: + name: wheels-sdist + path: _crypt/dist + + release: + name: Release + runs-on: ubuntu-latest + if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} + needs: [linux, musllinux, macos, sdist] + permissions: + # Use to sign the release artifacts + id-token: write + # Used to upload release artifacts + contents: write + # Used to generate artifact attestation + attestations: write + steps: + - uses: actions/download-artifact@v4 + - name: Generate artifact attestation + uses: actions/attest-build-provenance@v1 + with: + subject-path: 'wheels-*/*' + - name: Publish to PyPI + if: "startsWith(github.ref, 'refs/tags/')" + uses: PyO3/maturin-action@v1 + env: + MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} + with: + command: upload + args: --non-interactive --skip-existing wheels-*/* diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index b7adcdf..f2d9d0f 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -4,6 +4,8 @@ on: push: branches: - main + tags: + - '*' pull_request: ~ concurrency: diff --git a/.gitignore b/.gitignore index 061058e..18cc0f6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ __pycache__ */dist */*.egg-info +.python-version diff --git a/_crypt/.gitignore b/_crypt/.gitignore new file mode 100644 index 0000000..c8f0442 --- /dev/null +++ b/_crypt/.gitignore @@ -0,0 +1,72 @@ +/target + +# Byte-compiled / optimized / DLL files +__pycache__/ +.pytest_cache/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +.venv/ +env/ +bin/ +build/ +develop-eggs/ +dist/ +eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +include/ +man/ +venv/ +*.egg-info/ +.installed.cfg +*.egg + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt +pip-selfcheck.json + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.cache +nosetests.xml +coverage.xml + +# Translations +*.mo + +# Mr Developer +.mr.developer.cfg +.project +.pydevproject + +# Rope +.ropeproject + +# Django stuff: +*.log +*.pot + +.DS_Store + +# Sphinx documentation +docs/_build/ + +# PyCharm +.idea/ + +# VSCode +.vscode/ + +# Pyenv +.python-version diff --git a/_crypt/Cargo.lock b/_crypt/Cargo.lock new file mode 100644 index 0000000..700ea86 --- /dev/null +++ b/_crypt/Cargo.lock @@ -0,0 +1,171 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "deprecated-crypt-alternative" +version = "0.1.1" +dependencies = [ + "pyo3", +] + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + +[[package]] +name = "libc" +version = "0.2.161" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "portable-atomic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" + +[[package]] +name = "proc-macro2" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d922163ba1f79c04bc49073ba7b32fd5a8d3b76a87c955921234b8e77333c51" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "once_cell", + "portable-atomic", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc38c5feeb496c8321091edf3d63e9a6829eab4b863b4a6a65f26f3e9cc6b179" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94845622d88ae274d2729fcefc850e63d7a3ddff5e3ce11bd88486db9f1d357d" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e655aad15e09b94ffdb3ce3d217acf652e26bbc37697ef012f5e5e348c716e5e" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.22.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1e3f09eecd94618f60a455a23def79f79eba4dc561a97324bf9ac8c6df30ce" +dependencies = [ + "heck", + "proc-macro2", + "pyo3-build-config", + "quote", + "syn", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "syn" +version = "2.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "target-lexicon" +version = "0.12.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "unindent" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce" diff --git a/_crypt/Cargo.toml b/_crypt/Cargo.toml new file mode 100644 index 0000000..e00d30c --- /dev/null +++ b/_crypt/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "deprecated-crypt-alternative" +description = "Python deprecated library `_crypt` replacement." +edition = "2021" +version = "0.1.1" +authors = ["Jeong, YunWon "] +repository = "https://github.com/youknowone/python-deadlib" +license = "LGPL-2.1" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[lib] +name = "_crypt" +crate-type = ["cdylib"] + +[dependencies] +pyo3 = { version = "0.22.0", features = ["abi3-py39"] } diff --git a/_crypt/pyproject.toml b/_crypt/pyproject.toml new file mode 100644 index 0000000..535b3d8 --- /dev/null +++ b/_crypt/pyproject.toml @@ -0,0 +1,15 @@ +[build-system] +requires = ["maturin>=1.7,<2.0"] +build-backend = "maturin" + +[project] +name = "deprecated-crypt-alternative" +requires-python = ">=3.13" # Use standard _crypt module for lower versions +classifiers = [ + "Programming Language :: Rust", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", +] +dynamic = ["version"] +[tool.maturin] +features = ["pyo3/extension-module"] diff --git a/_crypt/src/lib.rs b/_crypt/src/lib.rs new file mode 100644 index 0000000..9ae2855 --- /dev/null +++ b/_crypt/src/lib.rs @@ -0,0 +1,46 @@ +use std::ffi::CStr; +use pyo3::{prelude::*, ffi::{PyExc_OSError, PyErr_SetFromErrno}, types::PyString, exceptions::PyValueError}; + +// Future Rust versions will support `unsafe extern` +// unsafe +extern "C" { + #[link_name = "crypt"] + fn extern_crypt(key: *const u8, salt: *const u8) -> *const u8; +} + +/// Hashes the concatenation of a word and a salt using SHA-256. +#[pyfunction] +fn crypt(word: &Bound, salt: &Bound) -> PyResult { + let word = word.encode_utf8()?; + let salt = salt.encode_utf8()?; + if word.as_bytes().contains(&b'\0') || salt.as_bytes().contains(&b'\0') { + return Err(PyValueError::new_err("embedded null character")); + } + let crypt_result = unsafe { + let word = word.as_bytes(); + let salt = salt.as_bytes(); + let result = extern_crypt(word.as_ptr(), salt.as_ptr()); + if result.is_null() { + let err_ptr = PyErr_SetFromErrno(PyExc_OSError); + let py = Python::assume_gil_acquired(); + return Err(PyErr::from_value_bound(Bound::from_owned_ptr_or_err(py, err_ptr)?)); + } + CStr::from_ptr(result as *const _).to_str().expect("OS crypt returns weird values") + }; + Ok(crypt_result.to_string()) +} + +/// A Python module implemented in Rust. +#[pymodule] +fn _crypt(m: &Bound<'_, PyModule>) -> PyResult<()> { + m.add_function(wrap_pyfunction!(crypt, m)?)?; + Ok(()) +} + +#[test] +fn test_extern_crypt() { + let key = c""; + let salt = c"$6$V.wBvD6qcC/2U9B/"; + let r = unsafe { extern_crypt(key.as_ptr() as *const u8, salt.as_ptr() as *const u8) }; + assert_ne!(r, std::ptr::null()); +} \ No newline at end of file diff --git a/crypt/crypt/__init__.py b/crypt/crypt/__init__.py index debb895..03e5b4d 100644 --- a/crypt/crypt/__init__.py +++ b/crypt/crypt/__init__.py @@ -8,7 +8,11 @@ if _sys.platform == 'win32': raise ImportError("The crypt module is not supported on Windows") else: - raise ImportError("The required _crypt module was not built as part of CPython") + # python-deadlib: Add a note for deprecated-crypt-alternative + # raise ImportError("The required _crypt module was not built as part of CPython") + raise ImportError( + "The required _crypt module is no longer a part of CPython. " + "`deprecated-crypt-alternative` can be used as a replacement.") import errno import string as _string diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index 8856258..eefbea1 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -21,5 +21,8 @@ find = {include = ["crypt*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = ["setuptools>=75.0"] +requires = [ + "setuptools>=75.0", + "deprecated-crypt-alternative>=0.1.0", +] build-backend = "setuptools.build_meta" From f6c3b80bd03c68c89fe6b8e25b83250c36968dbc Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Tue, 29 Oct 2024 20:23:44 +0900 Subject: [PATCH 37/47] Fix _crypt for linux --- .github/workflows/_crypt.yml | 11 +++++++++++ _crypt/build.rs | 4 ++++ _crypt/src/lib.rs | 17 +++++++++++++---- 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 _crypt/build.rs diff --git a/.github/workflows/_crypt.yml b/.github/workflows/_crypt.yml index 13e3741..3e7a69d 100644 --- a/.github/workflows/_crypt.yml +++ b/.github/workflows/_crypt.yml @@ -37,6 +37,11 @@ jobs: target: ppc64le steps: - uses: actions/checkout@v4 + - name: prepare Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Run Rust tests + working-directory: ./_crypt + run: cargo test --verbose - uses: actions/setup-python@v5 with: python-version: 3.13 @@ -76,6 +81,7 @@ jobs: uses: PyO3/maturin-action@v1 with: working-directory: ./_crypt + rust-toolchain: 1.82.0 target: ${{ matrix.platform.target }} args: --release --out dist --find-interpreter sccache: 'true' @@ -97,6 +103,11 @@ jobs: target: aarch64 steps: - uses: actions/checkout@v4 + - name: prepare Rust toolchain + uses: dtolnay/rust-toolchain@stable + - name: Run Rust tests + working-directory: ./_crypt + run: cargo test --verbose - uses: actions/setup-python@v5 with: python-version: 3.x diff --git a/_crypt/build.rs b/_crypt/build.rs new file mode 100644 index 0000000..8e958d9 --- /dev/null +++ b/_crypt/build.rs @@ -0,0 +1,4 @@ +fn main() { + #[cfg(target_os = "linux")] + println!("cargo:rustc-link-lib=crypt"); +} diff --git a/_crypt/src/lib.rs b/_crypt/src/lib.rs index 9ae2855..b27c755 100644 --- a/_crypt/src/lib.rs +++ b/_crypt/src/lib.rs @@ -1,5 +1,10 @@ +use pyo3::{ + exceptions::PyValueError, + ffi::{PyErr_SetFromErrno, PyExc_OSError}, + prelude::*, + types::PyString, +}; use std::ffi::CStr; -use pyo3::{prelude::*, ffi::{PyExc_OSError, PyErr_SetFromErrno}, types::PyString, exceptions::PyValueError}; // Future Rust versions will support `unsafe extern` // unsafe @@ -23,9 +28,13 @@ fn crypt(word: &Bound, salt: &Bound) -> PyResult { if result.is_null() { let err_ptr = PyErr_SetFromErrno(PyExc_OSError); let py = Python::assume_gil_acquired(); - return Err(PyErr::from_value_bound(Bound::from_owned_ptr_or_err(py, err_ptr)?)); + return Err(PyErr::from_value_bound(Bound::from_owned_ptr_or_err( + py, err_ptr, + )?)); } - CStr::from_ptr(result as *const _).to_str().expect("OS crypt returns weird values") + CStr::from_ptr(result as *const _) + .to_str() + .expect("OS crypt returns weird values") }; Ok(crypt_result.to_string()) } @@ -43,4 +52,4 @@ fn test_extern_crypt() { let salt = c"$6$V.wBvD6qcC/2U9B/"; let r = unsafe { extern_crypt(key.as_ptr() as *const u8, salt.as_ptr() as *const u8) }; assert_ne!(r, std::ptr::null()); -} \ No newline at end of file +} From eaaf474f640a3a72393a8e2227ae19119d87b8fc Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Tue, 29 Oct 2024 20:24:52 +0900 Subject: [PATCH 38/47] _crypt 0.1.2 --- _crypt/Cargo.lock | 2 +- _crypt/Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_crypt/Cargo.lock b/_crypt/Cargo.lock index 700ea86..0de64ff 100644 --- a/_crypt/Cargo.lock +++ b/_crypt/Cargo.lock @@ -16,7 +16,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "deprecated-crypt-alternative" -version = "0.1.1" +version = "0.1.2" dependencies = [ "pyo3", ] diff --git a/_crypt/Cargo.toml b/_crypt/Cargo.toml index e00d30c..b053798 100644 --- a/_crypt/Cargo.toml +++ b/_crypt/Cargo.toml @@ -2,7 +2,7 @@ name = "deprecated-crypt-alternative" description = "Python deprecated library `_crypt` replacement." edition = "2021" -version = "0.1.1" +version = "0.1.2" authors = ["Jeong, YunWon "] repository = "https://github.com/youknowone/python-deadlib" license = "LGPL-2.1" From 877d5a15ee62e6096285b3de46955e0a2740803b Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Tue, 29 Oct 2024 20:26:43 +0900 Subject: [PATCH 39/47] fix crypt --- crypt/pyproject.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index eefbea1..7ffd82c 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -13,6 +13,9 @@ classifiers = [ "Topic :: Software Development :: Libraries", "Programming Language :: Python :: 3", ] +dependencies = [ + "deprecated-crypt-alternative >= 0.1.2; python_version >= '3.13'", +] [tool.setuptools.packages] find = {include = ["crypt*"]} @@ -21,8 +24,5 @@ find = {include = ["crypt*"]} "Homepage" = "https://github.com/youknowone/python-deadlib" [build-system] -requires = [ - "setuptools>=75.0", - "deprecated-crypt-alternative>=0.1.0", -] +requires = ["setuptools>=75.0"] build-backend = "setuptools.build_meta" From 925bc8e799c152244acab6e6f8c5e56e8746fa05 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Wed, 30 Oct 2024 09:42:37 +0900 Subject: [PATCH 40/47] distutils 3.10.14 --- distutils/distutils/__init__.py | 7 + distutils/distutils/command/__init__.py | 1 - distutils/distutils/command/bdist.py | 4 +- distutils/distutils/command/bdist_msi.py | 2 - distutils/distutils/command/bdist_wininst.py | 377 ----------- distutils/distutils/command/install.py | 98 +-- .../distutils/command/wininst-10.0-amd64.exe | Bin 222208 -> 0 bytes distutils/distutils/command/wininst-10.0.exe | Bin 190976 -> 0 bytes .../distutils/command/wininst-14.0-amd64.exe | Bin 587776 -> 0 bytes distutils/distutils/command/wininst-14.0.exe | Bin 458240 -> 0 bytes distutils/distutils/command/wininst-6.0.exe | Bin 61440 -> 0 bytes distutils/distutils/command/wininst-7.1.exe | Bin 65536 -> 0 bytes distutils/distutils/command/wininst-8.0.exe | Bin 61440 -> 0 bytes .../distutils/command/wininst-9.0-amd64.exe | Bin 224256 -> 0 bytes distutils/distutils/command/wininst-9.0.exe | Bin 196096 -> 0 bytes distutils/distutils/extension.py | 3 +- distutils/distutils/sysconfig.py | 636 ++++++------------ distutils/distutils/tests/__init__.py | 3 +- distutils/distutils/tests/support.py | 4 +- .../distutils/tests/test_archive_util.py | 4 +- distutils/distutils/tests/test_bdist.py | 17 +- distutils/distutils/tests/test_bdist_msi.py | 3 +- .../distutils/tests/test_bdist_wininst.py | 38 -- distutils/distutils/tests/test_build_clib.py | 10 + distutils/distutils/tests/test_build_ext.py | 6 +- distutils/distutils/tests/test_config_cmd.py | 4 + distutils/distutils/tests/test_core.py | 10 +- distutils/distutils/tests/test_dist.py | 3 +- distutils/distutils/tests/test_extension.py | 3 +- distutils/distutils/tests/test_file_util.py | 4 +- distutils/distutils/tests/test_filelist.py | 16 +- distutils/distutils/tests/test_install.py | 17 +- distutils/distutils/tests/test_register.py | 3 +- distutils/distutils/tests/test_sdist.py | 3 +- distutils/distutils/tests/test_spawn.py | 18 +- distutils/distutils/tests/test_sysconfig.py | 5 +- .../distutils/tests/test_unixccompiler.py | 6 +- distutils/distutils/tests/test_util.py | 3 +- distutils/distutils/util.py | 3 + distutils/pyproject.toml | 2 +- distutils/tests/test_distutils.py | 12 +- 41 files changed, 393 insertions(+), 932 deletions(-) delete mode 100644 distutils/distutils/command/bdist_wininst.py delete mode 100644 distutils/distutils/command/wininst-10.0-amd64.exe delete mode 100644 distutils/distutils/command/wininst-10.0.exe delete mode 100644 distutils/distutils/command/wininst-14.0-amd64.exe delete mode 100644 distutils/distutils/command/wininst-14.0.exe delete mode 100644 distutils/distutils/command/wininst-6.0.exe delete mode 100644 distutils/distutils/command/wininst-7.1.exe delete mode 100644 distutils/distutils/command/wininst-8.0.exe delete mode 100644 distutils/distutils/command/wininst-9.0-amd64.exe delete mode 100644 distutils/distutils/command/wininst-9.0.exe delete mode 100644 distutils/distutils/tests/test_bdist_wininst.py diff --git a/distutils/distutils/__init__.py b/distutils/distutils/__init__.py index d823d04..fdad6f6 100644 --- a/distutils/distutils/__init__.py +++ b/distutils/distutils/__init__.py @@ -9,5 +9,12 @@ """ import sys +import warnings __version__ = sys.version[:sys.version.index(' ')] + +_DEPRECATION_MESSAGE = ("The distutils package is deprecated and slated for " + "removal in Python 3.12. Use setuptools or check " + "PEP 632 for potential alternatives") +warnings.warn(_DEPRECATION_MESSAGE, + DeprecationWarning, 2) diff --git a/distutils/distutils/command/__init__.py b/distutils/distutils/command/__init__.py index 481eea9..fd0bfae 100644 --- a/distutils/distutils/command/__init__.py +++ b/distutils/distutils/command/__init__.py @@ -19,7 +19,6 @@ 'bdist', 'bdist_dumb', 'bdist_rpm', - 'bdist_wininst', 'check', 'upload', # These two are reserved for future use: diff --git a/distutils/distutils/command/bdist.py b/distutils/distutils/command/bdist.py index 014871d..d580a80 100644 --- a/distutils/distutils/command/bdist.py +++ b/distutils/distutils/command/bdist.py @@ -62,7 +62,7 @@ class bdist(Command): # Establish the preferred order (for the --help-formats option). format_commands = ['rpm', 'gztar', 'bztar', 'xztar', 'ztar', 'tar', - 'wininst', 'zip', 'msi'] + 'zip', 'msi'] # And the real information. format_command = {'rpm': ('bdist_rpm', "RPM distribution"), @@ -71,8 +71,6 @@ class bdist(Command): 'xztar': ('bdist_dumb', "xz'ed tar file"), 'ztar': ('bdist_dumb', "compressed tar file"), 'tar': ('bdist_dumb', "tar file"), - 'wininst': ('bdist_wininst', - "Windows executable installer"), 'zip': ('bdist_dumb', "ZIP file"), 'msi': ('bdist_msi', "Microsoft Installer") } diff --git a/distutils/distutils/command/bdist_msi.py b/distutils/distutils/command/bdist_msi.py index 0863a18..2ed017b 100644 --- a/distutils/distutils/command/bdist_msi.py +++ b/distutils/distutils/command/bdist_msi.py @@ -1,7 +1,5 @@ # Copyright (C) 2005, 2006 Martin von Löwis # Licensed to PSF under a Contributor Agreement. -# The bdist_wininst command proper -# based on bdist_wininst """ Implements the bdist_msi command. """ diff --git a/distutils/distutils/command/bdist_wininst.py b/distutils/distutils/command/bdist_wininst.py deleted file mode 100644 index 0e9ddaa..0000000 --- a/distutils/distutils/command/bdist_wininst.py +++ /dev/null @@ -1,377 +0,0 @@ -"""distutils.command.bdist_wininst - -Implements the Distutils 'bdist_wininst' command: create a windows installer -exe-program.""" - -import os -import sys -import warnings -from distutils.core import Command -from distutils.util import get_platform -from distutils.dir_util import remove_tree -from distutils.errors import * -from distutils.sysconfig import get_python_version -from distutils import log - -class bdist_wininst(Command): - - description = "create an executable installer for MS Windows" - - user_options = [('bdist-dir=', None, - "temporary directory for creating the distribution"), - ('plat-name=', 'p', - "platform name to embed in generated filenames " - "(default: %s)" % get_platform()), - ('keep-temp', 'k', - "keep the pseudo-installation tree around after " + - "creating the distribution archive"), - ('target-version=', None, - "require a specific python version" + - " on the target system"), - ('no-target-compile', 'c', - "do not compile .py to .pyc on the target system"), - ('no-target-optimize', 'o', - "do not compile .py to .pyo (optimized) " - "on the target system"), - ('dist-dir=', 'd', - "directory to put final built distributions in"), - ('bitmap=', 'b', - "bitmap to use for the installer instead of python-powered logo"), - ('title=', 't', - "title to display on the installer background instead of default"), - ('skip-build', None, - "skip rebuilding everything (for testing/debugging)"), - ('install-script=', None, - "basename of installation script to be run after " - "installation or before deinstallation"), - ('pre-install-script=', None, - "Fully qualified filename of a script to be run before " - "any files are installed. This script need not be in the " - "distribution"), - ('user-access-control=', None, - "specify Vista's UAC handling - 'none'/default=no " - "handling, 'auto'=use UAC if target Python installed for " - "all users, 'force'=always use UAC"), - ] - - boolean_options = ['keep-temp', 'no-target-compile', 'no-target-optimize', - 'skip-build'] - - # bpo-10945: bdist_wininst requires mbcs encoding only available on Windows - _unsupported = (sys.platform != "win32") - - def __init__(self, *args, **kw): - super().__init__(*args, **kw) - warnings.warn("bdist_wininst command is deprecated since Python 3.8, " - "use bdist_wheel (wheel packages) instead", - DeprecationWarning, 2) - - def initialize_options(self): - self.bdist_dir = None - self.plat_name = None - self.keep_temp = 0 - self.no_target_compile = 0 - self.no_target_optimize = 0 - self.target_version = None - self.dist_dir = None - self.bitmap = None - self.title = None - self.skip_build = None - self.install_script = None - self.pre_install_script = None - self.user_access_control = None - - - def finalize_options(self): - self.set_undefined_options('bdist', ('skip_build', 'skip_build')) - - if self.bdist_dir is None: - if self.skip_build and self.plat_name: - # If build is skipped and plat_name is overridden, bdist will - # not see the correct 'plat_name' - so set that up manually. - bdist = self.distribution.get_command_obj('bdist') - bdist.plat_name = self.plat_name - # next the command will be initialized using that name - bdist_base = self.get_finalized_command('bdist').bdist_base - self.bdist_dir = os.path.join(bdist_base, 'wininst') - - if not self.target_version: - self.target_version = "" - - if not self.skip_build and self.distribution.has_ext_modules(): - short_version = get_python_version() - if self.target_version and self.target_version != short_version: - raise DistutilsOptionError( - "target version can only be %s, or the '--skip-build'" \ - " option must be specified" % (short_version,)) - self.target_version = short_version - - self.set_undefined_options('bdist', - ('dist_dir', 'dist_dir'), - ('plat_name', 'plat_name'), - ) - - if self.install_script: - for script in self.distribution.scripts: - if self.install_script == os.path.basename(script): - break - else: - raise DistutilsOptionError( - "install_script '%s' not found in scripts" - % self.install_script) - - def run(self): - if (sys.platform != "win32" and - (self.distribution.has_ext_modules() or - self.distribution.has_c_libraries())): - raise DistutilsPlatformError \ - ("distribution contains extensions and/or C libraries; " - "must be compiled on a Windows 32 platform") - - if not self.skip_build: - self.run_command('build') - - install = self.reinitialize_command('install', reinit_subcommands=1) - install.root = self.bdist_dir - install.skip_build = self.skip_build - install.warn_dir = 0 - install.plat_name = self.plat_name - - install_lib = self.reinitialize_command('install_lib') - # we do not want to include pyc or pyo files - install_lib.compile = 0 - install_lib.optimize = 0 - - if self.distribution.has_ext_modules(): - # If we are building an installer for a Python version other - # than the one we are currently running, then we need to ensure - # our build_lib reflects the other Python version rather than ours. - # Note that for target_version!=sys.version, we must have skipped the - # build step, so there is no issue with enforcing the build of this - # version. - target_version = self.target_version - if not target_version: - assert self.skip_build, "Should have already checked this" - target_version = '%d.%d' % sys.version_info[:2] - plat_specifier = ".%s-%s" % (self.plat_name, target_version) - build = self.get_finalized_command('build') - build.build_lib = os.path.join(build.build_base, - 'lib' + plat_specifier) - - # Use a custom scheme for the zip-file, because we have to decide - # at installation time which scheme to use. - for key in ('purelib', 'platlib', 'headers', 'scripts', 'data'): - value = key.upper() - if key == 'headers': - value = value + '/Include/$dist_name' - setattr(install, - 'install_' + key, - value) - - log.info("installing to %s", self.bdist_dir) - install.ensure_finalized() - - # avoid warning of 'install_lib' about installing - # into a directory not in sys.path - sys.path.insert(0, os.path.join(self.bdist_dir, 'PURELIB')) - - install.run() - - del sys.path[0] - - # And make an archive relative to the root of the - # pseudo-installation tree. - from tempfile import mktemp - archive_basename = mktemp() - fullname = self.distribution.get_fullname() - arcname = self.make_archive(archive_basename, "zip", - root_dir=self.bdist_dir) - # create an exe containing the zip-file - self.create_exe(arcname, fullname, self.bitmap) - if self.distribution.has_ext_modules(): - pyversion = get_python_version() - else: - pyversion = 'any' - self.distribution.dist_files.append(('bdist_wininst', pyversion, - self.get_installer_filename(fullname))) - # remove the zip-file again - log.debug("removing temporary file '%s'", arcname) - os.remove(arcname) - - if not self.keep_temp: - remove_tree(self.bdist_dir, dry_run=self.dry_run) - - def get_inidata(self): - # Return data describing the installation. - lines = [] - metadata = self.distribution.metadata - - # Write the [metadata] section. - lines.append("[metadata]") - - # 'info' will be displayed in the installer's dialog box, - # describing the items to be installed. - info = (metadata.long_description or '') + '\n' - - # Escape newline characters - def escape(s): - return s.replace("\n", "\\n") - - for name in ["author", "author_email", "description", "maintainer", - "maintainer_email", "name", "url", "version"]: - data = getattr(metadata, name, "") - if data: - info = info + ("\n %s: %s" % \ - (name.capitalize(), escape(data))) - lines.append("%s=%s" % (name, escape(data))) - - # The [setup] section contains entries controlling - # the installer runtime. - lines.append("\n[Setup]") - if self.install_script: - lines.append("install_script=%s" % self.install_script) - lines.append("info=%s" % escape(info)) - lines.append("target_compile=%d" % (not self.no_target_compile)) - lines.append("target_optimize=%d" % (not self.no_target_optimize)) - if self.target_version: - lines.append("target_version=%s" % self.target_version) - if self.user_access_control: - lines.append("user_access_control=%s" % self.user_access_control) - - title = self.title or self.distribution.get_fullname() - lines.append("title=%s" % escape(title)) - import time - import distutils - build_info = "Built %s with distutils-%s" % \ - (time.ctime(time.time()), distutils.__version__) - lines.append("build_info=%s" % build_info) - return "\n".join(lines) - - def create_exe(self, arcname, fullname, bitmap=None): - import struct - - self.mkpath(self.dist_dir) - - cfgdata = self.get_inidata() - - installer_name = self.get_installer_filename(fullname) - self.announce("creating %s" % installer_name) - - if bitmap: - with open(bitmap, "rb") as f: - bitmapdata = f.read() - bitmaplen = len(bitmapdata) - else: - bitmaplen = 0 - - with open(installer_name, "wb") as file: - file.write(self.get_exe_bytes()) - if bitmap: - file.write(bitmapdata) - - # Convert cfgdata from unicode to ascii, mbcs encoded - if isinstance(cfgdata, str): - cfgdata = cfgdata.encode("mbcs") - - # Append the pre-install script - cfgdata = cfgdata + b"\0" - if self.pre_install_script: - # We need to normalize newlines, so we open in text mode and - # convert back to bytes. "latin-1" simply avoids any possible - # failures. - with open(self.pre_install_script, "r", - encoding="latin-1") as script: - script_data = script.read().encode("latin-1") - cfgdata = cfgdata + script_data + b"\n\0" - else: - # empty pre-install script - cfgdata = cfgdata + b"\0" - file.write(cfgdata) - - # The 'magic number' 0x1234567B is used to make sure that the - # binary layout of 'cfgdata' is what the wininst.exe binary - # expects. If the layout changes, increment that number, make - # the corresponding changes to the wininst.exe sources, and - # recompile them. - header = struct.pack("", value) + value = value.replace("$installed_base", "$base") + value = value.replace("$py_version_nodot_plat", "$py_version_nodot") + if key == "headers": + value += "/$dist_name" + if sys.version_info >= (3, 9) and key == "platlib": + # platlibdir is available since 3.9: bpo-1294959 + value = value.replace("/lib/", "/$platlibdir/") + INSTALL_SCHEMES[main_key][key] = value + +# The following part of INSTALL_SCHEMES has a different definition +# than the one in sysconfig, but because both depend on the site module, +# the outcomes should be the same. if HAS_USER_SITE: INSTALL_SCHEMES['nt_user'] = { 'purelib': '$usersite', @@ -64,11 +86,6 @@ 'data' : '$userbase', } -# The keys to an installation scheme; if any new types of files are to be -# installed, be sure to add an entry to every installation scheme above, -# and to SCHEME_KEYS here. -SCHEME_KEYS = ('purelib', 'platlib', 'headers', 'scripts', 'data') - class install(Command): @@ -169,8 +186,9 @@ def initialize_options(self): self.install_lib = None # set to either purelib or platlib self.install_scripts = None self.install_data = None - self.install_userbase = USER_BASE - self.install_usersite = USER_SITE + if HAS_USER_SITE: + self.install_userbase = USER_BASE + self.install_usersite = USER_SITE self.compile = None self.optimize = None @@ -305,6 +323,9 @@ def finalize_options(self): self.config_vars['userbase'] = self.install_userbase self.config_vars['usersite'] = self.install_usersite + if sysconfig.is_python_build(True): + self.config_vars['srcdir'] = sysconfig.get_config_var('srcdir') + self.expand_basedirs() self.dump_dirs("post-expand_basedirs()") @@ -343,8 +364,9 @@ def finalize_options(self): # Convert directories from Unix /-separated syntax to the local # convention. self.convert_paths('lib', 'purelib', 'platlib', - 'scripts', 'data', 'headers', - 'userbase', 'usersite') + 'scripts', 'data', 'headers') + if HAS_USER_SITE: + self.convert_paths('userbase', 'usersite') # Deprecated # Well, we're not actually fully completely finalized yet: we still diff --git a/distutils/distutils/command/wininst-10.0-amd64.exe b/distutils/distutils/command/wininst-10.0-amd64.exe deleted file mode 100644 index 6fa0dce16315854223a9fefc3ac9f3cf71730a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222208 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�?!H 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 N70sMIW8OSN{vUE=L&yLC diff --git a/distutils/distutils/command/wininst-10.0.exe b/distutils/distutils/command/wininst-10.0.exe deleted file mode 100644 index afc3bc6c14847283f32f53327184c6c2806efe0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190976 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

OPEHI2%PD3L3F4K9SA@F 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 diff --git a/distutils/distutils/command/wininst-14.0-amd64.exe b/distutils/distutils/command/wininst-14.0-amd64.exe deleted file mode 100644 index 253c2e2eccefa79393827f44f85680536906574a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587776 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 z 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 z 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 diff --git a/distutils/distutils/command/wininst-14.0.exe b/distutils/distutils/command/wininst-14.0.exe deleted file mode 100644 index 46f5f356676c800f99742deb6bf4c0a96aa166c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 458240 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�VkkI>$}~d(uZJ57cs;^Uz@cHejzJwU6!4Wk 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%0A7`rF^n2GrI3(dH~ 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 diff --git a/distutils/distutils/command/wininst-7.1.exe b/distutils/distutils/command/wininst-7.1.exe deleted file mode 100644 index 1433bc1ad3775ec9277e13ca8bdca3a5dbc23643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 diff --git a/distutils/distutils/command/wininst-9.0-amd64.exe b/distutils/distutils/command/wininst-9.0-amd64.exe deleted file mode 100644 index 94fbd4341b2a140fb0aa38ed1e10ff69600d4911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224256 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ÎsYM~fS}Xp>Y#7qtYq?Xvt~um=bn8Y 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 hJDV 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 diff --git a/distutils/distutils/command/wininst-9.0.exe b/distutils/distutils/command/wininst-9.0.exe deleted file mode 100644 index 2ec261f9fdcd034cff9602af0c81fb7953ce2e2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196096 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

4O*Kp59>M2 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 Date: Wed, 30 Oct 2024 09:51:06 +0900 Subject: [PATCH 41/47] distutils 3.11.9 --- distutils/distutils/command/bdist.py | 5 +- distutils/distutils/command/bdist_msi.py | 747 ------------------ distutils/distutils/command/build_ext.py | 2 +- distutils/distutils/command/check.py | 8 +- distutils/distutils/config.py | 5 +- distutils/distutils/msvccompiler.py | 1 - distutils/distutils/sysconfig.py | 7 +- distutils/distutils/tests/__init__.py | 36 +- .../distutils/tests/test_archive_util.py | 7 +- distutils/distutils/tests/test_bdist.py | 19 +- distutils/distutils/tests/test_bdist_dumb.py | 6 +- distutils/distutils/tests/test_bdist_msi.py | 27 - distutils/distutils/tests/test_bdist_rpm.py | 13 +- distutils/distutils/tests/test_build.py | 7 +- distutils/distutils/tests/test_build_clib.py | 10 +- distutils/distutils/tests/test_build_ext.py | 16 +- distutils/distutils/tests/test_build_py.py | 9 +- .../distutils/tests/test_build_scripts.py | 6 +- distutils/distutils/tests/test_check.py | 6 +- distutils/distutils/tests/test_clean.py | 6 +- distutils/distutils/tests/test_cmd.py | 7 +- distutils/distutils/tests/test_config.py | 6 +- distutils/distutils/tests/test_config_cmd.py | 10 +- distutils/distutils/tests/test_core.py | 7 +- .../distutils/tests/test_cygwinccompiler.py | 6 +- distutils/distutils/tests/test_dep_util.py | 6 +- distutils/distutils/tests/test_dir_util.py | 11 +- distutils/distutils/tests/test_dist.py | 10 +- distutils/distutils/tests/test_extension.py | 6 +- distutils/distutils/tests/test_file_util.py | 8 +- distutils/distutils/tests/test_filelist.py | 11 +- distutils/distutils/tests/test_install.py | 8 +- .../distutils/tests/test_install_data.py | 6 +- .../distutils/tests/test_install_headers.py | 6 +- distutils/distutils/tests/test_install_lib.py | 9 +- .../distutils/tests/test_install_scripts.py | 6 +- distutils/distutils/tests/test_log.py | 7 +- .../distutils/tests/test_msvc9compiler.py | 6 +- .../distutils/tests/test_msvccompiler.py | 6 +- distutils/distutils/tests/test_register.py | 8 +- distutils/distutils/tests/test_sdist.py | 7 +- distutils/distutils/tests/test_spawn.py | 9 +- distutils/distutils/tests/test_sysconfig.py | 39 +- distutils/distutils/tests/test_text_file.py | 6 +- .../distutils/tests/test_unixccompiler.py | 6 +- distutils/distutils/tests/test_upload.py | 6 +- distutils/distutils/tests/test_util.py | 11 +- distutils/distutils/tests/test_version.py | 6 +- .../distutils/tests/test_versionpredicate.py | 8 +- distutils/pyproject.toml | 2 +- distutils/tests/test_distutils.py | 14 +- 51 files changed, 140 insertions(+), 1067 deletions(-) delete mode 100644 distutils/distutils/command/bdist_msi.py delete mode 100644 distutils/distutils/tests/test_bdist_msi.py diff --git a/distutils/distutils/command/bdist.py b/distutils/distutils/command/bdist.py index d580a80..60309e1 100644 --- a/distutils/distutils/command/bdist.py +++ b/distutils/distutils/command/bdist.py @@ -61,8 +61,7 @@ class bdist(Command): 'nt': 'zip'} # Establish the preferred order (for the --help-formats option). - format_commands = ['rpm', 'gztar', 'bztar', 'xztar', 'ztar', 'tar', - 'zip', 'msi'] + format_commands = ['rpm', 'gztar', 'bztar', 'xztar', 'ztar', 'tar', 'zip'] # And the real information. format_command = {'rpm': ('bdist_rpm', "RPM distribution"), @@ -72,10 +71,8 @@ class bdist(Command): 'ztar': ('bdist_dumb', "compressed tar file"), 'tar': ('bdist_dumb', "tar file"), 'zip': ('bdist_dumb', "ZIP file"), - 'msi': ('bdist_msi', "Microsoft Installer") } - def initialize_options(self): self.bdist_base = None self.plat_name = None diff --git a/distutils/distutils/command/bdist_msi.py b/distutils/distutils/command/bdist_msi.py deleted file mode 100644 index 2ed017b..0000000 --- a/distutils/distutils/command/bdist_msi.py +++ /dev/null @@ -1,747 +0,0 @@ -# Copyright (C) 2005, 2006 Martin von Löwis -# Licensed to PSF under a Contributor Agreement. -""" -Implements the bdist_msi command. -""" - -import os -import sys -import warnings -from distutils.core import Command -from distutils.dir_util import remove_tree -from distutils.sysconfig import get_python_version -from distutils.version import StrictVersion -from distutils.errors import DistutilsOptionError -from distutils.util import get_platform -from distutils import log -import msilib -from msilib import schema, sequence, text -from msilib import Directory, Feature, Dialog, add_data - -class PyDialog(Dialog): - """Dialog class with a fixed layout: controls at the top, then a ruler, - then a list of buttons: back, next, cancel. Optionally a bitmap at the - left.""" - def __init__(self, *args, **kw): - """Dialog(database, name, x, y, w, h, attributes, title, first, - default, cancel, bitmap=true)""" - Dialog.__init__(self, *args) - ruler = self.h - 36 - bmwidth = 152*ruler/328 - #if kw.get("bitmap", True): - # self.bitmap("Bitmap", 0, 0, bmwidth, ruler, "PythonWin") - self.line("BottomLine", 0, ruler, self.w, 0) - - def title(self, title): - "Set the title text of the dialog at the top." - # name, x, y, w, h, flags=Visible|Enabled|Transparent|NoPrefix, - # text, in VerdanaBold10 - self.text("Title", 15, 10, 320, 60, 0x30003, - r"{\VerdanaBold10}%s" % title) - - def back(self, title, next, name = "Back", active = 1): - """Add a back button with a given title, the tab-next button, - its name in the Control table, possibly initially disabled. - - Return the button, so that events can be associated""" - if active: - flags = 3 # Visible|Enabled - else: - flags = 1 # Visible - return self.pushbutton(name, 180, self.h-27 , 56, 17, flags, title, next) - - def cancel(self, title, next, name = "Cancel", active = 1): - """Add a cancel button with a given title, the tab-next button, - its name in the Control table, possibly initially disabled. - - Return the button, so that events can be associated""" - if active: - flags = 3 # Visible|Enabled - else: - flags = 1 # Visible - return self.pushbutton(name, 304, self.h-27, 56, 17, flags, title, next) - - def next(self, title, next, name = "Next", active = 1): - """Add a Next button with a given title, the tab-next button, - its name in the Control table, possibly initially disabled. - - Return the button, so that events can be associated""" - if active: - flags = 3 # Visible|Enabled - else: - flags = 1 # Visible - return self.pushbutton(name, 236, self.h-27, 56, 17, flags, title, next) - - def xbutton(self, name, title, next, xpos): - """Add a button with a given title, the tab-next button, - its name in the Control table, giving its x position; the - y-position is aligned with the other buttons. - - Return the button, so that events can be associated""" - return self.pushbutton(name, int(self.w*xpos - 28), self.h-27, 56, 17, 3, title, next) - -class bdist_msi(Command): - - description = "create a Microsoft Installer (.msi) binary distribution" - - user_options = [('bdist-dir=', None, - "temporary directory for creating the distribution"), - ('plat-name=', 'p', - "platform name to embed in generated filenames " - "(default: %s)" % get_platform()), - ('keep-temp', 'k', - "keep the pseudo-installation tree around after " + - "creating the distribution archive"), - ('target-version=', None, - "require a specific python version" + - " on the target system"), - ('no-target-compile', 'c', - "do not compile .py to .pyc on the target system"), - ('no-target-optimize', 'o', - "do not compile .py to .pyo (optimized) " - "on the target system"), - ('dist-dir=', 'd', - "directory to put final built distributions in"), - ('skip-build', None, - "skip rebuilding everything (for testing/debugging)"), - ('install-script=', None, - "basename of installation script to be run after " - "installation or before deinstallation"), - ('pre-install-script=', None, - "Fully qualified filename of a script to be run before " - "any files are installed. This script need not be in the " - "distribution"), - ] - - boolean_options = ['keep-temp', 'no-target-compile', 'no-target-optimize', - 'skip-build'] - - all_versions = ['2.0', '2.1', '2.2', '2.3', '2.4', - '2.5', '2.6', '2.7', '2.8', '2.9', - '3.0', '3.1', '3.2', '3.3', '3.4', - '3.5', '3.6', '3.7', '3.8', '3.9'] - other_version = 'X' - - def __init__(self, *args, **kw): - super().__init__(*args, **kw) - warnings.warn("bdist_msi command is deprecated since Python 3.9, " - "use bdist_wheel (wheel packages) instead", - DeprecationWarning, 2) - - def initialize_options(self): - self.bdist_dir = None - self.plat_name = None - self.keep_temp = 0 - self.no_target_compile = 0 - self.no_target_optimize = 0 - self.target_version = None - self.dist_dir = None - self.skip_build = None - self.install_script = None - self.pre_install_script = None - self.versions = None - - def finalize_options(self): - self.set_undefined_options('bdist', ('skip_build', 'skip_build')) - - if self.bdist_dir is None: - bdist_base = self.get_finalized_command('bdist').bdist_base - self.bdist_dir = os.path.join(bdist_base, 'msi') - - short_version = get_python_version() - if (not self.target_version) and self.distribution.has_ext_modules(): - self.target_version = short_version - - if self.target_version: - self.versions = [self.target_version] - if not self.skip_build and self.distribution.has_ext_modules()\ - and self.target_version != short_version: - raise DistutilsOptionError( - "target version can only be %s, or the '--skip-build'" - " option must be specified" % (short_version,)) - else: - self.versions = list(self.all_versions) - - self.set_undefined_options('bdist', - ('dist_dir', 'dist_dir'), - ('plat_name', 'plat_name'), - ) - - if self.pre_install_script: - raise DistutilsOptionError( - "the pre-install-script feature is not yet implemented") - - if self.install_script: - for script in self.distribution.scripts: - if self.install_script == os.path.basename(script): - break - else: - raise DistutilsOptionError( - "install_script '%s' not found in scripts" - % self.install_script) - self.install_script_key = None - - def run(self): - if not self.skip_build: - self.run_command('build') - - install = self.reinitialize_command('install', reinit_subcommands=1) - install.prefix = self.bdist_dir - install.skip_build = self.skip_build - install.warn_dir = 0 - - install_lib = self.reinitialize_command('install_lib') - # we do not want to include pyc or pyo files - install_lib.compile = 0 - install_lib.optimize = 0 - - if self.distribution.has_ext_modules(): - # If we are building an installer for a Python version other - # than the one we are currently running, then we need to ensure - # our build_lib reflects the other Python version rather than ours. - # Note that for target_version!=sys.version, we must have skipped the - # build step, so there is no issue with enforcing the build of this - # version. - target_version = self.target_version - if not target_version: - assert self.skip_build, "Should have already checked this" - target_version = '%d.%d' % sys.version_info[:2] - plat_specifier = ".%s-%s" % (self.plat_name, target_version) - build = self.get_finalized_command('build') - build.build_lib = os.path.join(build.build_base, - 'lib' + plat_specifier) - - log.info("installing to %s", self.bdist_dir) - install.ensure_finalized() - - # avoid warning of 'install_lib' about installing - # into a directory not in sys.path - sys.path.insert(0, os.path.join(self.bdist_dir, 'PURELIB')) - - install.run() - - del sys.path[0] - - self.mkpath(self.dist_dir) - fullname = self.distribution.get_fullname() - installer_name = self.get_installer_filename(fullname) - installer_name = os.path.abspath(installer_name) - if os.path.exists(installer_name): os.unlink(installer_name) - - metadata = self.distribution.metadata - author = metadata.author - if not author: - author = metadata.maintainer - if not author: - author = "UNKNOWN" - version = metadata.get_version() - # ProductVersion must be strictly numeric - # XXX need to deal with prerelease versions - sversion = "%d.%d.%d" % StrictVersion(version).version - # Prefix ProductName with Python x.y, so that - # it sorts together with the other Python packages - # in Add-Remove-Programs (APR) - fullname = self.distribution.get_fullname() - if self.target_version: - product_name = "Python %s %s" % (self.target_version, fullname) - else: - product_name = "Python %s" % (fullname) - self.db = msilib.init_database(installer_name, schema, - product_name, msilib.gen_uuid(), - sversion, author) - msilib.add_tables(self.db, sequence) - props = [('DistVersion', version)] - email = metadata.author_email or metadata.maintainer_email - if email: - props.append(("ARPCONTACT", email)) - if metadata.url: - props.append(("ARPURLINFOABOUT", metadata.url)) - if props: - add_data(self.db, 'Property', props) - - self.add_find_python() - self.add_files() - self.add_scripts() - self.add_ui() - self.db.Commit() - - if hasattr(self.distribution, 'dist_files'): - tup = 'bdist_msi', self.target_version or 'any', fullname - self.distribution.dist_files.append(tup) - - if not self.keep_temp: - remove_tree(self.bdist_dir, dry_run=self.dry_run) - - def add_files(self): - db = self.db - cab = msilib.CAB("distfiles") - rootdir = os.path.abspath(self.bdist_dir) - - root = Directory(db, cab, None, rootdir, "TARGETDIR", "SourceDir") - f = Feature(db, "Python", "Python", "Everything", - 0, 1, directory="TARGETDIR") - - items = [(f, root, '')] - for version in self.versions + [self.other_version]: - target = "TARGETDIR" + version - name = default = "Python" + version - desc = "Everything" - if version is self.other_version: - title = "Python from another location" - level = 2 - else: - title = "Python %s from registry" % version - level = 1 - f = Feature(db, name, title, desc, 1, level, directory=target) - dir = Directory(db, cab, root, rootdir, target, default) - items.append((f, dir, version)) - db.Commit() - - seen = {} - for feature, dir, version in items: - todo = [dir] - while todo: - dir = todo.pop() - for file in os.listdir(dir.absolute): - afile = os.path.join(dir.absolute, file) - if os.path.isdir(afile): - short = "%s|%s" % (dir.make_short(file), file) - default = file + version - newdir = Directory(db, cab, dir, file, default, short) - todo.append(newdir) - else: - if not dir.component: - dir.start_component(dir.logical, feature, 0) - if afile not in seen: - key = seen[afile] = dir.add_file(file) - if file==self.install_script: - if self.install_script_key: - raise DistutilsOptionError( - "Multiple files with name %s" % file) - self.install_script_key = '[#%s]' % key - else: - key = seen[afile] - add_data(self.db, "DuplicateFile", - [(key + version, dir.component, key, None, dir.logical)]) - db.Commit() - cab.commit(db) - - def add_find_python(self): - """Adds code to the installer to compute the location of Python. - - Properties PYTHON.MACHINE.X.Y and PYTHON.USER.X.Y will be set from the - registry for each version of Python. - - Properties TARGETDIRX.Y will be set from PYTHON.USER.X.Y if defined, - else from PYTHON.MACHINE.X.Y. - - Properties PYTHONX.Y will be set to TARGETDIRX.Y\\python.exe""" - - start = 402 - for ver in self.versions: - install_path = r"SOFTWARE\Python\PythonCore\%s\InstallPath" % ver - machine_reg = "python.machine." + ver - user_reg = "python.user." + ver - machine_prop = "PYTHON.MACHINE." + ver - user_prop = "PYTHON.USER." + ver - machine_action = "PythonFromMachine" + ver - user_action = "PythonFromUser" + ver - exe_action = "PythonExe" + ver - target_dir_prop = "TARGETDIR" + ver - exe_prop = "PYTHON" + ver - if msilib.Win64: - # type: msidbLocatorTypeRawValue + msidbLocatorType64bit - Type = 2+16 - else: - Type = 2 - add_data(self.db, "RegLocator", - [(machine_reg, 2, install_path, None, Type), - (user_reg, 1, install_path, None, Type)]) - add_data(self.db, "AppSearch", - [(machine_prop, machine_reg), - (user_prop, user_reg)]) - add_data(self.db, "CustomAction", - [(machine_action, 51+256, target_dir_prop, "[" + machine_prop + "]"), - (user_action, 51+256, target_dir_prop, "[" + user_prop + "]"), - (exe_action, 51+256, exe_prop, "[" + target_dir_prop + "]\\python.exe"), - ]) - add_data(self.db, "InstallExecuteSequence", - [(machine_action, machine_prop, start), - (user_action, user_prop, start + 1), - (exe_action, None, start + 2), - ]) - add_data(self.db, "InstallUISequence", - [(machine_action, machine_prop, start), - (user_action, user_prop, start + 1), - (exe_action, None, start + 2), - ]) - add_data(self.db, "Condition", - [("Python" + ver, 0, "NOT TARGETDIR" + ver)]) - start += 4 - assert start < 500 - - def add_scripts(self): - if self.install_script: - start = 6800 - for ver in self.versions + [self.other_version]: - install_action = "install_script." + ver - exe_prop = "PYTHON" + ver - add_data(self.db, "CustomAction", - [(install_action, 50, exe_prop, self.install_script_key)]) - add_data(self.db, "InstallExecuteSequence", - [(install_action, "&Python%s=3" % ver, start)]) - start += 1 - # XXX pre-install scripts are currently refused in finalize_options() - # but if this feature is completed, it will also need to add - # entries for each version as the above code does - if self.pre_install_script: - scriptfn = os.path.join(self.bdist_dir, "preinstall.bat") - with open(scriptfn, "w") as f: - # The batch file will be executed with [PYTHON], so that %1 - # is the path to the Python interpreter; %0 will be the path - # of the batch file. - # rem =""" - # %1 %0 - # exit - # """ - # - f.write('rem ="""\n%1 %0\nexit\n"""\n') - with open(self.pre_install_script) as fin: - f.write(fin.read()) - add_data(self.db, "Binary", - [("PreInstall", msilib.Binary(scriptfn)) - ]) - add_data(self.db, "CustomAction", - [("PreInstall", 2, "PreInstall", None) - ]) - add_data(self.db, "InstallExecuteSequence", - [("PreInstall", "NOT Installed", 450)]) - - - def add_ui(self): - db = self.db - x = y = 50 - w = 370 - h = 300 - title = "[ProductName] Setup" - - # see "Dialog Style Bits" - modal = 3 # visible | modal - modeless = 1 # visible - track_disk_space = 32 - - # UI customization properties - add_data(db, "Property", - # See "DefaultUIFont Property" - [("DefaultUIFont", "DlgFont8"), - # See "ErrorDialog Style Bit" - ("ErrorDialog", "ErrorDlg"), - ("Progress1", "Install"), # modified in maintenance type dlg - ("Progress2", "installs"), - ("MaintenanceForm_Action", "Repair"), - # possible values: ALL, JUSTME - ("WhichUsers", "ALL") - ]) - - # Fonts, see "TextStyle Table" - add_data(db, "TextStyle", - [("DlgFont8", "Tahoma", 9, None, 0), - ("DlgFontBold8", "Tahoma", 8, None, 1), #bold - ("VerdanaBold10", "Verdana", 10, None, 1), - ("VerdanaRed9", "Verdana", 9, 255, 0), - ]) - - # UI Sequences, see "InstallUISequence Table", "Using a Sequence Table" - # Numbers indicate sequence; see sequence.py for how these action integrate - add_data(db, "InstallUISequence", - [("PrepareDlg", "Not Privileged or Windows9x or Installed", 140), - ("WhichUsersDlg", "Privileged and not Windows9x and not Installed", 141), - # In the user interface, assume all-users installation if privileged. - ("SelectFeaturesDlg", "Not Installed", 1230), - # XXX no support for resume installations yet - #("ResumeDlg", "Installed AND (RESUME OR Preselected)", 1240), - ("MaintenanceTypeDlg", "Installed AND NOT RESUME AND NOT Preselected", 1250), - ("ProgressDlg", None, 1280)]) - - add_data(db, 'ActionText', text.ActionText) - add_data(db, 'UIText', text.UIText) - ##################################################################### - # Standard dialogs: FatalError, UserExit, ExitDialog - fatal=PyDialog(db, "FatalError", x, y, w, h, modal, title, - "Finish", "Finish", "Finish") - fatal.title("[ProductName] Installer ended prematurely") - fatal.back("< Back", "Finish", active = 0) - fatal.cancel("Cancel", "Back", active = 0) - fatal.text("Description1", 15, 70, 320, 80, 0x30003, - "[ProductName] setup ended prematurely because of an error. Your system has not been modified. To install this program at a later time, please run the installation again.") - fatal.text("Description2", 15, 155, 320, 20, 0x30003, - "Click the Finish button to exit the Installer.") - c=fatal.next("Finish", "Cancel", name="Finish") - c.event("EndDialog", "Exit") - - user_exit=PyDialog(db, "UserExit", x, y, w, h, modal, title, - "Finish", "Finish", "Finish") - user_exit.title("[ProductName] Installer was interrupted") - user_exit.back("< Back", "Finish", active = 0) - user_exit.cancel("Cancel", "Back", active = 0) - user_exit.text("Description1", 15, 70, 320, 80, 0x30003, - "[ProductName] setup was interrupted. Your system has not been modified. " - "To install this program at a later time, please run the installation again.") - user_exit.text("Description2", 15, 155, 320, 20, 0x30003, - "Click the Finish button to exit the Installer.") - c = user_exit.next("Finish", "Cancel", name="Finish") - c.event("EndDialog", "Exit") - - exit_dialog = PyDialog(db, "ExitDialog", x, y, w, h, modal, title, - "Finish", "Finish", "Finish") - exit_dialog.title("Completing the [ProductName] Installer") - exit_dialog.back("< Back", "Finish", active = 0) - exit_dialog.cancel("Cancel", "Back", active = 0) - exit_dialog.text("Description", 15, 235, 320, 20, 0x30003, - "Click the Finish button to exit the Installer.") - c = exit_dialog.next("Finish", "Cancel", name="Finish") - c.event("EndDialog", "Return") - - ##################################################################### - # Required dialog: FilesInUse, ErrorDlg - inuse = PyDialog(db, "FilesInUse", - x, y, w, h, - 19, # KeepModeless|Modal|Visible - title, - "Retry", "Retry", "Retry", bitmap=False) - inuse.text("Title", 15, 6, 200, 15, 0x30003, - r"{\DlgFontBold8}Files in Use") - inuse.text("Description", 20, 23, 280, 20, 0x30003, - "Some files that need to be updated are currently in use.") - inuse.text("Text", 20, 55, 330, 50, 3, - "The following applications are using files that need to be updated by this setup. Close these applications and then click Retry to continue the installation or Cancel to exit it.") - inuse.control("List", "ListBox", 20, 107, 330, 130, 7, "FileInUseProcess", - None, None, None) - c=inuse.back("Exit", "Ignore", name="Exit") - c.event("EndDialog", "Exit") - c=inuse.next("Ignore", "Retry", name="Ignore") - c.event("EndDialog", "Ignore") - c=inuse.cancel("Retry", "Exit", name="Retry") - c.event("EndDialog","Retry") - - # See "Error Dialog". See "ICE20" for the required names of the controls. - error = Dialog(db, "ErrorDlg", - 50, 10, 330, 101, - 65543, # Error|Minimize|Modal|Visible - title, - "ErrorText", None, None) - error.text("ErrorText", 50,9,280,48,3, "") - #error.control("ErrorIcon", "Icon", 15, 9, 24, 24, 5242881, None, "py.ico", None, None) - error.pushbutton("N",120,72,81,21,3,"No",None).event("EndDialog","ErrorNo") - error.pushbutton("Y",240,72,81,21,3,"Yes",None).event("EndDialog","ErrorYes") - error.pushbutton("A",0,72,81,21,3,"Abort",None).event("EndDialog","ErrorAbort") - error.pushbutton("C",42,72,81,21,3,"Cancel",None).event("EndDialog","ErrorCancel") - error.pushbutton("I",81,72,81,21,3,"Ignore",None).event("EndDialog","ErrorIgnore") - error.pushbutton("O",159,72,81,21,3,"Ok",None).event("EndDialog","ErrorOk") - error.pushbutton("R",198,72,81,21,3,"Retry",None).event("EndDialog","ErrorRetry") - - ##################################################################### - # Global "Query Cancel" dialog - cancel = Dialog(db, "CancelDlg", 50, 10, 260, 85, 3, title, - "No", "No", "No") - cancel.text("Text", 48, 15, 194, 30, 3, - "Are you sure you want to cancel [ProductName] installation?") - #cancel.control("Icon", "Icon", 15, 15, 24, 24, 5242881, None, - # "py.ico", None, None) - c=cancel.pushbutton("Yes", 72, 57, 56, 17, 3, "Yes", "No") - c.event("EndDialog", "Exit") - - c=cancel.pushbutton("No", 132, 57, 56, 17, 3, "No", "Yes") - c.event("EndDialog", "Return") - - ##################################################################### - # Global "Wait for costing" dialog - costing = Dialog(db, "WaitForCostingDlg", 50, 10, 260, 85, modal, title, - "Return", "Return", "Return") - costing.text("Text", 48, 15, 194, 30, 3, - "Please wait while the installer finishes determining your disk space requirements.") - c = costing.pushbutton("Return", 102, 57, 56, 17, 3, "Return", None) - c.event("EndDialog", "Exit") - - ##################################################################### - # Preparation dialog: no user input except cancellation - prep = PyDialog(db, "PrepareDlg", x, y, w, h, modeless, title, - "Cancel", "Cancel", "Cancel") - prep.text("Description", 15, 70, 320, 40, 0x30003, - "Please wait while the Installer prepares to guide you through the installation.") - prep.title("Welcome to the [ProductName] Installer") - c=prep.text("ActionText", 15, 110, 320, 20, 0x30003, "Pondering...") - c.mapping("ActionText", "Text") - c=prep.text("ActionData", 15, 135, 320, 30, 0x30003, None) - c.mapping("ActionData", "Text") - prep.back("Back", None, active=0) - prep.next("Next", None, active=0) - c=prep.cancel("Cancel", None) - c.event("SpawnDialog", "CancelDlg") - - ##################################################################### - # Feature (Python directory) selection - seldlg = PyDialog(db, "SelectFeaturesDlg", x, y, w, h, modal, title, - "Next", "Next", "Cancel") - seldlg.title("Select Python Installations") - - seldlg.text("Hint", 15, 30, 300, 20, 3, - "Select the Python locations where %s should be installed." - % self.distribution.get_fullname()) - - seldlg.back("< Back", None, active=0) - c = seldlg.next("Next >", "Cancel") - order = 1 - c.event("[TARGETDIR]", "[SourceDir]", ordering=order) - for version in self.versions + [self.other_version]: - order += 1 - c.event("[TARGETDIR]", "[TARGETDIR%s]" % version, - "FEATURE_SELECTED AND &Python%s=3" % version, - ordering=order) - c.event("SpawnWaitDialog", "WaitForCostingDlg", ordering=order + 1) - c.event("EndDialog", "Return", ordering=order + 2) - c = seldlg.cancel("Cancel", "Features") - c.event("SpawnDialog", "CancelDlg") - - c = seldlg.control("Features", "SelectionTree", 15, 60, 300, 120, 3, - "FEATURE", None, "PathEdit", None) - c.event("[FEATURE_SELECTED]", "1") - ver = self.other_version - install_other_cond = "FEATURE_SELECTED AND &Python%s=3" % ver - dont_install_other_cond = "FEATURE_SELECTED AND &Python%s<>3" % ver - - c = seldlg.text("Other", 15, 200, 300, 15, 3, - "Provide an alternate Python location") - c.condition("Enable", install_other_cond) - c.condition("Show", install_other_cond) - c.condition("Disable", dont_install_other_cond) - c.condition("Hide", dont_install_other_cond) - - c = seldlg.control("PathEdit", "PathEdit", 15, 215, 300, 16, 1, - "TARGETDIR" + ver, None, "Next", None) - c.condition("Enable", install_other_cond) - c.condition("Show", install_other_cond) - c.condition("Disable", dont_install_other_cond) - c.condition("Hide", dont_install_other_cond) - - ##################################################################### - # Disk cost - cost = PyDialog(db, "DiskCostDlg", x, y, w, h, modal, title, - "OK", "OK", "OK", bitmap=False) - cost.text("Title", 15, 6, 200, 15, 0x30003, - r"{\DlgFontBold8}Disk Space Requirements") - cost.text("Description", 20, 20, 280, 20, 0x30003, - "The disk space required for the installation of the selected features.") - cost.text("Text", 20, 53, 330, 60, 3, - "The highlighted volumes (if any) do not have enough disk space " - "available for the currently selected features. You can either " - "remove some files from the highlighted volumes, or choose to " - "install less features onto local drive(s), or select different " - "destination drive(s).") - cost.control("VolumeList", "VolumeCostList", 20, 100, 330, 150, 393223, - None, "{120}{70}{70}{70}{70}", None, None) - cost.xbutton("OK", "Ok", None, 0.5).event("EndDialog", "Return") - - ##################################################################### - # WhichUsers Dialog. Only available on NT, and for privileged users. - # This must be run before FindRelatedProducts, because that will - # take into account whether the previous installation was per-user - # or per-machine. We currently don't support going back to this - # dialog after "Next" was selected; to support this, we would need to - # find how to reset the ALLUSERS property, and how to re-run - # FindRelatedProducts. - # On Windows9x, the ALLUSERS property is ignored on the command line - # and in the Property table, but installer fails according to the documentation - # if a dialog attempts to set ALLUSERS. - whichusers = PyDialog(db, "WhichUsersDlg", x, y, w, h, modal, title, - "AdminInstall", "Next", "Cancel") - whichusers.title("Select whether to install [ProductName] for all users of this computer.") - # A radio group with two options: allusers, justme - g = whichusers.radiogroup("AdminInstall", 15, 60, 260, 50, 3, - "WhichUsers", "", "Next") - g.add("ALL", 0, 5, 150, 20, "Install for all users") - g.add("JUSTME", 0, 25, 150, 20, "Install just for me") - - whichusers.back("Back", None, active=0) - - c = whichusers.next("Next >", "Cancel") - c.event("[ALLUSERS]", "1", 'WhichUsers="ALL"', 1) - c.event("EndDialog", "Return", ordering = 2) - - c = whichusers.cancel("Cancel", "AdminInstall") - c.event("SpawnDialog", "CancelDlg") - - ##################################################################### - # Installation Progress dialog (modeless) - progress = PyDialog(db, "ProgressDlg", x, y, w, h, modeless, title, - "Cancel", "Cancel", "Cancel", bitmap=False) - progress.text("Title", 20, 15, 200, 15, 0x30003, - r"{\DlgFontBold8}[Progress1] [ProductName]") - progress.text("Text", 35, 65, 300, 30, 3, - "Please wait while the Installer [Progress2] [ProductName]. " - "This may take several minutes.") - progress.text("StatusLabel", 35, 100, 35, 20, 3, "Status:") - - c=progress.text("ActionText", 70, 100, w-70, 20, 3, "Pondering...") - c.mapping("ActionText", "Text") - - #c=progress.text("ActionData", 35, 140, 300, 20, 3, None) - #c.mapping("ActionData", "Text") - - c=progress.control("ProgressBar", "ProgressBar", 35, 120, 300, 10, 65537, - None, "Progress done", None, None) - c.mapping("SetProgress", "Progress") - - progress.back("< Back", "Next", active=False) - progress.next("Next >", "Cancel", active=False) - progress.cancel("Cancel", "Back").event("SpawnDialog", "CancelDlg") - - ################################################################### - # Maintenance type: repair/uninstall - maint = PyDialog(db, "MaintenanceTypeDlg", x, y, w, h, modal, title, - "Next", "Next", "Cancel") - maint.title("Welcome to the [ProductName] Setup Wizard") - maint.text("BodyText", 15, 63, 330, 42, 3, - "Select whether you want to repair or remove [ProductName].") - g=maint.radiogroup("RepairRadioGroup", 15, 108, 330, 60, 3, - "MaintenanceForm_Action", "", "Next") - #g.add("Change", 0, 0, 200, 17, "&Change [ProductName]") - g.add("Repair", 0, 18, 200, 17, "&Repair [ProductName]") - g.add("Remove", 0, 36, 200, 17, "Re&move [ProductName]") - - maint.back("< Back", None, active=False) - c=maint.next("Finish", "Cancel") - # Change installation: Change progress dialog to "Change", then ask - # for feature selection - #c.event("[Progress1]", "Change", 'MaintenanceForm_Action="Change"', 1) - #c.event("[Progress2]", "changes", 'MaintenanceForm_Action="Change"', 2) - - # Reinstall: Change progress dialog to "Repair", then invoke reinstall - # Also set list of reinstalled features to "ALL" - c.event("[REINSTALL]", "ALL", 'MaintenanceForm_Action="Repair"', 5) - c.event("[Progress1]", "Repairing", 'MaintenanceForm_Action="Repair"', 6) - c.event("[Progress2]", "repairs", 'MaintenanceForm_Action="Repair"', 7) - c.event("Reinstall", "ALL", 'MaintenanceForm_Action="Repair"', 8) - - # Uninstall: Change progress to "Remove", then invoke uninstall - # Also set list of removed features to "ALL" - c.event("[REMOVE]", "ALL", 'MaintenanceForm_Action="Remove"', 11) - c.event("[Progress1]", "Removing", 'MaintenanceForm_Action="Remove"', 12) - c.event("[Progress2]", "removes", 'MaintenanceForm_Action="Remove"', 13) - c.event("Remove", "ALL", 'MaintenanceForm_Action="Remove"', 14) - - # Close dialog when maintenance action scheduled - c.event("EndDialog", "Return", 'MaintenanceForm_Action<>"Change"', 20) - #c.event("NewDialog", "SelectFeaturesDlg", 'MaintenanceForm_Action="Change"', 21) - - maint.cancel("Cancel", "RepairRadioGroup").event("SpawnDialog", "CancelDlg") - - def get_installer_filename(self, fullname): - # Factored out to allow overriding in subclasses - if self.target_version: - base_name = "%s.%s-py%s.msi" % (fullname, self.plat_name, - self.target_version) - else: - base_name = "%s.%s.msi" % (fullname, self.plat_name) - installer_name = os.path.join(self.dist_dir, base_name) - return installer_name diff --git a/distutils/distutils/command/build_ext.py b/distutils/distutils/command/build_ext.py index 1a9bd12..f287b34 100644 --- a/distutils/distutils/command/build_ext.py +++ b/distutils/distutils/command/build_ext.py @@ -692,7 +692,7 @@ def get_export_symbols(self, ext): suffix = '_' + ext.name.split('.')[-1] try: # Unicode module name support as defined in PEP-489 - # https://www.python.org/dev/peps/pep-0489/#export-hook-name + # https://peps.python.org/pep-0489/#export-hook-name suffix.encode('ascii') except UnicodeEncodeError: suffix = 'U' + suffix.encode('punycode').replace(b'-', b'_').decode('ascii') diff --git a/distutils/distutils/command/check.py b/distutils/distutils/command/check.py index 73a30f3..0a59766 100644 --- a/distutils/distutils/command/check.py +++ b/distutils/distutils/command/check.py @@ -125,7 +125,13 @@ def _check_rst_data(self, data): # the include and csv_table directives need this to be a path source_path = self.distribution.script_name or 'setup.py' parser = Parser() - settings = frontend.OptionParser(components=(Parser,)).get_default_values() + try: + get_default_settings = frontend.get_default_settings + except AttributeError: + # Deprecated in Docutils 0.19, may be broken in Docutils 0.21. + settings = frontend.OptionParser(components=(Parser,)).get_default_values() + else: + settings = get_default_settings(Parser) settings.tab_width = 4 settings.pep_references = None settings.rfc_references = None diff --git a/distutils/distutils/config.py b/distutils/distutils/config.py index 2171abd..a201c86 100644 --- a/distutils/distutils/config.py +++ b/distutils/distutils/config.py @@ -5,6 +5,7 @@ """ import os from configparser import RawConfigParser +import warnings from distutils.cmd import Command @@ -111,7 +112,9 @@ def _read_pypirc(self): def _read_pypi_response(self, response): """Read and decode a PyPI HTTP response.""" - import cgi + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + import cgi content_type = response.getheader('content-type', 'text/plain') encoding = cgi.parse_header(content_type)[1].get('charset', 'ascii') return response.read().decode(encoding) diff --git a/distutils/distutils/msvccompiler.py b/distutils/distutils/msvccompiler.py index d5857cb..f0d04fd 100644 --- a/distutils/distutils/msvccompiler.py +++ b/distutils/distutils/msvccompiler.py @@ -44,7 +44,6 @@ "necessary compiler setting\n" "Make sure that Python modules winreg, " "win32api or win32con are installed.") - pass if _can_read_reg: HKEYS = (hkey_mod.HKEY_USERS, diff --git a/distutils/distutils/sysconfig.py b/distutils/distutils/sysconfig.py index 3414a76..03b8558 100644 --- a/distutils/distutils/sysconfig.py +++ b/distutils/distutils/sysconfig.py @@ -30,8 +30,6 @@ parse_config_h as sysconfig_parse_config_h, _init_non_posix, - _is_python_source_dir, - _sys_home, _variable_rx, _findvar1_rx, @@ -52,9 +50,6 @@ # which might not be true in the time of import. _config_vars = get_config_vars() -if os.name == "nt": - from sysconfig import _fix_pcbuild - warnings.warn( 'The distutils.sysconfig module is deprecated, use sysconfig instead', DeprecationWarning, @@ -287,7 +282,7 @@ def get_python_inc(plat_specific=0, prefix=None): # must use "srcdir" from the makefile to find the "Include" # directory. if plat_specific: - return _sys_home or project_base + return project_base else: incdir = os.path.join(get_config_var('srcdir'), 'Include') return os.path.normpath(incdir) diff --git a/distutils/distutils/tests/__init__.py b/distutils/distutils/tests/__init__.py index 16d011f..d7922ff 100644 --- a/distutils/distutils/tests/__init__.py +++ b/distutils/distutils/tests/__init__.py @@ -1,9 +1,7 @@ """Test suite for distutils. This test suite consists of a collection of test modules in the -distutils.tests package. Each test module has a name starting with -'test' and contains a function test_suite(). The function is expected -to return an initialized unittest.TestSuite instance. +distutils.tests package. Tests for the command classes in the distutils.command package are included in distutils.tests as well, instead of using a separate @@ -13,29 +11,21 @@ """ import os -import sys import unittest -from test.support import run_unittest from test.support.warnings_helper import save_restore_warnings_filters +from test.support import warnings_helper +from test.support import load_package_tests -here = os.path.dirname(__file__) or os.curdir - - -def test_suite(): - suite = unittest.TestSuite() - for fn in os.listdir(here): - if fn.startswith("test") and fn.endswith(".py"): - modname = "distutils.tests." + fn[:-3] - # bpo-40055: Save/restore warnings filters to leave them unchanged. - # Importing tests imports docutils which imports pkg_resources - # which adds a warnings filter. - with save_restore_warnings_filters(): - __import__(modname) - module = sys.modules[modname] - suite.addTest(module.test_suite()) - return suite - +def load_tests(*args): + # bpo-40055: Save/restore warnings filters to leave them unchanged. + # Importing tests imports docutils which imports pkg_resources + # which adds a warnings filter. + with (save_restore_warnings_filters(), + warnings_helper.check_warnings( + ("The distutils.sysconfig module is deprecated", DeprecationWarning), + quiet=True)): + return load_package_tests(os.path.dirname(__file__), *args) if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_archive_util.py b/distutils/distutils/tests/test_archive_util.py index edcec25..66aee1b 100644 --- a/distutils/distutils/tests/test_archive_util.py +++ b/distutils/distutils/tests/test_archive_util.py @@ -13,7 +13,7 @@ ARCHIVE_FORMATS) from distutils.spawn import find_executable, spawn from distutils.tests import support -from test.support import run_unittest, patch +from test.support import patch from test.support.os_helper import change_cwd from test.support.warnings_helper import check_warnings @@ -389,8 +389,5 @@ def test_tarfile_root_owner(self): finally: archive.close() -def test_suite(): - return unittest.makeSuite(ArchiveUtilTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_bdist.py b/distutils/distutils/tests/test_bdist.py index 55fa393..c53f0cc 100644 --- a/distutils/distutils/tests/test_bdist.py +++ b/distutils/distutils/tests/test_bdist.py @@ -1,7 +1,6 @@ """Tests for distutils.command.bdist.""" import os import unittest -from test.support import run_unittest import warnings with warnings.catch_warnings(): @@ -18,13 +17,12 @@ def test_formats(self): # we can set the format dist = self.create_dist()[1] cmd = bdist(dist) - cmd.formats = ['msi'] + cmd.formats = ['tar'] cmd.ensure_finalized() - self.assertEqual(cmd.formats, ['msi']) + self.assertEqual(cmd.formats, ['tar']) # what formats does bdist offer? - formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar', - 'xztar', 'zip', 'ztar'] + formats = ['bztar', 'gztar', 'rpm', 'tar', 'xztar', 'zip', 'ztar'] found = sorted(cmd.format_command) self.assertEqual(found, formats) @@ -36,11 +34,7 @@ def test_skip_build(self): cmd.ensure_finalized() dist.command_obj['bdist'] = cmd - names = ['bdist_dumb'] # bdist_rpm does not support --skip-build - if os.name == 'nt': - names.append('bdist_msi') - - for name in names: + for name in ['bdist_dumb']: # bdist_rpm does not support --skip-build subcmd = cmd.get_finalized_command(name) if getattr(subcmd, '_unsupported', False): # command is not supported on this build @@ -49,8 +43,5 @@ def test_skip_build(self): '%s should take --skip-build from bdist' % name) -def test_suite(): - return unittest.makeSuite(BuildTestCase) - if __name__ == '__main__': - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_bdist_dumb.py b/distutils/distutils/tests/test_bdist_dumb.py index 01a233b..b41812b 100644 --- a/distutils/distutils/tests/test_bdist_dumb.py +++ b/distutils/distutils/tests/test_bdist_dumb.py @@ -4,7 +4,6 @@ import sys import zipfile import unittest -from test.support import run_unittest from distutils.core import Distribution from distutils.command.bdist_dumb import bdist_dumb @@ -90,8 +89,5 @@ def test_simple_built(self): wanted.append('foo.%s.pyc' % sys.implementation.cache_tag) self.assertEqual(contents, sorted(wanted)) -def test_suite(): - return unittest.makeSuite(BuildDumbTestCase) - if __name__ == '__main__': - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_bdist_msi.py b/distutils/distutils/tests/test_bdist_msi.py deleted file mode 100644 index a61266a..0000000 --- a/distutils/distutils/tests/test_bdist_msi.py +++ /dev/null @@ -1,27 +0,0 @@ -"""Tests for distutils.command.bdist_msi.""" -import sys -import unittest -from test.support import run_unittest -from test.support.warnings_helper import check_warnings -from distutils.tests import support - - -@unittest.skipUnless(sys.platform == 'win32', 'these tests require Windows') -class BDistMSITestCase(support.TempdirManager, - support.LoggingSilencer, - unittest.TestCase): - - def test_minimal(self): - # minimal test XXX need more tests - from distutils.command.bdist_msi import bdist_msi - project_dir, dist = self.create_dist() - with check_warnings(("", DeprecationWarning)): - cmd = bdist_msi(dist) - cmd.ensure_finalized() - - -def test_suite(): - return unittest.makeSuite(BDistMSITestCase) - -if __name__ == '__main__': - run_unittest(test_suite()) diff --git a/distutils/distutils/tests/test_bdist_rpm.py b/distutils/distutils/tests/test_bdist_rpm.py index ba4382f..ea9a0bc 100644 --- a/distutils/distutils/tests/test_bdist_rpm.py +++ b/distutils/distutils/tests/test_bdist_rpm.py @@ -3,7 +3,7 @@ import unittest import sys import os -from test.support import run_unittest, requires_zlib +from test.support import requires_zlib from distutils.core import Distribution from distutils.command.bdist_rpm import bdist_rpm @@ -49,6 +49,9 @@ def tearDown(self): 'the rpm command is not found') @unittest.skipIf(find_executable('rpmbuild') is None, 'the rpmbuild command is not found') + # import foo fails with safe path + @unittest.skipIf(sys.flags.safe_path, + 'PYTHONSAFEPATH changes default sys.path') def test_quiet(self): # let's create a package tmp_dir = self.mkdtemp() @@ -93,6 +96,9 @@ def test_quiet(self): 'the rpm command is not found') @unittest.skipIf(find_executable('rpmbuild') is None, 'the rpmbuild command is not found') + # import foo fails with safe path + @unittest.skipIf(sys.flags.safe_path, + 'PYTHONSAFEPATH changes default sys.path') def test_no_optimize_flag(self): # let's create a package that breaks bdist_rpm tmp_dir = self.mkdtemp() @@ -128,8 +134,5 @@ def test_no_optimize_flag(self): os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm')) -def test_suite(): - return unittest.makeSuite(BuildRpmTestCase) - if __name__ == '__main__': - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_build.py b/distutils/distutils/tests/test_build.py index b020a5b..c7c564d 100644 --- a/distutils/distutils/tests/test_build.py +++ b/distutils/distutils/tests/test_build.py @@ -2,7 +2,6 @@ import unittest import os import sys -from test.support import run_unittest from distutils.command.build import build from distutils.tests import support @@ -12,6 +11,7 @@ class BuildTestCase(support.TempdirManager, support.LoggingSilencer, unittest.TestCase): + @unittest.skipUnless(sys.executable, "test requires sys.executable") def test_finalize_options(self): pkg_dir, dist = self.create_dist() cmd = build(dist) @@ -49,8 +49,5 @@ def test_finalize_options(self): # executable is os.path.normpath(sys.executable) self.assertEqual(cmd.executable, os.path.normpath(sys.executable)) -def test_suite(): - return unittest.makeSuite(BuildTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_build_clib.py b/distutils/distutils/tests/test_build_clib.py index 19e012a..0c3bc49 100644 --- a/distutils/distutils/tests/test_build_clib.py +++ b/distutils/distutils/tests/test_build_clib.py @@ -4,7 +4,9 @@ import sys import sysconfig -from test.support import run_unittest, missing_compiler_executable +from test.support import ( + missing_compiler_executable, requires_subprocess +) from distutils.command.build_clib import build_clib from distutils.errors import DistutilsSetupError @@ -112,6 +114,7 @@ def test_finalize_options(self): self.assertRaises(DistutilsSetupError, cmd.finalize_options) @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") + @requires_subprocess() def test_run(self): pkg_dir, dist = self.create_dist() cmd = build_clib(dist) @@ -137,8 +140,5 @@ def test_run(self): # let's check the result self.assertIn('libfoo.a', os.listdir(build_temp)) -def test_suite(): - return unittest.makeSuite(BuildCLibTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_build_ext.py b/distutils/distutils/tests/test_build_ext.py index 8e7364d..e89dc50 100644 --- a/distutils/distutils/tests/test_build_ext.py +++ b/distutils/distutils/tests/test_build_ext.py @@ -17,6 +17,7 @@ from test import support from test.support import os_helper from test.support.script_helper import assert_python_ok +from test.support import threading_helper # http://bugs.python.org/issue4373 # Don't load the xx module more than once. @@ -40,9 +41,7 @@ def setUp(self): # bpo-30132: On Windows, a .pdb file may be created in the current # working directory. Create a temporary working directory to cleanup # everything at the end of the test. - change_cwd = os_helper.change_cwd(self.tmp_dir) - change_cwd.__enter__() - self.addCleanup(change_cwd.__exit__, None, None, None) + self.enterContext(os_helper.change_cwd(self.tmp_dir)) def tearDown(self): import site @@ -56,6 +55,7 @@ def tearDown(self): def build_ext(self, *args, **kwargs): return build_ext(*args, **kwargs) + @support.requires_subprocess() def test_build_ext(self): cmd = support.missing_compiler_executable() if cmd is not None: @@ -164,6 +164,7 @@ def test_user_site(self): self.assertIn(lib, cmd.rpath) self.assertIn(incl, cmd.include_dirs) + @threading_helper.requires_working_threading() def test_optional_extension(self): # this extension will fail, but let's ignore this failure @@ -332,6 +333,7 @@ def test_compiler_option(self): cmd.run() self.assertEqual(cmd.compiler, 'unix') + @support.requires_subprocess() def test_get_outputs(self): cmd = support.missing_compiler_executable() if cmd is not None: @@ -543,11 +545,5 @@ def build_ext(self, *args, **kwargs): return build_ext -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(BuildExtTestCase)) - suite.addTest(unittest.makeSuite(ParallelBuildExtTestCase)) - return suite - if __name__ == '__main__': - support.run_unittest(__name__) + unittest.main() diff --git a/distutils/distutils/tests/test_build_py.py b/distutils/distutils/tests/test_build_py.py index 0712e92..a7035e5 100644 --- a/distutils/distutils/tests/test_build_py.py +++ b/distutils/distutils/tests/test_build_py.py @@ -9,7 +9,7 @@ from distutils.errors import DistutilsFileError from distutils.tests import support -from test.support import run_unittest +from test.support import requires_subprocess class BuildPyTestCase(support.TempdirManager, @@ -89,6 +89,7 @@ def test_empty_package_dir(self): self.fail("failed package_data test when package_dir is ''") @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + @requires_subprocess() def test_byte_compile(self): project_dir, dist = self.create_dist(py_modules=['boiledeggs']) os.chdir(project_dir) @@ -106,6 +107,7 @@ def test_byte_compile(self): ['boiledeggs.%s.pyc' % sys.implementation.cache_tag]) @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + @requires_subprocess() def test_byte_compile_optimized(self): project_dir, dist = self.create_dist(py_modules=['boiledeggs']) os.chdir(project_dir) @@ -172,8 +174,5 @@ def test_dont_write_bytecode(self): self.logs[0][1] % self.logs[0][2]) -def test_suite(): - return unittest.makeSuite(BuildPyTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_build_scripts.py b/distutils/distutils/tests/test_build_scripts.py index 954fc76..485f4f0 100644 --- a/distutils/distutils/tests/test_build_scripts.py +++ b/distutils/distutils/tests/test_build_scripts.py @@ -8,7 +8,6 @@ from distutils import sysconfig from distutils.tests import support -from test.support import run_unittest class BuildScriptsTestCase(support.TempdirManager, @@ -105,8 +104,5 @@ def test_version_int(self): for name in expected: self.assertIn(name, built) -def test_suite(): - return unittest.makeSuite(BuildScriptsTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_check.py b/distutils/distutils/tests/test_check.py index e534aca..1e86b94 100644 --- a/distutils/distutils/tests/test_check.py +++ b/distutils/distutils/tests/test_check.py @@ -2,7 +2,6 @@ import os import textwrap import unittest -from test.support import run_unittest from distutils.command.check import check, HAS_DOCUTILS from distutils.tests import support @@ -156,8 +155,5 @@ def test_check_all(self): {}, **{'strict': 1, 'restructuredtext': 1}) -def test_suite(): - return unittest.makeSuite(CheckTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_clean.py b/distutils/distutils/tests/test_clean.py index c605afd..ccbb01e 100644 --- a/distutils/distutils/tests/test_clean.py +++ b/distutils/distutils/tests/test_clean.py @@ -4,7 +4,6 @@ from distutils.command.clean import clean from distutils.tests import support -from test.support import run_unittest class cleanTestCase(support.TempdirManager, support.LoggingSilencer, @@ -42,8 +41,5 @@ def test_simple_run(self): cmd.ensure_finalized() cmd.run() -def test_suite(): - return unittest.makeSuite(cleanTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_cmd.py b/distutils/distutils/tests/test_cmd.py index cf5197c..9031007 100644 --- a/distutils/distutils/tests/test_cmd.py +++ b/distutils/distutils/tests/test_cmd.py @@ -1,7 +1,7 @@ """Tests for distutils.cmd.""" import unittest import os -from test.support import captured_stdout, run_unittest +from test.support import captured_stdout from distutils.cmd import Command from distutils.dist import Distribution @@ -119,8 +119,5 @@ def test_debug_print(self): finally: debug.DEBUG = False -def test_suite(): - return unittest.makeSuite(CommandTestCase) - if __name__ == '__main__': - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_config.py b/distutils/distutils/tests/test_config.py index 344084a..cb8e723 100644 --- a/distutils/distutils/tests/test_config.py +++ b/distutils/distutils/tests/test_config.py @@ -8,7 +8,6 @@ from distutils.log import WARN from distutils.tests import support -from test.support import run_unittest PYPIRC = """\ [distutils] @@ -134,8 +133,5 @@ def test_config_interpolation(self): self.assertEqual(config, waited) -def test_suite(): - return unittest.makeSuite(PyPIRCCommandTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_config_cmd.py b/distutils/distutils/tests/test_config_cmd.py index 0127ba7..4f132ce 100644 --- a/distutils/distutils/tests/test_config_cmd.py +++ b/distutils/distutils/tests/test_config_cmd.py @@ -3,7 +3,9 @@ import os import sys import sysconfig -from test.support import run_unittest, missing_compiler_executable +from test.support import ( + missing_compiler_executable, requires_subprocess +) from distutils.command.config import dump_file, config from distutils.tests import support @@ -42,6 +44,7 @@ def test_dump_file(self): self.assertEqual(len(self._logs), numlines+1) @unittest.skipIf(sys.platform == 'win32', "can't test on Windows") + @requires_subprocess() def test_search_cpp(self): cmd = missing_compiler_executable(['preprocessor']) if cmd is not None: @@ -93,8 +96,5 @@ def test_clean(self): for f in (f1, f2): self.assertFalse(os.path.exists(f)) -def test_suite(): - return unittest.makeSuite(ConfigTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_core.py b/distutils/distutils/tests/test_core.py index 4e6694a..59fb16b 100644 --- a/distutils/distutils/tests/test_core.py +++ b/distutils/distutils/tests/test_core.py @@ -5,7 +5,7 @@ import os import shutil import sys -from test.support import captured_stdout, run_unittest +from test.support import captured_stdout from test.support import os_helper import unittest from distutils.tests import support @@ -133,8 +133,5 @@ def test_debug_mode(self): wanted = "options (after parsing config files):\n" self.assertEqual(stdout.readlines()[0], wanted) -def test_suite(): - return unittest.makeSuite(CoreTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_cygwinccompiler.py b/distutils/distutils/tests/test_cygwinccompiler.py index 9dc869d..633d304 100644 --- a/distutils/distutils/tests/test_cygwinccompiler.py +++ b/distutils/distutils/tests/test_cygwinccompiler.py @@ -3,7 +3,6 @@ import sys import os from io import BytesIO -from test.support import run_unittest from distutils import cygwinccompiler from distutils.cygwinccompiler import (check_config_h, @@ -147,8 +146,5 @@ def test_get_msvcr(self): '[MSC v.1999 32 bits (Intel)]') self.assertRaises(ValueError, get_msvcr) -def test_suite(): - return unittest.makeSuite(CygwinCCompilerTestCase) - if __name__ == '__main__': - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_dep_util.py b/distutils/distutils/tests/test_dep_util.py index c6fae39..ef52900 100644 --- a/distutils/distutils/tests/test_dep_util.py +++ b/distutils/distutils/tests/test_dep_util.py @@ -5,7 +5,6 @@ from distutils.dep_util import newer, newer_pairwise, newer_group from distutils.errors import DistutilsFileError from distutils.tests import support -from test.support import run_unittest class DepUtilTestCase(support.TempdirManager, unittest.TestCase): @@ -73,8 +72,5 @@ def test_newer_group(self): missing='newer')) -def test_suite(): - return unittest.makeSuite(DepUtilTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_dir_util.py b/distutils/distutils/tests/test_dir_util.py index d436cf8..bae9c3e 100644 --- a/distutils/distutils/tests/test_dir_util.py +++ b/distutils/distutils/tests/test_dir_util.py @@ -11,7 +11,7 @@ from distutils import log from distutils.tests import support -from test.support import run_unittest +from test.support import is_emscripten, is_wasi class DirUtilTestCase(support.TempdirManager, unittest.TestCase): @@ -55,6 +55,10 @@ def test_mkpath_remove_tree_verbosity(self): @unittest.skipIf(sys.platform.startswith('win'), "This test is only appropriate for POSIX-like systems.") + @unittest.skipIf( + is_emscripten or is_wasi, + "Emscripten's/WASI's umask is a stub." + ) def test_mkpath_with_custom_mode(self): # Get and set the current umask value for testing mode bits. umask = os.umask(0o002) @@ -132,8 +136,5 @@ def test_copy_tree_exception_in_listdir(self): dir_util.copy_tree(src, None) -def test_suite(): - return unittest.makeSuite(DirUtilTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_dist.py b/distutils/distutils/tests/test_dist.py index f8a9e86..8ab2451 100644 --- a/distutils/distutils/tests/test_dist.py +++ b/distutils/distutils/tests/test_dist.py @@ -12,7 +12,7 @@ from distutils.cmd import Command from test.support import ( - captured_stdout, captured_stderr, run_unittest + captured_stdout, captured_stderr ) from test.support.os_helper import TESTFN from distutils.tests import support @@ -519,11 +519,5 @@ def test_read_metadata(self): self.assertEqual(metadata.obsoletes, None) self.assertEqual(metadata.requires, ['foo']) -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(DistributionTestCase)) - suite.addTest(unittest.makeSuite(MetadataTestCase)) - return suite - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_extension.py b/distutils/distutils/tests/test_extension.py index 81fad02..f9cdef2 100644 --- a/distutils/distutils/tests/test_extension.py +++ b/distutils/distutils/tests/test_extension.py @@ -3,7 +3,6 @@ import os import warnings -from test.support import run_unittest from test.support.warnings_helper import check_warnings from distutils.extension import read_setup_file, Extension @@ -63,8 +62,5 @@ def test_extension_init(self): self.assertEqual(str(w.warnings[0].message), "Unknown Extension options: 'chic'") -def test_suite(): - return unittest.makeSuite(ExtensionTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_file_util.py b/distutils/distutils/tests/test_file_util.py index c7783b8..76ef6e9 100644 --- a/distutils/distutils/tests/test_file_util.py +++ b/distutils/distutils/tests/test_file_util.py @@ -8,7 +8,6 @@ from distutils import log from distutils.tests import support from distutils.errors import DistutilsFileError -from test.support import run_unittest from test.support.os_helper import unlink @@ -79,6 +78,7 @@ def test_move_file_exception_unpacking_unlink(self): fobj.write('spam eggs') move_file(self.source, self.target, verbose=0) + @unittest.skipUnless(hasattr(os, 'link'), 'requires os.link') def test_copy_file_hard_link(self): with open(self.source, 'w') as f: f.write('some content') @@ -99,6 +99,7 @@ def test_copy_file_hard_link(self): with open(self.source, 'r') as f: self.assertEqual(f.read(), 'some content') + @unittest.skipUnless(hasattr(os, 'link'), 'requires os.link') def test_copy_file_hard_link_failure(self): # If hard linking fails, copy_file() falls back on copying file # (some special filesystems don't support hard linking even under @@ -117,8 +118,5 @@ def test_copy_file_hard_link_failure(self): self.assertEqual(f.read(), 'some content') -def test_suite(): - return unittest.makeSuite(FileUtilTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_filelist.py b/distutils/distutils/tests/test_filelist.py index cee97d4..216cf27 100644 --- a/distutils/distutils/tests/test_filelist.py +++ b/distutils/distutils/tests/test_filelist.py @@ -9,7 +9,7 @@ from distutils import filelist from test.support import os_helper -from test.support import captured_stdout, run_unittest +from test.support import captured_stdout from distutils.tests import support MANIFEST_IN = """\ @@ -329,12 +329,5 @@ def test_non_local_discovery(self): self.assertEqual(filelist.findall(temp_dir), expected) -def test_suite(): - return unittest.TestSuite([ - unittest.makeSuite(FileListTestCase), - unittest.makeSuite(FindAllTestCase), - ]) - - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_install.py b/distutils/distutils/tests/test_install.py index 0632024..c30414d 100644 --- a/distutils/distutils/tests/test_install.py +++ b/distutils/distutils/tests/test_install.py @@ -5,7 +5,7 @@ import unittest import site -from test.support import captured_stdout, run_unittest +from test.support import captured_stdout, requires_subprocess from distutils import sysconfig from distutils.command.install import install, HAS_USER_SITE @@ -208,6 +208,7 @@ def test_record(self): 'UNKNOWN-0.0.0-py%s.%s.egg-info' % sys.version_info[:2]] self.assertEqual(found, expected) + @requires_subprocess() def test_record_extensions(self): cmd = test_support.missing_compiler_executable() if cmd is not None: @@ -253,8 +254,5 @@ def test_debug_mode(self): self.assertGreater(len(self.logs), old_logs_len) -def test_suite(): - return unittest.makeSuite(InstallTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_install_data.py b/distutils/distutils/tests/test_install_data.py index 32ab296..c5c04a3 100644 --- a/distutils/distutils/tests/test_install_data.py +++ b/distutils/distutils/tests/test_install_data.py @@ -4,7 +4,6 @@ from distutils.command.install_data import install_data from distutils.tests import support -from test.support import run_unittest class InstallDataTestCase(support.TempdirManager, support.LoggingSilencer, @@ -68,8 +67,5 @@ def test_simple_run(self): self.assertTrue(os.path.exists(os.path.join(inst2, rtwo))) self.assertTrue(os.path.exists(os.path.join(inst, rone))) -def test_suite(): - return unittest.makeSuite(InstallDataTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_install_headers.py b/distutils/distutils/tests/test_install_headers.py index 2217b32..f8f5132 100644 --- a/distutils/distutils/tests/test_install_headers.py +++ b/distutils/distutils/tests/test_install_headers.py @@ -4,7 +4,6 @@ from distutils.command.install_headers import install_headers from distutils.tests import support -from test.support import run_unittest class InstallHeadersTestCase(support.TempdirManager, support.LoggingSilencer, @@ -32,8 +31,5 @@ def test_simple_run(self): # let's check the results self.assertEqual(len(cmd.get_outputs()), 2) -def test_suite(): - return unittest.makeSuite(InstallHeadersTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_install_lib.py b/distutils/distutils/tests/test_install_lib.py index fda6315..08bc9c8 100644 --- a/distutils/distutils/tests/test_install_lib.py +++ b/distutils/distutils/tests/test_install_lib.py @@ -8,7 +8,7 @@ from distutils.extension import Extension from distutils.tests import support from distutils.errors import DistutilsOptionError -from test.support import run_unittest +from test.support import requires_subprocess class InstallLibTestCase(support.TempdirManager, @@ -35,6 +35,7 @@ def test_finalize_options(self): self.assertEqual(cmd.optimize, 2) @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') + @requires_subprocess() def test_byte_compile(self): project_dir, dist = self.create_dist() os.chdir(project_dir) @@ -90,6 +91,7 @@ def test_get_inputs(self): inputs = cmd.get_inputs() self.assertEqual(len(inputs), 2, inputs) + @requires_subprocess() def test_dont_write_bytecode(self): # makes sure byte_compile is not used dist = self.create_dist()[1] @@ -108,8 +110,5 @@ def test_dont_write_bytecode(self): self.logs[0][1] % self.logs[0][2]) -def test_suite(): - return unittest.makeSuite(InstallLibTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_install_scripts.py b/distutils/distutils/tests/test_install_scripts.py index 1f7b103..b4272d6 100644 --- a/distutils/distutils/tests/test_install_scripts.py +++ b/distutils/distutils/tests/test_install_scripts.py @@ -7,7 +7,6 @@ from distutils.core import Distribution from distutils.tests import support -from test.support import run_unittest class InstallScriptsTestCase(support.TempdirManager, @@ -75,8 +74,5 @@ def write_script(name, text): self.assertIn(name, installed) -def test_suite(): - return unittest.makeSuite(InstallScriptsTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_log.py b/distutils/distutils/tests/test_log.py index 75cf900..0f32503 100644 --- a/distutils/distutils/tests/test_log.py +++ b/distutils/distutils/tests/test_log.py @@ -3,7 +3,7 @@ import io import sys import unittest -from test.support import swap_attr, run_unittest +from test.support import swap_attr from distutils import log @@ -39,8 +39,5 @@ def test_non_ascii(self): 'Fαtal\trrr' if errors == 'ignore' else 'Fαtal\t\\xc8rr\\u014dr') -def test_suite(): - return unittest.makeSuite(TestLog) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_msvc9compiler.py b/distutils/distutils/tests/test_msvc9compiler.py index 77a07ef..60b99e2 100644 --- a/distutils/distutils/tests/test_msvc9compiler.py +++ b/distutils/distutils/tests/test_msvc9compiler.py @@ -5,7 +5,6 @@ from distutils.errors import DistutilsPlatformError from distutils.tests import support -from test.support import run_unittest # A manifest with the only assembly reference being the msvcrt assembly, so # should have the assembly completely stripped. Note that although the @@ -177,8 +176,5 @@ def test_remove_entire_manifest(self): self.assertIsNone(got) -def test_suite(): - return unittest.makeSuite(msvc9compilerTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_msvccompiler.py b/distutils/distutils/tests/test_msvccompiler.py index b518d6a..7b3a6bb 100644 --- a/distutils/distutils/tests/test_msvccompiler.py +++ b/distutils/distutils/tests/test_msvccompiler.py @@ -5,7 +5,6 @@ from distutils.errors import DistutilsPlatformError from distutils.tests import support -from test.support import run_unittest SKIP_MESSAGE = (None if sys.platform == "win32" else @@ -74,8 +73,5 @@ def test_get_vc2015(self): else: raise unittest.SkipTest("VS 2015 is not installed") -def test_suite(): - return unittest.makeSuite(msvccompilerTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_register.py b/distutils/distutils/tests/test_register.py index bba4863..986392c 100644 --- a/distutils/distutils/tests/test_register.py +++ b/distutils/distutils/tests/test_register.py @@ -5,7 +5,6 @@ import urllib import warnings -from test.support import run_unittest from test.support.warnings_helper import check_warnings from distutils.command import register as register_module @@ -292,6 +291,8 @@ def test_check_metadata_deprecated(self): cmd = self._get_cmd() with check_warnings() as w: warnings.simplefilter("always") + warnings.filterwarnings("ignore", ".*OptionParser class will be replaced.*") + warnings.filterwarnings("ignore", ".*Option class will be removed.*") cmd.check_metadata() self.assertEqual(len(w.warnings), 1) @@ -317,8 +318,5 @@ def test_show_response(self): self.assertEqual(results[3], 75 * '-' + '\nxxx\n' + 75 * '-') -def test_suite(): - return unittest.makeSuite(RegisterTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_sdist.py b/distutils/distutils/tests/test_sdist.py index 752e9db..58497fe 100644 --- a/distutils/distutils/tests/test_sdist.py +++ b/distutils/distutils/tests/test_sdist.py @@ -6,7 +6,7 @@ import zipfile from os.path import join from textwrap import dedent -from test.support import captured_stdout, run_unittest +from test.support import captured_stdout from test.support.warnings_helper import check_warnings try: @@ -486,8 +486,5 @@ def test_make_distribution_owner_group(self): finally: archive.close() -def test_suite(): - return unittest.makeSuite(SDistTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_spawn.py b/distutils/distutils/tests/test_spawn.py index 4ec767b..30bbe2a 100644 --- a/distutils/distutils/tests/test_spawn.py +++ b/distutils/distutils/tests/test_spawn.py @@ -3,7 +3,7 @@ import stat import sys import unittest.mock -from test.support import run_unittest, unix_shell +from test.support import unix_shell, requires_subprocess from test.support import os_helper from distutils.spawn import find_executable @@ -11,6 +11,8 @@ from distutils.errors import DistutilsExecError from distutils.tests import support + +@requires_subprocess() class SpawnTestCase(support.TempdirManager, support.LoggingSilencer, unittest.TestCase): @@ -130,8 +132,5 @@ def test_spawn_missing_exe(self): self.assertIn("command 'does-not-exist' failed", str(ctx.exception)) -def test_suite(): - return unittest.makeSuite(SpawnTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_sysconfig.py b/distutils/distutils/tests/test_sysconfig.py index 59676b0..363834f 100644 --- a/distutils/distutils/tests/test_sysconfig.py +++ b/distutils/distutils/tests/test_sysconfig.py @@ -10,7 +10,7 @@ from distutils import sysconfig from distutils.ccompiler import get_default_compiler from distutils.tests import support -from test.support import run_unittest, swap_item +from test.support import swap_item, requires_subprocess, is_wasi from test.support.os_helper import TESTFN from test.support.warnings_helper import check_warnings @@ -32,6 +32,7 @@ def cleanup_testfn(self): elif os.path.isdir(TESTFN): shutil.rmtree(TESTFN) + @unittest.skipIf(is_wasi, "Incompatible with WASI mapdir and OOT builds") def test_get_config_h_filename(self): config_h = sysconfig.get_config_h_filename() self.assertTrue(os.path.isfile(config_h), config_h) @@ -48,6 +49,7 @@ def test_get_config_vars(self): self.assertIsInstance(cvars, dict) self.assertTrue(cvars) + @unittest.skipIf(is_wasi, "Incompatible with WASI mapdir and OOT builds") def test_srcdir(self): # See Issues #15322, #15364. srcdir = sysconfig.get_config_var('srcdir') @@ -60,7 +62,11 @@ def test_srcdir(self): # should be a full source checkout. Python_h = os.path.join(srcdir, 'Include', 'Python.h') self.assertTrue(os.path.exists(Python_h), Python_h) - self.assertTrue(sysconfig._is_python_source_dir(srcdir)) + # /PC/pyconfig.h always exists even if unused on POSIX. + pyconfig_h = os.path.join(srcdir, 'PC', 'pyconfig.h') + self.assertTrue(os.path.exists(pyconfig_h), pyconfig_h) + pyconfig_h_in = os.path.join(srcdir, 'pyconfig.h.in') + self.assertTrue(os.path.exists(pyconfig_h_in), pyconfig_h_in) elif os.name == 'posix': self.assertEqual( os.path.dirname(sysconfig.get_makefile_filename()), @@ -227,26 +233,7 @@ def test_sysconfig_compiler_vars(self): self.assertEqual(global_sysconfig.get_config_var('CC'), sysconfig.get_config_var('CC')) - @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, - 'EXT_SUFFIX required for this test') - def test_SO_deprecation(self): - self.assertWarns(DeprecationWarning, - sysconfig.get_config_var, 'SO') - - @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, - 'EXT_SUFFIX required for this test') - def test_SO_value(self): - with check_warnings(('', DeprecationWarning)): - self.assertEqual(sysconfig.get_config_var('SO'), - sysconfig.get_config_var('EXT_SUFFIX')) - - @unittest.skipIf(sysconfig.get_config_var('EXT_SUFFIX') is None, - 'EXT_SUFFIX required for this test') - def test_SO_in_vars(self): - vars = sysconfig.get_config_vars() - self.assertIsNotNone(vars['SO']) - self.assertEqual(vars['SO'], vars['EXT_SUFFIX']) - + @requires_subprocess() def test_customize_compiler_before_get_config_vars(self): # Issue #21923: test that a Distribution compiler # instance can be called without an explicit call to @@ -267,11 +254,5 @@ def test_customize_compiler_before_get_config_vars(self): self.assertEqual(0, p.returncode, "Subprocess failed: " + outs) -def test_suite(): - suite = unittest.TestSuite() - suite.addTest(unittest.makeSuite(SysconfigTestCase)) - return suite - - if __name__ == '__main__': - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_text_file.py b/distutils/distutils/tests/test_text_file.py index 7e76240..fbf4851 100644 --- a/distutils/distutils/tests/test_text_file.py +++ b/distutils/distutils/tests/test_text_file.py @@ -3,7 +3,6 @@ import unittest from distutils.text_file import TextFile from distutils.tests import support -from test.support import run_unittest TEST_DATA = """# test file @@ -100,8 +99,5 @@ def test_input(count, description, file, expected_result): finally: in_file.close() -def test_suite(): - return unittest.makeSuite(TextFileTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_unixccompiler.py b/distutils/distutils/tests/test_unixccompiler.py index 24725ea..6a65925 100644 --- a/distutils/distutils/tests/test_unixccompiler.py +++ b/distutils/distutils/tests/test_unixccompiler.py @@ -1,7 +1,6 @@ """Tests for distutils.unixccompiler.""" import sys import unittest -from test.support import run_unittest from test.support.os_helper import EnvironmentVarGuard from distutils import sysconfig @@ -138,8 +137,5 @@ def gcv(v): self.assertEqual(self.cc.linker_so[0], 'my_ld') -def test_suite(): - return unittest.makeSuite(UnixCCompilerTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_upload.py b/distutils/distutils/tests/test_upload.py index 74f0bc0..9aae88b 100644 --- a/distutils/distutils/tests/test_upload.py +++ b/distutils/distutils/tests/test_upload.py @@ -4,7 +4,6 @@ import unittest.mock as mock from urllib.error import HTTPError -from test.support import run_unittest from distutils.command import upload as upload_mod from distutils.command.upload import upload @@ -216,8 +215,5 @@ def test_wrong_exception_order(self): self.clear_logs() -def test_suite(): - return unittest.makeSuite(uploadTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_util.py b/distutils/distutils/tests/test_util.py index d4a01c6..1b002cb 100644 --- a/distutils/distutils/tests/test_util.py +++ b/distutils/distutils/tests/test_util.py @@ -3,7 +3,6 @@ import sys import unittest from copy import copy -from test.support import run_unittest from unittest import mock from distutils.errors import DistutilsPlatformError, DistutilsByteCompileError @@ -248,7 +247,10 @@ def test_check_environ_getpwuid(self): util._environ_checked = 0 os.environ.pop('HOME', None) - import pwd + try: + import pwd + except ImportError: + raise unittest.SkipTest("Test requires pwd module.") # only set pw_dir field, other fields are not used result = pwd.struct_passwd((None, None, None, None, None, @@ -303,8 +305,5 @@ def test_grok_environment_error(self): self.assertEqual(msg, "error: Unable to find batch file") -def test_suite(): - return unittest.makeSuite(UtilTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_version.py b/distutils/distutils/tests/test_version.py index 8671cd2..f102f29 100644 --- a/distutils/distutils/tests/test_version.py +++ b/distutils/distutils/tests/test_version.py @@ -2,7 +2,6 @@ import unittest from distutils.version import LooseVersion from distutils.version import StrictVersion -from test.support import run_unittest class VersionTestCase(unittest.TestCase): @@ -80,8 +79,5 @@ def test_cmp(self): 'cmp(%s, %s) should be NotImplemented, got %s' % (v1, v2, res)) -def test_suite(): - return unittest.makeSuite(VersionTestCase) - if __name__ == "__main__": - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/distutils/tests/test_versionpredicate.py b/distutils/distutils/tests/test_versionpredicate.py index 28ae09d..b0e9ab2 100644 --- a/distutils/distutils/tests/test_versionpredicate.py +++ b/distutils/distutils/tests/test_versionpredicate.py @@ -4,10 +4,10 @@ import distutils.versionpredicate import doctest -from test.support import run_unittest -def test_suite(): - return doctest.DocTestSuite(distutils.versionpredicate) +def load_tests(loader, tests, pattern): + tests.addTest(doctest.DocTestSuite(distutils.versionpredicate)) + return tests if __name__ == '__main__': - run_unittest(test_suite()) + unittest.main() diff --git a/distutils/pyproject.toml b/distutils/pyproject.toml index 94ff856..3b08883 100644 --- a/distutils/pyproject.toml +++ b/distutils/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-distutils" -version = "3.10.14" +version = "3.11.9" description = "Standard library distutils redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/distutils/tests/test_distutils.py b/distutils/tests/test_distutils.py index d82d2b6..12d1472 100644 --- a/distutils/tests/test_distutils.py +++ b/distutils/tests/test_distutils.py @@ -1,8 +1,6 @@ """Tests for distutils. -The tests for distutils are defined in the distutils.tests package; -the test_suite() function there returns a test suite that's ready to -be run. +The tests for distutils are defined in the distutils.tests package. """ import unittest @@ -12,17 +10,13 @@ with warnings_helper.check_warnings( ("The distutils package is deprecated", DeprecationWarning), quiet=True): - import distutils.tests - - -def load_tests(*_): - # used by unittest - return distutils.tests.test_suite() - + from distutils.tests import load_tests def tearDownModule(): support.reap_children() +if support.check_sanitizer(address=True): + raise unittest.SkipTest("Exposes ASAN flakiness in GitHub CI") if __name__ == "__main__": unittest.main() From 5218c79410ae0502c8945049c6bc6805ca5b9417 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Wed, 30 Oct 2024 09:09:17 +0900 Subject: [PATCH 42/47] Revert aifc changes to use chunkmuncher and add standard-chunk --- aifc/aifc/__init__.py | 8 +++----- aifc/pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/aifc/aifc/__init__.py b/aifc/aifc/__init__.py index 4ae35b6..7365f10 100644 --- a/aifc/aifc/__init__.py +++ b/aifc/aifc/__init__.py @@ -260,11 +260,9 @@ def _write_float(f, x): _write_ulong(f, himant) _write_ulong(f, lomant) -# python-deadlib: replace removed library chunk with third party library -# with warnings.catch_warnings(): -# warnings.simplefilter("ignore", DeprecationWarning) -# from chunk import Chunk -from chunkmuncher.chunk import Chunk +with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + from chunk import Chunk from collections import namedtuple _aifc_params = namedtuple('_aifc_params', diff --git a/aifc/pyproject.toml b/aifc/pyproject.toml index 3f91312..4915903 100644 --- a/aifc/pyproject.toml +++ b/aifc/pyproject.toml @@ -14,7 +14,7 @@ classifiers = [ "Programming Language :: Python :: 3", ] dependencies = [ - "chunkmuncher>=0.0.2", # chunkmuncher sits of different namespace to python core chunk module, so can install it on all versions + "standard-chunk; python_version >= '3.13'", # chunk uses same namespace as python core module, so only install it on versions where it's not included "audioop-lts; python_version >= '3.13'", # audioop uses same namespace as python core module, so only install it on versions where it's not included ] From 33180560e354f55ae0f65617bfb4f46cc3e7ecb6 Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Wed, 30 Oct 2024 15:34:04 +0100 Subject: [PATCH 43/47] Improve test helper script --- .github/workflows/tests.yaml | 15 +++-- requirements_test.txt | 2 + scripts/helper.py | 110 +++++++++++++++++++++++++++++++---- 3 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 requirements_test.txt diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index f2d9d0f..5428417 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -21,12 +21,16 @@ jobs: steps: - name: Check out code from Github uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + check-latest: true - name: Get folders with tests id: get-folders run: | - FOLDERS=$(find . -maxdepth 2 -type d -name 'tests' \ - | cut -d "/" -f2 | sort -u \ - | jq -Rsc 'split("\n") | map( select(length > 0) )') + pip install -U pip -r requirements_test.txt + FOLDERS=$(python scripts/helper.py list-test-folders) echo "folders: ${FOLDERS}" echo "folders=${FOLDERS}" >> $GITHUB_OUTPUT @@ -49,8 +53,7 @@ jobs: check-latest: true - name: Run tests run: | + pip install -U pip -r requirements_test.txt + python scripts/helper.py install-local-requirements ${{ matrix.folder }} cd ${{ matrix.folder }} - pip install packaging - python ../scripts/helper.py | xargs -I % pip install "../%" - pip install . python -m unittest diff --git a/requirements_test.txt b/requirements_test.txt new file mode 100644 index 0000000..3eb44ca --- /dev/null +++ b/requirements_test.txt @@ -0,0 +1,2 @@ +packaging>=24.1 +tomli>=2.0.2;python_version<'3.11' diff --git a/scripts/helper.py b/scripts/helper.py index 3a51a73..ba56f02 100644 --- a/scripts/helper.py +++ b/scripts/helper.py @@ -1,20 +1,108 @@ +from __future__ import annotations + +from argparse import ArgumentParser, Namespace +import glob +import json from pathlib import Path -import tomllib +import subprocess +import sys +from typing import cast from packaging.requirements import Requirement -def get_deadlib_names() -> None: - content = tomllib.loads(Path("pyproject.toml").read_text()) - dependencies = [ - Requirement(s).name for s in content["project"].get("dependencies", []) +if sys.version_info >= (3, 11): + import tomllib +else: + import tomli as tomllib + + +PROJECT_DIR = Path(__file__).parents[1] +DEFAULT_EXCLUDES: list[str] = [] + + +def list_test_folders(exclude_folders: list[str] | None) -> int: + """List all folders with tests""" + exclude_folders = exclude_folders or [] + exclude_folders.extend(DEFAULT_EXCLUDES) + res = 0 + for exclude in exclude_folders: + if not (PROJECT_DIR / exclude).is_dir(): + print(f"'{exclude}' is not a valid folder") + res = 1 + if res: + return 1 + + excludes = tuple(exclude_folders) + test_folders = [ + folder.partition("/")[0] + for folder in glob.glob("*/tests") + if not folder.startswith(excludes) ] - names = [ - name.partition("standard-")[2] - for name in dependencies if name.startswith("standard-") + print(json.dumps(sorted(test_folders))) + return 0 + + +def install_local_requirements(name: str, installed_pkgs: set[str] | None = None) -> int: + """Install local requirements recursively.""" + installed_pkgs = installed_pkgs or set() + + reqs_folder = PROJECT_DIR / name + content = tomllib.loads( + (reqs_folder / "pyproject.toml").read_text() + ) + dependencies = [ + deps + for req in content["project"].get("dependencies", []) + if (deps := Requirement(req).name).startswith("standard-") ] - for name in names: - print(name) + for deps in dependencies: + if deps in installed_pkgs: + continue + if install_local_requirements(deps.removeprefix("standard-"), installed_pkgs): + return 1 + p = subprocess.run(["pip", "install", reqs_folder], stdout=sys.stdout, stderr=sys.stderr) + return p.returncode + + +class ListTestFoldersArgs(Namespace): + exclude: list[str] | None + + +class InstallLocalReqsArgs(Namespace): + folder: str + + +def main(argv: list[str] | None = None) -> int: + parser = ArgumentParser() + subparsers = parser.add_subparsers(title="Subcommands", required=True) + + parser_test_folders = subparsers.add_parser("list-test-folders") + parser_test_folders.set_defaults(action="list-test-folders") + parser_test_folders.add_argument( + "--exclude", + action="append", + help="Root folders to exclude from search", + ) + + parser_local_reqs = subparsers.add_parser("install-local-requirements") + parser_local_reqs.set_defaults(action="install-local-requirements") + parser_local_reqs.add_argument( + "folder", + metavar="FOLDER", + help="Current deadlib backport to install", + ) + + argv = argv or sys.argv[1:] + args = parser.parse_args(argv) + + if args.action == "list-test-folders": + args = cast(ListTestFoldersArgs, args) + return list_test_folders(args.exclude) + if args.action == "install-local-requirements": + args = cast(InstallLocalReqsArgs, args) + return install_local_requirements(args.folder) + return 0 if __name__ == "__main__": - get_deadlib_names() + sys.exit(main()) From 90f642253333d3edbf64496f4cac102db57ca955 Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Wed, 30 Oct 2024 11:29:20 +0900 Subject: [PATCH 44/47] Remove distutils from test --- .github/workflows/tests.yaml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 5428417..abc54df 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -30,7 +30,7 @@ jobs: id: get-folders run: | pip install -U pip -r requirements_test.txt - FOLDERS=$(python scripts/helper.py list-test-folders) + FOLDERS=$(python scripts/helper.py list-test-folders --exclude distutils) echo "folders: ${FOLDERS}" echo "folders=${FOLDERS}" >> $GITHUB_OUTPUT diff --git a/README.md b/README.md index 019b76b..f143743 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ pip install standard-uu # e.g. `uu` can be installed by standard-uu - [cgitb](https://pypi.org/project/standard-cgitb/) - [chunk](https://pypi.org/project/standard-chunk/) - [crypt](https://pypi.org/project/standard-crypt/) -- [distutils](https://pypi.org/project/standard-distutils/) +- ~~[distutils](https://pypi.org/project/standard-distutils/)~~ - [imghdr](https://pypi.org/project/standard-imghdr/) - [mailcap](https://pypi.org/project/standard-mailcap/) - [nntplib](https://pypi.org/project/standard-nntplib/) From 48dbc688f2f3be0e8a0c2b1c6e46398b0bf12c9a Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Wed, 30 Oct 2024 12:51:31 +0900 Subject: [PATCH 45/47] Strike distutils from README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f143743..5c3d330 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ pip install standard-uu # e.g. `uu` can be installed by standard-uu - [cgitb](https://pypi.org/project/standard-cgitb/) - [chunk](https://pypi.org/project/standard-chunk/) - [crypt](https://pypi.org/project/standard-crypt/) -- ~~[distutils](https://pypi.org/project/standard-distutils/)~~ +- ~~[distutils](https://pypi.org/project/standard-distutils/)~~: Not working on Python 3.13 - [imghdr](https://pypi.org/project/standard-imghdr/) - [mailcap](https://pypi.org/project/standard-mailcap/) - [nntplib](https://pypi.org/project/standard-nntplib/) From 4dcb009735a7a3a7a93daa939d3ca43e1434080b Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Wed, 30 Oct 2024 11:14:56 +0900 Subject: [PATCH 46/47] Prepare 3.13-compatible release --- aifc/pyproject.toml | 2 +- asynchat/pyproject.toml | 2 +- asyncore/pyproject.toml | 2 +- cgi/pyproject.toml | 2 +- cgitb/pyproject.toml | 2 +- chunk/pyproject.toml | 2 +- crypt/pyproject.toml | 2 +- imghdr/pyproject.toml | 2 +- mailcap/pyproject.toml | 2 +- nntplib/pyproject.toml | 2 +- pipes/pyproject.toml | 2 +- smtpd/pyproject.toml | 2 +- sndhdr/pyproject.toml | 2 +- sunau/pyproject.toml | 2 +- telnetlib/pyproject.toml | 2 +- uu/pyproject.toml | 2 +- xdrlib/pyproject.toml | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aifc/pyproject.toml b/aifc/pyproject.toml index 4915903..b926ab9 100644 --- a/aifc/pyproject.toml +++ b/aifc/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-aifc" -version = "3.12.2" +version = "3.13.0" description = "Standard library aifc redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/asynchat/pyproject.toml b/asynchat/pyproject.toml index ba6f3b4..92270f1 100644 --- a/asynchat/pyproject.toml +++ b/asynchat/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-asynchat" -version = "3.11.9" +version = "3.13.0" description = "Standard library asynchat redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/asyncore/pyproject.toml b/asyncore/pyproject.toml index 71f274a..d456a14 100644 --- a/asyncore/pyproject.toml +++ b/asyncore/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-asyncore" -version = "3.11.9" +version = "3.13.0" description = "Standard library asyncore redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/cgi/pyproject.toml b/cgi/pyproject.toml index 25d3c74..d4c3a20 100644 --- a/cgi/pyproject.toml +++ b/cgi/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-cgi" -version = "3.12.2" +version = "3.13.0" description = "Standard library cgi redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/cgitb/pyproject.toml b/cgitb/pyproject.toml index 6e10caa..9a67315 100644 --- a/cgitb/pyproject.toml +++ b/cgitb/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-cgitb" -version = "3.12.2" +version = "3.13.0" description = "Standard library cgitb redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/chunk/pyproject.toml b/chunk/pyproject.toml index c512a8f..76e9133 100644 --- a/chunk/pyproject.toml +++ b/chunk/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-chunk" -version = "3.12.2" +version = "3.13.0" description = "Standard library chunk redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/crypt/pyproject.toml b/crypt/pyproject.toml index 7ffd82c..925a4e2 100644 --- a/crypt/pyproject.toml +++ b/crypt/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-crypt" -version = "3.12.2" +version = "3.13.0" description = "Standard library crypt redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/imghdr/pyproject.toml b/imghdr/pyproject.toml index 33cf732..e4bf585 100644 --- a/imghdr/pyproject.toml +++ b/imghdr/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-imghdr" -version = "3.12.2" +version = "3.13.0" description = "Standard library imghdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/mailcap/pyproject.toml b/mailcap/pyproject.toml index 2ad54ae..521be58 100644 --- a/mailcap/pyproject.toml +++ b/mailcap/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-mailcap" -version = "3.12.2" +version = "3.13.0" description = "Standard library mailcap redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/nntplib/pyproject.toml b/nntplib/pyproject.toml index d4b87e4..53bb6d5 100644 --- a/nntplib/pyproject.toml +++ b/nntplib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-nntplib" -version = "3.12.2" +version = "3.13.0" description = "Standard library nntplib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/pipes/pyproject.toml b/pipes/pyproject.toml index 2a5da00..f577bce 100644 --- a/pipes/pyproject.toml +++ b/pipes/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-pipes" -version = "3.12.2" +version = "3.13.0" description = "Standard library pipes redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/smtpd/pyproject.toml b/smtpd/pyproject.toml index 81c4259..963126f 100644 --- a/smtpd/pyproject.toml +++ b/smtpd/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-smtpd" -version = "3.11.9" +version = "3.13.0" description = "Standard library smtpd redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/sndhdr/pyproject.toml b/sndhdr/pyproject.toml index d23a820..6da1d0e 100644 --- a/sndhdr/pyproject.toml +++ b/sndhdr/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-sndhdr" -version = "3.12.2" +version = "3.13.0" description = "Standard library sndhdr redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/sunau/pyproject.toml b/sunau/pyproject.toml index 8190655..da3c5ed 100644 --- a/sunau/pyproject.toml +++ b/sunau/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-sunau" -version = "3.12.2" +version = "3.13.0" description = "Standard library sunau redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/telnetlib/pyproject.toml b/telnetlib/pyproject.toml index 82a415d..a20b56c 100644 --- a/telnetlib/pyproject.toml +++ b/telnetlib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-telnetlib" -version = "3.12.2" +version = "3.13.0" description = "Standard library telnetlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/uu/pyproject.toml b/uu/pyproject.toml index 853652e..eb43633 100644 --- a/uu/pyproject.toml +++ b/uu/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-uu" -version = "3.12.2" +version = "3.13.0" description = "Standard library uu redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ diff --git a/xdrlib/pyproject.toml b/xdrlib/pyproject.toml index 8c13abe..f07627e 100644 --- a/xdrlib/pyproject.toml +++ b/xdrlib/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "standard-xdrlib" -version = "3.12.2" +version = "3.13.0" description = "Standard library xdrlib redistribution. \"dead battery\"." keywords = ["stdlib"] authors = [ From eb2588610750b9c687d417e72a743314edb107df Mon Sep 17 00:00:00 2001 From: Jeong YunWon Date: Wed, 30 Oct 2024 11:42:15 +0900 Subject: [PATCH 47/47] release workflow Co-authored-by: Marc Mueller <30130371+cdce8p@users.noreply.github.com> --- .github/workflows/release.yaml | 126 +++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..fddbc38 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,126 @@ +name: Releases + +on: + push: + branches: + - main + tags: + - '*' + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + generate-test-matrix: + name: Generate test matrix + runs-on: ubuntu-latest + outputs: + folders: ${{ steps.get-folders.outputs.folders }} + steps: + - name: Check out code from Github + uses: actions/checkout@v4 + - name: Get folders with tests + id: get-folders + run: | + pip install -U pip -r requirements_test.txt + FOLDERS=$(python scripts/helper.py list-test-folders --exclude distutils) + echo "folders: ${FOLDERS}" + echo "folders=${FOLDERS}" >> $GITHUB_OUTPUT + + build: + name: Run build + runs-on: ubuntu-latest + needs: [generate-test-matrix] + strategy: + fail-fast: false + matrix: + folder: ${{ fromJson(needs.generate-test-matrix.outputs.folders) }} + version: ["3.13"] + steps: + - name: Check out code from Github + uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.version }} + check-latest: true + - name: Run tests + run: | + cd ${{ matrix.folder }} + pip install build + python -m build + - name: Upload packages + uses: actions/upload-artifact@v4 + with: + name: dist-${{ matrix.folder }} + path: ${{ matrix.folder }}/dist + + publish-to-pypi: + name: Release + runs-on: ubuntu-latest + if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }} + needs: [build] + permissions: + # Use to sign the release artifacts + id-token: write + # Used to upload release artifacts + contents: write + # Used to generate artifact attestation + attestations: write + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + pattern: dist-* + path: dist + merge-multiple: true + - name: Publish distribution 📦 to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_API_TOKEN }} + + github-release: + name: >- + Sign the Python 🐍 distribution 📦 with Sigstore + and upload them to GitHub Release + needs: + - publish-to-pypi + runs-on: ubuntu-latest + + permissions: + contents: write # IMPORTANT: mandatory for making GitHub Releases + id-token: write # IMPORTANT: mandatory for sigstore + + steps: + - name: Download all the dists + uses: actions/download-artifact@v4 + with: + pattern: dist-* + path: dist + merge-multiple: true + - name: Sign the dists with Sigstore + uses: sigstore/gh-action-sigstore-python@v3.0.0 + with: + inputs: >- + ./dist/*.tar.gz + ./dist/*.whl + - name: Create GitHub Release + env: + GITHUB_TOKEN: ${{ github.token }} + run: >- + gh release create + '${{ github.ref_name }}' + --repo '${{ github.repository }}' + --notes "" + - name: Upload artifact signatures to GitHub Release + env: + GITHUB_TOKEN: ${{ github.token }} + # Upload to GitHub Release using the `gh` CLI. + # `dist/` contains the built packages, and the + # sigstore-produced signatures and certificates. + run: >- + gh release upload + '${{ github.ref_name }}' dist/** + --repo '${{ github.repository }}' \ No newline at end of file

64S?Ez{~ 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