Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-versioneer for 
openSUSE:Factory checked in at 2023-05-29 22:47:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-versioneer (Old)
 and      /work/SRC/openSUSE:Factory/.python-versioneer.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-versioneer"

Mon May 29 22:47:34 2023 rev:7 rq:1089423 version:0.28

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-versioneer/python-versioneer.changes      
2023-05-23 14:53:27.826099867 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-versioneer.new.1533/python-versioneer.changes
    2023-05-29 22:47:37.970249398 +0200
@@ -1,0 +2,18 @@
+Fri May 26 20:12:38 UTC 2023 - Ben Greiner <c...@bnavigator.de>
+
+- Update to 0.28
+  * FIX: handle unset versionfile_build in build_ext by @mgorny in
+    #347
+  * ENH: support built-in tomllib for Python 3.11+ by @mgorny in
+    #348
+- Release 0.27
+  * FIX: Always bootstrap in setup.py to avoid incompatibility with
+    old versioneer by @mgorny (#344)
+  * FIX: Mixup between _egg_info and _sdist by @DimitriPapadopoulos
+    (#342)
+  * STY: Merge endswith checks by @DimitriPapadopoulos (#337)
+  * STY: Useless inheritance from object by @DimitriPapadopoulos
+    (#336)
+- Provide [toml] extra as subpackage
+
+-------------------------------------------------------------------

Old:
----
  versioneer-0.26.tar.gz

New:
----
  versioneer-0.28.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-versioneer.spec ++++++
--- /var/tmp/diff_new_pack.3GqFmN/_old  2023-05-29 22:47:41.918270689 +0200
+++ /var/tmp/diff_new_pack.3GqFmN/_new  2023-05-29 22:47:41.922270711 +0200
@@ -18,15 +18,18 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-versioneer
-Version:        0.26
+Version:        0.28
 Release:        0
 Summary:        VCS-based management of project version strings
 License:        Unlicense
 Group:          Development/Languages/Python
 URL:            https://github.com/warner/python-versioneer
 Source:         
https://files.pythonhosted.org/packages/source/v/versioneer/versioneer-%{version}.tar.gz
+BuildRequires:  %{python_module pip}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module testsuite}
+BuildRequires:  %{python_module tomli if %python-base < 3.11}
+BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
 Requires(post): update-alternatives
@@ -40,14 +43,28 @@
 setup.py and the conventional ‘from PROJECT import _version’ pattern)
 by asking the version control system about the current tree.
 
+%package toml
+Summary:        VCS-based management of project version strings [toml] extra
+Requires:       python-versioneer = %{version}
+Requires:       (python-tomli if python-base < 3.11)
+
+%description toml
+Versioneer is a tool to automatically update version strings (in
+setup.py and the conventional ‘from PROJECT import _version’ pattern)
+by asking the version control system about the current tree.
+
+This package provides the [toml] extra
+
 %prep
 %setup -q -n versioneer-%{version}
 
 %build
-%python_build
+%pyproject_wheel
 
 %install
-%python_install
+%pyproject_install
+%python_expand sed -i '1{/^#!/d}'  %{buildroot}%{$python_sitelib}/versioneer.py
+%python_compileall
 %python_clone -a %{buildroot}%{_bindir}/versioneer
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
@@ -61,9 +78,15 @@
 %python_uninstall_alternative versioneer
 
 %files %{python_files}
-%defattr(-,root,root,-)
 %doc README.md
-%{python_sitelib}/*
+%license LICENSE
+%{python_sitelib}/versioneer.py*
+%pycache_only %{python_sitelib}/__pycache__/versioneer*.pyc
+%{python_sitelib}/versioneer-%{version}.dist-info
 %python_alternative %{_bindir}/versioneer
 
+%files %{python_files toml}
+%doc README.md
+%license LICENSE
+
 %changelog

++++++ versioneer-0.26.tar.gz -> versioneer-0.28.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/PKG-INFO new/versioneer-0.28/PKG-INFO
--- old/versioneer-0.26/PKG-INFO        2022-09-06 19:09:01.888857600 +0200
+++ new/versioneer-0.28/PKG-INFO        2022-10-27 20:45:45.986500700 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: versioneer
-Version: 0.26
+Version: 0.28
 Summary: Easy VCS-based management of project version strings
 Author: Brian Warner
 Maintainer-email: Christopher Markiewicz <effig...@gmail.com>, Nathan Buckner 
<buckne...@users.noreply.github.com>
@@ -69,21 +69,27 @@
 ### Vendored mode
 
 * `pip install versioneer` to somewhere in your $PATH
-* add a `[tool.versioneer]` section to your `pyproject.toml or a
+   * A [conda-forge 
recipe](https://github.com/conda-forge/versioneer-feedstock) is
+     available, so you can also use `conda install -c conda-forge versioneer`
+* add a `[tool.versioneer]` section to your `pyproject.toml` or a
   `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
+   * Note that you will need to add `tomli; python_version < "3.11"` to your
+     build-time dependencies if you use `pyproject.toml`
 * run `versioneer install --vendor` in your source tree, commit the results
 * verify version information with `python setup.py version`
 
 ### Build-time dependency mode
 
 * `pip install versioneer` to somewhere in your $PATH
-* add a `[tool.versioneer]` section to your `pyproject.toml or a
+   * A [conda-forge 
recipe](https://github.com/conda-forge/versioneer-feedstock) is
+     available, so you can also use `conda install -c conda-forge versioneer`
+* add a `[tool.versioneer]` section to your `pyproject.toml` or a
   `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
-* add `versioneer` to the `requires` key of the `build-system` table in
-  `pyproject.toml`:
+* add `versioneer` (with `[toml]` extra, if configuring in `pyproject.toml`)
+  to the `requires` key of the `build-system` table in `pyproject.toml`:
   ```toml
   [build-system]
-  requires = ["setuptools", "versioneer"]
+  requires = ["setuptools", "versioneer[toml]"]
   build-backend = "setuptools.build_meta"
   ```
 * run `versioneer install --no-vendor` in your source tree, commit the results
@@ -325,9 +331,8 @@
 
 To make Versioneer easier to embed, all its code is dedicated to the public
 domain. The `_version.py` that it creates is also in the public domain.
-Specifically, both are released under the Creative Commons "Public Domain
-Dedication" license (CC0-1.0), as described in
-https://creativecommons.org/publicdomain/zero/1.0/ .
+Specifically, both are released under the "Unlicense", as described in
+https://unlicense.org/.
 
 [pypi-image]: https://img.shields.io/pypi/v/versioneer.svg
 [pypi-url]: https://pypi.python.org/pypi/versioneer/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/README.md 
new/versioneer-0.28/README.md
--- old/versioneer-0.26/README.md       2022-09-06 19:08:48.000000000 +0200
+++ new/versioneer-0.28/README.md       2022-10-27 20:45:29.000000000 +0200
@@ -25,21 +25,27 @@
 ### Vendored mode
 
 * `pip install versioneer` to somewhere in your $PATH
-* add a `[tool.versioneer]` section to your `pyproject.toml or a
+   * A [conda-forge 
recipe](https://github.com/conda-forge/versioneer-feedstock) is
+     available, so you can also use `conda install -c conda-forge versioneer`
+* add a `[tool.versioneer]` section to your `pyproject.toml` or a
   `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
+   * Note that you will need to add `tomli; python_version < "3.11"` to your
+     build-time dependencies if you use `pyproject.toml`
 * run `versioneer install --vendor` in your source tree, commit the results
 * verify version information with `python setup.py version`
 
 ### Build-time dependency mode
 
 * `pip install versioneer` to somewhere in your $PATH
-* add a `[tool.versioneer]` section to your `pyproject.toml or a
+   * A [conda-forge 
recipe](https://github.com/conda-forge/versioneer-feedstock) is
+     available, so you can also use `conda install -c conda-forge versioneer`
+* add a `[tool.versioneer]` section to your `pyproject.toml` or a
   `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
-* add `versioneer` to the `requires` key of the `build-system` table in
-  `pyproject.toml`:
+* add `versioneer` (with `[toml]` extra, if configuring in `pyproject.toml`)
+  to the `requires` key of the `build-system` table in `pyproject.toml`:
   ```toml
   [build-system]
-  requires = ["setuptools", "versioneer"]
+  requires = ["setuptools", "versioneer[toml]"]
   build-backend = "setuptools.build_meta"
   ```
 * run `versioneer install --no-vendor` in your source tree, commit the results
@@ -281,9 +287,8 @@
 
 To make Versioneer easier to embed, all its code is dedicated to the public
 domain. The `_version.py` that it creates is also in the public domain.
-Specifically, both are released under the Creative Commons "Public Domain
-Dedication" license (CC0-1.0), as described in
-https://creativecommons.org/publicdomain/zero/1.0/ .
+Specifically, both are released under the "Unlicense", as described in
+https://unlicense.org/.
 
 [pypi-image]: https://img.shields.io/pypi/v/versioneer.svg
 [pypi-url]: https://pypi.python.org/pypi/versioneer/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/_version.py 
new/versioneer-0.28/_version.py
--- old/versioneer-0.26/_version.py     2022-09-06 19:09:01.888857600 +0200
+++ new/versioneer-0.28/_version.py     2022-10-27 20:45:45.986500700 +0200
@@ -8,11 +8,11 @@
 
 version_json = '''
 {
- "date": "2022-09-06T13:07:50-0400",
+ "date": "2022-10-27T14:30:06-0400",
  "dirty": false,
  "error": null,
- "full-revisionid": "922f0d975d203476ccea248241ded9948c568435",
- "version": "0.26"
+ "full-revisionid": "83f20fdf886df7a6089fca3bb7fc3c33198bd629",
+ "version": "0.28"
 }
 '''  # END VERSION_JSON
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/pyproject.toml 
new/versioneer-0.28/pyproject.toml
--- old/versioneer-0.26/pyproject.toml  2022-09-06 19:08:48.000000000 +0200
+++ new/versioneer-0.28/pyproject.toml  2022-10-27 20:45:29.000000000 +0200
@@ -1,5 +1,5 @@
 [build-system]
-requires = ["setuptools"]
+requires = ["setuptools", "tomli; python_version < '3.11'"]
 build-backend = "setuptools.build_meta"
 
 [project]
@@ -33,4 +33,10 @@
 "versioneer" = "versioneer:main"
 
 [project.optional-dependencies]
-toml = ["tomli"]
+toml = ["tomli; python_version < '3.11'"]
+
+[tool.versioneer]
+VCS = "git"
+style = "pep440"
+versionfile_source = "_version.py"
+parentdir_prefix = ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/setup.cfg 
new/versioneer-0.28/setup.cfg
--- old/versioneer-0.26/setup.cfg       2022-09-06 19:09:01.888857600 +0200
+++ new/versioneer-0.28/setup.cfg       2022-10-27 20:45:45.986500700 +0200
@@ -1,11 +1,3 @@
-[versioneer]
-VCS = git
-style = pep440
-versionfile_source = _version.py
-versionfile_build = 
-tag_prefix = 
-parentdir_prefix = 
-
 [egg_info]
 tag_build = 
 tag_date = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/setup.py new/versioneer-0.28/setup.py
--- old/versioneer-0.26/setup.py        2022-09-06 19:08:48.000000000 +0200
+++ new/versioneer-0.28/setup.py        2022-10-27 20:45:29.000000000 +0200
@@ -1,6 +1,7 @@
 #!/usr/bin/env python
 
 import os, base64, tempfile, io
+from importlib import util as ilu
 from pathlib import Path
 from setuptools import setup, Command
 from setuptools.command.build_py import build_py
@@ -132,13 +133,9 @@
     def run(self):
         raise RuntimeError("Versioneer cannot be installed in 
developer/editable mode.")
 
-try:
-    import versioneer
-except ImportError:
-    # Bootstrap a versioneer module until it's built
-    from importlib import util as ilu
-    versioneer = ilu.module_from_spec(ilu.spec_from_loader('versioneer', 
loader=None))
-    exec(generate_versioneer_py(), versioneer.__dict__)
+# Bootstrap a versioneer module to guarantee that we get a compatible version
+versioneer = ilu.module_from_spec(ilu.spec_from_loader('versioneer', 
loader=None))
+exec(generate_versioneer_py(), versioneer.__dict__)
 
 VERSION = versioneer.get_version()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/src/cmdclass.py 
new/versioneer-0.28/src/cmdclass.py
--- old/versioneer-0.26/src/cmdclass.py 2022-09-06 19:08:48.000000000 +0200
+++ new/versioneer-0.28/src/cmdclass.py 2022-10-27 20:45:29.000000000 +0200
@@ -116,6 +116,8 @@
                 return
             # now locate _version.py in the new build/ directory and replace
             # it with an updated value
+            if not cfg.versionfile_build:
+                return
             target_versionfile = os.path.join(self.build_lib,
                                               cfg.versionfile_build)
             if not os.path.exists(target_versionfile):
@@ -189,7 +191,7 @@
 
     # sdist farms its file list building out to egg_info
     if 'egg_info' in cmds:
-        _sdist = cmds['egg_info']
+        _egg_info = cmds['egg_info']
     else:
         from setuptools.command.egg_info import egg_info as _egg_info
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/src/git/install.py 
new/versioneer-0.28/src/git/install.py
--- old/versioneer-0.26/src/git/install.py      2022-09-06 19:08:48.000000000 
+0200
+++ new/versioneer-0.28/src/git/install.py      2022-10-27 20:45:29.000000000 
+0200
@@ -16,7 +16,7 @@
     if "VERSIONEER_PEP518" not in globals():
         try:
             my_path = __file__
-            if my_path.endswith(".pyc") or my_path.endswith(".pyo"):
+            if my_path.endswith((".pyc", ".pyo")):
                 my_path = os.path.splitext(my_path)[0] + ".py"
             versioneer_file = os.path.relpath(my_path)
         except NameError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/src/header.py 
new/versioneer-0.28/src/header.py
--- old/versioneer-0.26/src/header.py   2022-09-06 19:08:48.000000000 +0200
+++ new/versioneer-0.28/src/header.py   2022-10-27 20:45:29.000000000 +0200
@@ -21,11 +21,15 @@
 from pathlib import Path
 from typing import Callable, Dict
 import functools
-try:
-    import tomli
-    have_tomli = True
-except ImportError:
-    have_tomli = False
+
+have_tomllib = True
+if sys.version_info >= (3, 11):
+    import tomllib
+else:
+    try:
+        import tomli as tomllib
+    except ImportError:
+        have_tomllib = False
 
 class VersioneerBadRootError(Exception): ... # --STRIP DURING BUILD
 
@@ -82,12 +86,12 @@
     pyproject_toml = root / "pyproject.toml"
     setup_cfg = root / "setup.cfg"
     section = None
-    if pyproject_toml.exists() and have_tomli:
+    if pyproject_toml.exists() and have_tomllib:
         try:
             with open(pyproject_toml, 'rb') as fobj:
-                pp = tomli.load(fobj)
+                pp = tomllib.load(fobj)
             section = pp['tool']['versioneer']
-        except (tomli.TOMLDecodeError, KeyError):
+        except (tomllib.TOMLDecodeError, KeyError):
             pass
     if not section:
         parser = configparser.ConfigParser()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/test/demoapp2-setuptools/setup.py 
new/versioneer-0.28/test/demoapp2-setuptools/setup.py
--- old/versioneer-0.26/test/demoapp2-setuptools/setup.py       2022-09-06 
19:08:48.000000000 +0200
+++ new/versioneer-0.28/test/demoapp2-setuptools/setup.py       2022-10-27 
20:45:29.000000000 +0200
@@ -2,6 +2,8 @@
 from setuptools import setup
 import versioneer
 commands = versioneer.get_cmdclass().copy()
+# Updating our updated commands should be safe
+commands = versioneer.get_cmdclass(commands).copy()
 
 setup(name="demoapp2",
       version=versioneer.get_version(),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/versioneer-0.26/test/demoappext-setuptools/demo/ext.c 
new/versioneer-0.28/test/demoappext-setuptools/demo/ext.c
--- old/versioneer-0.26/test/demoappext-setuptools/demo/ext.c   2022-09-06 
19:08:48.000000000 +0200
+++ new/versioneer-0.28/test/demoappext-setuptools/demo/ext.c   2022-10-27 
20:45:29.000000000 +0200
@@ -1,15 +1,17 @@
-/* Generated by Cython 0.29.21 */
+/* Generated by Cython 0.29.32 */
 
+#ifndef PY_SSIZE_T_CLEAN
 #define PY_SSIZE_T_CLEAN
+#endif /* PY_SSIZE_T_CLEAN */
 #include "Python.h"
 #ifndef Py_PYTHON_H
     #error Python headers needed to compile C extensions, please install 
development version of Python.
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && 
PY_VERSION_HEX < 0x03030000)
     #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_29_21"
-#define CYTHON_HEX_VERSION 0x001D15F0
-#define CYTHON_FUTURE_DIVISION 0
+#define CYTHON_ABI "0_29_32"
+#define CYTHON_HEX_VERSION 0x001D20F0
+#define CYTHON_FUTURE_DIVISION 1
 #include <stddef.h>
 #ifndef offsetof
   #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -47,6 +49,7 @@
   #define CYTHON_COMPILING_IN_PYPY 1
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #undef CYTHON_USE_TYPE_SLOTS
   #define CYTHON_USE_TYPE_SLOTS 0
   #undef CYTHON_USE_PYTYPE_LOOKUP
@@ -83,10 +86,14 @@
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+  #endif
 #elif defined(PYSTON_VERSION)
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -124,10 +131,59 @@
   #define CYTHON_USE_DICT_VERSIONS 0
   #undef CYTHON_USE_EXC_INFO_STACK
   #define CYTHON_USE_EXC_INFO_STACK 0
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+  #endif
+#elif defined(PY_NOGIL)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_NOGIL 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #ifndef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE 1
+  #endif
+  #undef CYTHON_USE_DICT_VERSIONS
+  #define CYTHON_USE_DICT_VERSIONS 0
+  #undef CYTHON_USE_EXC_INFO_STACK
+  #define CYTHON_USE_EXC_INFO_STACK 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
   #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_NOGIL 0
   #ifndef CYTHON_USE_TYPE_SLOTS
     #define CYTHON_USE_TYPE_SLOTS 1
   #endif
@@ -155,7 +211,7 @@
   #ifndef CYTHON_USE_UNICODE_INTERNALS
     #define CYTHON_USE_UNICODE_INTERNALS 1
   #endif
-  #if PY_VERSION_HEX < 0x030300F0
+  #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
     #undef CYTHON_USE_UNICODE_WRITER
     #define CYTHON_USE_UNICODE_WRITER 0
   #elif !defined(CYTHON_USE_UNICODE_WRITER)
@@ -170,11 +226,14 @@
   #ifndef CYTHON_UNPACK_METHODS
     #define CYTHON_UNPACK_METHODS 1
   #endif
-  #ifndef CYTHON_FAST_THREAD_STATE
+  #if PY_VERSION_HEX >= 0x030B00A4
+    #undef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 0
+  #elif !defined(CYTHON_FAST_THREAD_STATE)
     #define CYTHON_FAST_THREAD_STATE 1
   #endif
   #ifndef CYTHON_FAST_PYCALL
-    #define CYTHON_FAST_PYCALL 1
+    #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000)
   #endif
   #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
     #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
@@ -185,15 +244,23 @@
   #ifndef CYTHON_USE_DICT_VERSIONS
     #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
   #endif
-  #ifndef CYTHON_USE_EXC_INFO_STACK
+  #if PY_VERSION_HEX >= 0x030B00A4
+    #undef CYTHON_USE_EXC_INFO_STACK
+    #define CYTHON_USE_EXC_INFO_STACK 0
+  #elif !defined(CYTHON_USE_EXC_INFO_STACK)
     #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
   #endif
+  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
+  #endif
 #endif
 #if !defined(CYTHON_FAST_PYCCALL)
 #define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 
0x030600B1)
 #endif
 #if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
