Skip to content

Commit 6ad758b

Browse files
committed
Patch dist to include console_scripts for Exec binding
1 parent 09d10dd commit 6ad758b

File tree

1 file changed

+20
-48
lines changed

1 file changed

+20
-48
lines changed

setuptools_rust/setuptools_ext.py

Lines changed: 20 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,25 @@ def add_rust_extension(dist: Distribution) -> None:
3939
sdist_boolean_options.append("vendor-crates")
4040
sdist_negative_opt["no-vendor-crates"] = "vendor-crates"
4141

42+
# Patch dist to include console_scripts for Exec binding
43+
console_scripts = []
44+
for ext in dist.rust_extensions: # type: ignore[attr-defined]
45+
console_scripts.extend(ext.entry_points())
46+
47+
if console_scripts:
48+
if not dist.entry_points: # type: ignore[attr-defined]
49+
dist.entry_points = {"console_scripts": console_scripts} # type: ignore[attr-defined]
50+
else:
51+
ep_scripts = dist.entry_points.get("console_scripts") # type: ignore[attr-defined]
52+
if ep_scripts:
53+
for script in console_scripts:
54+
if script not in ep_scripts:
55+
ep_scripts.append(console_scripts)
56+
else:
57+
ep_scripts = console_scripts
58+
59+
dist.entry_points["console_scripts"] = ep_scripts # type: ignore[attr-defined]
60+
4261
class sdist_rust_extension(sdist_base_class): # type: ignore[misc,valid-type]
4362
user_options = sdist_options
4463
boolean_options = sdist_boolean_options
@@ -152,32 +171,8 @@ def run(self) -> None:
152171

153172
install_base_class = cast(Type[install], dist.cmdclass.get("install", install))
154173

155-
# this is required for console_scripts and to make install_scripts compatible with RustBin
174+
# this is required to make install_scripts compatible with RustBin
156175
class install_rust_extension(install_base_class): # type: ignore[misc,valid-type]
157-
def finalize_options(self) -> None:
158-
if self.distribution.rust_extensions:
159-
scripts = []
160-
for ext in self.distribution.rust_extensions:
161-
scripts.extend(ext.entry_points())
162-
163-
if scripts:
164-
if not self.distribution.entry_points:
165-
self.distribution.entry_points = {"console_scripts": scripts}
166-
else:
167-
ep_scripts = self.distribution.entry_points.get(
168-
"console_scripts"
169-
)
170-
if ep_scripts:
171-
for script in scripts:
172-
if script not in ep_scripts:
173-
ep_scripts.append(scripts)
174-
else:
175-
ep_scripts = scripts
176-
177-
self.distribution.entry_points["console_scripts"] = ep_scripts
178-
179-
install_base_class.finalize_options(self)
180-
181176
def run(self) -> None:
182177
install_base_class.run(self)
183178
install_rustbin = False
@@ -252,29 +247,6 @@ def initialize_options(self) -> None:
252247
super().initialize_options()
253248
self.target = os.getenv("CARGO_BUILD_TARGET")
254249

255-
def finalize_options(self) -> None:
256-
scripts = []
257-
for ext in self.distribution.rust_extensions:
258-
scripts.extend(ext.entry_points())
259-
260-
if scripts:
261-
if not self.distribution.entry_points:
262-
self.distribution.entry_points = {"console_scripts": scripts}
263-
else:
264-
ep_scripts = self.distribution.entry_points.get(
265-
"console_scripts"
266-
)
267-
if ep_scripts:
268-
for script in scripts:
269-
if script not in ep_scripts:
270-
ep_scripts.append(scripts)
271-
else:
272-
ep_scripts = scripts
273-
274-
self.distribution.entry_points["console_scripts"] = ep_scripts
275-
276-
bdist_wheel_base_class.finalize_options(self)
277-
278250
def get_tag(self) -> Tuple[str, str, str]:
279251
python, abi, plat = super().get_tag()
280252
arch_flags = os.getenv("ARCHFLAGS")

0 commit comments

Comments
 (0)