summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Breitwieser <oliver.breitwieser@kip.uni-heidelberg.de>2017-09-14 16:23:38 -0400
committerscheibelp <scheibel1@llnl.gov>2017-11-02 18:45:40 -0700
commit643a28aac5d370172a4350a1c0dae642d516398e (patch)
treee3e4792e86481ec3128c73128ede6895922db100
parentd5a3d9d20ea5b0c7a0d402c895cf2b63bc3132fe (diff)
downloadspack-643a28aac5d370172a4350a1c0dae642d516398e.tar.gz
spack-643a28aac5d370172a4350a1c0dae642d516398e.tar.bz2
spack-643a28aac5d370172a4350a1c0dae642d516398e.tar.xz
spack-643a28aac5d370172a4350a1c0dae642d516398e.zip
python: extensions support for easy-install.pth
-rw-r--r--var/spack/repos/builtin/packages/python/package.py40
1 files changed, 30 insertions, 10 deletions
diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py
index b176169236..c3ea2a0b15 100644
--- a/var/spack/repos/builtin/packages/python/package.py
+++ b/var/spack/repos/builtin/packages/python/package.py
@@ -496,6 +496,10 @@ class Python(AutotoolsPackage):
def site_packages_dir(self):
return join_path(self.python_lib_dir, 'site-packages')
+ @property
+ def easy_install_file(self):
+ return join_path(self.site_packages_dir, "easy-install.pth")
+
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
"""Set PYTHONPATH to include the site-packages directory for the
extension and any other python extensions it depends on."""
@@ -577,11 +581,15 @@ class Python(AutotoolsPackage):
return match_predicate(ignore_arg, patterns)
- def write_easy_install_pth(self, exts):
+ def write_easy_install_pth(self, exts, prefix=None):
+ if not prefix:
+ prefix = self.prefix
+
paths = []
+ unique_paths = set()
+
for ext in sorted(exts.values()):
- ext_site_packages = join_path(ext.prefix, self.site_packages_dir)
- easy_pth = join_path(ext_site_packages, "easy-install.pth")
+ easy_pth = join_path(ext.prefix, self.easy_install_file)
if not os.path.isfile(easy_pth):
continue
@@ -599,10 +607,11 @@ class Python(AutotoolsPackage):
re.search(r'setuptools.*egg$', line)):
continue
- paths.append(line)
+ if line not in unique_paths:
+ unique_paths.add(line)
+ paths.append(line)
- site_packages = join_path(self.home, self.site_packages_dir)
- main_pth = join_path(site_packages, "easy-install.pth")
+ main_pth = join_path(prefix, self.easy_install_file)
if not paths:
if os.path.isfile(main_pth):
@@ -623,18 +632,29 @@ class Python(AutotoolsPackage):
ignore = self.python_ignore(ext_pkg, args)
args.update(ignore=ignore)
+ extensions_layout = args.get("extensions_layout",
+ spack.store.extensions)
+
super(Python, self).activate(ext_pkg, **args)
- exts = spack.store.layout.extension_map(self.spec)
+ exts = extensions_layout.extension_map(self.spec)
exts[ext_pkg.name] = ext_pkg.spec
- self.write_easy_install_pth(exts)
+
+ self.write_easy_install_pth(
+ exts,
+ prefix=extensions_layout.extendee_target_directory(self))
def deactivate(self, ext_pkg, **args):
args.update(ignore=self.python_ignore(ext_pkg, args))
super(Python, self).deactivate(ext_pkg, **args)
- exts = spack.store.layout.extension_map(self.spec)
+ extensions_layout = args.get("extensions_layout",
+ spack.store.extensions)
+
+ exts = extensions_layout.extension_map(self.spec)
# Make deactivate idempotent
if ext_pkg.name in exts:
del exts[ext_pkg.name]
- self.write_easy_install_pth(exts)
+ self.write_easy_install_pth(
+ exts,
+ prefix=extensions_layout.extendee_target_directory(self))