+  #if PY_MAJOR_VERSION < 3
+    #include "longintrepr.h"
+  #endif
   #undef SHIFT
   #undef BASE
   #undef MASK
@@ -310,9 +377,68 @@
   #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, 
fline, lnos)\
-          PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, 
fline, lnos)
+  #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+    static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, 
int s, int f,
+                                                    PyObject *code, PyObject 
*c, PyObject* n, PyObject *v,
+                                                    PyObject *fv, PyObject 
*cell, PyObject* fn,
+                                                    PyObject *name, int fline, 
PyObject *lnos) {
+        PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, 
*kwonlyargcount=NULL;
+        PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, 
*call_result=NULL, *empty=NULL;
+        const char *fn_cstr=NULL;
+        const char *name_cstr=NULL;
+        PyCodeObject* co=NULL;
+        PyObject *type, *value, *traceback;
+        PyErr_Fetch(&type, &value, &traceback);
+        if (!(kwds=PyDict_New())) goto end;
+        if (!(argcount=PyLong_FromLong(a))) goto end;
+        if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+        if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+        if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) 
!= 0) goto end;
+        if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+        if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 
0) goto end;
+        if (!(nlocals=PyLong_FromLong(l))) goto end;
+        if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+        if (!(stacksize=PyLong_FromLong(s))) goto end;
+        if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto 
end;
+        if (!(flags=PyLong_FromLong(f))) goto end;
+        if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+        if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+        if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+        if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+        if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+        if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) 
goto cleanup_code_too;
+        if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately 
__pyx_empty_tuple isn't available here
+        if (!(call_result = PyObject_Call(replace, empty, kwds))) goto 
cleanup_code_too;
+        Py_XDECREF((PyObject*)co);
+        co = (PyCodeObject*)call_result;
+        call_result = NULL;
+        if (0) {
+            cleanup_code_too:
+            Py_XDECREF((PyObject*)co);
+            co = NULL;
+        }
+        end:
+        Py_XDECREF(kwds);
+        Py_XDECREF(argcount);
+        Py_XDECREF(posonlyargcount);
+        Py_XDECREF(kwonlyargcount);
+        Py_XDECREF(nlocals);
+        Py_XDECREF(stacksize);
+        Py_XDECREF(replace);
+        Py_XDECREF(call_result);
+        Py_XDECREF(empty);
+        if (type) {
+            PyErr_Restore(type, value, traceback);
+        }
+        return co;
+    }
 #else
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, 
fline, lnos)\
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, 
lnos)
@@ -426,8 +552,12 @@
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
+  #if defined(PyUnicode_IS_READY)
   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                               0 : _PyUnicode_Ready((PyObject 
*)(op)))
+  #else
+  #define __Pyx_PyUnicode_READY(op)       (0)
+  #endif
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
   #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
