1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
--- a/setuptools/command/easy_install.py
+++ b/setuptools/command/easy_install.py
@@ -205,6 +205,7 @@ class easy_install(Command):
# enable custom installation, known values: deb
self.install_layout = None
self.force_installation_into_system_dir = None
+ self.multiarch = None
# Always read easy_install options, even if we are subclassed, or have
# an independent instance created. This ensures that defaults will
@@ -293,6 +294,9 @@ class easy_install(Command):
raise DistutilsOptionError("unknown value for --install-layout")
self.install_layout = self.install_layout.lower()
+ if sys.version_info[:2] >= (3, 3):
+ self.multiarch = sysconfig.get_config_var('MULTIARCH')
+
self._expand(
'install_dir',
'script_dir',
--- a/setuptools/command/install_lib.py
+++ b/setuptools/command/install_lib.py
@@ -15,6 +15,18 @@ class install_lib(orig.install_lib):
distribution: Distribution # override distutils.dist.Distribution with setuptools.dist.Distribution
+ def initialize_options(self):
+ orig.install_lib.initialize_options(self)
+ self.multiarch = None
+ self.install_layout = None
+
+ def finalize_options(self):
+ orig.install_lib.finalize_options(self)
+ self.set_undefined_options('install',('install_layout','install_layout'))
+ if self.install_layout == 'deb' and sys.version_info[:2] >= (3, 3):
+ import sysconfig
+ self.multiarch = sysconfig.get_config_var('MULTIARCH')
+
def run(self) -> None:
self.build()
outfiles = self.install()
@@ -107,6 +119,8 @@ class install_lib(orig.install_lib):
exclude = self.get_exclusions()
if not exclude:
+ import distutils.dir_util
+ distutils.dir_util._multiarch = self.multiarch
return orig.install_lib.copy_tree(self, infile, outfile)
# Exclude namespace package __init__.py* files from the output
@@ -117,11 +131,23 @@ class install_lib(orig.install_lib):
outfiles: list[str] = []
+ if self.multiarch:
+ import sysconfig
+ ext_suffix = sysconfig.get_config_var ('EXT_SUFFIX')
+ if ext_suffix.endswith(self.multiarch + ext_suffix[-3:]):
+ new_suffix = None
+ else:
+ new_suffix = "%s-%s%s" % (ext_suffix[:-3], self.multiarch, ext_suffix[-3:])
+
def pf(src: str, dst: str):
if dst in exclude:
log.warn("Skipping installation of %s (namespace package)", dst)
return False
+ if self.multiarch and new_suffix and dst.endswith(ext_suffix) and not dst.endswith(new_suffix):
+ dst = dst.replace(ext_suffix, new_suffix)
+ log.info("renaming extension to %s", os.path.basename(dst))
+
log.info("copying %s -> %s", src, os.path.dirname(dst))
outfiles.append(dst)
return dst
|