Mercurial > hgrepos > Python > apps > py-cutils
annotate intree-build-helper/cutils_build.py @ 408:3e28e5aacb8a default
A separate "wheel" package is not used by modern build backends any more.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Tue, 17 Feb 2026 17:16:27 +0100 |
| parents | deabdfed3b96 |
| children |
| rev | line source |
|---|---|
|
406
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 # :- |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
3 # SPDX-FileCopyrightText: © 2025-2026 Franz Glasner |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
4 # SPDX-License-Identifier: BSD-3-Clause |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
5 # :- |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
6 r"""An intree build backend that is mostly just a wrapper for |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
7 :mod:`setuptools.build_meta`. |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
8 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
9 Augments :fn:`build_sdist` to automatically postprocess it |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
10 (i.e. add symlinks as symlinks). |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
11 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
12 """ |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
13 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
14 # Firstly, we are just a wrapper for setuptools.build_meta |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
15 from setuptools.build_meta import * # noqa:F403,F401 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
16 from setuptools.build_meta import build_sdist as _orig_build_sdist |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
17 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
18 import gzip as _gzip |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
19 import io as _io |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
20 import logging as _logging |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
21 import os as _os |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
22 import tarfile as _tarfile |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
23 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
24 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
25 _log = _logging.getLogger(__name__) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
26 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
27 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
28 def _postprocess_sdist(sdist_directory, sdist_archive, config_settings): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
29 _log.info("post-processing the sdist %r ...", sdist_archive) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
30 # |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
31 # PEP 625 requires that sdist archive filenames are of the form |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
32 # <normalized_project_name>-<project_version>.tar.gz |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
33 # |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
34 if sdist_archive.endswith(".tar.gz"): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
35 uncompressed_sdist_archive = sdist_archive[:-3] |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
36 # the directory prefix within the archive |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
37 archive_path_prefix = uncompressed_sdist_archive[:-4] |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
38 normalized_project_name, sep, project_version = \ |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
39 archive_path_prefix.rpartition('-') |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
40 if not sep: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
41 raise ValueError( |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
42 "unexpected archive path prefix: %s" % (archive_path_prefix,)) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
43 else: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
44 raise ValueError("unexpected archive name: %s" % (sdist_archive,)) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
45 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
46 uncompressed_sdist_path = f"{sdist_directory}/{uncompressed_sdist_archive}" |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
47 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
48 # Metadata directories in the FS and the archive |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
49 egg_directory = f"{normalized_project_name}.egg-info" |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
50 if not _os.path.isdir(egg_directory): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
51 raise RuntimeError("directory does not exist: %s" % (egg_directory,)) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
52 sources_txt_path = f"{egg_directory}/SOURCES.txt" |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
53 sources_txt_arcname = f"{archive_path_prefix}/{egg_directory}/SOURCES.txt" |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
54 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
55 if _os.path.isfile(uncompressed_sdist_path): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
56 _log.warning("warning: overwriting existing %r", |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
57 uncompressed_sdist_path) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
58 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
59 # Uncompress |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
60 _log.info("uncompressing the created archive %r into %r", |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
61 f"{sdist_directory}/{sdist_archive}", |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
62 uncompressed_sdist_path) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
63 with _gzip.GzipFile(f"{sdist_directory}/{sdist_archive}", |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
64 mode="rb") as ca: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
65 with open(uncompressed_sdist_path, "wb") as uca: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
66 while True: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
67 data = ca.read(64*1024) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
68 if not data: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
69 break |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
70 uca.write(data) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
71 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
72 # Get SOURCES.txt from the metadata within the sdist |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
73 with _tarfile.TarFile(uncompressed_sdist_path, "r") as tf: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
74 sf = tf.extractfile(sources_txt_arcname) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
75 try: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
76 sources_txt = sf.read() |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
77 finally: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
78 sf.close() |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
79 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
80 with _tarfile.TarFile(uncompressed_sdist_path, "a") as tf: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
81 arcname = "{}/tests/data".format(archive_path_prefix) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
82 try: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
83 info = tf.getmember(arcname) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
84 except KeyError: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
85 pass |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
86 else: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
87 raise RuntimeError("already postprocessed") |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
88 pre_names = set(tf.getnames()) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
89 tf.add("tests/data", arcname=arcname, recursive=True) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
90 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
91 # |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
92 # Determine the new files and symlinks that are to be added |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
93 # to SOURCES.txt. Skip directories. |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
94 # |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
95 post_names = set(tf.getnames()) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
96 new_names = list(post_names - pre_names) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
97 new_names.sort() |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
98 new_sources = [] |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
99 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
100 for np in new_names: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
101 nn = np[len(archive_path_prefix)+1:] |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
102 info = tf.getmember(np) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
103 if not info.isdir(): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
104 _log.info("adding %s -> %s", nn, np) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
105 new_sources.append(nn) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
106 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
107 # Augment SOURCES.txt and add it to the archive |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
108 sources_info = tf.gettarinfo( |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
109 sources_txt_path, arcname=sources_txt_arcname) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
110 sf = _io.BytesIO() |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
111 sf.write(sources_txt) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
112 if not sources_txt.endswith(b'\n'): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
113 sf.write(b'\n') |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
114 sf.write(_b('\n'.join(new_sources))) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
115 sources_info.size = len(sf.getvalue()) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
116 sf.seek(0) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
117 # |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
118 # This adds SOURCES.txt a 2nd time -- effectively overwriting |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
119 # the "earlier" one. |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
120 # |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
121 tf.addfile(sources_info, sf) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
122 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
123 # Compress |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
124 _log.info("recompressing the augmented archive %r into %r", |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
125 uncompressed_sdist_path, |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
126 f"{sdist_directory}/{sdist_archive}") |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
127 with open(uncompressed_sdist_path, "rb") as uca: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
128 with open(f"{sdist_directory}/{sdist_archive}", "wb") as ca: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
129 with _gzip.GzipFile(filename=uncompressed_sdist_archive, |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
130 fileobj=ca, |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
131 mode="wb") as gzfile: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
132 while True: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
133 data = uca.read(64*1024) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
134 if not data: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
135 break |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
136 gzfile.write(data) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
137 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
138 _log.info("post-processing the sdist done.") |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
139 return sdist_archive |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
140 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
141 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
142 def _b(buf, encoding="ascii"): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
143 if isinstance(buf, bytes): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
144 return buf |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
145 else: |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
146 return buf.encode(encoding) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
147 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
148 |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
149 def build_sdist(sdist_directory, config_settings=None): |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
150 # NOTE: logging is obviously set to level WARN (default?) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
151 _log.debug( |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
152 "debug: build_sdist in cutils_build called with params" |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
153 " sdist_directory=%r, config_settings=%r", |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
154 sdist_directory, config_settings) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
155 # NOTE: orig_build_sdist re-configures logging to level INFO |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
156 sdist_archive = _orig_build_sdist( |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
157 sdist_directory, config_settings=config_settings) |
|
deabdfed3b96
For current Python versions use an intree build backend that wraps setuptools.build_meta.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
158 return _postprocess_sdist(sdist_directory, sdist_archive, config_settings) |