@@ -436,7 +566,11 @@
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
   #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) 
? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+  #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) 
? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+  #endif
   #else
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
   #endif
@@ -542,10 +676,10 @@
 #if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
-  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
+  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsHash_t
 #else
   #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
-  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
+  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsSsize_t
 #endif
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), 
PyMethod_New(func, self)) : __Pyx_NewRef(func))
@@ -570,8 +704,10 @@
     } __Pyx_PyAsyncMethodsStruct;
 #endif
 
-#if defined(WIN32) || defined(MS_WINDOWS)
-  #define _USE_MATH_DEFINES
+#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
+  #if !defined(_USE_MATH_DEFINES)
+    #define _USE_MATH_DEFINES
+  #endif
 #endif
 #include <math.h>
 #ifdef NAN
@@ -701,6 +837,7 @@
     (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : 
PySequence_Tuple(obj))
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
 #if CYTHON_ASSUME_SAFE_MACROS
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? 
PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
@@ -813,7 +950,7 @@
 
 
 static const char *__pyx_f[] = {
-  "test/demoappext-setuptools/demo/ext.pyx",
+  "ext.pyx",
 };
 
 /*--- Type declarations ---*/
@@ -987,6 +1124,11 @@
 static void __Pyx_AddTraceback(const char *funcname, int c_line,
                                int py_line, const char *filename);
 
