--- a/setup.py Mon May 27 16:55:46 2019 -0400
+++ b/setup.py Fri Jun 14 10:57:07 2019 +0100
@@ -32,6 +32,7 @@
])
import sys, platform
+import sysconfig
if sys.version_info[0] >= 3:
printf = eval('print')
libdir_escape = 'unicode_escape'
@@ -104,6 +105,12 @@
printf(error, file=sys.stderr)
sys.exit(1)
+if sys.version_info[0] >= 3:
+ DYLIB_SUFFIX = sysconfig.get_config_vars()['EXT_SUFFIX']
+else:
+ # deprecated in Python 3
+ DYLIB_SUFFIX = sysconfig.get_config_vars()['SO']
+
# Solaris Python packaging brain damage
try:
import hashlib
@@ -1160,6 +1167,19 @@
for fname in fnames
if os.path.splitext(fname)[1] == '.rs')
+ @staticmethod
+ def rustdylibsuffix():
+ """Return the suffix for shared libraries produced by rustc.
+
+ See also: https://doc.rust-lang.org/reference/linkage.html
+ """
+ if sys.platform == 'darwin':
+ return '.dylib'
+ elif os.name == 'nt':
+ return '.dll'
+ else:
+ return '.so'
+
def rustbuild(self):
env = os.environ.copy()
if 'HGTEST_RESTOREENV' in env:
@@ -1227,9 +1247,9 @@
self.rustbuild()
target = [target_dir]
target.extend(self.name.split('.'))
- ext = '.so' # TODO Unix only
- target[-1] += ext
- shutil.copy2(os.path.join(self.rusttargetdir, self.dylibname + ext),
+ target[-1] += DYLIB_SUFFIX
+ shutil.copy2(os.path.join(self.rusttargetdir,
+ self.dylibname + self.rustdylibsuffix()),
os.path.join(*target))