aboutsummaryrefslogtreecommitdiffstats
path: root/build_scripts/main.py
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-10-18 11:56:06 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-10-18 13:59:23 +0200
commitbdd6a0d5d61aa76c202669ae1c17ef4dfe0b9bde (patch)
treed28fe82bc4e32bb393833fb243bc8418e53b30bd /build_scripts/main.py
parenteaefc0da1f9a9cd37d941ec8b1b5d346064cb5e0 (diff)
build: Remove build-directory-dependent code from PySide's __init__.py
It breaks checks for reproducible builds. Fixes: PYSIDE-2895 Pick-to: 6.8 Change-Id: Id9a8c00dd7319b6f30c06e30f796e7ee11edc593 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'build_scripts/main.py')
-rw-r--r--build_scripts/main.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/build_scripts/main.py b/build_scripts/main.py
index cd21eb468..0c884cf44 100644
--- a/build_scripts/main.py
+++ b/build_scripts/main.py
@@ -59,6 +59,20 @@ def elapsed():
return int(time.time() - start_time)
+def _fix_pyside_init_py(path):
+ """For reproducible builds, strip out the part that contains the build-directory
+ from PySide's __init__.py (PYSIDE-2895/QTBUG-105926)."""
+ START_MARKER = "\n # Note: We should _not_ call this function"
+ END_MARKER = "return __all__\n"
+ contents = path.read_text(encoding='utf-8')
+ start = contents.find(START_MARKER)
+ end = contents.find(END_MARKER, start + len(START_MARKER)) if start != -1 else -1
+ if end == -1:
+ raise SetupError(f"Unable to fix {path}")
+ fixed_contents = contents[:start] + contents[end + len(END_MARKER):]
+ path.write_text(fixed_contents, encoding='utf-8')
+
+
def get_setuptools_extension_modules():
# Setting py_limited_api on the extension is the "correct" thing
# to do, but it doesn't actually do anything, because we
@@ -466,6 +480,10 @@ class PysideBuild(_build, CommandMixin, BuildInfoCollectorMixin):
except Exception as e:
log.warning(f'problem renaming "{self.st_build_dir}"')
log.warning(f'ignored error: {type(e).__name__}: {e}')
+
+ if config.is_internal_pyside_build():
+ _fix_pyside_init_py(_dst / "__init__.py")
+
else:
log.info("Skipped preparing and building packages.")
log.info(f"--- Build completed ({elapsed()}s)")