+/* GCCDiagnostics.proto */
+#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 
6))
+#define __Pyx_HAS_GCC_DIAGNOSTIC
+#endif
+
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 
@@ -1028,19 +1170,19 @@
 static const char __pyx_k_name[] = "__name__";
 static const char __pyx_k_test[] = "__test__";
 static const char __pyx_k_print[] = "print";
+static const char __pyx_k_ext_pyx[] = "ext.pyx";
 static const char __pyx_k_demo_ext[] = "demo.ext";
 static const char __pyx_k_Extension_code[] = "Extension code";
 static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
-static const char __pyx_k_test_demoappext_setuptools_demo[] = 
"test/demoappext-setuptools/demo/ext.pyx";
-static PyObject *__pyx_kp_s_Extension_code;
+static PyObject *__pyx_kp_u_Extension_code;
 static PyObject *__pyx_n_s_cline_in_traceback;
 static PyObject *__pyx_n_s_demo_ext;
+static PyObject *__pyx_kp_s_ext_pyx;
 static PyObject *__pyx_n_s_main;
 static PyObject *__pyx_n_s_name;
 static PyObject *__pyx_n_s_print;
 static PyObject *__pyx_n_s_run;
 static PyObject *__pyx_n_s_test;
-static PyObject *__pyx_kp_s_test_demoappext_setuptools_demo;
 static PyObject *__pyx_pf_4demo_3ext_run(CYTHON_UNUSED PyObject *__pyx_self); 
