Toshaan Bharvani
1 year ago
commit
d9631bb19c
10 changed files with 3449 additions and 0 deletions
@ -0,0 +1,30 @@ |
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||||
|
From: David Malcolm <dmalcolm@redhat.com> |
||||||
|
Date: Wed, 13 Jan 2010 21:25:18 +0000 |
||||||
|
Subject: [PATCH] 00001: Fixup distutils/unixccompiler.py to remove standard |
||||||
|
library path from rpath Was Patch0 in ivazquez' python3000 specfile |
||||||
|
|
||||||
|
--- |
||||||
|
Lib/distutils/unixccompiler.py | 9 +++++++++ |
||||||
|
1 file changed, 9 insertions(+) |
||||||
|
|
||||||
|
diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py |
||||||
|
index d00c48981e..0283a28c19 100644 |
||||||
|
--- a/Lib/distutils/unixccompiler.py |
||||||
|
+++ b/Lib/distutils/unixccompiler.py |
||||||
|
@@ -82,6 +82,15 @@ class UnixCCompiler(CCompiler): |
||||||
|
if sys.platform == "cygwin": |
||||||
|
exe_extension = ".exe" |
||||||
|
|
||||||
|
+ def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs): |
||||||
|
+ """Remove standard library path from rpath""" |
||||||
|
+ libraries, library_dirs, runtime_library_dirs = super()._fix_lib_args( |
||||||
|
+ libraries, library_dirs, runtime_library_dirs) |
||||||
|
+ libdir = sysconfig.get_config_var('LIBDIR') |
||||||
|
+ if runtime_library_dirs and (libdir in runtime_library_dirs): |
||||||
|
+ runtime_library_dirs.remove(libdir) |
||||||
|
+ return libraries, library_dirs, runtime_library_dirs |
||||||
|
+ |
||||||
|
def preprocess(self, source, output_file=None, macros=None, |
||||||
|
include_dirs=None, extra_preargs=None, extra_postargs=None): |
||||||
|
fixed_args = self._fix_compile_args(None, macros, include_dirs) |
@ -0,0 +1,204 @@ |
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||||
|
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> |
||||||
|
Date: Mon, 15 Feb 2021 12:19:27 +0100 |
||||||
|
Subject: [PATCH] 00251: Change user install location |
||||||
|
MIME-Version: 1.0 |
||||||
|
Content-Type: text/plain; charset=UTF-8 |
||||||
|
Content-Transfer-Encoding: 8bit |
||||||
|
|
||||||
|
Set values of base and platbase in sysconfig from /usr |
||||||
|
to /usr/local when RPM build is not detected |
||||||
|
to make pip and similar tools install into separate location. |
||||||
|
|
||||||
|
Set values of prefix and exec_prefix in distutils install command |
||||||
|
to /usr/local if executable is /usr/bin/python* and RPM build |
||||||
|
is not detected to make distutils and pypa/distutils install into separate location. |
||||||
|
|
||||||
|
Fedora Change: https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||||
|
Downstream only. |
||||||
|
|
||||||
|
We've tried to rework in Fedora 36/Python 3.10 to follow https://bugs.python.org/issue43976 |
||||||
|
but we have identified serious problems with that approach, |
||||||
|
see https://bugzilla.redhat.com/2026979 or https://bugzilla.redhat.com/2097183 |
||||||
|
|
||||||
|
pypa/distutils integration: https://github.com/pypa/distutils/pull/70 |
||||||
|
|
||||||
|
Co-authored-by: Petr Viktorin <encukou@gmail.com> |
||||||
|
Co-authored-by: Miro Hrončok <miro@hroncok.cz> |
||||||
|
Co-authored-by: Michal Cyprian <m.cyprian@gmail.com> |
||||||
|
Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com> |
||||||
|
--- |
||||||
|
Lib/distutils/command/install.py | 8 ++++-- |
||||||
|
Lib/site.py | 9 +++++- |
||||||
|
Lib/sysconfig.py | 49 +++++++++++++++++++++++++++++++- |
||||||
|
Lib/test/test_sysconfig.py | 17 +++++++++-- |
||||||
|
4 files changed, 77 insertions(+), 6 deletions(-) |
||||||
|
|
||||||
|
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py |
||||||
|
index 01d5331a63..79f70f0de4 100644 |
||||||
|
--- a/Lib/distutils/command/install.py |
||||||
|
+++ b/Lib/distutils/command/install.py |
||||||
|
@@ -159,6 +159,8 @@ class install(Command): |
||||||
|
|
||||||
|
negative_opt = {'no-compile' : 'compile'} |
||||||
|
|
||||||
|
+ # Allow Fedora to add components to the prefix |
||||||
|
+ _prefix_addition = getattr(sysconfig, '_prefix_addition', '') |
||||||
|
|
||||||
|
def initialize_options(self): |
||||||
|
"""Initializes options.""" |
||||||
|
@@ -441,8 +443,10 @@ def finalize_unix(self): |
||||||
|
raise DistutilsOptionError( |
||||||
|
"must not supply exec-prefix without prefix") |
||||||
|
|
||||||
|
- self.prefix = os.path.normpath(sys.prefix) |
||||||
|
- self.exec_prefix = os.path.normpath(sys.exec_prefix) |
||||||
|
+ self.prefix = ( |
||||||
|
+ os.path.normpath(sys.prefix) + self._prefix_addition) |
||||||
|
+ self.exec_prefix = ( |
||||||
|
+ os.path.normpath(sys.exec_prefix) + self._prefix_addition) |
||||||
|
|
||||||
|
else: |
||||||
|
if self.exec_prefix is None: |
||||||
|
diff --git a/Lib/site.py b/Lib/site.py |
||||||
|
index 69670d9d7f..104cb93899 100644 |
||||||
|
--- a/Lib/site.py |
||||||
|
+++ b/Lib/site.py |
||||||
|
@@ -377,8 +377,15 @@ def getsitepackages(prefixes=None): |
||||||
|
return sitepackages |
||||||
|
|
||||||
|
def addsitepackages(known_paths, prefixes=None): |
||||||
|
- """Add site-packages to sys.path""" |
||||||
|
+ """Add site-packages to sys.path |
||||||
|
+ |
||||||
|
+ '/usr/local' is included in PREFIXES if RPM build is not detected |
||||||
|
+ to make packages installed into this location visible. |
||||||
|
+ |
||||||
|
+ """ |
||||||
|
_trace("Processing global site-packages") |
||||||
|
+ if ENABLE_USER_SITE and 'RPM_BUILD_ROOT' not in os.environ: |
||||||
|
+ PREFIXES.insert(0, "/usr/local") |
||||||
|
for sitedir in getsitepackages(prefixes): |
||||||
|
if os.path.isdir(sitedir): |
||||||
|
addsitedir(sitedir, known_paths) |
||||||
|
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py |
||||||
|
index ebe3711827..55af57b335 100644 |
||||||
|
--- a/Lib/sysconfig.py |
||||||
|
+++ b/Lib/sysconfig.py |
||||||
|
@@ -103,6 +103,11 @@ |
||||||
|
else: |
||||||
|
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] |
||||||
|
|
||||||
|
+# For a brief period of time in the Fedora 36 life cycle, |
||||||
|
+# this installation scheme existed and was documented in the release notes. |
||||||
|
+# For backwards compatibility, we keep it here (at least on 3.10 and 3.11). |
||||||
|
+_INSTALL_SCHEMES['rpm_prefix'] = _INSTALL_SCHEMES['posix_prefix'] |
||||||
|
+ |
||||||
|
|
||||||
|
# NOTE: site.py has copy of this function. |
||||||
|
# Sync it when modify this function. |
||||||
|
@@ -162,6 +167,19 @@ def joinuser(*args): |
||||||
|
}, |
||||||
|
} |
||||||
|
|
||||||
|
+# This is used by distutils.command.install in the stdlib |
||||||
|
+# as well as pypa/distutils (e.g. bundled in setuptools). |
||||||
|
+# The self.prefix value is set to sys.prefix + /local/ |
||||||
|
+# if neither RPM build nor virtual environment is |
||||||
|
+# detected to make distutils install packages |
||||||
|
+# into the separate location. |
||||||
|
+# https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||||
|
+if (not (hasattr(sys, 'real_prefix') or |
||||||
|
+ sys.prefix != sys.base_prefix) and |
||||||
|
+ 'RPM_BUILD_ROOT' not in os.environ): |
||||||
|
+ _prefix_addition = '/local' |
||||||
|
+ |
||||||
|
+ |
||||||
|
_SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', |
||||||
|
'scripts', 'data') |
||||||
|
|
||||||
|
@@ -258,11 +276,40 @@ def _extend_dict(target_dict, other_dict): |
||||||
|
target_dict[key] = value |
||||||
|
|
||||||
|
|
||||||
|
+_CONFIG_VARS_LOCAL = None |
||||||
|
+ |
||||||
|
+ |
||||||
|
+def _config_vars_local(): |
||||||
|
+ # This function returns the config vars with prefixes amended to /usr/local |
||||||
|
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||||
|
+ global _CONFIG_VARS_LOCAL |
||||||
|
+ if _CONFIG_VARS_LOCAL is None: |
||||||
|
+ _CONFIG_VARS_LOCAL = dict(get_config_vars()) |
||||||
|
+ _CONFIG_VARS_LOCAL['base'] = '/usr/local' |
||||||
|
+ _CONFIG_VARS_LOCAL['platbase'] = '/usr/local' |
||||||
|
+ return _CONFIG_VARS_LOCAL |
||||||
|
+ |
||||||
|
+ |
||||||
|
def _expand_vars(scheme, vars): |
||||||
|
res = {} |
||||||
|
if vars is None: |
||||||
|
vars = {} |
||||||
|
- _extend_dict(vars, get_config_vars()) |
||||||
|
+ |
||||||
|
+ # when we are not in a virtual environment or an RPM build |
||||||
|
+ # we change '/usr' to '/usr/local' |
||||||
|
+ # to avoid surprises, we explicitly check for the /usr/ prefix |
||||||
|
+ # Python virtual environments have different prefixes |
||||||
|
+ # we only do this for posix_prefix, not to mangle the venv scheme |
||||||
|
+ # posix_prefix is used by sudo pip install |
||||||
|
+ # we only change the defaults here, so explicit --prefix will take precedence |
||||||
|
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||||
|
+ if (scheme == 'posix_prefix' and |
||||||
|
+ _PREFIX == '/usr' and |
||||||
|
+ 'RPM_BUILD_ROOT' not in os.environ): |
||||||
|
+ _extend_dict(vars, _config_vars_local()) |
||||||
|
+ else: |
||||||
|
+ _extend_dict(vars, get_config_vars()) |
||||||
|
+ |
||||||
|
if os.name == 'nt': |
||||||
|
# On Windows we want to substitute 'lib' for schemes rather |
||||||
|
# than the native value (without modifying vars, in case it |
||||||
|
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py |
||||||
|
index d96371d242..72b028435f 100644 |
||||||
|
--- a/Lib/test/test_sysconfig.py |
||||||
|
+++ b/Lib/test/test_sysconfig.py |
||||||
|
@@ -111,8 +111,19 @@ def test_get_path(self): |
||||||
|
for scheme in _INSTALL_SCHEMES: |
||||||
|
for name in _INSTALL_SCHEMES[scheme]: |
||||||
|
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars) |
||||||
|
+ tested = get_path(name, scheme) |
||||||
|
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||||
|
+ if tested.startswith('/usr/local'): |
||||||
|
+ # /usr/local should only be used in posix_prefix |
||||||
|
+ self.assertEqual(scheme, 'posix_prefix') |
||||||
|
+ # Fedora CI runs tests for venv and virtualenv that check for other prefixes |
||||||
|
+ self.assertEqual(sys.prefix, '/usr') |
||||||
|
+ # When building the RPM of Python, %check runs this with RPM_BUILD_ROOT set |
||||||
|
+ # Fedora CI runs this with RPM_BUILD_ROOT unset |
||||||
|
+ self.assertNotIn('RPM_BUILD_ROOT', os.environ) |
||||||
|
+ tested = tested.replace('/usr/local', '/usr') |
||||||
|
self.assertEqual( |
||||||
|
- os.path.normpath(get_path(name, scheme)), |
||||||
|
+ os.path.normpath(tested), |
||||||
|
os.path.normpath(expected), |
||||||
|
) |
||||||
|
|
||||||
|
@@ -336,7 +347,7 @@ def test_get_config_h_filename(self): |
||||||
|
self.assertTrue(os.path.isfile(config_h), config_h) |
||||||
|
|
||||||
|
def test_get_scheme_names(self): |
||||||
|
- wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv'] |
||||||
|
+ wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv', 'rpm_prefix'] |
||||||
|
if HAS_USER_BASE: |
||||||
|
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user']) |
||||||
|
self.assertEqual(get_scheme_names(), tuple(sorted(wanted))) |
||||||
|
@@ -348,6 +359,8 @@ def test_symlink(self): # Issue 7880 |
||||||
|
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())" |
||||||
|
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd)) |
||||||
|
|
||||||
|
+ @unittest.skipIf('RPM_BUILD_ROOT' not in os.environ, |
||||||
|
+ "Test doesn't expect Fedora's paths") |
||||||
|
def test_user_similar(self): |
||||||
|
# Issue #8759: make sure the posix scheme for the users |
||||||
|
# is similar to the global posix_prefix one |
@ -0,0 +1,54 @@ |
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||||
|
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> |
||||||
|
Date: Thu, 11 Jul 2019 13:44:13 +0200 |
||||||
|
Subject: [PATCH] 00328: Restore pyc to TIMESTAMP invalidation mode as default |
||||||
|
in rpmbuild |
||||||
|
|
||||||
|
Since Fedora 31, the $SOURCE_DATE_EPOCH is set in rpmbuild to the latest |
||||||
|
%changelog date. This makes Python default to the CHECKED_HASH pyc |
||||||
|
invalidation mode, bringing more reproducible builds traded for an import |
||||||
|
performance decrease. To avoid that, we don't default to CHECKED_HASH |
||||||
|
when $RPM_BUILD_ROOT is set (i.e. when we are building RPM packages). |
||||||
|
|
||||||
|
See https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comment-27426 |
||||||
|
Downstream only: only used when building RPM packages |
||||||
|
Ideally, we should talk to upstream and explain why we don't want this |
||||||
|
--- |
||||||
|
Lib/py_compile.py | 3 ++- |
||||||
|
Lib/test/test_py_compile.py | 2 ++ |
||||||
|
2 files changed, 4 insertions(+), 1 deletion(-) |
||||||
|
|
||||||
|
diff --git a/Lib/py_compile.py b/Lib/py_compile.py |
||||||
|
index 388614e51b..db52725016 100644 |
||||||
|
--- a/Lib/py_compile.py |
||||||
|
+++ b/Lib/py_compile.py |
||||||
|
@@ -70,7 +70,8 @@ class PycInvalidationMode(enum.Enum): |
||||||
|
|
||||||
|
|
||||||
|
def _get_default_invalidation_mode(): |
||||||
|
- if os.environ.get('SOURCE_DATE_EPOCH'): |
||||||
|
+ if (os.environ.get('SOURCE_DATE_EPOCH') and not |
||||||
|
+ os.environ.get('RPM_BUILD_ROOT')): |
||||||
|
return PycInvalidationMode.CHECKED_HASH |
||||||
|
else: |
||||||
|
return PycInvalidationMode.TIMESTAMP |
||||||
|
diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py |
||||||
|
index a4a52b180d..e53f5d92aa 100644 |
||||||
|
--- a/Lib/test/test_py_compile.py |
||||||
|
+++ b/Lib/test/test_py_compile.py |
||||||
|
@@ -19,6 +19,7 @@ def without_source_date_epoch(fxn): |
||||||
|
def wrapper(*args, **kwargs): |
||||||
|
with os_helper.EnvironmentVarGuard() as env: |
||||||
|
env.unset('SOURCE_DATE_EPOCH') |
||||||
|
+ env.unset('RPM_BUILD_ROOT') |
||||||
|
return fxn(*args, **kwargs) |
||||||
|
return wrapper |
||||||
|
|
||||||
|
@@ -29,6 +30,7 @@ def with_source_date_epoch(fxn): |
||||||
|
def wrapper(*args, **kwargs): |
||||||
|
with os_helper.EnvironmentVarGuard() as env: |
||||||
|
env['SOURCE_DATE_EPOCH'] = '123456789' |
||||||
|
+ env.unset('RPM_BUILD_ROOT') |
||||||
|
return fxn(*args, **kwargs) |
||||||
|
return wrapper |
||||||
|
|
@ -0,0 +1,103 @@ |
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||||
|
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hrn=C4=8Diar?= <thrnciar@redhat.com> |
||||||
|
Date: Tue, 7 Dec 2021 14:41:59 +0100 |
||||||
|
Subject: [PATCH] 00371: Revert "bpo-1596321: Fix threading._shutdown() for the |
||||||
|
main thread (GH-28549) (GH-28589)" |
||||||
|
|
||||||
|
This reverts commit 38c67738c64304928c68d5c2bd78bbb01d979b94. It |
||||||
|
introduced regression causing FreeIPA's tests to fail. |
||||||
|
|
||||||
|
For more info see: |
||||||
|
https://bodhi.fedoraproject.org/updates/FEDORA-2021-e152ce5f31 |
||||||
|
https://github.com/GrahamDumpleton/mod_wsgi/issues/730 |
||||||
|
--- |
||||||
|
Lib/test/test_threading.py | 33 --------------------------------- |
||||||
|
Lib/threading.py | 25 ++++++++----------------- |
||||||
|
2 files changed, 8 insertions(+), 50 deletions(-) |
||||||
|
|
||||||
|
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py |
||||||
|
index 9c6561c099..84714c03fe 100644 |
||||||
|
--- a/Lib/test/test_threading.py |
||||||
|
+++ b/Lib/test/test_threading.py |
||||||
|
@@ -956,39 +956,6 @@ def test_debug_deprecation(self): |
||||||
|
b'is deprecated and will be removed in Python 3.12') |
||||||
|
self.assertIn(msg, err) |
||||||
|
|
||||||
|
- def test_import_from_another_thread(self): |
||||||
|
- # bpo-1596321: If the threading module is first import from a thread |
||||||
|
- # different than the main thread, threading._shutdown() must handle |
||||||
|
- # this case without logging an error at Python exit. |
||||||
|
- code = textwrap.dedent(''' |
||||||
|
- import _thread |
||||||
|
- import sys |
||||||
|
- |
||||||
|
- event = _thread.allocate_lock() |
||||||
|
- event.acquire() |
||||||
|
- |
||||||
|
- def import_threading(): |
||||||
|
- import threading |
||||||
|
- event.release() |
||||||
|
- |
||||||
|
- if 'threading' in sys.modules: |
||||||
|
- raise Exception('threading is already imported') |
||||||
|
- |
||||||
|
- _thread.start_new_thread(import_threading, ()) |
||||||
|
- |
||||||
|
- # wait until the threading module is imported |
||||||
|
- event.acquire() |
||||||
|
- event.release() |
||||||
|
- |
||||||
|
- if 'threading' not in sys.modules: |
||||||
|
- raise Exception('threading is not imported') |
||||||
|
- |
||||||
|
- # don't wait until the thread completes |
||||||
|
- ''') |
||||||
|
- rc, out, err = assert_python_ok("-c", code) |
||||||
|
- self.assertEqual(out, b'') |
||||||
|
- self.assertEqual(err, b'') |
||||||
|
- |
||||||
|
|
||||||
|
class ThreadJoinOnShutdown(BaseTestCase): |
||||||
|
|
||||||
|
diff --git a/Lib/threading.py b/Lib/threading.py |
||||||
|
index 4f72938551..18c10e6489 100644 |
||||||
|
--- a/Lib/threading.py |
||||||
|
+++ b/Lib/threading.py |
||||||
|
@@ -1546,29 +1546,20 @@ def _shutdown(): |
||||||
|
|
||||||
|
global _SHUTTING_DOWN |
||||||
|
_SHUTTING_DOWN = True |
||||||
|
+ # Main thread |
||||||
|
+ tlock = _main_thread._tstate_lock |
||||||
|
+ # The main thread isn't finished yet, so its thread state lock can't have |
||||||
|
+ # been released. |
||||||
|
+ assert tlock is not None |
||||||
|
+ assert tlock.locked() |
||||||
|
+ tlock.release() |
||||||
|
+ _main_thread._stop() |
||||||
|
|
||||||
|
# Call registered threading atexit functions before threads are joined. |
||||||
|
# Order is reversed, similar to atexit. |
||||||
|
for atexit_call in reversed(_threading_atexits): |
||||||
|
atexit_call() |
||||||
|
|
||||||
|
- # Main thread |
||||||
|
- if _main_thread.ident == get_ident(): |
||||||
|
- tlock = _main_thread._tstate_lock |
||||||
|
- # The main thread isn't finished yet, so its thread state lock can't |
||||||
|
- # have been released. |
||||||
|
- assert tlock is not None |
||||||
|
- assert tlock.locked() |
||||||
|
- tlock.release() |
||||||
|
- _main_thread._stop() |
||||||
|
- else: |
||||||
|
- # bpo-1596321: _shutdown() must be called in the main thread. |
||||||
|
- # If the threading module was not imported by the main thread, |
||||||
|
- # _main_thread is the thread which imported the threading module. |
||||||
|
- # In this case, ignore _main_thread, similar behavior than for threads |
||||||
|
- # spawned by C libraries or using _thread.start_new_thread(). |
||||||
|
- pass |
||||||
|
- |
||||||
|
# Join all non-deamon threads |
||||||
|
while True: |
||||||
|
with _shutdown_locks_lock: |
@ -0,0 +1,55 @@ |
|||||||
|
"""Checks if all *.pyc files have later mtime than their *.py files.""" |
||||||
|
|
||||||
|
import os |
||||||
|
import sys |
||||||
|
from importlib.util import cache_from_source |
||||||
|
from pathlib import Path |
||||||
|
|
||||||
|
|
||||||
|
RPM_BUILD_ROOT = os.environ.get('RPM_BUILD_ROOT', '') |
||||||
|
|
||||||
|
# ...cpython-3X.pyc |
||||||
|
# ...cpython-3X.opt-1.pyc |
||||||
|
# ...cpython-3X.opt-2.pyc |
||||||
|
LEVELS = (None, 1, 2) |
||||||
|
|
||||||
|
# list of globs of test and other files that we expect not to have bytecode |
||||||
|
not_compiled = [ |
||||||
|
'/usr/bin/*', |
||||||
|
'*/test/bad_coding.py', |
||||||
|
'*/test/bad_coding2.py', |
||||||
|
'*/test/badsyntax_*.py', |
||||||
|
'*/lib2to3/tests/data/bom.py', |
||||||
|
'*/lib2to3/tests/data/crlf.py', |
||||||
|
'*/lib2to3/tests/data/different_encoding.py', |
||||||
|
'*/lib2to3/tests/data/false_encoding.py', |
||||||
|
'*/lib2to3/tests/data/py2_test_grammar.py', |
||||||
|
'*.debug-gdb.py', |
||||||
|
] |
||||||
|
|
||||||
|
|
||||||
|
def bytecode_expected(path): |
||||||
|
path = Path(path[len(RPM_BUILD_ROOT):]) |
||||||
|
for glob in not_compiled: |
||||||
|
if path.match(glob): |
||||||
|
return False |
||||||
|
return True |
||||||
|
|
||||||
|
|
||||||
|
failed = 0 |
||||||
|
compiled = (path for path in sys.argv[1:] if bytecode_expected(path)) |
||||||
|
for path in compiled: |
||||||
|
to_check = (cache_from_source(path, optimization=opt) for opt in LEVELS) |
||||||
|
f_mtime = os.path.getmtime(path) |
||||||
|
for pyc in to_check: |
||||||
|
c_mtime = os.path.getmtime(pyc) |
||||||
|
if c_mtime < f_mtime: |
||||||
|
print('Failed bytecompilation timestamps check: ' |
||||||
|
f'Bytecode file {pyc} is older than source file {path}', |
||||||
|
file=sys.stderr) |
||||||
|
failed += 1 |
||||||
|
|
||||||
|
if failed: |
||||||
|
print(f'\n{failed} files failed bytecompilation timestamps check.', |
||||||
|
file=sys.stderr) |
||||||
|
sys.exit(1) |
@ -0,0 +1,35 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
|
||||||
|
<!-- Copyright 2017 Zbigniew Jędrzejewski-Szmek --> |
||||||
|
<application> |
||||||
|
<id type="desktop">idle3.desktop</id> |
||||||
|
<name>IDLE3</name> |
||||||
|
<metadata_licence>CC0</metadata_licence> |
||||||
|
<project_license>Python-2.0</project_license> |
||||||
|
<summary>Python 3 Integrated Development and Learning Environment</summary> |
||||||
|
<description> |
||||||
|
<p> |
||||||
|
IDLE is Python’s Integrated Development and Learning Environment. |
||||||
|
The GUI is uniform between Windows, Unix, and Mac OS X. |
||||||
|
IDLE provides an easy way to start writing, running, and debugging |
||||||
|
Python code. |
||||||
|
</p> |
||||||
|
<p> |
||||||
|
IDLE is written in pure Python, and uses the tkinter GUI toolkit. |
||||||
|
It provides: |
||||||
|
</p> |
||||||
|
<ul> |
||||||
|
<li>a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,</li> |
||||||
|
<li>a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,</li> |
||||||
|
<li>search within any window, replace within editor windows, and search through multiple files (grep),</li> |
||||||
|
<li>a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.</li> |
||||||
|
</ul> |
||||||
|
</description> |
||||||
|
<url type="homepage">https://docs.python.org/3/library/idle.html</url> |
||||||
|
<screenshots> |
||||||
|
<screenshot type="default">http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png</screenshot> |
||||||
|
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png</screenshot> |
||||||
|
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png</screenshot> |
||||||
|
</screenshots> |
||||||
|
<update_contact>zbyszek@in.waw.pl</update_contact> |
||||||
|
</application> |
@ -0,0 +1,11 @@ |
|||||||
|
[Desktop Entry] |
||||||
|
Version=1.0 |
||||||
|
Name=IDLE 3 |
||||||
|
Comment=Python 3 Integrated Development and Learning Environment |
||||||
|
Exec=idle3 %F |
||||||
|
TryExec=idle3 |
||||||
|
Terminal=false |
||||||
|
Type=Application |
||||||
|
Icon=idle3 |
||||||
|
Categories=Development;IDE; |
||||||
|
MimeType=text/x-python; |
@ -0,0 +1,109 @@ |
|||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK----- |
||||||
|
|
||||||
|
mQINBFq+ToQBEADRYvIVtbK6owynD3j3nxwpW2KEk/p+aDvtXmc2SR2dBcZ8sFW2 |
||||||
|
R5vEsG8d3/D3wgv5pcL3KfNNXQYUnXVbobrFUUWQYc79qIsE3MgiPf5NVOtwKPUR |
||||||
|
i5g9YJgKvpBxkQfqp3LYGm9ZBtwo3DVLA3yn7KsazCmAgTNFJYw7ku1XxgmIzY6K |
||||||
|
5J30DfbJiqDqj4f9GslCCCCH3qiPnuLG/HUyVLHMpbWlaiy9NI0GcaLxjJewHj9w |
||||||
|
W2D2lydkxe5JGo7egUkV3ILcuLVSVKA35SKY27dYqfuyqp9tAzaRbjDYjsYdHA6G |
||||||
|
BqrNrKBn/GwlFDPrVdcvN3ZSY2wMLTxWE3Axc/FweuHxFnou/80FwX7F3JD+oEQ6 |
||||||
|
rofmcxOBCC7J98I7HZAhP9jBn88XIS2hztbLq8d6rZJZRtcz0k61VR0ddO+TrFmf |
||||||
|
9rMYCPgCckRtVxeFIVIabrN1IzKynLFeo040h8hSGswd6YKDOVwjJY6Oa6EmVefZ |
||||||
|
a8QSt4+M65RSzH6SEPY008F3nJUAK6MEkzTak+tFltZNrVWu8p2xd1j9nmxAwEhZ |
||||||
|
/lgbxLqzYgaUWmfyHeZ8yVA0MhHzdiAL8nVUEdG3KecIq0RWCJLGLWWIjd6KAJl1 |
||||||
|
yAmhRYKK/sjPDsL3elHsFACfZbyx3o5GGQNlas1FYoPLWbaNGaJtgFTF2QARAQAB |
||||||
|
tCtQYWJsbyBHYWxpbmRvIFNhbGdhZG8gPHBhYmxvZ3NhbEBnbWFpbC5jb20+iQJO |
||||||
|
BBMBCgA4FiEEoDXIwZIZuoIezqhrZOYo+NaEaW0FAlq+ToQCGwMFCwkIBwMFFQoJ |
||||||
|
CAsFFgIDAQACHgECF4AACgkQZOYo+NaEaW2bmA/+PXIap2udLoUVOHxnsIBdqYwp |
||||||
|
sv1Aj5lfIJmNhmxPbHShwp1Jg+w4urxe+2Dj5ofKVlIo1i83bQkvnKJMDXDVuc/K |
||||||
|
P6zqhBJ3rT4Q3qx2mzX8bIfQoJ2JHuH4lkP+I7doDcHHRyeNASyk72VdQmU4twNw |
||||||
|
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 |
||||||
|
=6Zb4 |
||||||
|
-----END PGP PUBLIC KEY BLOCK----- |
Loading…
Reference in new issue