--- a/setup.py Sun Nov 22 15:07:09 2020 -0500
+++ b/setup.py Sat Nov 21 16:20:49 2020 -0500
@@ -782,6 +782,9 @@
pythonlib = None
+ dir = os.path.dirname(self.get_ext_fullpath('dummy'))
+ self.hgtarget = os.path.join(dir, 'hg')
+
if getattr(sys, 'dllhandle', None):
# Different Python installs can have different Python library
# names. e.g. the official CPython distribution uses pythonXY.dll
@@ -807,6 +810,19 @@
)
pythonlib = dllbasename[:-4]
+ # Copy the pythonXY.dll next to the binary so that it runs
+ # without tampering with PATH.
+ fsdecode = lambda x: x
+ if sys.version_info[0] >= 3:
+ fsdecode = os.fsdecode
+ dest = os.path.join(
+ os.path.dirname(self.hgtarget),
+ fsdecode(dllbasename),
+ )
+
+ if not os.path.exists(dest):
+ shutil.copy(buf.value, dest)
+
if not pythonlib:
log.warn(
'could not determine Python DLL filename; assuming pythonXY'
@@ -829,8 +845,6 @@
output_dir=self.build_temp,
macros=macros,
)
- dir = os.path.dirname(self.get_ext_fullpath('dummy'))
- self.hgtarget = os.path.join(dir, 'hg')
self.compiler.link_executable(
objects, self.hgtarget, libraries=[], output_dir=self.build_temp
)