/* proto */
 static PyObject *__pyx_tuple_;
 static PyObject *__pyx_codeobj__2;
@@ -1151,15 +1293,15 @@
 #endif
 
 static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_kp_s_Extension_code, __pyx_k_Extension_code, 
sizeof(__pyx_k_Extension_code), 0, 0, 1, 0},
+  {&__pyx_kp_u_Extension_code, __pyx_k_Extension_code, 
sizeof(__pyx_k_Extension_code), 0, 1, 0, 0},
   {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, 
sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
   {&__pyx_n_s_demo_ext, __pyx_k_demo_ext, sizeof(__pyx_k_demo_ext), 0, 0, 1, 
1},
+  {&__pyx_kp_s_ext_pyx, __pyx_k_ext_pyx, sizeof(__pyx_k_ext_pyx), 0, 0, 1, 0},
   {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
   {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
   {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
   {&__pyx_n_s_run, __pyx_k_run, sizeof(__pyx_k_run), 0, 0, 1, 1},
   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
-  {&__pyx_kp_s_test_demoappext_setuptools_demo, 
__pyx_k_test_demoappext_setuptools_demo, 
sizeof(__pyx_k_test_demoappext_setuptools_demo), 0, 0, 1, 0},
   {0, 0, 0, 0, 0, 0, 0}
 };
 static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
@@ -1178,7 +1320,7 @@
  * def run():
  *     print("Extension code")             # <<<<<<<<<<<<<<
  */
-  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Extension_code); if 
(unlikely(!__pyx_tuple_)) __PYX_ERR(0, 4, __pyx_L1_error)
+  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Extension_code); if 
(unlikely(!__pyx_tuple_)) __PYX_ERR(0, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
@@ -1188,7 +1330,7 @@
  * def run():             # <<<<<<<<<<<<<<
  *     print("Extension code")
  */
-  __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_test_demoappext_setuptools_demo, __pyx_n_s_run, 3, 
__pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 3, 
__pyx_L1_error)
+  __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 
CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, 
__pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, 
__pyx_kp_s_ext_pyx, __pyx_n_s_run, 3, __pyx_empty_bytes); if 
(unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 3, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -1412,11 +1554,9 @@
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
-  #ifdef WITH_THREAD /* Python build with threading support? */
+  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && 
defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
   PyEval_InitThreads();
   #endif
-  #endif
   /*--- Module creation code ---*/
   #if CYTHON_PEP489_MULTI_PHASE_INIT
   __pyx_m = __pyx_pyinit_module;
@@ -1564,7 +1704,7 @@
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject 
*arg, PyObject *kw) {
     PyObject *result;
-    ternaryfunc call = func->ob_type->tp_call;
+    ternaryfunc call = Py_TYPE(func)->tp_call;
     if (unlikely(!call))
         return PyObject_Call(func, arg, kw);
     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python 
object")))
@@ -1662,7 +1802,7 @@
     }
     if (!use_cline) {
         c_line = 0;
-        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, 
Py_False);
+        (void) PyObject_SetAttr(__pyx_cython_runtime, 
__pyx_n_s_cline_in_traceback, Py_False);
     }
     else if (use_cline == Py_False || (use_cline != Py_True && 
PyObject_Not(use_cline) != 0)) {
         c_line = 0;
@@ -1756,33 +1896,40 @@
 #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
+#if PY_VERSION_HEX >= 0x030b00a6
+  #ifndef Py_BUILD_CORE
+    #define Py_BUILD_CORE 1
+  #endif
+  #include "internal/pycore_frame.h"
+#endif
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
             const char *funcname, int c_line,
             int py_line, const char *filename) {
-    PyCodeObject *py_code = 0;
-    PyObject *py_srcfile = 0;
-    PyObject *py_funcname = 0;
+    PyCodeObject *py_code = NULL;
+    PyObject *py_funcname = NULL;
     #if PY_MAJOR_VERSION < 3
+    PyObject *py_srcfile = NULL;
     py_srcfile = PyString_FromString(filename);
-    #else
-    py_srcfile = PyUnicode_FromString(filename);
-    #endif
     if (!py_srcfile) goto bad;
+    #endif
     if (c_line) {
         #if PY_MAJOR_VERSION < 3
         py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, 
__pyx_cfilenm, c_line);
+        if (!py_funcname) goto bad;
         #else
         py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, 
__pyx_cfilenm, c_line);
+        if (!py_funcname) goto bad;
+        funcname = PyUnicode_AsUTF8(py_funcname);
+        if (!funcname) goto bad;
         #endif
     }
     else {
         #if PY_MAJOR_VERSION < 3
         py_funcname = PyString_FromString(funcname);
-        #else
-        py_funcname = PyUnicode_FromString(funcname);
+        if (!py_funcname) goto bad;
         #endif
     }
