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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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)