# HG changeset patch # User Georges Racinet # Date 1560506227 -3600 # Node ID f4a65077e94978da1f60f714af8af0ed679ea83e # Parent 87a34c76738492397abae40a27b6337f8be1b90d rust-cpython: management of shared libray suffix Before this changeset, the shared library objects suffixes were both (rustc output and Python input) hardcoded to '.so', which is wrong for Python3 and non Linux targets. diff -r 87a34c767384 -r f4a65077e949 setup.py --- 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))