android-notify 1.60.0__py3-none-any.whl → 1.60.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of android-notify might be problematic. Click here for more details.
- android_notify/config.py +1 -1
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/METADATA +4 -4
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/RECORD +375 -6
- venv/Lib/site-packages/_distutils_hack/__init__.py +239 -0
- venv/Lib/site-packages/_distutils_hack/override.py +1 -0
- venv/Lib/site-packages/pkg_resources/__init__.py +3713 -0
- venv/Lib/site-packages/pkg_resources/py.typed +0 -0
- venv/Lib/site-packages/pkg_resources/tests/__init__.py +0 -0
- venv/Lib/site-packages/pkg_resources/tests/data/my-test-package-source/setup.py +7 -0
- venv/Lib/site-packages/pkg_resources/tests/test_find_distributions.py +56 -0
- venv/Lib/site-packages/pkg_resources/tests/test_integration_zope_interface.py +54 -0
- venv/Lib/site-packages/pkg_resources/tests/test_markers.py +8 -0
- venv/Lib/site-packages/pkg_resources/tests/test_pkg_resources.py +485 -0
- venv/Lib/site-packages/pkg_resources/tests/test_resources.py +869 -0
- venv/Lib/site-packages/pkg_resources/tests/test_working_set.py +505 -0
- venv/Lib/site-packages/setuptools/__init__.py +248 -0
- venv/Lib/site-packages/setuptools/_core_metadata.py +337 -0
- venv/Lib/site-packages/setuptools/_discovery.py +33 -0
- venv/Lib/site-packages/setuptools/_distutils/__init__.py +14 -0
- venv/Lib/site-packages/setuptools/_distutils/_log.py +3 -0
- venv/Lib/site-packages/setuptools/_distutils/_macos_compat.py +12 -0
- venv/Lib/site-packages/setuptools/_distutils/_modified.py +95 -0
- venv/Lib/site-packages/setuptools/_distutils/_msvccompiler.py +16 -0
- venv/Lib/site-packages/setuptools/_distutils/archive_util.py +294 -0
- venv/Lib/site-packages/setuptools/_distutils/ccompiler.py +26 -0
- venv/Lib/site-packages/setuptools/_distutils/cmd.py +554 -0
- venv/Lib/site-packages/setuptools/_distutils/command/__init__.py +23 -0
- venv/Lib/site-packages/setuptools/_distutils/command/_framework_compat.py +54 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist.py +167 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist_dumb.py +141 -0
- venv/Lib/site-packages/setuptools/_distutils/command/bdist_rpm.py +598 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build.py +156 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_clib.py +201 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_ext.py +812 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_py.py +407 -0
- venv/Lib/site-packages/setuptools/_distutils/command/build_scripts.py +160 -0
- venv/Lib/site-packages/setuptools/_distutils/command/check.py +152 -0
- venv/Lib/site-packages/setuptools/_distutils/command/clean.py +77 -0
- venv/Lib/site-packages/setuptools/_distutils/command/config.py +358 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install.py +805 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_data.py +94 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_egg_info.py +91 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_headers.py +46 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_lib.py +238 -0
- venv/Lib/site-packages/setuptools/_distutils/command/install_scripts.py +62 -0
- venv/Lib/site-packages/setuptools/_distutils/command/sdist.py +521 -0
- venv/Lib/site-packages/setuptools/_distutils/compat/__init__.py +18 -0
- venv/Lib/site-packages/setuptools/_distutils/compat/numpy.py +2 -0
- venv/Lib/site-packages/setuptools/_distutils/compat/py39.py +66 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/base.py +1394 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/cygwin.py +340 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/errors.py +24 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/msvc.py +614 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_base.py +83 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_cygwin.py +76 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_mingw.py +48 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_msvc.py +136 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/tests/test_unix.py +413 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/unix.py +422 -0
- venv/Lib/site-packages/setuptools/_distutils/compilers/C/zos.py +230 -0
- venv/Lib/site-packages/setuptools/_distutils/core.py +289 -0
- venv/Lib/site-packages/setuptools/_distutils/cygwinccompiler.py +31 -0
- venv/Lib/site-packages/setuptools/_distutils/debug.py +5 -0
- venv/Lib/site-packages/setuptools/_distutils/dep_util.py +14 -0
- venv/Lib/site-packages/setuptools/_distutils/dir_util.py +244 -0
- venv/Lib/site-packages/setuptools/_distutils/dist.py +1386 -0
- venv/Lib/site-packages/setuptools/_distutils/errors.py +108 -0
- venv/Lib/site-packages/setuptools/_distutils/extension.py +258 -0
- venv/Lib/site-packages/setuptools/_distutils/fancy_getopt.py +471 -0
- venv/Lib/site-packages/setuptools/_distutils/file_util.py +236 -0
- venv/Lib/site-packages/setuptools/_distutils/filelist.py +431 -0
- venv/Lib/site-packages/setuptools/_distutils/log.py +56 -0
- venv/Lib/site-packages/setuptools/_distutils/spawn.py +134 -0
- venv/Lib/site-packages/setuptools/_distutils/sysconfig.py +598 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/__init__.py +42 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/compat/py39.py +40 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/support.py +134 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_archive_util.py +353 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist.py +47 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_dumb.py +78 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_bdist_rpm.py +127 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build.py +49 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_clib.py +134 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_ext.py +628 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_py.py +196 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_build_scripts.py +96 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_check.py +194 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_clean.py +45 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_cmd.py +107 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_config_cmd.py +87 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_core.py +130 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_dir_util.py +139 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_dist.py +552 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_extension.py +117 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_file_util.py +95 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_filelist.py +336 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install.py +245 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_data.py +74 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_headers.py +33 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_lib.py +110 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_install_scripts.py +52 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_log.py +12 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_modified.py +126 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_sdist.py +470 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_spawn.py +141 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_sysconfig.py +319 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_text_file.py +127 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_util.py +243 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_version.py +80 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/test_versionpredicate.py +0 -0
- venv/Lib/site-packages/setuptools/_distutils/tests/unix_compat.py +17 -0
- venv/Lib/site-packages/setuptools/_distutils/text_file.py +286 -0
- venv/Lib/site-packages/setuptools/_distutils/unixccompiler.py +9 -0
- venv/Lib/site-packages/setuptools/_distutils/util.py +518 -0
- venv/Lib/site-packages/setuptools/_distutils/version.py +348 -0
- venv/Lib/site-packages/setuptools/_distutils/versionpredicate.py +175 -0
- venv/Lib/site-packages/setuptools/_distutils/zosccompiler.py +3 -0
- venv/Lib/site-packages/setuptools/_entry_points.py +94 -0
- venv/Lib/site-packages/setuptools/_imp.py +87 -0
- venv/Lib/site-packages/setuptools/_importlib.py +9 -0
- venv/Lib/site-packages/setuptools/_itertools.py +23 -0
- venv/Lib/site-packages/setuptools/_normalization.py +177 -0
- venv/Lib/site-packages/setuptools/_path.py +93 -0
- venv/Lib/site-packages/setuptools/_reqs.py +42 -0
- venv/Lib/site-packages/setuptools/_scripts.py +361 -0
- venv/Lib/site-packages/setuptools/_shutil.py +59 -0
- venv/Lib/site-packages/setuptools/_static.py +188 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/__init__.py +27 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/autoasync.py +142 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/autocommand.py +70 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/automain.py +59 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/autoparse.py +333 -0
- venv/Lib/site-packages/setuptools/_vendor/autocommand/errors.py +23 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/__init__.py +1 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__init__.py +2937 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/__main__.py +5 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/backports/tarfile/compat/py38.py +24 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/__init__.py +1083 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_adapters.py +83 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_collections.py +30 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_compat.py +57 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_functools.py +104 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_itertools.py +73 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_meta.py +67 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/_text.py +99 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py311.py +22 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/compat/py39.py +36 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/diagnose.py +21 -0
- venv/Lib/site-packages/setuptools/_vendor/importlib_metadata/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/__init__.py +3986 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/compat/py38.py +7 -0
- venv/Lib/site-packages/setuptools/_vendor/inflect/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/__init__.py +1091 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/collections/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/context.py +361 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.py +633 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/__init__.pyi +125 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/functools/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/__init__.py +624 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/layouts.py +25 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/show-newlines.py +33 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/strip-prefix.py +21 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-dvorak.py +6 -0
- venv/Lib/site-packages/setuptools/_vendor/jaraco/text/to-qwerty.py +6 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.py +6 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/__init__.pyi +2 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.py +4806 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/more.pyi +709 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.py +1046 -0
- venv/Lib/site-packages/setuptools/_vendor/more_itertools/recipes.pyi +136 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/__init__.py +15 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_elffile.py +110 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_manylinux.py +263 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_musllinux.py +85 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_parser.py +354 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_structures.py +61 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/_tokenizer.py +194 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/__init__.py +145 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/licenses/_spdx.py +759 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/markers.py +331 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/metadata.py +863 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/requirements.py +91 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/specifiers.py +1020 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/tags.py +617 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/utils.py +163 -0
- venv/Lib/site-packages/setuptools/_vendor/packaging/version.py +582 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/__init__.py +627 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/__main__.py +55 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/android.py +249 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/api.py +292 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/macos.py +130 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/unix.py +275 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/version.py +16 -0
- venv/Lib/site-packages/setuptools/_vendor/platformdirs/windows.py +272 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/__init__.py +11 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_parser.py +691 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_re.py +107 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/_types.py +10 -0
- venv/Lib/site-packages/setuptools/_vendor/tomli/py.typed +1 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/__init__.py +48 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_checkers.py +993 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_config.py +108 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_decorators.py +235 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_exceptions.py +42 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_functions.py +308 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_importhook.py +213 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_memo.py +48 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_pytest_plugin.py +127 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_suppression.py +86 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_transformer.py +1229 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_union_transformer.py +55 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/_utils.py +173 -0
- venv/Lib/site-packages/setuptools/_vendor/typeguard/py.typed +0 -0
- venv/Lib/site-packages/setuptools/_vendor/typing_extensions.py +3641 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/__init__.py +3 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/__main__.py +23 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/_bdist_wheel.py +613 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/_setuptools_logging.py +26 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/bdist_wheel.py +26 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/__init__.py +155 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/convert.py +332 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/pack.py +85 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/tags.py +139 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/cli/unpack.py +30 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/macosx_libfile.py +482 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/metadata.py +183 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/util.py +17 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_elffile.py +108 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_manylinux.py +260 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_musllinux.py +83 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_parser.py +356 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_structures.py +61 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/_tokenizer.py +192 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/markers.py +253 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/requirements.py +90 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/specifiers.py +1011 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/tags.py +571 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/utils.py +172 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/vendored/packaging/version.py +561 -0
- venv/Lib/site-packages/setuptools/_vendor/wheel/wheelfile.py +227 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/__init__.py +501 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/compat/py310.py +11 -0
- venv/Lib/site-packages/setuptools/_vendor/zipp/glob.py +106 -0
- venv/Lib/site-packages/setuptools/archive_util.py +219 -0
- venv/Lib/site-packages/setuptools/build_meta.py +548 -0
- venv/Lib/site-packages/setuptools/command/__init__.py +21 -0
- venv/Lib/site-packages/setuptools/command/_requirestxt.py +131 -0
- venv/Lib/site-packages/setuptools/command/alias.py +77 -0
- venv/Lib/site-packages/setuptools/command/bdist_egg.py +477 -0
- venv/Lib/site-packages/setuptools/command/bdist_rpm.py +42 -0
- venv/Lib/site-packages/setuptools/command/bdist_wheel.py +604 -0
- venv/Lib/site-packages/setuptools/command/build.py +135 -0
- venv/Lib/site-packages/setuptools/command/build_clib.py +103 -0
- venv/Lib/site-packages/setuptools/command/build_ext.py +470 -0
- venv/Lib/site-packages/setuptools/command/build_py.py +400 -0
- venv/Lib/site-packages/setuptools/command/develop.py +55 -0
- venv/Lib/site-packages/setuptools/command/dist_info.py +103 -0
- venv/Lib/site-packages/setuptools/command/easy_install.py +30 -0
- venv/Lib/site-packages/setuptools/command/editable_wheel.py +908 -0
- venv/Lib/site-packages/setuptools/command/egg_info.py +718 -0
- venv/Lib/site-packages/setuptools/command/install.py +131 -0
- venv/Lib/site-packages/setuptools/command/install_egg_info.py +58 -0
- venv/Lib/site-packages/setuptools/command/install_lib.py +137 -0
- venv/Lib/site-packages/setuptools/command/install_scripts.py +67 -0
- venv/Lib/site-packages/setuptools/command/rotate.py +65 -0
- venv/Lib/site-packages/setuptools/command/saveopts.py +21 -0
- venv/Lib/site-packages/setuptools/command/sdist.py +217 -0
- venv/Lib/site-packages/setuptools/command/setopt.py +141 -0
- venv/Lib/site-packages/setuptools/command/test.py +45 -0
- venv/Lib/site-packages/setuptools/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/compat/py310.py +20 -0
- venv/Lib/site-packages/setuptools/compat/py311.py +27 -0
- venv/Lib/site-packages/setuptools/compat/py312.py +13 -0
- venv/Lib/site-packages/setuptools/compat/py39.py +9 -0
- venv/Lib/site-packages/setuptools/config/__init__.py +43 -0
- venv/Lib/site-packages/setuptools/config/_apply_pyprojecttoml.py +526 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/__init__.py +34 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/error_reporting.py +336 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/extra_validations.py +82 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_exceptions.py +51 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/fastjsonschema_validations.py +1412 -0
- venv/Lib/site-packages/setuptools/config/_validate_pyproject/formats.py +402 -0
- venv/Lib/site-packages/setuptools/config/expand.py +452 -0
- venv/Lib/site-packages/setuptools/config/pyprojecttoml.py +468 -0
- venv/Lib/site-packages/setuptools/config/setupcfg.py +780 -0
- venv/Lib/site-packages/setuptools/depends.py +185 -0
- venv/Lib/site-packages/setuptools/discovery.py +614 -0
- venv/Lib/site-packages/setuptools/dist.py +1119 -0
- venv/Lib/site-packages/setuptools/errors.py +67 -0
- venv/Lib/site-packages/setuptools/extension.py +177 -0
- venv/Lib/site-packages/setuptools/glob.py +185 -0
- venv/Lib/site-packages/setuptools/installer.py +155 -0
- venv/Lib/site-packages/setuptools/launch.py +36 -0
- venv/Lib/site-packages/setuptools/logging.py +40 -0
- venv/Lib/site-packages/setuptools/modified.py +18 -0
- venv/Lib/site-packages/setuptools/monkey.py +126 -0
- venv/Lib/site-packages/setuptools/msvc.py +1536 -0
- venv/Lib/site-packages/setuptools/namespaces.py +106 -0
- venv/Lib/site-packages/setuptools/tests/__init__.py +13 -0
- venv/Lib/site-packages/setuptools/tests/compat/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/tests/compat/py39.py +3 -0
- venv/Lib/site-packages/setuptools/tests/config/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/tests/config/downloads/__init__.py +59 -0
- venv/Lib/site-packages/setuptools/tests/config/downloads/preload.py +18 -0
- venv/Lib/site-packages/setuptools/tests/config/test_apply_pyprojecttoml.py +772 -0
- venv/Lib/site-packages/setuptools/tests/config/test_expand.py +247 -0
- venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml.py +396 -0
- venv/Lib/site-packages/setuptools/tests/config/test_pyprojecttoml_dynamic_deps.py +109 -0
- venv/Lib/site-packages/setuptools/tests/config/test_setupcfg.py +980 -0
- venv/Lib/site-packages/setuptools/tests/contexts.py +131 -0
- venv/Lib/site-packages/setuptools/tests/environment.py +95 -0
- venv/Lib/site-packages/setuptools/tests/fixtures.py +392 -0
- venv/Lib/site-packages/setuptools/tests/integration/__init__.py +0 -0
- venv/Lib/site-packages/setuptools/tests/integration/helpers.py +77 -0
- venv/Lib/site-packages/setuptools/tests/integration/test_pbr.py +20 -0
- venv/Lib/site-packages/setuptools/tests/integration/test_pip_install_sdist.py +223 -0
- venv/Lib/site-packages/setuptools/tests/mod_with_constant.py +1 -0
- venv/Lib/site-packages/setuptools/tests/namespaces.py +90 -0
- venv/Lib/site-packages/setuptools/tests/script-with-bom.py +1 -0
- venv/Lib/site-packages/setuptools/tests/test_archive_util.py +36 -0
- venv/Lib/site-packages/setuptools/tests/test_bdist_deprecations.py +28 -0
- venv/Lib/site-packages/setuptools/tests/test_bdist_egg.py +73 -0
- venv/Lib/site-packages/setuptools/tests/test_bdist_wheel.py +708 -0
- venv/Lib/site-packages/setuptools/tests/test_build.py +33 -0
- venv/Lib/site-packages/setuptools/tests/test_build_clib.py +84 -0
- venv/Lib/site-packages/setuptools/tests/test_build_ext.py +293 -0
- venv/Lib/site-packages/setuptools/tests/test_build_meta.py +959 -0
- venv/Lib/site-packages/setuptools/tests/test_build_py.py +480 -0
- venv/Lib/site-packages/setuptools/tests/test_config_discovery.py +647 -0
- venv/Lib/site-packages/setuptools/tests/test_core_metadata.py +622 -0
- venv/Lib/site-packages/setuptools/tests/test_depends.py +15 -0
- venv/Lib/site-packages/setuptools/tests/test_develop.py +112 -0
- venv/Lib/site-packages/setuptools/tests/test_dist.py +278 -0
- venv/Lib/site-packages/setuptools/tests/test_dist_info.py +147 -0
- venv/Lib/site-packages/setuptools/tests/test_distutils_adoption.py +198 -0
- venv/Lib/site-packages/setuptools/tests/test_editable_install.py +1263 -0
- venv/Lib/site-packages/setuptools/tests/test_egg_info.py +1306 -0
- venv/Lib/site-packages/setuptools/tests/test_extern.py +15 -0
- venv/Lib/site-packages/setuptools/tests/test_find_packages.py +218 -0
- venv/Lib/site-packages/setuptools/tests/test_find_py_modules.py +73 -0
- venv/Lib/site-packages/setuptools/tests/test_glob.py +45 -0
- venv/Lib/site-packages/setuptools/tests/test_install_scripts.py +89 -0
- venv/Lib/site-packages/setuptools/tests/test_logging.py +76 -0
- venv/Lib/site-packages/setuptools/tests/test_manifest.py +622 -0
- venv/Lib/site-packages/setuptools/tests/test_namespaces.py +138 -0
- venv/Lib/site-packages/setuptools/tests/test_scripts.py +12 -0
- venv/Lib/site-packages/setuptools/tests/test_sdist.py +984 -0
- venv/Lib/site-packages/setuptools/tests/test_setopt.py +40 -0
- venv/Lib/site-packages/setuptools/tests/test_setuptools.py +290 -0
- venv/Lib/site-packages/setuptools/tests/test_shutil_wrapper.py +23 -0
- venv/Lib/site-packages/setuptools/tests/test_unicode_utils.py +10 -0
- venv/Lib/site-packages/setuptools/tests/test_virtualenv.py +113 -0
- venv/Lib/site-packages/setuptools/tests/test_warnings.py +106 -0
- venv/Lib/site-packages/setuptools/tests/test_wheel.py +690 -0
- venv/Lib/site-packages/setuptools/tests/test_windows_wrappers.py +258 -0
- venv/Lib/site-packages/setuptools/tests/text.py +4 -0
- venv/Lib/site-packages/setuptools/tests/textwrap.py +6 -0
- venv/Lib/site-packages/setuptools/unicode_utils.py +102 -0
- venv/Lib/site-packages/setuptools/version.py +6 -0
- venv/Lib/site-packages/setuptools/warnings.py +110 -0
- venv/Lib/site-packages/setuptools/wheel.py +261 -0
- venv/Lib/site-packages/setuptools/windows_support.py +30 -0
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/WHEEL +0 -0
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/entry_points.txt +0 -0
- {android_notify-1.60.0.dist-info → android_notify-1.60.2.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""Tests for distutils.cygwinccompiler."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
from distutils import sysconfig
|
|
6
|
+
from distutils.tests import support
|
|
7
|
+
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
from .. import cygwin
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
@pytest.fixture(autouse=True)
|
|
14
|
+
def stuff(request, monkeypatch, distutils_managed_tempdir):
|
|
15
|
+
self = request.instance
|
|
16
|
+
self.python_h = os.path.join(self.mkdtemp(), 'python.h')
|
|
17
|
+
monkeypatch.setattr(sysconfig, 'get_config_h_filename', self._get_config_h_filename)
|
|
18
|
+
monkeypatch.setattr(sys, 'version', sys.version)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TestCygwinCCompiler(support.TempdirManager):
|
|
22
|
+
def _get_config_h_filename(self):
|
|
23
|
+
return self.python_h
|
|
24
|
+
|
|
25
|
+
@pytest.mark.skipif('sys.platform != "cygwin"')
|
|
26
|
+
@pytest.mark.skipif('not os.path.exists("/usr/lib/libbash.dll.a")')
|
|
27
|
+
def test_find_library_file(self):
|
|
28
|
+
from distutils.cygwinccompiler import CygwinCCompiler
|
|
29
|
+
|
|
30
|
+
compiler = CygwinCCompiler()
|
|
31
|
+
link_name = "bash"
|
|
32
|
+
linkable_file = compiler.find_library_file(["/usr/lib"], link_name)
|
|
33
|
+
assert linkable_file is not None
|
|
34
|
+
assert os.path.exists(linkable_file)
|
|
35
|
+
assert linkable_file == f"/usr/lib/lib{link_name:s}.dll.a"
|
|
36
|
+
|
|
37
|
+
@pytest.mark.skipif('sys.platform != "cygwin"')
|
|
38
|
+
def test_runtime_library_dir_option(self):
|
|
39
|
+
from distutils.cygwinccompiler import CygwinCCompiler
|
|
40
|
+
|
|
41
|
+
compiler = CygwinCCompiler()
|
|
42
|
+
assert compiler.runtime_library_dir_option('/foo') == []
|
|
43
|
+
|
|
44
|
+
def test_check_config_h(self):
|
|
45
|
+
# check_config_h looks for "GCC" in sys.version first
|
|
46
|
+
# returns CONFIG_H_OK if found
|
|
47
|
+
sys.version = (
|
|
48
|
+
'2.6.1 (r261:67515, Dec 6 2008, 16:42:21) \n[GCC '
|
|
49
|
+
'4.0.1 (Apple Computer, Inc. build 5370)]'
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
assert cygwin.check_config_h()[0] == cygwin.CONFIG_H_OK
|
|
53
|
+
|
|
54
|
+
# then it tries to see if it can find "__GNUC__" in pyconfig.h
|
|
55
|
+
sys.version = 'something without the *CC word'
|
|
56
|
+
|
|
57
|
+
# if the file doesn't exist it returns CONFIG_H_UNCERTAIN
|
|
58
|
+
assert cygwin.check_config_h()[0] == cygwin.CONFIG_H_UNCERTAIN
|
|
59
|
+
|
|
60
|
+
# if it exists but does not contain __GNUC__, it returns CONFIG_H_NOTOK
|
|
61
|
+
self.write_file(self.python_h, 'xxx')
|
|
62
|
+
assert cygwin.check_config_h()[0] == cygwin.CONFIG_H_NOTOK
|
|
63
|
+
|
|
64
|
+
# and CONFIG_H_OK if __GNUC__ is found
|
|
65
|
+
self.write_file(self.python_h, 'xxx __GNUC__ xxx')
|
|
66
|
+
assert cygwin.check_config_h()[0] == cygwin.CONFIG_H_OK
|
|
67
|
+
|
|
68
|
+
def test_get_msvcr(self):
|
|
69
|
+
assert cygwin.get_msvcr() == []
|
|
70
|
+
|
|
71
|
+
@pytest.mark.skipif('sys.platform != "cygwin"')
|
|
72
|
+
def test_dll_libraries_not_none(self):
|
|
73
|
+
from distutils.cygwinccompiler import CygwinCCompiler
|
|
74
|
+
|
|
75
|
+
compiler = CygwinCCompiler()
|
|
76
|
+
assert compiler.dll_libraries is not None
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
from distutils import sysconfig
|
|
2
|
+
from distutils.errors import DistutilsPlatformError
|
|
3
|
+
from distutils.util import is_mingw, split_quoted
|
|
4
|
+
|
|
5
|
+
import pytest
|
|
6
|
+
|
|
7
|
+
from .. import cygwin, errors
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TestMinGW32Compiler:
|
|
11
|
+
@pytest.mark.skipif(not is_mingw(), reason='not on mingw')
|
|
12
|
+
def test_compiler_type(self):
|
|
13
|
+
compiler = cygwin.MinGW32Compiler()
|
|
14
|
+
assert compiler.compiler_type == 'mingw32'
|
|
15
|
+
|
|
16
|
+
@pytest.mark.skipif(not is_mingw(), reason='not on mingw')
|
|
17
|
+
def test_set_executables(self, monkeypatch):
|
|
18
|
+
monkeypatch.setenv('CC', 'cc')
|
|
19
|
+
monkeypatch.setenv('CXX', 'c++')
|
|
20
|
+
|
|
21
|
+
compiler = cygwin.MinGW32Compiler()
|
|
22
|
+
|
|
23
|
+
assert compiler.compiler == split_quoted('cc -O -Wall')
|
|
24
|
+
assert compiler.compiler_so == split_quoted('cc -shared -O -Wall')
|
|
25
|
+
assert compiler.compiler_cxx == split_quoted('c++ -O -Wall')
|
|
26
|
+
assert compiler.linker_exe == split_quoted('cc')
|
|
27
|
+
assert compiler.linker_so == split_quoted('cc -shared')
|
|
28
|
+
|
|
29
|
+
@pytest.mark.skipif(not is_mingw(), reason='not on mingw')
|
|
30
|
+
def test_runtime_library_dir_option(self):
|
|
31
|
+
compiler = cygwin.MinGW32Compiler()
|
|
32
|
+
with pytest.raises(DistutilsPlatformError):
|
|
33
|
+
compiler.runtime_library_dir_option('/usr/lib')
|
|
34
|
+
|
|
35
|
+
@pytest.mark.skipif(not is_mingw(), reason='not on mingw')
|
|
36
|
+
def test_cygwincc_error(self, monkeypatch):
|
|
37
|
+
monkeypatch.setattr(cygwin, 'is_cygwincc', lambda _: True)
|
|
38
|
+
|
|
39
|
+
with pytest.raises(errors.Error):
|
|
40
|
+
cygwin.MinGW32Compiler()
|
|
41
|
+
|
|
42
|
+
@pytest.mark.skipif('sys.platform == "cygwin"')
|
|
43
|
+
def test_customize_compiler_with_msvc_python(self):
|
|
44
|
+
# In case we have an MSVC Python build, but still want to use
|
|
45
|
+
# MinGW32Compiler, then customize_compiler() shouldn't fail at least.
|
|
46
|
+
# https://github.com/pypa/setuptools/issues/4456
|
|
47
|
+
compiler = cygwin.MinGW32Compiler()
|
|
48
|
+
sysconfig.customize_compiler(compiler)
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
import sysconfig
|
|
4
|
+
import threading
|
|
5
|
+
import unittest.mock as mock
|
|
6
|
+
from distutils.errors import DistutilsPlatformError
|
|
7
|
+
from distutils.tests import support
|
|
8
|
+
from distutils.util import get_platform
|
|
9
|
+
|
|
10
|
+
import pytest
|
|
11
|
+
|
|
12
|
+
from .. import msvc
|
|
13
|
+
|
|
14
|
+
needs_winreg = pytest.mark.skipif('not hasattr(msvc, "winreg")')
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Testmsvccompiler(support.TempdirManager):
|
|
18
|
+
def test_no_compiler(self, monkeypatch):
|
|
19
|
+
# makes sure query_vcvarsall raises
|
|
20
|
+
# a DistutilsPlatformError if the compiler
|
|
21
|
+
# is not found
|
|
22
|
+
def _find_vcvarsall(plat_spec):
|
|
23
|
+
return None, None
|
|
24
|
+
|
|
25
|
+
monkeypatch.setattr(msvc, '_find_vcvarsall', _find_vcvarsall)
|
|
26
|
+
|
|
27
|
+
with pytest.raises(DistutilsPlatformError):
|
|
28
|
+
msvc._get_vc_env(
|
|
29
|
+
'wont find this version',
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
@pytest.mark.skipif(
|
|
33
|
+
not sysconfig.get_platform().startswith("win"),
|
|
34
|
+
reason="Only run test for non-mingw Windows platforms",
|
|
35
|
+
)
|
|
36
|
+
@pytest.mark.parametrize(
|
|
37
|
+
"plat_name, expected",
|
|
38
|
+
[
|
|
39
|
+
("win-arm64", "win-arm64"),
|
|
40
|
+
("win-amd64", "win-amd64"),
|
|
41
|
+
(None, get_platform()),
|
|
42
|
+
],
|
|
43
|
+
)
|
|
44
|
+
def test_cross_platform_compilation_paths(self, monkeypatch, plat_name, expected):
|
|
45
|
+
"""
|
|
46
|
+
Ensure a specified target platform is passed to _get_vcvars_spec.
|
|
47
|
+
"""
|
|
48
|
+
compiler = msvc.Compiler()
|
|
49
|
+
|
|
50
|
+
def _get_vcvars_spec(host_platform, platform):
|
|
51
|
+
assert platform == expected
|
|
52
|
+
|
|
53
|
+
monkeypatch.setattr(msvc, '_get_vcvars_spec', _get_vcvars_spec)
|
|
54
|
+
compiler.initialize(plat_name)
|
|
55
|
+
|
|
56
|
+
@needs_winreg
|
|
57
|
+
def test_get_vc_env_unicode(self):
|
|
58
|
+
test_var = 'ṰḖṤṪ┅ṼẨṜ'
|
|
59
|
+
test_value = '₃⁴₅'
|
|
60
|
+
|
|
61
|
+
# Ensure we don't early exit from _get_vc_env
|
|
62
|
+
old_distutils_use_sdk = os.environ.pop('DISTUTILS_USE_SDK', None)
|
|
63
|
+
os.environ[test_var] = test_value
|
|
64
|
+
try:
|
|
65
|
+
env = msvc._get_vc_env('x86')
|
|
66
|
+
assert test_var.lower() in env
|
|
67
|
+
assert test_value == env[test_var.lower()]
|
|
68
|
+
finally:
|
|
69
|
+
os.environ.pop(test_var)
|
|
70
|
+
if old_distutils_use_sdk:
|
|
71
|
+
os.environ['DISTUTILS_USE_SDK'] = old_distutils_use_sdk
|
|
72
|
+
|
|
73
|
+
@needs_winreg
|
|
74
|
+
@pytest.mark.parametrize('ver', (2015, 2017))
|
|
75
|
+
def test_get_vc(self, ver):
|
|
76
|
+
# This function cannot be mocked, so pass if VC is found
|
|
77
|
+
# and skip otherwise.
|
|
78
|
+
lookup = getattr(msvc, f'_find_vc{ver}')
|
|
79
|
+
expected_version = {2015: 14, 2017: 15}[ver]
|
|
80
|
+
version, path = lookup()
|
|
81
|
+
if not version:
|
|
82
|
+
pytest.skip(f"VS {ver} is not installed")
|
|
83
|
+
assert version >= expected_version
|
|
84
|
+
assert os.path.isdir(path)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
class CheckThread(threading.Thread):
|
|
88
|
+
exc_info = None
|
|
89
|
+
|
|
90
|
+
def run(self):
|
|
91
|
+
try:
|
|
92
|
+
super().run()
|
|
93
|
+
except Exception:
|
|
94
|
+
self.exc_info = sys.exc_info()
|
|
95
|
+
|
|
96
|
+
def __bool__(self):
|
|
97
|
+
return not self.exc_info
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class TestSpawn:
|
|
101
|
+
def test_concurrent_safe(self):
|
|
102
|
+
"""
|
|
103
|
+
Concurrent calls to spawn should have consistent results.
|
|
104
|
+
"""
|
|
105
|
+
compiler = msvc.Compiler()
|
|
106
|
+
compiler._paths = "expected"
|
|
107
|
+
inner_cmd = 'import os; assert os.environ["PATH"] == "expected"'
|
|
108
|
+
command = [sys.executable, '-c', inner_cmd]
|
|
109
|
+
|
|
110
|
+
threads = [
|
|
111
|
+
CheckThread(target=compiler.spawn, args=[command]) for n in range(100)
|
|
112
|
+
]
|
|
113
|
+
for thread in threads:
|
|
114
|
+
thread.start()
|
|
115
|
+
for thread in threads:
|
|
116
|
+
thread.join()
|
|
117
|
+
assert all(threads)
|
|
118
|
+
|
|
119
|
+
def test_concurrent_safe_fallback(self):
|
|
120
|
+
"""
|
|
121
|
+
If CCompiler.spawn has been monkey-patched without support
|
|
122
|
+
for an env, it should still execute.
|
|
123
|
+
"""
|
|
124
|
+
from distutils import ccompiler
|
|
125
|
+
|
|
126
|
+
compiler = msvc.Compiler()
|
|
127
|
+
compiler._paths = "expected"
|
|
128
|
+
|
|
129
|
+
def CCompiler_spawn(self, cmd):
|
|
130
|
+
"A spawn without an env argument."
|
|
131
|
+
assert os.environ["PATH"] == "expected"
|
|
132
|
+
|
|
133
|
+
with mock.patch.object(ccompiler.CCompiler, 'spawn', CCompiler_spawn):
|
|
134
|
+
compiler.spawn(["n/a"])
|
|
135
|
+
|
|
136
|
+
assert os.environ.get("PATH") != "expected"
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"""Tests for distutils.unixccompiler."""
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
import unittest.mock as mock
|
|
6
|
+
from distutils import sysconfig
|
|
7
|
+
from distutils.compat import consolidate_linker_args
|
|
8
|
+
from distutils.errors import DistutilsPlatformError
|
|
9
|
+
from distutils.tests import support
|
|
10
|
+
from distutils.tests.compat.py39 import EnvironmentVarGuard
|
|
11
|
+
from distutils.util import _clear_cached_macosx_ver
|
|
12
|
+
|
|
13
|
+
import pytest
|
|
14
|
+
|
|
15
|
+
from .. import unix
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@pytest.fixture(autouse=True)
|
|
19
|
+
def save_values(monkeypatch):
|
|
20
|
+
monkeypatch.setattr(sys, 'platform', sys.platform)
|
|
21
|
+
monkeypatch.setattr(sysconfig, 'get_config_var', sysconfig.get_config_var)
|
|
22
|
+
monkeypatch.setattr(sysconfig, 'get_config_vars', sysconfig.get_config_vars)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@pytest.fixture(autouse=True)
|
|
26
|
+
def compiler_wrapper(request):
|
|
27
|
+
class CompilerWrapper(unix.Compiler):
|
|
28
|
+
def rpath_foo(self):
|
|
29
|
+
return self.runtime_library_dir_option('/foo')
|
|
30
|
+
|
|
31
|
+
request.instance.cc = CompilerWrapper()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TestUnixCCompiler(support.TempdirManager):
|
|
35
|
+
@pytest.mark.skipif('platform.system == "Windows"')
|
|
36
|
+
def test_runtime_libdir_option(self): # noqa: C901
|
|
37
|
+
# Issue #5900; GitHub Issue #37
|
|
38
|
+
#
|
|
39
|
+
# Ensure RUNPATH is added to extension modules with RPATH if
|
|
40
|
+
# GNU ld is used
|
|
41
|
+
|
|
42
|
+
# darwin
|
|
43
|
+
sys.platform = 'darwin'
|
|
44
|
+
darwin_ver_var = 'MACOSX_DEPLOYMENT_TARGET'
|
|
45
|
+
darwin_rpath_flag = '-Wl,-rpath,/foo'
|
|
46
|
+
darwin_lib_flag = '-L/foo'
|
|
47
|
+
|
|
48
|
+
# (macOS version from syscfg, macOS version from env var) -> flag
|
|
49
|
+
# Version value of None generates two tests: as None and as empty string
|
|
50
|
+
# Expected flag value of None means an mismatch exception is expected
|
|
51
|
+
darwin_test_cases = [
|
|
52
|
+
((None, None), darwin_lib_flag),
|
|
53
|
+
((None, '11'), darwin_rpath_flag),
|
|
54
|
+
(('10', None), darwin_lib_flag),
|
|
55
|
+
(('10.3', None), darwin_lib_flag),
|
|
56
|
+
(('10.3.1', None), darwin_lib_flag),
|
|
57
|
+
(('10.5', None), darwin_rpath_flag),
|
|
58
|
+
(('10.5.1', None), darwin_rpath_flag),
|
|
59
|
+
(('10.3', '10.3'), darwin_lib_flag),
|
|
60
|
+
(('10.3', '10.5'), darwin_rpath_flag),
|
|
61
|
+
(('10.5', '10.3'), darwin_lib_flag),
|
|
62
|
+
(('10.5', '11'), darwin_rpath_flag),
|
|
63
|
+
(('10.4', '10'), None),
|
|
64
|
+
]
|
|
65
|
+
|
|
66
|
+
def make_darwin_gcv(syscfg_macosx_ver):
|
|
67
|
+
def gcv(var):
|
|
68
|
+
if var == darwin_ver_var:
|
|
69
|
+
return syscfg_macosx_ver
|
|
70
|
+
return "xxx"
|
|
71
|
+
|
|
72
|
+
return gcv
|
|
73
|
+
|
|
74
|
+
def do_darwin_test(syscfg_macosx_ver, env_macosx_ver, expected_flag):
|
|
75
|
+
env = os.environ
|
|
76
|
+
msg = f"macOS version = (sysconfig={syscfg_macosx_ver!r}, env={env_macosx_ver!r})"
|
|
77
|
+
|
|
78
|
+
# Save
|
|
79
|
+
old_gcv = sysconfig.get_config_var
|
|
80
|
+
old_env_macosx_ver = env.get(darwin_ver_var)
|
|
81
|
+
|
|
82
|
+
# Setup environment
|
|
83
|
+
_clear_cached_macosx_ver()
|
|
84
|
+
sysconfig.get_config_var = make_darwin_gcv(syscfg_macosx_ver)
|
|
85
|
+
if env_macosx_ver is not None:
|
|
86
|
+
env[darwin_ver_var] = env_macosx_ver
|
|
87
|
+
elif darwin_ver_var in env:
|
|
88
|
+
env.pop(darwin_ver_var)
|
|
89
|
+
|
|
90
|
+
# Run the test
|
|
91
|
+
if expected_flag is not None:
|
|
92
|
+
assert self.cc.rpath_foo() == expected_flag, msg
|
|
93
|
+
else:
|
|
94
|
+
with pytest.raises(
|
|
95
|
+
DistutilsPlatformError, match=darwin_ver_var + r' mismatch'
|
|
96
|
+
):
|
|
97
|
+
self.cc.rpath_foo()
|
|
98
|
+
|
|
99
|
+
# Restore
|
|
100
|
+
if old_env_macosx_ver is not None:
|
|
101
|
+
env[darwin_ver_var] = old_env_macosx_ver
|
|
102
|
+
elif darwin_ver_var in env:
|
|
103
|
+
env.pop(darwin_ver_var)
|
|
104
|
+
sysconfig.get_config_var = old_gcv
|
|
105
|
+
_clear_cached_macosx_ver()
|
|
106
|
+
|
|
107
|
+
for macosx_vers, expected_flag in darwin_test_cases:
|
|
108
|
+
syscfg_macosx_ver, env_macosx_ver = macosx_vers
|
|
109
|
+
do_darwin_test(syscfg_macosx_ver, env_macosx_ver, expected_flag)
|
|
110
|
+
# Bonus test cases with None interpreted as empty string
|
|
111
|
+
if syscfg_macosx_ver is None:
|
|
112
|
+
do_darwin_test("", env_macosx_ver, expected_flag)
|
|
113
|
+
if env_macosx_ver is None:
|
|
114
|
+
do_darwin_test(syscfg_macosx_ver, "", expected_flag)
|
|
115
|
+
if syscfg_macosx_ver is None and env_macosx_ver is None:
|
|
116
|
+
do_darwin_test("", "", expected_flag)
|
|
117
|
+
|
|
118
|
+
old_gcv = sysconfig.get_config_var
|
|
119
|
+
|
|
120
|
+
# hp-ux
|
|
121
|
+
sys.platform = 'hp-ux'
|
|
122
|
+
|
|
123
|
+
def gcv(v):
|
|
124
|
+
return 'xxx'
|
|
125
|
+
|
|
126
|
+
sysconfig.get_config_var = gcv
|
|
127
|
+
assert self.cc.rpath_foo() == ['+s', '-L/foo']
|
|
128
|
+
|
|
129
|
+
def gcv(v):
|
|
130
|
+
return 'gcc'
|
|
131
|
+
|
|
132
|
+
sysconfig.get_config_var = gcv
|
|
133
|
+
assert self.cc.rpath_foo() == ['-Wl,+s', '-L/foo']
|
|
134
|
+
|
|
135
|
+
def gcv(v):
|
|
136
|
+
return 'g++'
|
|
137
|
+
|
|
138
|
+
sysconfig.get_config_var = gcv
|
|
139
|
+
assert self.cc.rpath_foo() == ['-Wl,+s', '-L/foo']
|
|
140
|
+
|
|
141
|
+
sysconfig.get_config_var = old_gcv
|
|
142
|
+
|
|
143
|
+
# GCC GNULD
|
|
144
|
+
sys.platform = 'bar'
|
|
145
|
+
|
|
146
|
+
def gcv(v):
|
|
147
|
+
if v == 'CC':
|
|
148
|
+
return 'gcc'
|
|
149
|
+
elif v == 'GNULD':
|
|
150
|
+
return 'yes'
|
|
151
|
+
|
|
152
|
+
sysconfig.get_config_var = gcv
|
|
153
|
+
assert self.cc.rpath_foo() == consolidate_linker_args([
|
|
154
|
+
'-Wl,--enable-new-dtags',
|
|
155
|
+
'-Wl,-rpath,/foo',
|
|
156
|
+
])
|
|
157
|
+
|
|
158
|
+
def gcv(v):
|
|
159
|
+
if v == 'CC':
|
|
160
|
+
return 'gcc -pthread -B /bar'
|
|
161
|
+
elif v == 'GNULD':
|
|
162
|
+
return 'yes'
|
|
163
|
+
|
|
164
|
+
sysconfig.get_config_var = gcv
|
|
165
|
+
assert self.cc.rpath_foo() == consolidate_linker_args([
|
|
166
|
+
'-Wl,--enable-new-dtags',
|
|
167
|
+
'-Wl,-rpath,/foo',
|
|
168
|
+
])
|
|
169
|
+
|
|
170
|
+
# GCC non-GNULD
|
|
171
|
+
sys.platform = 'bar'
|
|
172
|
+
|
|
173
|
+
def gcv(v):
|
|
174
|
+
if v == 'CC':
|
|
175
|
+
return 'gcc'
|
|
176
|
+
elif v == 'GNULD':
|
|
177
|
+
return 'no'
|
|
178
|
+
|
|
179
|
+
sysconfig.get_config_var = gcv
|
|
180
|
+
assert self.cc.rpath_foo() == '-Wl,-R/foo'
|
|
181
|
+
|
|
182
|
+
# GCC GNULD with fully qualified configuration prefix
|
|
183
|
+
# see #7617
|
|
184
|
+
sys.platform = 'bar'
|
|
185
|
+
|
|
186
|
+
def gcv(v):
|
|
187
|
+
if v == 'CC':
|
|
188
|
+
return 'x86_64-pc-linux-gnu-gcc-4.4.2'
|
|
189
|
+
elif v == 'GNULD':
|
|
190
|
+
return 'yes'
|
|
191
|
+
|
|
192
|
+
sysconfig.get_config_var = gcv
|
|
193
|
+
assert self.cc.rpath_foo() == consolidate_linker_args([
|
|
194
|
+
'-Wl,--enable-new-dtags',
|
|
195
|
+
'-Wl,-rpath,/foo',
|
|
196
|
+
])
|
|
197
|
+
|
|
198
|
+
# non-GCC GNULD
|
|
199
|
+
sys.platform = 'bar'
|
|
200
|
+
|
|
201
|
+
def gcv(v):
|
|
202
|
+
if v == 'CC':
|
|
203
|
+
return 'cc'
|
|
204
|
+
elif v == 'GNULD':
|
|
205
|
+
return 'yes'
|
|
206
|
+
|
|
207
|
+
sysconfig.get_config_var = gcv
|
|
208
|
+
assert self.cc.rpath_foo() == consolidate_linker_args([
|
|
209
|
+
'-Wl,--enable-new-dtags',
|
|
210
|
+
'-Wl,-rpath,/foo',
|
|
211
|
+
])
|
|
212
|
+
|
|
213
|
+
# non-GCC non-GNULD
|
|
214
|
+
sys.platform = 'bar'
|
|
215
|
+
|
|
216
|
+
def gcv(v):
|
|
217
|
+
if v == 'CC':
|
|
218
|
+
return 'cc'
|
|
219
|
+
elif v == 'GNULD':
|
|
220
|
+
return 'no'
|
|
221
|
+
|
|
222
|
+
sysconfig.get_config_var = gcv
|
|
223
|
+
assert self.cc.rpath_foo() == '-Wl,-R/foo'
|
|
224
|
+
|
|
225
|
+
@pytest.mark.skipif('platform.system == "Windows"')
|
|
226
|
+
def test_cc_overrides_ldshared(self):
|
|
227
|
+
# Issue #18080:
|
|
228
|
+
# ensure that setting CC env variable also changes default linker
|
|
229
|
+
def gcv(v):
|
|
230
|
+
if v == 'LDSHARED':
|
|
231
|
+
return 'gcc-4.2 -bundle -undefined dynamic_lookup '
|
|
232
|
+
return 'gcc-4.2'
|
|
233
|
+
|
|
234
|
+
def gcvs(*args, _orig=sysconfig.get_config_vars):
|
|
235
|
+
if args:
|
|
236
|
+
return list(map(sysconfig.get_config_var, args))
|
|
237
|
+
return _orig()
|
|
238
|
+
|
|
239
|
+
sysconfig.get_config_var = gcv
|
|
240
|
+
sysconfig.get_config_vars = gcvs
|
|
241
|
+
with EnvironmentVarGuard() as env:
|
|
242
|
+
env['CC'] = 'my_cc'
|
|
243
|
+
del env['LDSHARED']
|
|
244
|
+
sysconfig.customize_compiler(self.cc)
|
|
245
|
+
assert self.cc.linker_so[0] == 'my_cc'
|
|
246
|
+
|
|
247
|
+
@pytest.mark.skipif('platform.system == "Windows"')
|
|
248
|
+
def test_cxx_commands_used_are_correct(self):
|
|
249
|
+
def gcv(v):
|
|
250
|
+
if v == 'LDSHARED':
|
|
251
|
+
return 'ccache gcc-4.2 -bundle -undefined dynamic_lookup'
|
|
252
|
+
elif v == 'LDCXXSHARED':
|
|
253
|
+
return 'ccache g++-4.2 -bundle -undefined dynamic_lookup'
|
|
254
|
+
elif v == 'CXX':
|
|
255
|
+
return 'ccache g++-4.2'
|
|
256
|
+
elif v == 'CC':
|
|
257
|
+
return 'ccache gcc-4.2'
|
|
258
|
+
return ''
|
|
259
|
+
|
|
260
|
+
def gcvs(*args, _orig=sysconfig.get_config_vars):
|
|
261
|
+
if args:
|
|
262
|
+
return list(map(sysconfig.get_config_var, args))
|
|
263
|
+
return _orig() # pragma: no cover
|
|
264
|
+
|
|
265
|
+
sysconfig.get_config_var = gcv
|
|
266
|
+
sysconfig.get_config_vars = gcvs
|
|
267
|
+
with (
|
|
268
|
+
mock.patch.object(self.cc, 'spawn', return_value=None) as mock_spawn,
|
|
269
|
+
mock.patch.object(self.cc, '_need_link', return_value=True),
|
|
270
|
+
mock.patch.object(self.cc, 'mkpath', return_value=None),
|
|
271
|
+
EnvironmentVarGuard() as env,
|
|
272
|
+
):
|
|
273
|
+
# override environment overrides in case they're specified by CI
|
|
274
|
+
del env['CXX']
|
|
275
|
+
del env['LDCXXSHARED']
|
|
276
|
+
|
|
277
|
+
sysconfig.customize_compiler(self.cc)
|
|
278
|
+
assert self.cc.linker_so_cxx[0:2] == ['ccache', 'g++-4.2']
|
|
279
|
+
assert self.cc.linker_exe_cxx[0:2] == ['ccache', 'g++-4.2']
|
|
280
|
+
self.cc.link(None, [], 'a.out', target_lang='c++')
|
|
281
|
+
call_args = mock_spawn.call_args[0][0]
|
|
282
|
+
expected = ['ccache', 'g++-4.2', '-bundle', '-undefined', 'dynamic_lookup']
|
|
283
|
+
assert call_args[:5] == expected
|
|
284
|
+
|
|
285
|
+
self.cc.link_executable([], 'a.out', target_lang='c++')
|
|
286
|
+
call_args = mock_spawn.call_args[0][0]
|
|
287
|
+
expected = ['ccache', 'g++-4.2', '-o', self.cc.executable_filename('a.out')]
|
|
288
|
+
assert call_args[:4] == expected
|
|
289
|
+
|
|
290
|
+
env['LDCXXSHARED'] = 'wrapper g++-4.2 -bundle -undefined dynamic_lookup'
|
|
291
|
+
env['CXX'] = 'wrapper g++-4.2'
|
|
292
|
+
sysconfig.customize_compiler(self.cc)
|
|
293
|
+
assert self.cc.linker_so_cxx[0:2] == ['wrapper', 'g++-4.2']
|
|
294
|
+
assert self.cc.linker_exe_cxx[0:2] == ['wrapper', 'g++-4.2']
|
|
295
|
+
self.cc.link(None, [], 'a.out', target_lang='c++')
|
|
296
|
+
call_args = mock_spawn.call_args[0][0]
|
|
297
|
+
expected = ['wrapper', 'g++-4.2', '-bundle', '-undefined', 'dynamic_lookup']
|
|
298
|
+
assert call_args[:5] == expected
|
|
299
|
+
|
|
300
|
+
self.cc.link_executable([], 'a.out', target_lang='c++')
|
|
301
|
+
call_args = mock_spawn.call_args[0][0]
|
|
302
|
+
expected = [
|
|
303
|
+
'wrapper',
|
|
304
|
+
'g++-4.2',
|
|
305
|
+
'-o',
|
|
306
|
+
self.cc.executable_filename('a.out'),
|
|
307
|
+
]
|
|
308
|
+
assert call_args[:4] == expected
|
|
309
|
+
|
|
310
|
+
@pytest.mark.skipif('platform.system == "Windows"')
|
|
311
|
+
@pytest.mark.usefixtures('disable_macos_customization')
|
|
312
|
+
def test_cc_overrides_ldshared_for_cxx_correctly(self):
|
|
313
|
+
"""
|
|
314
|
+
Ensure that setting CC env variable also changes default linker
|
|
315
|
+
correctly when building C++ extensions.
|
|
316
|
+
|
|
317
|
+
pypa/distutils#126
|
|
318
|
+
"""
|
|
319
|
+
|
|
320
|
+
def gcv(v):
|
|
321
|
+
if v == 'LDSHARED':
|
|
322
|
+
return 'gcc-4.2 -bundle -undefined dynamic_lookup '
|
|
323
|
+
elif v == 'LDCXXSHARED':
|
|
324
|
+
return 'g++-4.2 -bundle -undefined dynamic_lookup '
|
|
325
|
+
elif v == 'CXX':
|
|
326
|
+
return 'g++-4.2'
|
|
327
|
+
elif v == 'CC':
|
|
328
|
+
return 'gcc-4.2'
|
|
329
|
+
return ''
|
|
330
|
+
|
|
331
|
+
def gcvs(*args, _orig=sysconfig.get_config_vars):
|
|
332
|
+
if args:
|
|
333
|
+
return list(map(sysconfig.get_config_var, args))
|
|
334
|
+
return _orig()
|
|
335
|
+
|
|
336
|
+
sysconfig.get_config_var = gcv
|
|
337
|
+
sysconfig.get_config_vars = gcvs
|
|
338
|
+
with (
|
|
339
|
+
mock.patch.object(self.cc, 'spawn', return_value=None) as mock_spawn,
|
|
340
|
+
mock.patch.object(self.cc, '_need_link', return_value=True),
|
|
341
|
+
mock.patch.object(self.cc, 'mkpath', return_value=None),
|
|
342
|
+
EnvironmentVarGuard() as env,
|
|
343
|
+
):
|
|
344
|
+
env['CC'] = 'ccache my_cc'
|
|
345
|
+
env['CXX'] = 'my_cxx'
|
|
346
|
+
del env['LDSHARED']
|
|
347
|
+
sysconfig.customize_compiler(self.cc)
|
|
348
|
+
assert self.cc.linker_so[0:2] == ['ccache', 'my_cc']
|
|
349
|
+
self.cc.link(None, [], 'a.out', target_lang='c++')
|
|
350
|
+
call_args = mock_spawn.call_args[0][0]
|
|
351
|
+
expected = ['my_cxx', '-bundle', '-undefined', 'dynamic_lookup']
|
|
352
|
+
assert call_args[:4] == expected
|
|
353
|
+
|
|
354
|
+
@pytest.mark.skipif('platform.system == "Windows"')
|
|
355
|
+
def test_explicit_ldshared(self):
|
|
356
|
+
# Issue #18080:
|
|
357
|
+
# ensure that setting CC env variable does not change
|
|
358
|
+
# explicit LDSHARED setting for linker
|
|
359
|
+
def gcv(v):
|
|
360
|
+
if v == 'LDSHARED':
|
|
361
|
+
return 'gcc-4.2 -bundle -undefined dynamic_lookup '
|
|
362
|
+
return 'gcc-4.2'
|
|
363
|
+
|
|
364
|
+
def gcvs(*args, _orig=sysconfig.get_config_vars):
|
|
365
|
+
if args:
|
|
366
|
+
return list(map(sysconfig.get_config_var, args))
|
|
367
|
+
return _orig()
|
|
368
|
+
|
|
369
|
+
sysconfig.get_config_var = gcv
|
|
370
|
+
sysconfig.get_config_vars = gcvs
|
|
371
|
+
with EnvironmentVarGuard() as env:
|
|
372
|
+
env['CC'] = 'my_cc'
|
|
373
|
+
env['LDSHARED'] = 'my_ld -bundle -dynamic'
|
|
374
|
+
sysconfig.customize_compiler(self.cc)
|
|
375
|
+
assert self.cc.linker_so[0] == 'my_ld'
|
|
376
|
+
|
|
377
|
+
def test_has_function(self):
|
|
378
|
+
# Issue https://github.com/pypa/distutils/issues/64:
|
|
379
|
+
# ensure that setting output_dir does not raise
|
|
380
|
+
# FileNotFoundError: [Errno 2] No such file or directory: 'a.out'
|
|
381
|
+
self.cc.output_dir = 'scratch'
|
|
382
|
+
os.chdir(self.mkdtemp())
|
|
383
|
+
self.cc.has_function('abort')
|
|
384
|
+
|
|
385
|
+
def test_find_library_file(self, monkeypatch):
|
|
386
|
+
compiler = unix.Compiler()
|
|
387
|
+
compiler._library_root = lambda dir: dir
|
|
388
|
+
monkeypatch.setattr(os.path, 'exists', lambda d: 'existing' in d)
|
|
389
|
+
|
|
390
|
+
libname = 'libabc.dylib' if sys.platform != 'cygwin' else 'cygabc.dll'
|
|
391
|
+
dirs = ('/foo/bar/missing', '/foo/bar/existing')
|
|
392
|
+
assert (
|
|
393
|
+
compiler.find_library_file(dirs, 'abc').replace('\\', '/')
|
|
394
|
+
== f'/foo/bar/existing/{libname}'
|
|
395
|
+
)
|
|
396
|
+
assert (
|
|
397
|
+
compiler.find_library_file(reversed(dirs), 'abc').replace('\\', '/')
|
|
398
|
+
== f'/foo/bar/existing/{libname}'
|
|
399
|
+
)
|
|
400
|
+
|
|
401
|
+
monkeypatch.setattr(
|
|
402
|
+
os.path,
|
|
403
|
+
'exists',
|
|
404
|
+
lambda d: 'existing' in d and '.a' in d and '.dll.a' not in d,
|
|
405
|
+
)
|
|
406
|
+
assert (
|
|
407
|
+
compiler.find_library_file(dirs, 'abc').replace('\\', '/')
|
|
408
|
+
== '/foo/bar/existing/libabc.a'
|
|
409
|
+
)
|
|
410
|
+
assert (
|
|
411
|
+
compiler.find_library_file(reversed(dirs), 'abc').replace('\\', '/')
|
|
412
|
+
== '/foo/bar/existing/libabc.a'
|
|
413
|
+
)
|