-    if (!py_funcname) goto bad;
+    #if PY_MAJOR_VERSION < 3
     py_code = __Pyx_PyCode_New(
         0,
         0,
@@ -1801,11 +1948,16 @@
         __pyx_empty_bytes  /*PyObject *lnotab*/
     );
     Py_DECREF(py_srcfile);
-    Py_DECREF(py_funcname);
+    #else
+    py_code = PyCode_NewEmpty(filename, funcname, py_line);
+    #endif
+    Py_XDECREF(py_funcname);  // XDECREF since it's only set on Py3 if cline
     return py_code;
 bad:
-    Py_XDECREF(py_srcfile);
     Py_XDECREF(py_funcname);
+    #if PY_MAJOR_VERSION < 3
+    Py_XDECREF(py_srcfile);
+    #endif
     return NULL;
 }
 static void __Pyx_AddTraceback(const char *funcname, int c_line,
@@ -1813,14 +1965,24 @@
     PyCodeObject *py_code = 0;
     PyFrameObject *py_frame = 0;
     PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject *ptype, *pvalue, *ptraceback;
     if (c_line) {
         c_line = __Pyx_CLineForTraceback(tstate, c_line);
     }
     py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
     if (!py_code) {
+        __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
         py_code = __Pyx_CreateCodeObjectForTraceback(
             funcname, c_line, py_line, filename);
-        if (!py_code) goto bad;
+        if (!py_code) {
+            /* If the code object creation fails, then we should clear the
+               fetched exception references and propagate the new exception */
+            Py_XDECREF(ptype);
+            Py_XDECREF(pvalue);
+            Py_XDECREF(ptraceback);
+            goto bad;
+        }
+        __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
         __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
     }
     py_frame = PyFrame_New(
@@ -1839,7 +2001,14 @@
 
 /* CIntToPy */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const long neg_one = (long) -1, const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
         if (sizeof(long) < sizeof(long)) {
@@ -1892,7 +2061,14 @@
 
 /* CIntFromPy */
 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
-    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const long neg_one = (long) -1, const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -2081,7 +2257,14 @@
 
 /* CIntFromPy */
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+    const int neg_one = (int) -1, const_zero = (int) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -2370,11 +2553,33 @@
 
 /* CheckBinaryVersion */
 static int __Pyx_check_binary_version(void) {
-    char ctversion[4], rtversion[4];
-    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
-    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
-    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
+    char ctversion[5];
+    int same=1, i, found_dot;
+    const char* rt_from_call = Py_GetVersion();
+    PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+    found_dot = 0;
+    for (i = 0; i < 4; i++) {
+        if (!ctversion[i]) {
+            same = (rt_from_call[i] < '0' || rt_from_call[i] > '9');
+            break;
+        }
+        if (rt_from_call[i] != ctversion[i]) {
+            same = 0;
+            break;
+        }
+    }
+    if (!same) {
+        char rtversion[5] = {'\0'};
         char message[200];
+        for (i=0; i<4; ++i) {
+            if (rt_from_call[i] == '.') {
+                if (found_dot) break;
+                found_dot = 1;
+            } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') {
+                break;
+            }
+            rtversion[i] = rt_from_call[i];
+        }
         PyOS_snprintf(message, sizeof(message),
                       "compiletime version %s of module '%.100s' "
                       "does not match runtime version %s",
@@ -2632,6 +2837,23 @@
   Py_DECREF(x);
   return ival;
 }
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+  if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+    return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+  } else if (likely(PyInt_CheckExact(o))) {
+    return PyInt_AS_LONG(o);
+#endif
+  } else {
+    Py_ssize_t ival;
+    PyObject *x;
+    x = PyNumber_Index(o);
+    if (!x) return -1;
+    ival = PyInt_AsLong(x);
+    Py_DECREF(x);
+    return ival;
+  }
+}
 static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
   return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/test/test_render.py 
new/versioneer-0.28/test/test_render.py
--- old/versioneer-0.26/test/test_render.py     2022-09-06 19:08:48.000000000 
+0200
+++ new/versioneer-0.28/test/test_render.py     2022-10-27 20:45:29.000000000 
+0200
@@ -3,7 +3,7 @@
 from versioneer import render
 
 
-class Testing_renderer_case_mixin(object):
+class Testing_renderer_case_mixin:
     """
     This is a mixin object which can be combined with a unittest.TestCase
     which defines a style and an expected dictionary. See Test_pep440 for
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/tox.ini new/versioneer-0.28/tox.ini
--- old/versioneer-0.26/tox.ini 2022-09-06 19:08:48.000000000 +0200
+++ new/versioneer-0.28/tox.ini 2022-10-27 20:45:29.000000000 +0200
@@ -4,7 +4,7 @@
 # and then run "tox" from this directory.
 
 [tox]
-envlist = py{37,38,39,310,py3}-{linux,windows}
+envlist = py{37,38,39,310,311,py3}-{linux,windows}
 skip_missing_interpreters = True
 
 [flake8]
@@ -16,6 +16,7 @@
   3.8: py38
   3.9: py39
   3.10: py310
+  3.11: py311
   pypy-3.9: pypy3
 
 [gh-actions:env]
@@ -33,7 +34,7 @@
     packaging>=20
     pip>=20
     build
-    tomli
+    tomli; python_version < "3.11"
     !pypy3: mypy
 
 commands =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/versioneer.egg-info/PKG-INFO 
new/versioneer-0.28/versioneer.egg-info/PKG-INFO
--- old/versioneer-0.26/versioneer.egg-info/PKG-INFO    2022-09-06 
19:09:01.000000000 +0200
+++ new/versioneer-0.28/versioneer.egg-info/PKG-INFO    2022-10-27 
20:45:45.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: versioneer
-Version: 0.26
+Version: 0.28
 Summary: Easy VCS-based management of project version strings
 Author: Brian Warner
 Maintainer-email: Christopher Markiewicz <effig...@gmail.com>, Nathan Buckner 
<buckne...@users.noreply.github.com>
@@ -69,21 +69,27 @@
 ### Vendored mode
 
 * `pip install versioneer` to somewhere in your $PATH
-* add a `[tool.versioneer]` section to your `pyproject.toml or a
+   * A [conda-forge 
recipe](https://github.com/conda-forge/versioneer-feedstock) is
+     available, so you can also use `conda install -c conda-forge versioneer`
+* add a `[tool.versioneer]` section to your `pyproject.toml` or a
   `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
+   * Note that you will need to add `tomli; python_version < "3.11"` to your
+     build-time dependencies if you use `pyproject.toml`
 * run `versioneer install --vendor` in your source tree, commit the results
 * verify version information with `python setup.py version`
 
 ### Build-time dependency mode
 
 * `pip install versioneer` to somewhere in your $PATH
-* add a `[tool.versioneer]` section to your `pyproject.toml or a
+   * A [conda-forge 
recipe](https://github.com/conda-forge/versioneer-feedstock) is
+     available, so you can also use `conda install -c conda-forge versioneer`
+* add a `[tool.versioneer]` section to your `pyproject.toml` or a
   `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md))
-* add `versioneer` to the `requires` key of the `build-system` table in
-  `pyproject.toml`:
+* add `versioneer` (with `[toml]` extra, if configuring in `pyproject.toml`)
+  to the `requires` key of the `build-system` table in `pyproject.toml`:
   ```toml
   [build-system]
-  requires = ["setuptools", "versioneer"]
+  requires = ["setuptools", "versioneer[toml]"]
   build-backend = "setuptools.build_meta"
   ```
 * run `versioneer install --no-vendor` in your source tree, commit the results
@@ -325,9 +331,8 @@
 
 To make Versioneer easier to embed, all its code is dedicated to the public
 domain. The `_version.py` that it creates is also in the public domain.
-Specifically, both are released under the Creative Commons "Public Domain
-Dedication" license (CC0-1.0), as described in
-https://creativecommons.org/publicdomain/zero/1.0/ .
+Specifically, both are released under the "Unlicense", as described in
+https://unlicense.org/.
 
 [pypi-image]: https://img.shields.io/pypi/v/versioneer.svg
 [pypi-url]: https://pypi.python.org/pypi/versioneer/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/versioneer.egg-info/SOURCES.txt 
new/versioneer-0.28/versioneer.egg-info/SOURCES.txt
--- old/versioneer-0.26/versioneer.egg-info/SOURCES.txt 2022-09-06 
19:09:01.000000000 +0200
+++ new/versioneer-0.28/versioneer.egg-info/SOURCES.txt 2022-10-27 
20:45:45.000000000 +0200
@@ -6,7 +6,6 @@
 details.md
 developers.md
 pyproject.toml
-setup.cfg
 setup.py
 tox.ini
 src/__init__.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/versioneer-0.26/versioneer.egg-info/requires.txt 
new/versioneer-0.28/versioneer.egg-info/requires.txt
--- old/versioneer-0.26/versioneer.egg-info/requires.txt        2022-09-06 
19:09:01.000000000 +0200
+++ new/versioneer-0.28/versioneer.egg-info/requires.txt        2022-10-27 
20:45:45.000000000 +0200
@@ -1,3 +1,5 @@
 
 [toml]
+
+[toml:python_version < "3.11"]
 tomli

Reply via email to