From 85dc20cb555b67410a7eaa324f3dc34e60a8e4db Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Fri, 17 Jun 2022 10:29:08 -0400 Subject: Spec: Add a new virtual-customizable `home` attribute (#30917) * Spec: Add a new virtual-customizable home attribute * java: Use the new builtin home attribute * python: Use the new builtin home attribute --- .../packages/attributes-foo-app/package.py | 12 ++++ .../packages/attributes-foo/package.py | 69 ++++++++++++++++++++++ .../repos/builtin/packages/ibm-java/package.py | 7 --- .../repos/builtin/packages/icedtea/package.py | 13 +--- var/spack/repos/builtin/packages/jdk/package.py | 5 -- .../repos/builtin/packages/openjdk/package.py | 5 -- var/spack/repos/builtin/packages/python/package.py | 2 - 7 files changed, 82 insertions(+), 31 deletions(-) create mode 100644 var/spack/repos/builtin.mock/packages/attributes-foo-app/package.py create mode 100644 var/spack/repos/builtin.mock/packages/attributes-foo/package.py (limited to 'var') diff --git a/var/spack/repos/builtin.mock/packages/attributes-foo-app/package.py b/var/spack/repos/builtin.mock/packages/attributes-foo-app/package.py new file mode 100644 index 0000000000..b4f9ef14ca --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/attributes-foo-app/package.py @@ -0,0 +1,12 @@ +# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * + + +class AttributesFooApp(BundlePackage): + version('1.0') + depends_on('bar') + depends_on('baz') diff --git a/var/spack/repos/builtin.mock/packages/attributes-foo/package.py b/var/spack/repos/builtin.mock/packages/attributes-foo/package.py new file mode 100644 index 0000000000..bf68c96a53 --- /dev/null +++ b/var/spack/repos/builtin.mock/packages/attributes-foo/package.py @@ -0,0 +1,69 @@ +# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack.package import * + + +class AttributesFoo(BundlePackage): + phases = ['install'] + version('1.0') + + provides('bar') + provides('baz') + + def install(self, spec, prefix): + if 'platform=windows' in spec: + lib_suffix = '.lib' + elif 'platform=darwin' in spec: + lib_suffix = '.dylib' + else: + lib_suffix = '.so' + + mkdirp(prefix.include) + touch(prefix.include.join('foo.h')) + mkdirp(prefix.include.bar) + touch(prefix.include.bar.join('bar.h')) + mkdirp(prefix.lib64) + touch(prefix.lib64.join('libFoo' + lib_suffix)) + touch(prefix.lib64.join('libFooBar' + lib_suffix)) + mkdirp(prefix.baz.include.baz) + touch(prefix.baz.include.baz.join('baz.h')) + mkdirp(prefix.baz.lib) + touch(prefix.baz.lib.join('libFooBaz' + lib_suffix)) + + # Headers provided by Foo + @property + def headers(self): + return find_headers('foo', root=self.home.include, recursive=False) + + # Libraries provided by Foo + @property + def libs(self): + return find_libraries('libFoo', root=self.home, recursive=True) + + # Header provided by the bar virutal package + @property + def bar_headers(self): + return find_headers('bar/bar', root=self.home.include, recursive=False) + + # Libary provided by the bar virtual package + @property + def bar_libs(self): + return find_libraries('libFooBar', root=self.home, recursive=True) + + # The baz virtual package home + @property + def baz_home(self): + return self.home.baz + + # Header provided by the baz virtual package + @property + def baz_headers(self): + return find_headers('baz/baz', root=self.baz_home.include, recursive=False) + + # Library provided by the baz virtual package + @property + def baz_libs(self): + return find_libraries('libFooBaz', root=self.baz_home, recursive=True) diff --git a/var/spack/repos/builtin/packages/ibm-java/package.py b/var/spack/repos/builtin/packages/ibm-java/package.py index c2c65c27a8..2a936fe850 100644 --- a/var/spack/repos/builtin/packages/ibm-java/package.py +++ b/var/spack/repos/builtin/packages/ibm-java/package.py @@ -60,10 +60,6 @@ class IbmJava(Package): return url - @property - def home(self): - return self.prefix - @property def libs(self): return find_libraries(['libjvm'], root=self.home, recursive=True) @@ -74,9 +70,6 @@ class IbmJava(Package): def setup_dependent_build_environment(self, env, dependent_spec): env.set('JAVA_HOME', self.home) - def setup_dependent_package(self, module, dependent_spec): - self.spec.home = self.home - def install(self, spec, prefix): archive = os.path.basename(self.stage.archive_file) diff --git a/var/spack/repos/builtin/packages/icedtea/package.py b/var/spack/repos/builtin/packages/icedtea/package.py index 1cfac3640b..445c82f95d 100644 --- a/var/spack/repos/builtin/packages/icedtea/package.py +++ b/var/spack/repos/builtin/packages/icedtea/package.py @@ -118,12 +118,6 @@ class Icedtea(AutotoolsPackage): # can symlink all *.jar files to `prefix.lib.ext` extendable = True - @property - def home(self): - """For compatibility with the ``jdk`` package, so that other packages - can say ``spec['java'].home`` regardless of the Java provider.""" - return self.prefix - def configure_args(self): os.environ['POTENTIAL_CXX'] = os.environ['CXX'] os.environ['POTENTIAL_CC'] = os.environ['CC'] @@ -155,7 +149,7 @@ class Icedtea(AutotoolsPackage): '--with-nashorn-checksum=no', '--disable-maintainer-mode' '--disable-downloading', '--disable-system-pcsc', '--disable-system-sctp', '--disable-system-kerberos', - '--with-jdk-home=' + self.spec['jdk'].prefix + '--with-jdk-home=' + self.spec['jdk'].home ] return args @@ -191,8 +185,3 @@ class Icedtea(AutotoolsPackage): class_paths = find(dependent_spec.prefix, '*.jar') classpath = os.pathsep.join(class_paths) env.prepend_path('CLASSPATH', classpath) - - def setup_dependent_package(self, module, dependent_spec): - """Allows spec['java'].home to work.""" - - self.spec.home = self.home diff --git a/var/spack/repos/builtin/packages/jdk/package.py b/var/spack/repos/builtin/packages/jdk/package.py index 506df98ec9..a9356f17f6 100644 --- a/var/spack/repos/builtin/packages/jdk/package.py +++ b/var/spack/repos/builtin/packages/jdk/package.py @@ -202,8 +202,3 @@ and adding entries for each installation: class_paths = find(dependent_spec.prefix, '*.jar') classpath = os.pathsep.join(class_paths) env.prepend_path('CLASSPATH', classpath) - - def setup_dependent_package(self, module, dependent_spec): - """Allows spec['java'].home to work.""" - - self.spec.home = self.home diff --git a/var/spack/repos/builtin/packages/openjdk/package.py b/var/spack/repos/builtin/packages/openjdk/package.py index 7be8df6835..fa478c2078 100644 --- a/var/spack/repos/builtin/packages/openjdk/package.py +++ b/var/spack/repos/builtin/packages/openjdk/package.py @@ -207,8 +207,3 @@ class Openjdk(Package): class_paths = find(dependent_spec.prefix, '*.jar') classpath = os.pathsep.join(class_paths) env.prepend_path('CLASSPATH', classpath) - - def setup_dependent_package(self, module, dependent_spec): - """Allows spec['java'].home to work.""" - - self.spec.home = self.home diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py index 44c364b652..d0d18b4de0 100644 --- a/var/spack/repos/builtin/packages/python/package.py +++ b/var/spack/repos/builtin/packages/python/package.py @@ -1300,8 +1300,6 @@ config.update(get_paths()) module.python_platlib = join_path(dependent_spec.prefix, self.platlib) module.python_purelib = join_path(dependent_spec.prefix, self.purelib) - self.spec.home = self.home - # Make the site packages directory for extensions if dependent_spec.package.is_extension: mkdirp(module.python_platlib) -- cgit v1.2.3-70-g09d2