aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build_scripts/main.py6
-rw-r--r--sources/pyside2/PySide2/support/generate_pyi.py43
-rw-r--r--sources/shiboken2/libshiboken/embed/embedding_generator.py6
3 files changed, 48 insertions, 7 deletions
diff --git a/build_scripts/main.py b/build_scripts/main.py
index b9c83b939..4d9f95b14 100644
--- a/build_scripts/main.py
+++ b/build_scripts/main.py
@@ -234,9 +234,11 @@ def prefix():
name = "pyside"
name += str(sys.version_info[0])
if OPTION_DEBUG:
- name += 'd'
+ name += "d"
if is_debug_python():
- name += 'p'
+ name += "p"
+ if OPTION_LIMITED_API == "yes" and sys.version_info[0] == 3:
+ name += "a"
return name
# Initialize, pull and checkout submodules
diff --git a/sources/pyside2/PySide2/support/generate_pyi.py b/sources/pyside2/PySide2/support/generate_pyi.py
index f286e34f1..377a53331 100644
--- a/sources/pyside2/PySide2/support/generate_pyi.py
+++ b/sources/pyside2/PySide2/support/generate_pyi.py
@@ -53,6 +53,7 @@ import re
import subprocess
import argparse
import glob
+import math
from contextlib import contextmanager
from textwrap import dedent
import traceback
@@ -183,6 +184,33 @@ def find_imports(text):
return [imp for imp in PySide2.__all__ if imp + "." in text]
+_cache = {}
+
+def check_if_skipable(outfilepath):
+ # A file can be skipped if it exists, and if it's file time is not
+ # older than this script or any of its dependencies.
+ def _do_find_newest_module():
+ newest = 0
+ for obj in sys.modules.values():
+ if getattr(obj, "__file__", None) and os.path.isfile(obj.__file__):
+ sourcepath = os.path.splitext(obj.__file__)[0] + ".py"
+ if os.path.exists(sourcepath):
+ newest = max(os.path.getmtime(sourcepath), newest)
+ return newest
+
+ def find_newest_module():
+ cache_name = "newest_module"
+ if cache_name not in _cache:
+ _cache[cache_name] = _do_find_newest_module()
+ return _cache[cache_name]
+
+ if os.path.exists(outfilepath):
+ stamp = os.path.getmtime(outfilepath)
+ if stamp >= find_newest_module():
+ return True
+ return False
+
+
def generate_pyi(import_name, outpath, options):
"""
Generates a .pyi file.
@@ -198,7 +226,7 @@ def generate_pyi(import_name, outpath, options):
pid = os.getpid()
plainname = import_name.split(".")[-1]
outfilepath = os.path.join(outpath, plainname + ".pyi")
- if options.skip and os.path.exists(outfilepath):
+ if options.skip and check_if_skipable(outfilepath):
logger.debug("{pid}:Skipped existing: {op}"
.format(op=os.path.basename(outfilepath), **locals()))
return -1
@@ -291,7 +319,17 @@ def generate_all_pyi(outpath, options):
valid = check = 0
if not outpath:
outpath = os.path.dirname(PySide2.__file__)
- lockdir = os.path.join(outpath, "generate_pyi.lockfile")
+ lockdir = os.path.join(outpath, "generate_pyi.lockdir")
+
+ pyi_var = "GENERATE_PYI_RECURSE {}".format(math.pi) # should not be set by anybody
+ if not os.environ.get(pyi_var, ""):
+ # To catch a possible crash, we run as a subprocess:
+ os.environ[pyi_var] = "yes"
+ ret = subprocess.call([sys.executable] + sys.argv)
+ if ret and os.path.exists(lockdir):
+ os.rmdir(lockdir)
+ sys.exit(ret)
+ # We are the subprocess. Do the real work.
with single_process(lockdir) as locked:
if locked:
if is_ci:
@@ -343,3 +381,4 @@ if __name__ == "__main__":
else:
parser_run.print_help()
sys.exit(1)
+# eof
diff --git a/sources/shiboken2/libshiboken/embed/embedding_generator.py b/sources/shiboken2/libshiboken/embed/embedding_generator.py
index b6bfb1467..77aa5c329 100644
--- a/sources/shiboken2/libshiboken/embed/embedding_generator.py
+++ b/sources/shiboken2/libshiboken/embed/embedding_generator.py
@@ -92,7 +92,7 @@ def create_zipfile(limited_api):
flag = '-b' if sys.version_info >= (3,) else ''
os.chdir(work_dir)
- # Limited API: Remove all left-over py[co] files first, in case we use '--reuse-build'.
+ # Remove all left-over py[co] and other files first, in case we use '--reuse-build'.
# Note that we could improve that with the PyZipfile function to use .pyc files
# in different folders, but that makes only sense when COIN allows us to have
# multiple Python versions in parallel.
@@ -100,9 +100,9 @@ def create_zipfile(limited_api):
for root, dirs, files in os.walk(work_dir):
for name in files:
fpath = os.path.join(root, name)
- if name.endswith(".pyc") or name.endswith(".pyo"):
+ ew = name.endswith
+ if ew(".pyc") or ew(".pyo") or ew(".zip") or ew(".inc"):
os.remove(fpath)
-
# We copy every Python file into this dir, but only for the right version.
# For testing in the source dir, we need to filter.
if sys.version_info[0] == 3: