diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-10-18 11:56:06 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2024-10-18 13:59:23 +0200 |
| commit | bdd6a0d5d61aa76c202669ae1c17ef4dfe0b9bde (patch) | |
| tree | d28fe82bc4e32bb393833fb243bc8418e53b30bd /build_scripts/main.py | |
| parent | eaefc0da1f9a9cd37d941ec8b1b5d346064cb5e0 (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.py | 18 |
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)") |
