From 0bc1bffe5044c7417ff3b3a2f01795138f6f7433 Mon Sep 17 00:00:00 2001 From: Brice Videau Date: Fri, 15 Oct 2021 11:59:32 -0500 Subject: Fix ruby dependent extensions. (#26729) * Fix ruby dependent extensions. * Added Kerilk as maintainer. --- lib/spack/spack/build_systems/ruby.py | 9 ++++++++- var/spack/repos/builtin/packages/ruby/package.py | 14 +++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/lib/spack/spack/build_systems/ruby.py b/lib/spack/spack/build_systems/ruby.py index 5736d0913a..e0a208e7c0 100644 --- a/lib/spack/spack/build_systems/ruby.py +++ b/lib/spack/spack/build_systems/ruby.py @@ -18,6 +18,9 @@ class RubyPackage(PackageBase): #. :py:meth:`~.RubyPackage.build` #. :py:meth:`~.RubyPackage.install` """ + + maintainers = ['Kerilk'] + #: Phases of a Ruby package phases = ['build', 'install'] @@ -50,8 +53,12 @@ class RubyPackage(PackageBase): gems = glob.glob('*.gem') if gems: + # if --install-dir is not used, GEM_PATH is deleted from the + # environement, and Gems required to build native extensions will + # not be found. Those extensions are built during `gem install`. inspect.getmodule(self).gem( - 'install', '--norc', '--ignore-dependencies', gems[0]) + 'install', '--norc', '--ignore-dependencies', + '--install-dir', prefix, gems[0]) # Check that self.prefix is there after installation run_after('install')(PackageBase.sanity_check_prefix) diff --git a/var/spack/repos/builtin/packages/ruby/package.py b/var/spack/repos/builtin/packages/ruby/package.py index d92e8cf419..fad0096209 100644 --- a/var/spack/repos/builtin/packages/ruby/package.py +++ b/var/spack/repos/builtin/packages/ruby/package.py @@ -10,6 +10,8 @@ class Ruby(AutotoolsPackage): """A dynamic, open source programming language with a focus on simplicity and productivity.""" + maintainers = ['Kerilk'] + homepage = "https://www.ruby-lang.org/" url = "https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz" list_url = "https://cache.ruby-lang.org/pub/ruby/" @@ -88,16 +90,18 @@ class Ruby(AutotoolsPackage): def setup_dependent_build_environment(self, env, dependent_spec): # TODO: do this only for actual extensions. # Set GEM_PATH to include dependent gem directories - ruby_paths = [] - for d in dependent_spec.traverse(): + for d in dependent_spec.traverse(deptype=('build', 'run', 'test'), root=True): if d.package.extends(self.spec): - ruby_paths.append(d.prefix) - - env.set_path('GEM_PATH', ruby_paths) + env.prepend_path('GEM_PATH', d.prefix) # The actual installation path for this gem env.set('GEM_HOME', dependent_spec.prefix) + def setup_dependent_run_environment(self, env, dependent_spec): + for d in dependent_spec.traverse(deptype=('run'), root=True): + if d.package.extends(self.spec): + env.prepend_path('GEM_PATH', d.prefix) + def setup_dependent_package(self, module, dependent_spec): """Called before ruby modules' install() methods. Sets GEM_HOME and GEM_PATH to values appropriate for the package being built. -- cgit v1.2.3-70-g09d2