diff options
-rw-r--r-- | gnu/local.mk | 2 | ||||
-rw-r--r-- | gnu/packages/patches/python-mypy-12332.patch | 68 | ||||
-rw-r--r-- | gnu/packages/patches/python-mypy-use-sys-path.patch | 130 | ||||
-rw-r--r-- | gnu/packages/python-check.scm | 12 |
4 files changed, 6 insertions, 206 deletions
diff --git a/gnu/local.mk b/gnu/local.mk index 882b13420b..4e4ad908ce 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1731,8 +1731,6 @@ dist_patch_DATA = \ %D%/packages/patches/python-versioneer-guix-support.patch \ %D%/packages/patches/python-waitress-fix-tests.patch \ %D%/packages/patches/python-werkzeug-tests.patch \ - %D%/packages/patches/python-mypy-12332.patch \ - %D%/packages/patches/python-mypy-use-sys-path.patch \ %D%/packages/patches/python-zeep-Fix-pytest_httpx-test-cases.patch \ %D%/packages/patches/qemu-build-info-manual.patch \ %D%/packages/patches/qemu-glibc-2.27.patch \ diff --git a/gnu/packages/patches/python-mypy-12332.patch b/gnu/packages/patches/python-mypy-12332.patch deleted file mode 100644 index d43cf42ed1..0000000000 --- a/gnu/packages/patches/python-mypy-12332.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 518c864805dd93e62d59439e665a0ce9d6778419 Mon Sep 17 00:00:00 2001 -From: Ekin Dursun <ekindursun@gmail.com> -Date: Thu, 10 Mar 2022 22:06:48 +0300 -Subject: [PATCH] mypyc: Fix overflow in id function (CPyTagged_Id) - -In CPython, the id of an object is its address. It's computed by -converting the pointer to an unsigned integer (PyLong_FromVoidPtr). A -similar logic is present here, pointer is converted to a Py_ssize_t and -CPyTagged_FromSsize_t is called with that integer. - -There is a problem with that approach: Py_ssize_t cannot hold every -pointer value. Sometimes overflow happens and CPyTagged_FromSsize_t is -called with a negative integer. - -With the new approach, the number is checked: If it fits in a -Py_ssize_t, CPyTagged_FromSsize_t is called. If not, it is directly -converted to a PyObject using PyLong_FromVoidPtr. ---- - mypyc/lib-rt/CPy.h | 1 + - mypyc/lib-rt/int_ops.c | 9 +++++++++ - mypyc/lib-rt/misc_ops.c | 2 +- - 3 files changed, 11 insertions(+), 1 deletion(-) - -diff --git a/mypyc/lib-rt/CPy.h b/mypyc/lib-rt/CPy.h -index 987819154ab..9f5ae52d4e4 100644 ---- a/mypyc/lib-rt/CPy.h -+++ b/mypyc/lib-rt/CPy.h -@@ -121,6 +121,7 @@ static inline size_t CPy_FindAttrOffset(PyTypeObject *trait, CPyVTableItem *vtab - - - CPyTagged CPyTagged_FromSsize_t(Py_ssize_t value); -+CPyTagged CPyTagged_FromVoidPtr(void *ptr); - CPyTagged CPyTagged_FromObject(PyObject *object); - CPyTagged CPyTagged_StealFromObject(PyObject *object); - CPyTagged CPyTagged_BorrowFromObject(PyObject *object); -diff --git a/mypyc/lib-rt/int_ops.c b/mypyc/lib-rt/int_ops.c -index 1275f2c1057..edf06314161 100644 ---- a/mypyc/lib-rt/int_ops.c -+++ b/mypyc/lib-rt/int_ops.c -@@ -26,6 +26,15 @@ CPyTagged CPyTagged_FromSsize_t(Py_ssize_t value) { - } - } - -+CPyTagged CPyTagged_FromVoidPtr(void *ptr) { -+ if ((uintptr_t)ptr > PY_SSIZE_T_MAX) { -+ PyObject *object = PyLong_FromVoidPtr(ptr); -+ return ((CPyTagged)object) | CPY_INT_TAG; -+ } else { -+ return CPyTagged_FromSsize_t((Py_ssize_t)ptr); -+ } -+} -+ - CPyTagged CPyTagged_FromObject(PyObject *object) { - int overflow; - // The overflow check knows about CPyTagged's width -diff --git a/mypyc/lib-rt/misc_ops.c b/mypyc/lib-rt/misc_ops.c -index cebd1cf997f..dcce89d9072 100644 ---- a/mypyc/lib-rt/misc_ops.c -+++ b/mypyc/lib-rt/misc_ops.c -@@ -437,7 +437,7 @@ CPyPickle_GetState(PyObject *obj) - } - - CPyTagged CPyTagged_Id(PyObject *o) { -- return CPyTagged_FromSsize_t((Py_ssize_t)o); -+ return CPyTagged_FromVoidPtr(o); - } - - #define MAX_INT_CHARS 22 diff --git a/gnu/packages/patches/python-mypy-use-sys-path.patch b/gnu/packages/patches/python-mypy-use-sys-path.patch deleted file mode 100644 index 1b12526456..0000000000 --- a/gnu/packages/patches/python-mypy-use-sys-path.patch +++ /dev/null @@ -1,130 +0,0 @@ -This patch fixes the annotation files search of mypy on non-FHS distributions. - -Submitted upstream: https://github.com/python/mypy/pull/12530 - -diff --git a/mypy/main.py b/mypy/main.py -index 3d9836587..f9b0cbd39 100644 ---- a/mypy/main.py -+++ b/mypy/main.py -@@ -1033,10 +1033,10 @@ def process_options(args: List[str], - # Set target. - if special_opts.modules + special_opts.packages: - options.build_type = BuildType.MODULE -- egg_dirs, site_packages = get_site_packages_dirs(options.python_executable) -+ site_packages = get_site_packages_dirs(options.python_executable) - search_paths = SearchPaths((os.getcwd(),), - tuple(mypy_path() + options.mypy_path), -- tuple(egg_dirs + site_packages), -+ tuple(site_packages), - ()) - targets = [] - # TODO: use the same cache that the BuildManager will -diff --git a/mypy/modulefinder.py b/mypy/modulefinder.py -index 94d2dd34c..337a2d59b 100644 ---- a/mypy/modulefinder.py -+++ b/mypy/modulefinder.py -@@ -629,7 +629,7 @@ def get_prefixes(python_executable: Optional[str]) -> Tuple[str, str]: - - - @functools.lru_cache(maxsize=None) --def get_site_packages_dirs(python_executable: Optional[str]) -> Tuple[List[str], List[str]]: -+def get_site_packages_dirs(python_executable: Optional[str]) -> List[str]: - """Find package directories for given python. - - This runs a subprocess call, which generates a list of the egg directories, and the site -@@ -648,51 +648,7 @@ def get_site_packages_dirs(python_executable: Optional[str]) -> Tuple[List[str], - site_packages = ast.literal_eval( - subprocess.check_output([python_executable, pyinfo.__file__, 'getsitepackages'], - stderr=subprocess.PIPE).decode()) -- return expand_site_packages(site_packages) -- -- --def expand_site_packages(site_packages: List[str]) -> Tuple[List[str], List[str]]: -- """Expands .pth imports in site-packages directories""" -- egg_dirs: List[str] = [] -- for dir in site_packages: -- if not os.path.isdir(dir): -- continue -- pth_filenames = sorted(name for name in os.listdir(dir) if name.endswith(".pth")) -- for pth_filename in pth_filenames: -- egg_dirs.extend(_parse_pth_file(dir, pth_filename)) -- -- return egg_dirs, site_packages -- -- --def _parse_pth_file(dir: str, pth_filename: str) -> Iterator[str]: -- """ -- Mimics a subset of .pth import hook from Lib/site.py -- See https://github.com/python/cpython/blob/3.5/Lib/site.py#L146-L185 -- """ -- -- pth_file = os.path.join(dir, pth_filename) -- try: -- f = open(pth_file, "r") -- except OSError: -- return -- with f: -- for line in f.readlines(): -- if line.startswith("#"): -- # Skip comment lines -- continue -- if line.startswith(("import ", "import\t")): -- # import statements in .pth files are not supported -- continue -- -- yield _make_abspath(line.rstrip(), dir) -- -- --def _make_abspath(path: str, root: str) -> str: -- """Take a path and make it absolute relative to root if not already absolute.""" -- if os.path.isabs(path): -- return os.path.normpath(path) -- else: -- return os.path.join(root, os.path.normpath(path)) -+ return site_packages - - - def add_py2_mypypath_entries(mypypath: List[str]) -> List[str]: -@@ -781,7 +737,7 @@ def compute_search_paths(sources: List[BuildSource], - if options.python_version[0] == 2: - mypypath = add_py2_mypypath_entries(mypypath) - -- egg_dirs, site_packages = get_site_packages_dirs(options.python_executable) -+ site_packages = get_site_packages_dirs(options.python_executable) - base_prefix, prefix = get_prefixes(options.python_executable) - is_venv = base_prefix != prefix - for site_dir in site_packages: -@@ -801,7 +757,7 @@ def compute_search_paths(sources: List[BuildSource], - - return SearchPaths(python_path=tuple(reversed(python_path)), - mypy_path=tuple(mypypath), -- package_path=tuple(egg_dirs + site_packages), -+ package_path=tuple(site_packages), - typeshed_path=tuple(lib_path)) - - -diff --git a/mypy/pyinfo.py b/mypy/pyinfo.py -index ab2d3286b..9fb0501a1 100644 ---- a/mypy/pyinfo.py -+++ b/mypy/pyinfo.py -@@ -24,16 +24,11 @@ def getprefixes(): - - def getsitepackages(): - # type: () -> List[str] -- res = [] -- if hasattr(site, 'getsitepackages'): -- res.extend(site.getsitepackages()) - -- if hasattr(site, 'getusersitepackages') and site.ENABLE_USER_SITE: -- res.insert(0, site.getusersitepackages()) -- else: -- from distutils.sysconfig import get_python_lib -- res = [get_python_lib()] -- return res -+ # Simply return sys.path, which has already been expanded -+ # correctly via Python's site.py module, which takes care of .pth, -+ # sitecustomize.py files, etc. -+ return sys.path - - - if __name__ == '__main__': diff --git a/gnu/packages/python-check.scm b/gnu/packages/python-check.scm index e196f2eccb..7cc266fbce 100644 --- a/gnu/packages/python-check.scm +++ b/gnu/packages/python-check.scm @@ -1771,7 +1771,7 @@ supported by the MyPy typechecker.") (define-public python-mypy (package (name "python-mypy") - (version "0.942") + (version "0.971") (source (origin ;; Because of https://github.com/python/mypy/issues/9584, the @@ -1788,10 +1788,7 @@ supported by the MyPy typechecker.") (file-name (git-file-name name version)) (sha256 (base32 - "0hxnrqhvskiclwfj2s4gyfclzjas1dvpfxhyng8v7mq38rqps1j5")) - (patches - (search-patches "python-mypy-12332.patch" - "python-mypy-use-sys-path.patch")))) + "0i8swdynms1wpiprgqn24za6mx8rlgxr2jash3cb5xi8jyf58n97")))) (build-system python-build-system) (arguments `(#:phases @@ -1799,7 +1796,10 @@ supported by the MyPy typechecker.") (replace 'check (lambda* (#:key tests? #:allow-other-keys) (when tests? - (invoke "pytest" "mypyc"))))))) + (invoke "pytest" "-vv" "mypyc" + ;; XXX: This test gets an unexpected DeprecationWarning + ;; from recent versions of setuptools. Ignore for now. + "-k" "not testImports"))))))) (native-inputs (list python-attrs python-lxml |