diff --git a/lib/spack/spack/build_systems/intel.py b/lib/spack/spack/build_systems/intel.py
index 9b32c20d017eea24d42a5f0aef5820994027edd0..0ec81f35372ab0474910fba9d8e1bdff5841b32a 100644
--- a/lib/spack/spack/build_systems/intel.py
+++ b/lib/spack/spack/build_systems/intel.py
@@ -942,7 +942,7 @@ def mpi_setup_dependent_build_environment(
         for key, value in wrapper_vars.items():
             env.set(key, value)
 
-        debug_print("adding to spack_env:", wrapper_vars)
+        debug_print("adding to build env:", wrapper_vars)
 
     # ---------------------------------------------------------------------
     # General support for child packages
@@ -1054,7 +1054,7 @@ def _setup_dependent_env_callback(
             env.append_path('SPACK_COMPILER_EXTRA_RPATHS',
                             env_mods['SPACK_COMPILER_EXTRA_RPATHS'])
 
-            debug_print("adding/modifying spack_env:", env_mods)
+            debug_print("adding/modifying build env:", env_mods)
 
         if '+mpi' in self.spec or self.provides('mpi'):
             if compilers_of_client:
diff --git a/lib/spack/spack/build_systems/octave.py b/lib/spack/spack/build_systems/octave.py
index 677e623bd672954cd3212dd0d653cbd665fe4a01..5535cd4d9f4e1f3dbb030c9cf8907760e25273a1 100644
--- a/lib/spack/spack/build_systems/octave.py
+++ b/lib/spack/spack/build_systems/octave.py
@@ -29,12 +29,11 @@ class OctavePackage(PackageBase):
     extends('octave')
     depends_on('octave', type=('build', 'run'))
 
-    def setup_environment(self, spack_env, run_env):
-        """Set up the compile and runtime environments for a package."""
+    def setup_build_environment(self, env):
         # octave does not like those environment variables to be set:
-        spack_env.unset('CC')
-        spack_env.unset('CXX')
-        spack_env.unset('FC')
+        env.unset('CC')
+        env.unset('CXX')
+        env.unset('FC')
 
     def install(self, spec, prefix):
         """Install the package from the archive file"""
diff --git a/lib/spack/spack/test/package_sanity.py b/lib/spack/spack/test/package_sanity.py
index bbf63881a7cb51b189521bc0dc90ebc2fcaaabb9..e7ac1563eb33332541ac263c1ce471d170328070 100644
--- a/lib/spack/spack/test/package_sanity.py
+++ b/lib/spack/spack/test/package_sanity.py
@@ -141,7 +141,6 @@ def invalid_sha256_digest(fetcher):
     assert [] == errors
 
 
-@pytest.mark.xfail
 def test_api_for_build_and_run_environment():
     """Ensure that every package uses the correct API to set build and
     run environment, and not the old one.
@@ -154,7 +153,7 @@ def test_api_for_build_and_run_environment():
             failing.append(pkg)
 
     msg = ('there are {0} packages using the old API to set build '
-           'and run environment [{1}], for further information see'
+           'and run environment [{1}], for further information see '
            'https://github.com/spack/spack/pull/11115')
     assert not failing, msg.format(
         len(failing), ','.join(x.name for x in failing)
@@ -182,7 +181,9 @@ def test_prs_update_old_api():
             if failed:
                 failing.append(name)
 
-    msg = 'there are {0} packages still using old APIs in this PR [{1}]'
+    msg = ('there are {0} packages using the old API to set build '
+           'and run environment [{1}], for further information see '
+           'https://github.com/spack/spack/pull/11115')
     assert not failing, msg.format(
         len(failing), ','.join(failing)
     )
diff --git a/var/spack/repos/builtin/packages/amber/package.py b/var/spack/repos/builtin/packages/amber/package.py
index 94e3f23d1e7dc6f0ed961353bfab351c567efc49..93af77bbbccc61e04e19fcc80a10e0d1b9dfa7b1 100644
--- a/var/spack/repos/builtin/packages/amber/package.py
+++ b/var/spack/repos/builtin/packages/amber/package.py
@@ -40,11 +40,11 @@ class Amber(Package, CudaPackage):
     depends_on('py-matplotlib@:2.9', type=('build', 'run'))
     depends_on('zlib')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         sp_dir = join_path(self.prefix, 'python2.7/site-packages')
 
-        run_env.set('AMBERHOME', self.prefix)
-        run_env.prepend_path('PYTHONPATH', sp_dir)
+        env.set('AMBERHOME', self.prefix)
+        env.prepend_path('PYTHONPATH', sp_dir)
 
     def install(self, spec, prefix):
         # install AmberTools where it should be
diff --git a/var/spack/repos/builtin/packages/amrvis/package.py b/var/spack/repos/builtin/packages/amrvis/package.py
index 9a21ba8eca2c50effc5c85337f0b2947d9ff7f53..df1ed73e069e77e22a57fbbbd374e1041d4e9a2c 100644
--- a/var/spack/repos/builtin/packages/amrvis/package.py
+++ b/var/spack/repos/builtin/packages/amrvis/package.py
@@ -173,16 +173,16 @@ def edit(self, spec, prefix):
         with open('GNUmakefile', 'w') as file:
             file.writelines(contents)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # We don't want an AMREX_HOME the user may have set already
-        spack_env.unset('AMREX_HOME')
+        env.unset('AMREX_HOME')
         # Help force Amrvis to not pick up random system compilers
         if '+mpi' in self.spec:
-            spack_env.set('MPI_HOME', self.spec['mpi'].prefix)
-            spack_env.set('CC', self.spec['mpi'].mpicc)
-            spack_env.set('CXX', self.spec['mpi'].mpicxx)
-            spack_env.set('F77', self.spec['mpi'].mpif77)
-            spack_env.set('FC', self.spec['mpi'].mpifc)
+            env.set('MPI_HOME', self.spec['mpi'].prefix)
+            env.set('CC', self.spec['mpi'].mpicc)
+            env.set('CXX', self.spec['mpi'].mpicxx)
+            env.set('F77', self.spec['mpi'].mpif77)
+            env.set('FC', self.spec['mpi'].mpifc)
 
     def install(self, spec, prefix):
         # Install exe manually
diff --git a/var/spack/repos/builtin/packages/angsd/package.py b/var/spack/repos/builtin/packages/angsd/package.py
index 7959f2b20cb87e5a7794dafbb97222d684aaba8b..0d9d981be03a3defe660b7f91fef904f2d1b2010 100644
--- a/var/spack/repos/builtin/packages/angsd/package.py
+++ b/var/spack/repos/builtin/packages/angsd/package.py
@@ -22,8 +22,8 @@ class Angsd(MakefilePackage):
     depends_on('htslib')
     conflicts('^htslib@1.6:', when='@0.919')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('R_LIBS', prefix.R)
+    def setup_run_environment(self, env):
+        env.set('R_LIBS', self.prefix.R)
 
     def install(self, spec, prefix):
         mkdirp(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/ants/package.py b/var/spack/repos/builtin/packages/ants/package.py
index 903be43a485e83d48abea4eea3b4effb07dd29b5..f6591edbecdcb9a149adc3148d83ac81e48a0cc3 100644
--- a/var/spack/repos/builtin/packages/ants/package.py
+++ b/var/spack/repos/builtin/packages/ants/package.py
@@ -30,5 +30,5 @@ def install(self, spec, prefix):
             make("install")
         install_tree('Scripts', prefix.bin)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('ANTSPATH', self.prefix.bin)
+    def setup_run_environment(self, env):
+        env.set('ANTSPATH', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/aspera-cli/package.py b/var/spack/repos/builtin/packages/aspera-cli/package.py
index 00253a197388a4afaa06ee432bfc394869d51392..228d6538621aa6884e176c28495fcc087dd44ca6 100644
--- a/var/spack/repos/builtin/packages/aspera-cli/package.py
+++ b/var/spack/repos/builtin/packages/aspera-cli/package.py
@@ -17,8 +17,8 @@ class AsperaCli(Package):
             url='https://download.asperasoft.com/download/sw/cli/3.7.7/aspera-cli-3.7.7.608.927cce8-linux-64-release.sh',
             expand=False)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix.cli.bin)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix.cli.bin)
 
     def install(self, spec, prefix):
         runfile = glob(join_path(self.stage.source_path, 'aspera-cli*.sh'))[0]
diff --git a/var/spack/repos/builtin/packages/astral/package.py b/var/spack/repos/builtin/packages/astral/package.py
index f3a110a1bd34ca7c20e0a8733d9237e7225548b2..696a8076306b8efbf827a2c18d57fafb185592ab 100644
--- a/var/spack/repos/builtin/packages/astral/package.py
+++ b/var/spack/repos/builtin/packages/astral/package.py
@@ -44,5 +44,5 @@ def install(self, spec, prefix):
         filter_file('astral.jar', join_path(prefix.tools, jar_file),
                     script, **kwargs)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('ASTRAL_HOME', self.prefix.tools)
+    def setup_run_environment(self, env):
+        env.set('ASTRAL_HOME', self.prefix.tools)
diff --git a/var/spack/repos/builtin/packages/at-spi2-core/package.py b/var/spack/repos/builtin/packages/at-spi2-core/package.py
index 97d582b18db2927077d505cdcd4021ccc950192b..252bb3e2ff398304c9b4b7edcd57b4e895ed266d 100644
--- a/var/spack/repos/builtin/packages/at-spi2-core/package.py
+++ b/var/spack/repos/builtin/packages/at-spi2-core/package.py
@@ -35,6 +35,6 @@ def url_for_version(self, version):
         url = 'http://ftp.gnome.org/pub/gnome/sources/at-spi2-core'
         return url + '/%s/at-spi2-core-%s.tar.xz' % (version.up_to(2), version)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # this avoids an "import site" error in the build
-        spack_env.unset('PYTHONHOME')
+        env.unset('PYTHONHOME')
diff --git a/var/spack/repos/builtin/packages/atk/package.py b/var/spack/repos/builtin/packages/atk/package.py
index f3931e0ceddffd0e21bd835fd4b52d6a371dbc7b..763d550ee98d3ea4f4970ba98f66ac0018c6626c 100644
--- a/var/spack/repos/builtin/packages/atk/package.py
+++ b/var/spack/repos/builtin/packages/atk/package.py
@@ -35,11 +35,11 @@ def url_for_version(self, version):
         url = 'http://ftp.gnome.org/pub/gnome/sources/atk'
         return url + '/%s/atk-%s.tar.xz' % (version.up_to(2), version)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS",
-                               self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS",
-                             self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
 
     def install(self, spec, prefix):
         with working_dir('spack-build', create=True):
diff --git a/var/spack/repos/builtin/packages/bbmap/package.py b/var/spack/repos/builtin/packages/bbmap/package.py
index 47197d1c17f61f608bf957a7aada4834bbc41d6e..486edd02044ce2e208ff300b7772363be4bbac87 100644
--- a/var/spack/repos/builtin/packages/bbmap/package.py
+++ b/var/spack/repos/builtin/packages/bbmap/package.py
@@ -20,6 +20,6 @@ class Bbmap(Package):
     def install(self, spec, prefix):
         install_tree('.', prefix.bin)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('BBMAP_CONFIG', self.prefix.bin.config)
-        run_env.set('BBMAP_RESOURCES', self.prefix.bin.resources)
+    def setup_run_environment(self, env):
+        env.set('BBMAP_CONFIG', self.prefix.bin.config)
+        env.set('BBMAP_RESOURCES', self.prefix.bin.resources)
diff --git a/var/spack/repos/builtin/packages/beast2/package.py b/var/spack/repos/builtin/packages/beast2/package.py
index 299fbba8493e9ead7e287f134bdea8574ded6a52..0e8cd279a226b30d894f2afff594fb60f8654a66 100644
--- a/var/spack/repos/builtin/packages/beast2/package.py
+++ b/var/spack/repos/builtin/packages/beast2/package.py
@@ -22,8 +22,8 @@ class Beast2(Package):
 
     depends_on('java')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('BEAST', self.prefix)
+    def setup_run_environment(self, env):
+        env.set('BEAST', self.prefix)
 
     def install(self, spec, prefix):
         install_tree('bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/blasr-libcpp/package.py b/var/spack/repos/builtin/packages/blasr-libcpp/package.py
index 40693d9e89da317eb96a20c86259de8b20164a0d..4080e383a60415aab0fb0d92724510481519b393 100644
--- a/var/spack/repos/builtin/packages/blasr-libcpp/package.py
+++ b/var/spack/repos/builtin/packages/blasr-libcpp/package.py
@@ -45,10 +45,7 @@ def install(self, spec, prefix):
         install_tree('hdf', prefix.hdf)
         install_tree('pbdata', prefix.pbdata)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path('LD_LIBRARY_PATH',
-                               self.spec.prefix.hdf)
-        spack_env.prepend_path('LD_LIBRARY_PATH',
-                               self.spec.prefix.alignment)
-        spack_env.prepend_path('LD_LIBRARY_PATH',
-                               self.spec.prefix.pbdata)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('LD_LIBRARY_PATH', self.spec.prefix.hdf)
+        env.prepend_path('LD_LIBRARY_PATH', self.spec.prefix.alignment)
+        env.prepend_path('LD_LIBRARY_PATH', self.spec.prefix.pbdata)
diff --git a/var/spack/repos/builtin/packages/blasr/package.py b/var/spack/repos/builtin/packages/blasr/package.py
index a25f1486da3a34ec68cbd81f3dd95022afdacb08..9bc9e1b5f0f4439347849093ca626814f24d0977 100644
--- a/var/spack/repos/builtin/packages/blasr/package.py
+++ b/var/spack/repos/builtin/packages/blasr/package.py
@@ -26,19 +26,19 @@ class Blasr(Package):
 
     phases = ['configure', 'build', 'install']
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.spec.prefix.utils)
-        spack_env.prepend_path('CPATH', self.spec['blasr-libcpp'].prefix)
-        spack_env.prepend_path('CPATH', self.spec[
-                               'blasr-libcpp'].prefix.pbdata)
-        spack_env.prepend_path('CPATH', self.spec[
-                               'blasr-libcpp'].prefix.alignment)
-        spack_env.prepend_path('CPATH', self.spec['blasr-libcpp'].prefix.hdf)
+    def setup_build_environment(self, env):
+        env.prepend_path('CPATH', self.spec['blasr-libcpp'].prefix)
+        env.prepend_path('CPATH', self.spec['blasr-libcpp'].prefix.pbdata)
+        env.prepend_path('CPATH', self.spec['blasr-libcpp'].prefix.alignment)
+        env.prepend_path('CPATH', self.spec['blasr-libcpp'].prefix.hdf)
 
         # hdf has +mpi by default, so handle that possibility
         if ('+mpi' in self.spec['hdf5']):
-            spack_env.set('CC', self.spec['mpi'].mpicc)
-            spack_env.set('CXX', self.spec['mpi'].mpicxx)
+            env.set('CC', self.spec['mpi'].mpicc)
+            env.set('CXX', self.spec['mpi'].mpicxx)
+
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.spec.prefix.utils)
 
     def configure(self, spec, prefix):
         configure_args = [
diff --git a/var/spack/repos/builtin/packages/blat/package.py b/var/spack/repos/builtin/packages/blat/package.py
index 7b2f5de64920b3a865c502c85a4a7275a590d088..e403f4063a8c5b68b8a79917a5c2944bf4249047 100644
--- a/var/spack/repos/builtin/packages/blat/package.py
+++ b/var/spack/repos/builtin/packages/blat/package.py
@@ -17,8 +17,8 @@ class Blat(Package):
 
     depends_on('libpng')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('MACHTYPE', 'x86_64')
+    def setup_build_environment(self, env):
+        env.set('MACHTYPE', 'x86_64')
 
     def install(self, spec, prefix):
         mkdirp(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/bohrium/package.py b/var/spack/repos/builtin/packages/bohrium/package.py
index eb3f644d00c7c1ada3082fbc6671d7f7a218cfe1..9c5debb338d5b3731fb475760209f91bbfb13a0e 100644
--- a/var/spack/repos/builtin/packages/bohrium/package.py
+++ b/var/spack/repos/builtin/packages/bohrium/package.py
@@ -201,11 +201,11 @@ def cmake_args(self):
     #
     # Environment setup
     #
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # Bohrium needs an extra include dir apart from
         # the self.prefix.include dir
-        run_env.prepend_path("CPATH", self.prefix.include.bohrium)
-        run_env.set("BH_CONFIG", self.config_file)
+        env.prepend_path("CPATH", self.prefix.include.bohrium)
+        env.set("BH_CONFIG", self.config_file)
 
     #
     # Quick tests
diff --git a/var/spack/repos/builtin/packages/braker/package.py b/var/spack/repos/builtin/packages/braker/package.py
index f9db018c1d68571c669e46e4de6ac0f5dc32823d..7627e551779d3104d89c8b5c5df42249df5aa160 100644
--- a/var/spack/repos/builtin/packages/braker/package.py
+++ b/var/spack/repos/builtin/packages/braker/package.py
@@ -62,5 +62,5 @@ def filter_sbang(self):
             for file in files:
                 filter_file(pattern, repl, *files, backup=False)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PERL5LIB', prefix.lib)
+    def setup_run_environment(self, env):
+        env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/breseq/package.py b/var/spack/repos/builtin/packages/breseq/package.py
index 82893663d934df1cb371db54a91ab79a5b2a118d..c3a16307fc28746ed9743463954a50aee262aa86 100644
--- a/var/spack/repos/builtin/packages/breseq/package.py
+++ b/var/spack/repos/builtin/packages/breseq/package.py
@@ -30,8 +30,6 @@ class Breseq(AutotoolsPackage):
     conflicts('%gcc@:4.8')
     conflicts('%clang@:3.3')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('LDFLAGS',
-                      "-L{0}".format(self.spec['zlib'].prefix.lib))
-        spack_env.set('CFLAGS',
-                      "-I{0}".format(self.spec['zlib'].prefix.include))
+    def setup_build_environment(self, env):
+        env.set('LDFLAGS', "-L{0}".format(self.spec['zlib'].prefix.lib))
+        env.set('CFLAGS', "-I{0}".format(self.spec['zlib'].prefix.include))
diff --git a/var/spack/repos/builtin/packages/casper/package.py b/var/spack/repos/builtin/packages/casper/package.py
index 088a0b49b1d963fec64c88e9b216c2d6aeb983b4..d5bd3a4fee1d7515cdc6f94ad59d3c19aafe0f56 100644
--- a/var/spack/repos/builtin/packages/casper/package.py
+++ b/var/spack/repos/builtin/packages/casper/package.py
@@ -25,5 +25,5 @@ class Casper(MakefilePackage):
     def install(self, spec, prefix):
         install_tree('.', prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.spec.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/catalyst/package.py b/var/spack/repos/builtin/packages/catalyst/package.py
index a37574a888872f290fffa2972dabb56e55451edf..974eb06892021aced95bc3de493b6ae4afef4f12 100644
--- a/var/spack/repos/builtin/packages/catalyst/package.py
+++ b/var/spack/repos/builtin/packages/catalyst/package.py
@@ -148,7 +148,7 @@ def do_stage(self, mirror_only=False):
             tty.msg("Already generated %s in %s" % (self.name,
                                                     self.stage.source_path))
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # paraview 5.5 and later
         # - cmake under lib/cmake/paraview-5.5
         # - libs  under lib
@@ -160,18 +160,18 @@ def setup_environment(self, spack_env, run_env):
 
         if self.spec.version <= Version('5.4.1'):
             lib_dir = join_path(lib_dir, paraview_subdir)
-        run_env.set('ParaView_DIR', self.prefix)
-        run_env.prepend_path('LIBRARY_PATH', lib_dir)
-        run_env.prepend_path('LD_LIBRARY_PATH', lib_dir)
+        env.set('ParaView_DIR', self.prefix)
+        env.prepend_path('LIBRARY_PATH', lib_dir)
+        env.prepend_path('LD_LIBRARY_PATH', lib_dir)
 
         if '+python' in self.spec or '+python3' in self.spec:
             python_version = self.spec['python'].version.up_to(2)
-            run_env.prepend_path('PYTHONPATH', join_path(lib_dir,
-                                 'python{0}'.format(python_version),
-                                 'site-packages'))
+            env.prepend_path('PYTHONPATH', join_path(lib_dir,
+                             'python{0}'.format(python_version),
+                             'site-packages'))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('ParaView_DIR', self.prefix)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('ParaView_DIR', self.prefix)
 
     @property
     def root_cmakelists_dir(self):
diff --git a/var/spack/repos/builtin/packages/cbench/package.py b/var/spack/repos/builtin/packages/cbench/package.py
index 8c00aeeaddff2b5c8500ce017fb292d4dbba89fc..a6d0e931e89bb71bccb56111e82410943311f974 100644
--- a/var/spack/repos/builtin/packages/cbench/package.py
+++ b/var/spack/repos/builtin/packages/cbench/package.py
@@ -31,27 +31,27 @@ class Cbench(MakefilePackage):
     conflicts('%xl')
     conflicts('%xl_r')
 
-    def setup_environment(self, build_env, run_env):
+    def setup_build_environment(self, env):
         # The location of the Cbench source tree
-        build_env.set('CBENCHOME', self.stage.source_path)
+        env.set('CBENCHOME', self.stage.source_path)
 
         # The location that will contain all of your tests and their results
-        build_env.set('CBENCHTEST', self.prefix)
+        env.set('CBENCHTEST', self.prefix)
 
         # The location of the system MPI tree
-        build_env.set('MPIHOME', self.spec['mpi'].prefix)
+        env.set('MPIHOME', self.spec['mpi'].prefix)
 
         # Pick the compiler collection/chain you want to compile with.
         # Examples include: intel, gcc, pgi.
-        build_env.set('COMPILERCOLLECTION', self.compiler.name)
+        env.set('COMPILERCOLLECTION', self.compiler.name)
 
         # Linking flags for BLAS/LAPACK and FFTW
-        build_env.set('BLASLIB', self.spec['blas'].libs.ld_flags)
-        build_env.set('LAPACKLIB', self.spec['lapack'].libs.ld_flags)
-        build_env.set('FFTWLIB', self.spec['fftw'].libs.ld_flags)
+        env.set('BLASLIB', self.spec['blas'].libs.ld_flags)
+        env.set('LAPACKLIB', self.spec['lapack'].libs.ld_flags)
+        env.set('FFTWLIB', self.spec['fftw'].libs.ld_flags)
 
         # The number of make jobs (commands) to run simultaneously
-        build_env.set('JOBS', str(make_jobs))
+        env.set('JOBS', str(make_jobs))
 
     @run_before('build')
     @on_package_attributes(run_tests=True)
diff --git a/var/spack/repos/builtin/packages/cdhit/package.py b/var/spack/repos/builtin/packages/cdhit/package.py
index a2ba8c72bb7c3c6e3f8a1862dd5bb92982b0aef0..b771184468199c6b613f108257056deeffc070d6 100644
--- a/var/spack/repos/builtin/packages/cdhit/package.py
+++ b/var/spack/repos/builtin/packages/cdhit/package.py
@@ -31,5 +31,5 @@ def build(self, spec, prefix):
             make_args.append('zlib=no')
         make(*make_args)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('PREFIX', prefix.bin)
+    def setup_build_environment(self, env):
+        env.set('PREFIX', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/charmpp/package.py b/var/spack/repos/builtin/packages/charmpp/package.py
index c667ff28ef900e02ade89d3460db5774717d095b..c979454e93147bacf091097f6cfd984f38a4b210 100644
--- a/var/spack/repos/builtin/packages/charmpp/package.py
+++ b/var/spack/repos/builtin/packages/charmpp/package.py
@@ -82,17 +82,17 @@ class Charmpp(Package):
         provides('mpi@2', when='@6.7.1: build-target=AMPI backend={0}'.format(b))
         provides('mpi@2', when='@6.7.1: build-target=LIBS backend={0}'.format(b))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('MPICC',  join_path(self.prefix.bin, 'ampicc'))
-        spack_env.set('MPICXX', join_path(self.prefix.bin, 'ampicxx'))
-        spack_env.set('MPIF77', join_path(self.prefix.bin, 'ampif77'))
-        spack_env.set('MPIF90', join_path(self.prefix.bin, 'ampif90'))
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('MPICC',  self.prefix.bin.ampicc)
+        env.set('MPICXX', self.prefix.bin.ampicxx)
+        env.set('MPIF77', self.prefix.bin.ampif77)
+        env.set('MPIF90', self.prefix.bin.ampif90)
 
     def setup_dependent_package(self, module, dependent_spec):
-        self.spec.mpicc = join_path(self.prefix.bin, 'ampicc')
-        self.spec.mpicxx = join_path(self.prefix.bin, 'ampicxx')
-        self.spec.mpifc = join_path(self.prefix.bin, 'ampif90')
-        self.spec.mpif77 = join_path(self.prefix.bin, 'ampif77')
+        self.spec.mpicc  = self.prefix.bin.ampicc
+        self.spec.mpicxx = self.prefix.bin.ampicxx
+        self.spec.mpifc  = self.prefix.bin.ampif90
+        self.spec.mpif77 = self.prefix.bin.ampif77
 
     depends_on("mpi", when="backend=mpi")
     depends_on("papi", when="+papi")
diff --git a/var/spack/repos/builtin/packages/chill/package.py b/var/spack/repos/builtin/packages/chill/package.py
index 998f9500f2aa0be23f98d1b22b56b05e529e9336..215009c0b0ff2f929738308c92c3e3db54072a56 100644
--- a/var/spack/repos/builtin/packages/chill/package.py
+++ b/var/spack/repos/builtin/packages/chill/package.py
@@ -35,22 +35,27 @@ def autoreconf(self, spec, prefix):
         bash = which('bash')
         bash('./bootstrap')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         rose_home  = self.spec['rose'].prefix
         boost_home = self.spec['boost'].prefix
         iegen_home = self.spec['iegenlib'].prefix
 
-        spack_env.append_path('LD_LIBRARY_PATH', rose_home.lib)
-        spack_env.append_path('LD_LIBRARY_PATH', boost_home.lib)
-        spack_env.append_path('LD_LIBRARY_PATH', iegen_home.lib)
+        env.set('ROSEHOME', rose_home)
+        env.set('BOOSTHOME', boost_home)
+        env.set('IEGENHOME', iegen_home)
 
-        run_env.append_path('LD_LIBRARY_PATH', rose_home.lib)
-        run_env.append_path('LD_LIBRARY_PATH', boost_home.lib)
-        run_env.append_path('LD_LIBRARY_PATH', iegen_home.lib)
+        env.append_path('LD_LIBRARY_PATH', rose_home.lib)
+        env.append_path('LD_LIBRARY_PATH', boost_home.lib)
+        env.append_path('LD_LIBRARY_PATH', iegen_home.lib)
 
-        spack_env.set('ROSEHOME', rose_home)
-        spack_env.set('BOOSTHOME', boost_home)
-        spack_env.set('IEGENHOME', iegen_home)
+    def setup_run_environment(self, env):
+        rose_home  = self.spec['rose'].prefix
+        boost_home = self.spec['boost'].prefix
+        iegen_home = self.spec['iegenlib'].prefix
+
+        env.append_path('LD_LIBRARY_PATH', rose_home.lib)
+        env.append_path('LD_LIBRARY_PATH', boost_home.lib)
+        env.append_path('LD_LIBRARY_PATH', iegen_home.lib)
 
     def configure_args(self):
         args = ['--with-rose={0}'.format(self.spec['rose'].prefix),
diff --git a/var/spack/repos/builtin/packages/chlorop/package.py b/var/spack/repos/builtin/packages/chlorop/package.py
index 13e3af34bb26545c744271679be54f0450436308..a206f539e68e81faea25a39aa26e015e20a03b02 100644
--- a/var/spack/repos/builtin/packages/chlorop/package.py
+++ b/var/spack/repos/builtin/packages/chlorop/package.py
@@ -29,5 +29,5 @@ def install(self, spec, prefix):
         os.rename('chlorop', 'bin/chlorop')
         install_tree('.', prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('CHLOROP', self.prefix)
+    def setup_run_environment(self, env):
+        env.set('CHLOROP', self.prefix)
diff --git a/var/spack/repos/builtin/packages/cinch/package.py b/var/spack/repos/builtin/packages/cinch/package.py
index caba1e469fa04e429c9934ef8c7dafd499b27d6a..0c6aa3e8fe5da4f6edba42070b62f544f3f79a01 100644
--- a/var/spack/repos/builtin/packages/cinch/package.py
+++ b/var/spack/repos/builtin/packages/cinch/package.py
@@ -23,6 +23,6 @@ def install(self, spec, prefix):
         # (CMake) Header Only library so just copy
         install_tree(self.stage.source_path, prefix)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path('CMAKE_PREFIX_PATH', self.prefix)
-        spack_env.set('CINCH_SOURCE_DIR', self.prefix)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('CMAKE_PREFIX_PATH', self.prefix)
+        env.set('CINCH_SOURCE_DIR', self.prefix)
diff --git a/var/spack/repos/builtin/packages/citcoms/package.py b/var/spack/repos/builtin/packages/citcoms/package.py
index d7d9d13b5837d9600141905034a5aa7a2623452d..99760541b23cd2d67285d3fde480006fc7281cce 100644
--- a/var/spack/repos/builtin/packages/citcoms/package.py
+++ b/var/spack/repos/builtin/packages/citcoms/package.py
@@ -36,9 +36,9 @@ class Citcoms(AutotoolsPackage):
     conflicts('+pyre', when='@3.3:', msg='Pyre support was removed from 3.3+')
     conflicts('+exchanger', when='@3.3:', msg='Exchanger support was removed from 3.3+')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if '+ggrd' in self.spec:
-            spack_env.set('HC_HOME', self.spec['hc'].prefix)
+            env.set('HC_HOME', self.spec['hc'].prefix)
 
     def configure_args(self):
         args = ['CC={0}'.format(self.spec['mpi'].mpicc)]
diff --git a/var/spack/repos/builtin/packages/converge/package.py b/var/spack/repos/builtin/packages/converge/package.py
index 3b990ebd6af3cf8e5437ad01da5cd80641ac6978..de06a9e7804a27f82c1cfaa1c17b3105bb8d158e 100644
--- a/var/spack/repos/builtin/packages/converge/package.py
+++ b/var/spack/repos/builtin/packages/converge/package.py
@@ -215,7 +215,7 @@ def install(self, spec, prefix):
             if not os.path.exists('make_surface'):
                 os.symlink(make_surface, 'make_surface')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # CONVERGE searches for a valid license file in:
         #     $CONVERGE_ROOT/license/license.lic
-        run_env.set('CONVERGE_ROOT', self.prefix)
+        env.set('CONVERGE_ROOT', self.prefix)
diff --git a/var/spack/repos/builtin/packages/cppunit/package.py b/var/spack/repos/builtin/packages/cppunit/package.py
index b85f06218a47f07b20862e59dce2bc8b60d151b2..166358f5405df19669cf7cff36f9d130868a01bb 100644
--- a/var/spack/repos/builtin/packages/cppunit/package.py
+++ b/var/spack/repos/builtin/packages/cppunit/package.py
@@ -21,8 +21,8 @@ class Cppunit(AutotoolsPackage):
             multi=False,
             description='Use the specified C++ standard when building.')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         cxxstd = self.spec.variants['cxxstd'].value
         cxxstdflag = '' if cxxstd == 'default' else \
                      getattr(self.compiler, 'cxx{0}_flag'.format(cxxstd))
-        spack_env.append_flags('CXXFLAGS', cxxstdflag)
+        env.append_flags('CXXFLAGS', cxxstdflag)
diff --git a/var/spack/repos/builtin/packages/cryptsetup/package.py b/var/spack/repos/builtin/packages/cryptsetup/package.py
index 1ff2c98c66ff559d4d85f9ec53e66689c3441032..05b7041485a8f8eb03ef6fdfaf60f41cdb84e484 100644
--- a/var/spack/repos/builtin/packages/cryptsetup/package.py
+++ b/var/spack/repos/builtin/packages/cryptsetup/package.py
@@ -47,7 +47,10 @@ def configure_args(self):
         ]
         return args
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Prepend the sbin directory to PATH."""
-        spack_env.prepend_path('PATH', self.prefix.sbin)
-        run_env.prepend_path('PATH', self.prefix.sbin)
+        env.prepend_path('PATH', self.prefix.sbin)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        """Prepend the sbin directory to PATH."""
+        env.prepend_path('PATH', self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/darshan-runtime/package.py b/var/spack/repos/builtin/packages/darshan-runtime/package.py
index 0b3c770ded9a342a5fdeef4ef2d6c1eb97c201d5..0ae41c3ee577996864aeccc4fb2479554e18c686 100644
--- a/var/spack/repos/builtin/packages/darshan-runtime/package.py
+++ b/var/spack/repos/builtin/packages/darshan-runtime/package.py
@@ -54,7 +54,7 @@ def install(self, spec, prefix):
             make()
             make('install')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # default path for log file, could be user or site specific setting
-        darshan_log_dir = '%s' % os.environ['HOME']
-        run_env.set('DARSHAN_LOG_DIR_PATH', darshan_log_dir)
+        darshan_log_dir = os.environ['HOME']
+        env.set('DARSHAN_LOG_DIR_PATH', darshan_log_dir)
diff --git a/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py b/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py
index 53329fcfc62144bd6db51d0a174af1c63f57b653..660859fdc31f1b6266cdd6efee532254e4a08aa3 100644
--- a/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py
+++ b/var/spack/repos/builtin/packages/dealii-parameter-gui/package.py
@@ -17,5 +17,5 @@ class DealiiParameterGui(CMakePackage):
 
     depends_on('qt')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('PARAMETER_GUI_DIR', self.prefix)
+    def setup_run_environment(self, env):
+        env.set('PARAMETER_GUI_DIR', self.prefix)
diff --git a/var/spack/repos/builtin/packages/deconseq-standalone/package.py b/var/spack/repos/builtin/packages/deconseq-standalone/package.py
index ac451ff95abc987ca9316146f8a83af2c4bd9fd8..8516902cc6a15ac626f88f8f7102cdd9732bd91d 100644
--- a/var/spack/repos/builtin/packages/deconseq-standalone/package.py
+++ b/var/spack/repos/builtin/packages/deconseq-standalone/package.py
@@ -37,5 +37,5 @@ def install(self, spec, prefix):
         chmod('+x', join_path(prefix.bin, 'deconseq.pl'))
         chmod('+x', join_path(prefix.bin, 'splitFasta.pl'))
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PERL5LIB', prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PERL5LIB', self.prefix)
diff --git a/var/spack/repos/builtin/packages/dialign/package.py b/var/spack/repos/builtin/packages/dialign/package.py
index 5a8e6b7d7c0080888c437ef821ed2b38f39f983c..bad921c42e4797c2657586ea20bf9a7c0e76eae6 100644
--- a/var/spack/repos/builtin/packages/dialign/package.py
+++ b/var/spack/repos/builtin/packages/dialign/package.py
@@ -24,5 +24,5 @@ def install(self, spec, prefix):
         mkdirp(prefix.share)
         install_tree('dialign2_dir', prefix.share)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('DIALIGN2_DIR', self.prefix.share)
+    def setup_run_environment(self, env):
+        env.set('DIALIGN2_DIR', self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/dmd/package.py b/var/spack/repos/builtin/packages/dmd/package.py
index 57555244763ce091739978be435924b151cf8748..94d07f54be787e27191d22616df3c87a79f98532 100644
--- a/var/spack/repos/builtin/packages/dmd/package.py
+++ b/var/spack/repos/builtin/packages/dmd/package.py
@@ -32,10 +32,10 @@ class Dmd(MakefilePackage):
              sha256='71fa249dbfd278eec2b95ce577af32e623e44caf0d993905ddc189e3beec21d0',
              placement='tools')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix.linux.bin64)
-        run_env.prepend_path('LIBRARY_PATH', self.prefix.linux.lib64)
-        run_env.prepend_path('LD_LIBRARY_PATH', self.prefix.linux.lib64)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix.linux.bin64)
+        env.prepend_path('LIBRARY_PATH', self.prefix.linux.lib64)
+        env.prepend_path('LD_LIBRARY_PATH', self.prefix.linux.lib64)
 
     def edit(self, spec, prefix):
         # Move contents to dmd/
diff --git a/var/spack/repos/builtin/packages/docbook-xsl/package.py b/var/spack/repos/builtin/packages/docbook-xsl/package.py
index 99bfb06d66893d078871ee6e9d8bc919fa84b5ba..429c211cd6609deaff21c5d77e8f819fadc52d70 100644
--- a/var/spack/repos/builtin/packages/docbook-xsl/package.py
+++ b/var/spack/repos/builtin/packages/docbook-xsl/package.py
@@ -26,10 +26,10 @@ def install(self, spec, prefix):
     def catalog(self):
         return os.path.join(self.prefix, 'catalog.xml')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         catalog = self.catalog
-        run_env.set('XML_CATALOG_FILES', catalog, separator=' ')
+        env.set('XML_CATALOG_FILES', catalog, separator=' ')
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         catalog = self.catalog
-        spack_env.prepend_path("XML_CATALOG_FILES", catalog)
+        env.prepend_path("XML_CATALOG_FILES", catalog)
diff --git a/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py b/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
index ef517b92d22842057fb9af6c777e09999eba99eb..b62f01616169b3911b0a4675e1270bd16a5ed655 100644
--- a/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
+++ b/var/spack/repos/builtin/packages/eclipse-gcj-parser/package.py
@@ -45,6 +45,3 @@ def build(self, spec, prefix):
     def install(self, spec, prefix):
         mkdirp(spec.prefix.bin)
         install('ecj1', spec.prefix.bin)
-
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py
index 0c1a86d67698f69b0adca0ae4ea387abd409c111..843edc3a094878a7b064b05b547e33cd173227ab 100644
--- a/var/spack/repos/builtin/packages/eigen/package.py
+++ b/var/spack/repos/builtin/packages/eigen/package.py
@@ -48,9 +48,8 @@ class Eigen(CMakePackage):
 
     patch('find-ptscotch.patch', when='@3.3.4')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('CPATH',
-                             join_path(self.prefix, 'include', 'eigen3'))
+    def setup_run_environment(self, env):
+        env.prepend_path('CPATH', self.prefix.include.eigen3)
 
     @property
     def headers(self):
diff --git a/var/spack/repos/builtin/packages/everytrace-example/package.py b/var/spack/repos/builtin/packages/everytrace-example/package.py
index f5ccf381b84551c6e1b1279a57b5601f47e4a855..b4850bde4129277c19b0aa86ab3f0f1dd1a8601b 100644
--- a/var/spack/repos/builtin/packages/everytrace-example/package.py
+++ b/var/spack/repos/builtin/packages/everytrace-example/package.py
@@ -18,6 +18,3 @@ class EverytraceExample(CMakePackage):
 
     # Currently the only MPI this everytrace works with.
     depends_on('openmpi')
-
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', join_path(self.prefix, 'bin'))
diff --git a/var/spack/repos/builtin/packages/everytrace/package.py b/var/spack/repos/builtin/packages/everytrace/package.py
index 1de226bdac61d42f90da896c162d30e99fee80b1..2b762bbd1c94a29dcec4e622640a788772e6b8b0 100644
--- a/var/spack/repos/builtin/packages/everytrace/package.py
+++ b/var/spack/repos/builtin/packages/everytrace/package.py
@@ -31,6 +31,3 @@ def cmake_args(self):
             '-DUSE_MPI=%s' % ('YES' if '+mpi' in spec else 'NO'),
             '-DUSE_FORTRAN=%s' % ('YES' if '+fortran' in spec else 'NO'),
             '-DUSE_CXX=%s' % ('YES' if '+cxx' in spec else 'NO')]
-
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', join_path(self.prefix, 'bin'))
diff --git a/var/spack/repos/builtin/packages/express/package.py b/var/spack/repos/builtin/packages/express/package.py
index 45a05cffa8963fb8ea3505c8c27cb91803f687a4..b787fbe9a5ab1068f0664c764ed1c5ab0f84a6a5 100644
--- a/var/spack/repos/builtin/packages/express/package.py
+++ b/var/spack/repos/builtin/packages/express/package.py
@@ -40,6 +40,6 @@ def patch(self):
             edit.filter(r'\${CMAKE_CURRENT_SOURCE_DIR}/../bamtools/lib/'
                         'libbamtools.a', '%s' % self.spec['bamtools'].libs)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.prepend_path('CPATH', self.spec[
-                               'bamtools'].prefix.include.bamtools)
+    def setup_build_environment(self, env):
+        env.prepend_path('CPATH',
+                         self.spec['bamtools'].prefix.include.bamtools)
diff --git a/var/spack/repos/builtin/packages/extrae/package.py b/var/spack/repos/builtin/packages/extrae/package.py
index 54c3622b06ef2653946103ddf3fbf47c7a5db27f..3270b3c9846f3325796566c9f83012339b69c79e 100644
--- a/var/spack/repos/builtin/packages/extrae/package.py
+++ b/var/spack/repos/builtin/packages/extrae/package.py
@@ -101,10 +101,10 @@ def install(self, spec, prefix):
             else:
                 make('install', parallel=False)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # set EXTRAE_HOME in the module file
-        run_env.set('EXTRAE_HOME', self.prefix)
+        env.set('EXTRAE_HOME', self.prefix)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         # set EXTRAE_HOME for everyone using the Extrae package
-        spack_env.set('EXTRAE_HOME', self.prefix)
+        env.set('EXTRAE_HOME', self.prefix)
diff --git a/var/spack/repos/builtin/packages/fastqc/package.py b/var/spack/repos/builtin/packages/fastqc/package.py
index 289cda53bb9991efc5021a6259c46a84a07cbb29..b66539e7f19526c0c9b0c426b83a48a088a541e2 100644
--- a/var/spack/repos/builtin/packages/fastqc/package.py
+++ b/var/spack/repos/builtin/packages/fastqc/package.py
@@ -34,8 +34,8 @@ def install(self, spec, prefix):
 
     # In theory the 'run' dependency on 'jdk' above should take
     # care of this for me. In practice, it does not.
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         """Add <prefix> to the path; the package has a script at the
            top level.
         """
-        run_env.prepend_path('PATH', self.spec['java'].prefix.bin)
+        env.prepend_path('PATH', self.spec['java'].prefix.bin)
diff --git a/var/spack/repos/builtin/packages/fgsl/package.py b/var/spack/repos/builtin/packages/fgsl/package.py
index 60d3580f25dd5ae3e7bfd3e663295f17c0da9810..f28e6f1c9c15fef06929b3fe5c6b9865c5b31367 100644
--- a/var/spack/repos/builtin/packages/fgsl/package.py
+++ b/var/spack/repos/builtin/packages/fgsl/package.py
@@ -34,6 +34,6 @@ class Fgsl(AutotoolsPackage):
     def create_m4_dir(self):
         mkdir('m4')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if self.compiler.name == 'gcc':
-            spack_env.append_flags('FCFLAGS', "-ffree-line-length-none")
+            env.append_flags('FCFLAGS', "-ffree-line-length-none")
diff --git a/var/spack/repos/builtin/packages/flang/package.py b/var/spack/repos/builtin/packages/flang/package.py
index a09e25b5bea6f9f5dbf68c60793644e4b5619822..9608e68e29c8e9cb1fd74a49824ab6089d2fd824 100644
--- a/var/spack/repos/builtin/packages/flang/package.py
+++ b/var/spack/repos/builtin/packages/flang/package.py
@@ -71,9 +71,11 @@ def post_install(self):
         chmod = which('chmod')
         chmod('+x', flang)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # to find llvm's libc++.so
-        spack_env.set('LD_LIBRARY_PATH', self.spec['llvm'].prefix.lib)
-        run_env.set('FC', join_path(self.spec.prefix.bin, 'flang'))
-        run_env.set('F77', join_path(self.spec.prefix.bin, 'flang'))
-        run_env.set('F90', join_path(self.spec.prefix.bin, 'flang'))
+        env.set('LD_LIBRARY_PATH', self.spec['llvm'].prefix.lib)
+
+    def setup_run_environment(self, env):
+        env.set('FC',  self.spec.prefix.bin.flang)
+        env.set('F77', self.spec.prefix.bin.flang)
+        env.set('F90', self.spec.prefix.bin.flang)
diff --git a/var/spack/repos/builtin/packages/foam-extend/package.py b/var/spack/repos/builtin/packages/foam-extend/package.py
index 8932c4cc07012bb6dd5931ebff817138b09abbf7..3b8703639fe9e65958e5cd6a6dc61c423145e503 100644
--- a/var/spack/repos/builtin/packages/foam-extend/package.py
+++ b/var/spack/repos/builtin/packages/foam-extend/package.py
@@ -118,7 +118,7 @@ class FoamExtend(Package):
     # - End of definitions / setup -
     #
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         """Add environment variables to the generated module file.
         These environment variables come from running:
 
@@ -126,13 +126,6 @@ def setup_environment(self, spack_env, run_env):
 
            $ . $WM_PROJECT_DIR/etc/bashrc
         """
-
-        # NOTE: Spack runs setup_environment twice.
-        # 1) pre-build to set up the build environment
-        # 2) post-install to determine runtime environment variables
-        # The etc/bashrc is only available (with corrrect content)
-        # post-installation.
-
         bashrc = join_path(self.projectdir, 'etc', 'bashrc')
         minimal = True
         if os.path.isfile(bashrc):
@@ -173,7 +166,7 @@ def setup_environment(self, spack_env, run_env):
                         'PYTHON_BIN_DIR',
                     ])
 
-                run_env.extend(mods)
+                env.extend(mods)
                 minimal = False
                 tty.info('foam-extend env: {0}'.format(bashrc))
             except Exception:
@@ -182,19 +175,19 @@ def setup_environment(self, spack_env, run_env):
         if minimal:
             # pre-build or minimal environment
             tty.info('foam-extend minimal env {0}'.format(self.prefix))
-            run_env.set('FOAM_INST_DIR', os.path.dirname(self.projectdir)),
-            run_env.set('FOAM_PROJECT_DIR', self.projectdir)
-            run_env.set('WM_PROJECT_DIR', self.projectdir)
+            env.set('FOAM_INST_DIR', os.path.dirname(self.projectdir)),
+            env.set('FOAM_PROJECT_DIR', self.projectdir)
+            env.set('WM_PROJECT_DIR', self.projectdir)
             for d in ['wmake', self.archbin]:  # bin added automatically
-                run_env.prepend_path('PATH', join_path(self.projectdir, d))
+                env.prepend_path('PATH', join_path(self.projectdir, d))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Location of the OpenFOAM project.
         This is identical to the WM_PROJECT_DIR value, but we avoid that
         variable since it would mask the normal OpenFOAM cleanup of
         previous versions.
         """
-        spack_env.set('FOAM_PROJECT_DIR', self.projectdir)
+        env.set('FOAM_PROJECT_DIR', self.projectdir)
 
     @property
     def projectdir(self):
diff --git a/var/spack/repos/builtin/packages/font-util/package.py b/var/spack/repos/builtin/packages/font-util/package.py
index 11635276fa80a83f7182e499ef4619f6604e2637..92ac5d30eba0f6e5e2aa874c3631a16650852569 100644
--- a/var/spack/repos/builtin/packages/font-util/package.py
+++ b/var/spack/repos/builtin/packages/font-util/package.py
@@ -77,10 +77,9 @@ class FontUtil(AutotoolsPackage):
             default=','.join(fonts),
             multi=True)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.prepend_path('PATH', self.prefix.bin)
-        spack_env.prepend_path('PKG_CONFIG_PATH',
-                               join_path(self.prefix.lib, 'pkgconfig'))
+    def setup_build_environment(self, env):
+        env.prepend_path('PATH', self.prefix.bin)
+        env.prepend_path('PKG_CONFIG_PATH', self.prefix.lib.pkgconfig)
 
     @run_after('install')
     def font_install(self):
diff --git a/var/spack/repos/builtin/packages/fsl/package.py b/var/spack/repos/builtin/packages/fsl/package.py
index 642f09644abcdaae671d9fe46a74134753749399..649be1fb96790a720d8714fbb048ca97bcd2c412 100644
--- a/var/spack/repos/builtin/packages/fsl/package.py
+++ b/var/spack/repos/builtin/packages/fsl/package.py
@@ -51,33 +51,33 @@ def install(self, spec, prefix):
 
         install_tree('.', prefix)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if not self.stage.source_path:
             self.stage.fetch()
             self.stage.expand_archive()
 
-        spack_env.set('FSLDIR', self.stage.source_path)
-
-        # Here, run-time environment variables are being set manually.
-        # Normally these would be added to the modulefile at build-time
-        # by sourcing fsl.sh, but incorrect paths were being set, pointing to
-        # the staging directory rather than the install directory.
-        run_env.set('FSLDIR', self.prefix)
-        run_env.set('FSLOUTPUTTYPE', 'NIFTI_GZ')
-        run_env.set('FSLMULTIFILEQUIT', 'TRUE')
-        run_env.set('FSLTCLSH', self.prefix.bin.fsltclsh)
-        run_env.set('FSLWISH', self.prefix.bin.fslwish)
-        run_env.set('FSLLOCKDIR', '')
-        run_env.set('FSLMACHINELIST', '')
-        run_env.set('FSLREMOTECALL', '')
-        run_env.set('FSLGECUDAQ', 'cuda.q')
-
-        run_env.prepend_path('PATH', self.prefix)
+        env.set('FSLDIR', self.stage.source_path)
 
         # Below is for sourcing purposes during building
         fslsetup = join_path(self.stage.source_path, 'etc', 'fslconf',
                              'fsl.sh')
 
         if os.path.isfile(fslsetup):
-            spack_env.extend(EnvironmentModifications.from_sourcing_file(
-                             fslsetup))
+            env.extend(EnvironmentModifications.from_sourcing_file(fslsetup))
+
+    def setup_run_environment(self, env):
+        # Here, run-time environment variables are being set manually.
+        # Normally these would be added to the modulefile at build-time
+        # by sourcing fsl.sh, but incorrect paths were being set, pointing to
+        # the staging directory rather than the install directory.
+        env.set('FSLDIR', self.prefix)
+        env.set('FSLOUTPUTTYPE', 'NIFTI_GZ')
+        env.set('FSLMULTIFILEQUIT', 'TRUE')
+        env.set('FSLTCLSH', self.prefix.bin.fsltclsh)
+        env.set('FSLWISH', self.prefix.bin.fslwish)
+        env.set('FSLLOCKDIR', '')
+        env.set('FSLMACHINELIST', '')
+        env.set('FSLREMOTECALL', '')
+        env.set('FSLGECUDAQ', 'cuda.q')
+
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/fujitsu-mpi/package.py b/var/spack/repos/builtin/packages/fujitsu-mpi/package.py
index 3370cc3b217347deebb9fe06586178a9b91a3a24..79b0eeba30f0e98a8f5eb75aa9a5b5ed9aa036fe 100644
--- a/var/spack/repos/builtin/packages/fujitsu-mpi/package.py
+++ b/var/spack/repos/builtin/packages/fujitsu-mpi/package.py
@@ -33,8 +33,8 @@ def setup_dependent_package(self, module, dependent_spec):
         self.spec.mpif77 = self.prefix.bin.mpifrt
         self.spec.mpifc = self.prefix.bin.mpifrt
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('MPICC', self.prefix.bin.mpifcc)
-        spack_env.set('MPICXX', self.prefix.bin.mpiFCC)
-        spack_env.set('MPIF77', self.prefix.bin.mpifrt)
-        spack_env.set('MPIF90', self.prefix.bin.mpifrt)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('MPICC', self.prefix.bin.mpifcc)
+        env.set('MPICXX', self.prefix.bin.mpiFCC)
+        env.set('MPIF77', self.prefix.bin.mpifrt)
+        env.set('MPIF90', self.prefix.bin.mpifrt)
diff --git a/var/spack/repos/builtin/packages/g4ensdfstate/package.py b/var/spack/repos/builtin/packages/g4ensdfstate/package.py
index ad065f92339f91a91a29d7a6a2b41e70a8054ee7..e71397f6f19e879d62e8c202afad1aa2a56ca507 100644
--- a/var/spack/repos/builtin/packages/g4ensdfstate/package.py
+++ b/var/spack/repos/builtin/packages/g4ensdfstate/package.py
@@ -21,8 +21,8 @@ def install(self, spec, prefix):
                                  .format(self.version))
         install_tree(self.stage.source_path, install_path)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        run_env.set('G4ENSDFSTATEDATA', join_path(prefix.share, 'data'))
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.set('G4ENSDFSTATEDATA', self.prefix.share.data)
 
     def url_for_version(self, version):
         """Handle version string."""
diff --git a/var/spack/repos/builtin/packages/gams/package.py b/var/spack/repos/builtin/packages/gams/package.py
index c900c6aad8fcfa700f22c96682616cc7c5be9970..b42d41d5787387183c435db42500dd7edeaae646 100644
--- a/var/spack/repos/builtin/packages/gams/package.py
+++ b/var/spack/repos/builtin/packages/gams/package.py
@@ -20,10 +20,9 @@ class Gams(Package):
     def url_for_version(self, version):
         return "file://{0}/linux_x64_64_sfx.exe".format(os.getcwd())
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path("PATH", join_path(self.prefix,
-                                               'gams{0}_linux_x64_64_sfx'
-                                               .format(self.version)))
+    def setup_run_environment(self, env):
+        env.prepend_path("PATH", join_path(
+            self.prefix, 'gams{0}_linux_x64_64_sfx'.format(self.version)))
 
     def install(self, spec, prefix):
         os.chmod(join_path(self.stage.source_path,
diff --git a/var/spack/repos/builtin/packages/gatk/package.py b/var/spack/repos/builtin/packages/gatk/package.py
index 8f620daba578ef465aacfb2d3c307efcda64bcd5..9329767be33b90b90ecf1a5efaa873c0a5747dee 100644
--- a/var/spack/repos/builtin/packages/gatk/package.py
+++ b/var/spack/repos/builtin/packages/gatk/package.py
@@ -87,7 +87,7 @@ def install(self, spec, prefix):
                 **kwargs
             )
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path(
-            "GATK", join_path(self.prefix, "bin", "GenomeAnalysisTK.jar")
+    def setup_run_environment(self, env):
+        env.prepend_path(
+            "GATK", join_path(self.prefix.bin, "GenomeAnalysisTK.jar")
         )
diff --git a/var/spack/repos/builtin/packages/gaussian/package.py b/var/spack/repos/builtin/packages/gaussian/package.py
index 3acb95974d0164e6c9146dad1cae99613a29f403..19bf35d12998c2b50278294f11fa824d8289b64c 100644
--- a/var/spack/repos/builtin/packages/gaussian/package.py
+++ b/var/spack/repos/builtin/packages/gaussian/package.py
@@ -38,15 +38,14 @@ def install(self, spec, prefix):
                 filter_file('/usr/bin/linda', prefix.bin, join_path(prefix.bin,
                             filename), string='True')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('g09root', self.prefix)
-        run_env.set('GAUSSIANHOME', self.prefix)
-        run_env.set('GAUSS_EXEDIR', self.prefix.bin)
-        run_env.set('G09_BASIS', join_path(self.prefix.bin, 'basis'))
-        run_env.set('GAUSS_LEXEDIR', join_path(self.prefix.bin,
-                    'linda-exe'))
-        run_env.set('GAUSS_ARCHDIR', join_path(self.prefix.bin, 'arch'))
-        run_env.set('GAUSS_BSDDIR', join_path(self.prefix.bin, 'bsd'))
-        run_env.prepend_path('LD_LIBRARY_PATH', join_path(self.prefix.bin,
-                             'linda8.2/opteron-linux/lib'))
-        run_env.prepend_path('LD_LIBRARY_PATH', self.prefix.bin)
+    def setup_run_environment(self, env):
+        env.set('g09root', self.prefix)
+        env.set('GAUSSIANHOME', self.prefix)
+        env.set('GAUSS_EXEDIR', self.prefix.bin)
+        env.set('G09_BASIS', self.prefix.bin.basis)
+        env.set('GAUSS_LEXEDIR', join_path(self.prefix.bin, 'linda-exe'))
+        env.set('GAUSS_ARCHDIR', self.prefix.bin.arch)
+        env.set('GAUSS_BSDDIR', self.prefix.bin.bsd)
+        env.prepend_path('LD_LIBRARY_PATH', join_path(self.prefix.bin,
+                         'linda8.2', 'opteron-linux', 'lib'))
+        env.prepend_path('LD_LIBRARY_PATH', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
index 5981d6381ec5955058bee1b330a2ae4ab722361e..9fd81a4f4a30cdaa07e6cfc98a1187db2f17f3a1 100644
--- a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
+++ b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
@@ -46,11 +46,11 @@ def url_for_version(self, version):
         url = "https://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/{0}/gdk-pixbuf-{1}.tar.xz"
         return url.format(version.up_to(2), version)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS",
-                               self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS",
-                             self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
 
     def install(self, spec, prefix):
         with working_dir('spack-build', create=True):
@@ -81,7 +81,7 @@ def install(self, spec, prefix):
         if self.run_tests:
             make('installcheck')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # The "post-install.sh" script uses gdk-pixbuf-query-loaders,
         # which was installed earlier.
-        spack_env.prepend_path('PATH', self.prefix.bin)
+        env.prepend_path('PATH', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py
index d0a4c111e76239c430033b1589a8646398a7af55..86b539f3a85250c04d09b0e7b26e3fd8a895ccc0 100644
--- a/var/spack/repos/builtin/packages/geant4/package.py
+++ b/var/spack/repos/builtin/packages/geant4/package.py
@@ -145,7 +145,7 @@ def make_data_links(self):
                 target = os.readlink(d)
                 os.symlink(target, os.path.basename(target))
 
-    def setup_dependent_environment(self, spack_env, run_env, dep_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         version = self.version
         major = version[0]
         minor = version[1]
@@ -154,6 +154,5 @@ def setup_dependent_environment(self, spack_env, run_env, dep_spec):
         else:
             patch = 0
         datadir = 'Geant4-%s.%s.%s' % (major, minor, patch)
-        spack_env.append_path('CMAKE_MODULE_PATH',
-                              '{0}/{1}/Modules'.format(
-                                  self.prefix.lib64, datadir))
+        env.append_path('CMAKE_MODULE_PATH', join_path(
+            self.prefix.lib64, datadir, 'Modules'))
diff --git a/var/spack/repos/builtin/packages/genemark-et/package.py b/var/spack/repos/builtin/packages/genemark-et/package.py
index a66cfa87a0aeaf4fda8c51c13c65ada906b0fc8f..2c30370ccca76b524bd0263f77debae8135967dc 100644
--- a/var/spack/repos/builtin/packages/genemark-et/package.py
+++ b/var/spack/repos/builtin/packages/genemark-et/package.py
@@ -55,5 +55,5 @@ def filter_sbang(self):
             for file in files:
                 filter_file(pattern, repl, *files, backup=False)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PERL5LIB', prefix.lib)
+    def setup_run_environment(self, env):
+        env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/genometools/package.py b/var/spack/repos/builtin/packages/genometools/package.py
index e76b0df92c4250975592b9849f247d46b5b89d5b..78f21db2c0e516e90f48597dcbe4741466fbb65a 100644
--- a/var/spack/repos/builtin/packages/genometools/package.py
+++ b/var/spack/repos/builtin/packages/genometools/package.py
@@ -25,5 +25,5 @@ class Genometools(MakefilePackage):
     def install(self, spec, prefix):
         make('install', 'prefix=%s' % prefix)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('CPATH', self.prefix.include.genometools)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('CPATH', self.prefix.include.genometools)
diff --git a/var/spack/repos/builtin/packages/git/package.py b/var/spack/repos/builtin/packages/git/package.py
index 8828d682380478a30b6efefcdfac38f0727228cf..ceb4e2ccb04971e85735b915f9c78dc85ff7fc7b 100644
--- a/var/spack/repos/builtin/packages/git/package.py
+++ b/var/spack/repos/builtin/packages/git/package.py
@@ -185,13 +185,13 @@ class Git(AutotoolsPackage):
     depends_on('m4',       type='build')
     depends_on('tk',       type=('build', 'link'), when='+tcltk')
 
-    # See the comment in setup_environment re EXTLIBS.
+    # See the comment in setup_build_environment re EXTLIBS.
     def patch(self):
         filter_file(r'^EXTLIBS =$',
                     '#EXTLIBS =',
                     'Makefile')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # We use EXTLIBS rather than LDFLAGS so that git's Makefile
         # inserts the information into the proper place in the link commands
         # (alongside the # other libraries/paths that configure discovers).
@@ -204,9 +204,9 @@ def setup_environment(self, spack_env, run_env):
         # In that case the node in the DAG gets truncated and git DOES NOT
         # have a gettext dependency.
         if 'gettext' in self.spec:
-            spack_env.append_flags('EXTLIBS', '-L{0} -lintl'.format(
+            env.append_flags('EXTLIBS', '-L{0} -lintl'.format(
                 self.spec['gettext'].prefix.lib))
-            spack_env.append_flags('CFLAGS', '-I{0}'.format(
+            env.append_flags('CFLAGS', '-I{0}'.format(
                 self.spec['gettext'].prefix.include))
 
     def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/gnutls/package.py b/var/spack/repos/builtin/packages/gnutls/package.py
index 8511065177152edd39ac3a09ccf08b0795de77d0..71564bf0bb9547e39a18c3b61597822f54eaba2d 100644
--- a/var/spack/repos/builtin/packages/gnutls/package.py
+++ b/var/spack/repos/builtin/packages/gnutls/package.py
@@ -4,7 +4,6 @@
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
 from spack import *
-import os
 
 
 class Gnutls(AutotoolsPackage):
@@ -49,11 +48,10 @@ def url_for_version(self, version):
         url = "https://www.gnupg.org/ftp/gcrypt/gnutls/v{0}/gnutls-{1}.tar.xz"
         return url.format(version.up_to(2), version)
 
-    def setup_environment(self, build_env, run_env):
+    def setup_build_environment(self, env):
         spec = self.spec
         if '+guile' in spec:
-            build_env.set('GUILE', os.path.join(spec["guile"].prefix.bin,
-                                                'guile'))
+            env.set('GUILE', spec["guile"].prefix.bin.guile)
 
     def configure_args(self):
         spec = self.spec
diff --git a/var/spack/repos/builtin/packages/go-bootstrap/package.py b/var/spack/repos/builtin/packages/go-bootstrap/package.py
index e5bfcef380753da9a37da9856a2b31eace3b6187..fdb0ec5686cac72379d4367590178394f80ecd4e 100644
--- a/var/spack/repos/builtin/packages/go-bootstrap/package.py
+++ b/var/spack/repos/builtin/packages/go-bootstrap/package.py
@@ -55,8 +55,8 @@ def install(self, spec, prefix):
 
         install_tree('.', prefix)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('GOROOT_BOOTSTRAP', self.spec.prefix)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('GOROOT_BOOTSTRAP', self.spec.prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('GOROOT_FINAL', self.spec.prefix)
+    def setup_build_environment(self, env):
+        env.set('GOROOT_FINAL', self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/gobject-introspection/package.py b/var/spack/repos/builtin/packages/gobject-introspection/package.py
index 20996c981f7a1a180f7b228ee36f746e349b4485..df16de3e8a79951b1008b7d9c062972851f9f5e5 100644
--- a/var/spack/repos/builtin/packages/gobject-introspection/package.py
+++ b/var/spack/repos/builtin/packages/gobject-introspection/package.py
@@ -57,9 +57,11 @@ def url_for_version(self, version):
         url = 'http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/{0}/gobject-introspection-{1}.tar.xz'
         return url.format(version.up_to(2), version)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
 
     def install(self, spec, prefix):
         configure("--prefix=%s" % prefix)
@@ -69,5 +71,5 @@ def install(self, spec, prefix):
         make()
         make("install")
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('SPACK_SBANG', "%s/bin/sbang" % spack_root)
+    def setup_build_environment(self, env):
+        env.set('SPACK_SBANG', "%s/bin/sbang" % spack_root)
diff --git a/var/spack/repos/builtin/packages/gpu-burn/package.py b/var/spack/repos/builtin/packages/gpu-burn/package.py
index fd11176baa4ef1aa195a6ad8621eb7a6e5579f28..66af15f085222d2d5b36d76043dbc9004fed72d9 100644
--- a/var/spack/repos/builtin/packages/gpu-burn/package.py
+++ b/var/spack/repos/builtin/packages/gpu-burn/package.py
@@ -51,5 +51,5 @@ def install(self, spec, prefix):
     # The gpu_burn program looks for the compare.ptx file in the current
     # working directory. Create an environment variable that can be pointed to
     # so that it can be copied or linked.
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('COMPARE_PTX', join_path(self.prefix.share, 'compare.ptx'))
+    def setup_run_environment(self, env):
+        env.set('COMPARE_PTX', join_path(self.prefix.share, 'compare.ptx'))
diff --git a/var/spack/repos/builtin/packages/grnboost/package.py b/var/spack/repos/builtin/packages/grnboost/package.py
index 442fa77746dacb92ae8c2c93c4cf1fa0a78e4e9c..ee89fa5c014773351006a746dd3ecf632f1d6210 100644
--- a/var/spack/repos/builtin/packages/grnboost/package.py
+++ b/var/spack/repos/builtin/packages/grnboost/package.py
@@ -25,16 +25,16 @@ class Grnboost(Package):
     depends_on('xgboost+jvm-packages', type='run')
     depends_on('spark+hadoop', type='run')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         grnboost_jar = join_path(self.prefix, 'target',
                                  'scala-2.11', 'GRNBoost.jar')
         xgboost_version = self.spec['xgboost'].version.string
         xgboost_jar = join_path(self.spec['xgboost'].prefix,
                                 'xgboost4j-' + xgboost_version + '.jar')
-        run_env.set('GRNBOOST_JAR', grnboost_jar)
-        run_env.set('JAVA_HOME', self.spec['java'].prefix)
-        run_env.set('CLASSPATH', xgboost_jar)
-        run_env.set('XGBOOST_JAR', xgboost_jar)
+        env.set('GRNBOOST_JAR', grnboost_jar)
+        env.set('JAVA_HOME', self.spec['java'].prefix)
+        env.set('CLASSPATH', xgboost_jar)
+        env.set('XGBOOST_JAR', xgboost_jar)
 
     def install(self, spec, prefix):
         sbt = which('sbt')
diff --git a/var/spack/repos/builtin/packages/gtkplus/package.py b/var/spack/repos/builtin/packages/gtkplus/package.py
index dcd3e36529344a3eead5d98f2a19190307b171e7..92910aa8cd755455568aa4a80aaaf41ef2552bf2 100644
--- a/var/spack/repos/builtin/packages/gtkplus/package.py
+++ b/var/spack/repos/builtin/packages/gtkplus/package.py
@@ -48,11 +48,11 @@ def patch(self):
         filter_file(r'CFLAGS="-DGDK_PIXBUF_DISABLE_DEPRECATED $CFLAGS"',
                     '', 'configure', string=True)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS",
-                               self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS",
-                             self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
 
     def configure_args(self):
         args = []
diff --git a/var/spack/repos/builtin/packages/gtksourceview/package.py b/var/spack/repos/builtin/packages/gtksourceview/package.py
index 9907a9525524babc461f1164b9571917f135c3cf..9b469e9171f72e2fbdaba4fda3998902aa32aca6 100644
--- a/var/spack/repos/builtin/packages/gtksourceview/package.py
+++ b/var/spack/repos/builtin/packages/gtksourceview/package.py
@@ -42,13 +42,17 @@ def url_for_version(self, version):
         url += '{0}/gtksourceview-{1}.tar.xz'
         return url.format(version.up_to(2), version)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+
+    def setup_build_environment(self, env):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+
+    def setup_run_environment(self, env):
+        env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
 
     # TODO: If https://github.com/spack/spack/pull/12344 is merged, this
     # method is unnecessary.
diff --git a/var/spack/repos/builtin/packages/gurobi/package.py b/var/spack/repos/builtin/packages/gurobi/package.py
index b9c416e46b942b075e77f77bb33140fe31f3cbfe..fff3554f1578f028fe0e50f346b296862146a87c 100644
--- a/var/spack/repos/builtin/packages/gurobi/package.py
+++ b/var/spack/repos/builtin/packages/gurobi/package.py
@@ -35,8 +35,8 @@ class Gurobi(Package):
     def url_for_version(self, version):
         return "file://{0}/gurobi{1}_linux64.tar.gz".format(os.getcwd(), version)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('GUROBI_HOME', self.prefix)
+    def setup_run_environment(self, env):
+        env.set('GUROBI_HOME', self.prefix)
 
     def install(self, spec, prefix):
         install_tree('linux64', prefix)
diff --git a/var/spack/repos/builtin/packages/hdf5-blosc/package.py b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
index 7516ca6e4fbb1a1aeb961b8e886e9fcfe29a02d6..14a45f82a4f1cd42c21fa0098897db60836dc59e 100644
--- a/var/spack/repos/builtin/packages/hdf5-blosc/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
@@ -183,10 +183,14 @@ def check_install(self, spec):
                 raise RuntimeError("HDF5 Blosc plugin check failed")
         shutil.rmtree(checkdir)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
-        run_env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
+    def setup_build_environment(self, env):
+        env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
-        run_env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
+    def setup_run_environment(self, env):
+        env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
+
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.append_path("HDF5_PLUGIN_PATH", self.spec.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/hisat2/package.py b/var/spack/repos/builtin/packages/hisat2/package.py
index 64c756a9e8e66c255410682329135dafa6004517..eacee0dc018c595193f7f2c2d69d9619756882cf 100644
--- a/var/spack/repos/builtin/packages/hisat2/package.py
+++ b/var/spack/repos/builtin/packages/hisat2/package.py
@@ -40,5 +40,5 @@ def install(self, spec, prefix):
             if os.path.isfile(file):
                 install(file, prefix.bin)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.spec.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/hybpiper/package.py b/var/spack/repos/builtin/packages/hybpiper/package.py
index 86bab5b86a8ce08d5cf2b145d3fb4c973c7e2dd9..ed56dd021a631f8f18a8757acb68ff96178d7d93 100644
--- a/var/spack/repos/builtin/packages/hybpiper/package.py
+++ b/var/spack/repos/builtin/packages/hybpiper/package.py
@@ -31,8 +31,8 @@ class Hybpiper(Package):
     depends_on('bwa')
     depends_on('samtools')
 
-    def setup_envionment(self, spack_env, run_env):
-        run_env.set('HYBPIPER_HOME', prefix)
+    def setup_run_environment(self, env):
+        env.set('HYBPIPER_HOME', self.prefix)
 
     def install(self, spec, prefix):
         mkdirp(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/ibm-java/package.py b/var/spack/repos/builtin/packages/ibm-java/package.py
index 149a75aac415bcfa6e4075622920bea33b3c96bd..81db3881b7b526de3a436930a2c143a1d780a72f 100644
--- a/var/spack/repos/builtin/packages/ibm-java/package.py
+++ b/var/spack/repos/builtin/packages/ibm-java/package.py
@@ -48,11 +48,11 @@ def home(self):
     def libs(self):
         return find_libraries(['libjvm'], root=self.home, recursive=True)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('JAVA_HOME', self.home)
+    def setup_run_environment(self, env):
+        env.set('JAVA_HOME', self.home)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('JAVA_HOME', self.home)
+    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
diff --git a/var/spack/repos/builtin/packages/icedtea/package.py b/var/spack/repos/builtin/packages/icedtea/package.py
index a62550b2c10c46d3791c706879f1082165d7537c..a367d9222382439067a9914c533f049d9c4945ff 100644
--- a/var/spack/repos/builtin/packages/icedtea/package.py
+++ b/var/spack/repos/builtin/packages/icedtea/package.py
@@ -153,18 +153,18 @@ def configure_args(self):
         ]
         return args
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         """Set JAVA_HOME."""
 
-        run_env.set('JAVA_HOME', self.home)
+        env.set('JAVA_HOME', self.home)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Set JAVA_HOME and CLASSPATH.
 
         CLASSPATH contains the installation prefix for the extension and any
         other Java extensions it depends on."""
 
-        spack_env.set('JAVA_HOME', self.home)
+        env.set('JAVA_HOME', self.home)
 
         class_paths = []
         for d in dependent_spec.traverse(deptype=('build', 'run', 'test')):
@@ -172,14 +172,19 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
                 class_paths.extend(find(d.prefix, '*.jar'))
 
         classpath = os.pathsep.join(class_paths)
-        spack_env.set('CLASSPATH', classpath)
+        env.set('CLASSPATH', classpath)
 
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        """Set CLASSPATH.
+
+        CLASSPATH contains the installation prefix for the extension and any
+        other Java extensions it depends on."""
         # For runtime environment set only the path for
         # dependent_spec and prepend it to CLASSPATH
         if dependent_spec.package.extends(self.spec):
             class_paths = find(dependent_spec.prefix, '*.jar')
             classpath = os.pathsep.join(class_paths)
-            run_env.prepend_path('CLASSPATH', classpath)
+            env.prepend_path('CLASSPATH', classpath)
 
     def setup_dependent_package(self, module, dependent_spec):
         """Allows spec['java'].home to work."""
diff --git a/var/spack/repos/builtin/packages/icet/package.py b/var/spack/repos/builtin/packages/icet/package.py
index 6e708a77838408b639b9846f939ba03f63d89e6a..932b674b010e55dd048c9454b0ef61102c6bb9b9 100644
--- a/var/spack/repos/builtin/packages/icet/package.py
+++ b/var/spack/repos/builtin/packages/icet/package.py
@@ -22,6 +22,6 @@ class Icet(CMakePackage):
     def cmake_args(self):
         return ['-DICET_USE_OPENGL:BOOL=OFF']
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Work-around for ill-placed CMake modules"""
-        spack_env.prepend_path('CMAKE_PREFIX_PATH', self.prefix.lib)
+        env.prepend_path('CMAKE_PREFIX_PATH', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/jmol/package.py b/var/spack/repos/builtin/packages/jmol/package.py
index 421199f70fe6b5317779226c7c233d7e05c96ab7..c61182f2bd1a22edb0e4a16abe99b039af5e2b0f 100644
--- a/var/spack/repos/builtin/packages/jmol/package.py
+++ b/var/spack/repos/builtin/packages/jmol/package.py
@@ -20,6 +20,6 @@ class Jmol(Package):
     def install(self, spec, prefix):
         install_tree('jmol-{0}'.format(self.version), prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix)
-        run_env.set('JMOL_HOME', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
+        env.set('JMOL_HOME', self.prefix)
diff --git a/var/spack/repos/builtin/packages/jube/package.py b/var/spack/repos/builtin/packages/jube/package.py
index 0eb96ffc120a933c66b7b85c0a9aa43a8844965a..79a43fb9a9dac894a8b073b821b5d831a95bc75b 100644
--- a/var/spack/repos/builtin/packages/jube/package.py
+++ b/var/spack/repos/builtin/packages/jube/package.py
@@ -33,10 +33,8 @@ class Jube(PythonPackage):
 
     depends_on('py-setuptools', type='build')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         if not self.spec.variants['resource_manager'].value == 'none':
-            run_env.prepend_path(
-                'JUBE_INCLUDE_PATH',
-                prefix + "/platform/" +
-                self.spec.variants['resource_manager'].value
-            )
+            env.prepend_path('JUBE_INCLUDE_PATH', join_path(
+                self.prefix.platform,
+                self.spec.variants['resource_manager'].value))
diff --git a/var/spack/repos/builtin/packages/karma/package.py b/var/spack/repos/builtin/packages/karma/package.py
index 439369f69719319dcb47aba011a5d2656a75790b..bfab95e23eb7a1ce9bd1c0514c63bc921709196b 100644
--- a/var/spack/repos/builtin/packages/karma/package.py
+++ b/var/spack/repos/builtin/packages/karma/package.py
@@ -24,15 +24,11 @@ class Karma(Package):
     phases = ['install']
 
     resource(
-                name='karma-linux',
-                url='ftp://ftp.atnf.csiro.au/pub/software/karma/karma-1.7.25-amd64_Linux_libc6.3.tar.bz2',
-                sha256='effc3ed61c28b966b357147d90357d03c22d743c6af6edb49a863c6eb625a441',
-                destination='./'
-               )
-
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('LIBRARY_PATH', self.prefix.lib)
-        run_env.prepend_path('LD_LIBRARY_PATH', self.prefix.lib)
+        name='karma-linux',
+        url='ftp://ftp.atnf.csiro.au/pub/software/karma/karma-1.7.25-amd64_Linux_libc6.3.tar.bz2',
+        sha256='effc3ed61c28b966b357147d90357d03c22d743c6af6edb49a863c6eb625a441',
+        destination='./'
+    )
 
     def install(self, spec, prefix):
         install_tree('./karma-1.7.25/amd64_Linux_libc6.3/bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/launchmon/package.py b/var/spack/repos/builtin/packages/launchmon/package.py
index b223387b96d013b141706d75cdaf1ed2014bc573..b4dda52d5ab84173d34d7f2c2577a9685c980334 100644
--- a/var/spack/repos/builtin/packages/launchmon/package.py
+++ b/var/spack/repos/builtin/packages/launchmon/package.py
@@ -28,9 +28,9 @@ class Launchmon(AutotoolsPackage):
 
     patch('launchmon-char-conv.patch', when='@1.0.2')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if self.spec.satisfies('@master'):
             # automake for launchmon requires the AM_PATH_LIBGCRYPT macro
             # which is defined in libgcrypt.m4
-            spack_env.prepend_path('ACLOCAL_PATH',
-                                   self.spec['libgcrypt'].prefix.share.aclocal)
+            env.prepend_path('ACLOCAL_PATH',
+                             self.spec['libgcrypt'].prefix.share.aclocal)
diff --git a/var/spack/repos/builtin/packages/ldc-bootstrap/package.py b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
index 05291360f16ea989a21e036c09ada886ba1eb965..e98e1be54666a005bb584997afdeda4753dc1c47 100644
--- a/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
+++ b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
@@ -31,14 +31,14 @@ class LdcBootstrap(CMakePackage):
     depends_on('libedit')
     depends_on('binutils')
 
-    def setup_dependent_environment(self, build_env, run_env, dep_spec):
+    def setup_dependent_build_environment(self, env, dep_spec):
 
         # The code below relies on this function being executed after the
         # environment has been sanitized (because LD_LIBRARY_PATH is among
         # the variables that get unset)
 
         # We need libphobos in LD_LIBRARY_PATH
-        build_env.prepend_path('LD_LIBRARY_PATH', self.prefix.lib)
+        env.prepend_path('LD_LIBRARY_PATH', self.prefix.lib)
 
     def cmake_args(self):
         return [
diff --git a/var/spack/repos/builtin/packages/libfabric/package.py b/var/spack/repos/builtin/packages/libfabric/package.py
index ede7f53f668f28c8b030005e609672b8358d2d96..588911c15dd55d30b94d404313a72283d3cfaa51 100644
--- a/var/spack/repos/builtin/packages/libfabric/package.py
+++ b/var/spack/repos/builtin/packages/libfabric/package.py
@@ -90,9 +90,9 @@ class Libfabric(AutotoolsPackage):
              sha256='3b78d0ca1b223ff21b7f5b3627e67e358e3c18b700f86b017e2233fee7e88c2e',
              placement='fabtests', when='@1.5.0')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if self.run_tests:
-            spack_env.prepend_path('PATH', self.prefix.bin)
+            env.prepend_path('PATH', self.prefix.bin)
 
     @when('@develop')
     def autoreconf(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/libint/package.py b/var/spack/repos/builtin/packages/libint/package.py
index d58e4fec1d3c968b34967ad43f1b83744042e13e..edb6d8d46f5ea4a1f40dca80dde555d0e7040d71 100644
--- a/var/spack/repos/builtin/packages/libint/package.py
+++ b/var/spack/repos/builtin/packages/libint/package.py
@@ -81,15 +81,15 @@ def optflags(self):
 
         return flags
 
-    def setup_environment(self, build_env, run_env):
+    def setup_build_environment(self, env):
         # Set optimization flags
-        build_env.set('CFLAGS', self.optflags)
-        build_env.set('CXXFLAGS', self.optflags)
+        env.set('CFLAGS', self.optflags)
+        env.set('CXXFLAGS', self.optflags)
 
         # Change AR to xiar if we compile with Intel and we
         # find the executable
         if '%intel' in self.spec and which('xiar'):
-            build_env.set('AR', 'xiar')
+            env.set('AR', 'xiar')
 
     def configure_args(self):
 
diff --git a/var/spack/repos/builtin/packages/libmesh/package.py b/var/spack/repos/builtin/packages/libmesh/package.py
index 0990d25a2f66e551730dfec28330ed6b52648e3d..29ff2e2aa4f69b5ed9f175d4eea253c732713b4f 100644
--- a/var/spack/repos/builtin/packages/libmesh/package.py
+++ b/var/spack/repos/builtin/packages/libmesh/package.py
@@ -245,5 +245,5 @@ def configure_args(self):
 
         return options
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.append_flags('PERL', self.spec['perl'].command.path)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.append_flags('PERL', self.spec['perl'].command.path)
diff --git a/var/spack/repos/builtin/packages/libpeas/package.py b/var/spack/repos/builtin/packages/libpeas/package.py
index 01aef48f15001398d1dc44faf0931d5206bbd42b..2bf57652590b537c67dfe608b5367ea23fff5463 100644
--- a/var/spack/repos/builtin/packages/libpeas/package.py
+++ b/var/spack/repos/builtin/packages/libpeas/package.py
@@ -44,11 +44,13 @@ def url_for_version(self, version):
         url += '{0}/libpeas-{1}.tar.xz'
         return url.format(version.up_to(2), version)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
+
+    def setup_build_environment(self, env):
         # Let
         #
         # python = self.spec['python']
@@ -76,10 +78,11 @@ def setup_environment(self, spack_env, run_env):
         python_pc_file = os.path.join(python_prefix, 'python3.pc')
         python_ldflags = pkg_config('--libs', python_pc_file, output=str)
 
-        spack_env.append_path('LDFLAGS',
-                              python_ldflags)
-        spack_env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
-        run_env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
+        env.append_path('LDFLAGS', python_ldflags)
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
+
+    def setup_run_environment(self, env):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
 
     def autoreconf(self, spec, prefix):
         autoreconf_args = ['-ivf']
diff --git a/var/spack/repos/builtin/packages/librsvg/package.py b/var/spack/repos/builtin/packages/librsvg/package.py
index 99131420de43d5b1cd5f522634104427e9461908..eb02d86289c36e4444bed9eba470074277f3e47d 100644
--- a/var/spack/repos/builtin/packages/librsvg/package.py
+++ b/var/spack/repos/builtin/packages/librsvg/package.py
@@ -30,10 +30,14 @@ def url_for_version(self, version):
         url += "{0}/librsvg-{1}.tar.xz"
         return url.format(version.up_to(2), version)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS", self.prefix.share)
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
+
+    def setup_build_environment(self, env):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
+
+    def setup_run_environment(self, env):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/libtool/package.py b/var/spack/repos/builtin/packages/libtool/package.py
index bbad95e573585b740a539a177d2ccfcd021a399a..5754556c810c1559eeb2b0757a2395898bb668ef 100644
--- a/var/spack/repos/builtin/packages/libtool/package.py
+++ b/var/spack/repos/builtin/packages/libtool/package.py
@@ -37,9 +37,8 @@ def autoreconf(self, spec, prefix):
     def _make_executable(self, name):
         return Executable(join_path(self.prefix.bin, name))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.append_path('ACLOCAL_PATH',
-                              join_path(self.prefix.share, 'aclocal'))
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.append_path('ACLOCAL_PATH', self.prefix.share.aclocal)
 
     def setup_dependent_package(self, module, dependent_spec):
         # Automake is very likely to be a build dependency, so we add
diff --git a/var/spack/repos/builtin/packages/libx11/package.py b/var/spack/repos/builtin/packages/libx11/package.py
index 5c1a7f21f337259e294c8cb95fd8aef4e5fc77fb..d88b5bab6570bf67a0145e19c9c6bdfc876966e4 100644
--- a/var/spack/repos/builtin/packages/libx11/package.py
+++ b/var/spack/repos/builtin/packages/libx11/package.py
@@ -27,9 +27,11 @@ class Libx11(AutotoolsPackage):
     depends_on('util-macros', type='build')
     depends_on('perl', type='build')
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path('XLOCALEDIR', self.prefix.share.X11.locale)
-        run_env.prepend_path('XLOCALEDIR', self.prefix.share.X11.locale)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('XLOCALEDIR', self.prefix.share.X11.locale)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path('XLOCALEDIR', self.prefix.share.X11.locale)
 
     @property
     def libs(self):
diff --git a/var/spack/repos/builtin/packages/libxc/package.py b/var/spack/repos/builtin/packages/libxc/package.py
index 987495a6e513535534345a6ce17756b17cb440a4..d592e824d6693aeb47dffe1e29e7558698b9fa1f 100644
--- a/var/spack/repos/builtin/packages/libxc/package.py
+++ b/var/spack/repos/builtin/packages/libxc/package.py
@@ -49,7 +49,7 @@ def libs(self):
             libraries, root=self.prefix, shared=shared, recursive=True
         )
 
-    def setup_build_environment(self, spack_env):
+    def setup_build_environment(self, env):
         optflags = '-O2'
         if self.compiler.name == 'intel':
             # Optimizations for the Intel compiler, suggested by CP2K
@@ -76,10 +76,10 @@ def setup_build_environment(self, spack_env):
             #
             optflags += ' -xSSE4.2 -axAVX,CORE-AVX2 -ipo'
             if which('xiar'):
-                spack_env.set('AR', 'xiar')
+                env.set('AR', 'xiar')
 
-        spack_env.append_flags('CFLAGS',  optflags)
-        spack_env.append_flags('FCFLAGS', optflags)
+        env.append_flags('CFLAGS',  optflags)
+        env.append_flags('FCFLAGS', optflags)
 
     def configure_args(self):
         args = ['--enable-shared']
diff --git a/var/spack/repos/builtin/packages/libxpm/package.py b/var/spack/repos/builtin/packages/libxpm/package.py
index 542052d4ddfffbe682e4644fca674815a538c2fb..8315b112de3e8e83e1256c4edf72b5470716b113 100644
--- a/var/spack/repos/builtin/packages/libxpm/package.py
+++ b/var/spack/repos/builtin/packages/libxpm/package.py
@@ -26,10 +26,10 @@ class Libxpm(AutotoolsPackage):
     depends_on('pkgconfig', type='build')
     depends_on('util-macros', type='build')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # If libxpm is installed as an external package, gettext won't
         # be available in the spec. See
         # https://github.com/spack/spack/issues/9149 for details.
         if 'gettext' in self.spec:
-            spack_env.append_flags('LDFLAGS', '-L{0} -lintl'.format(
+            env.append_flags('LDFLAGS', '-L{0} -lintl'.format(
                 self.spec['gettext'].prefix.lib))
diff --git a/var/spack/repos/builtin/packages/linux-headers/package.py b/var/spack/repos/builtin/packages/linux-headers/package.py
index 6b0133dd75fc4a70b98104567f30fc13aee4a504..c34cae029ddbb65157853f09430748dd43d134b2 100644
--- a/var/spack/repos/builtin/packages/linux-headers/package.py
+++ b/var/spack/repos/builtin/packages/linux-headers/package.py
@@ -16,11 +16,11 @@ class LinuxHeaders(Package):
 
     version('4.9.10', sha256='bd6e05476fd8d9ea4945e11598d87bc97806bbc8d03556abbaaf809707661525')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # This variable is used in the Makefile. If it is defined on the
         # system, it can break the build if there is no build recipe for
         # that specific ARCH
-        spack_env.unset('ARCH')
+        env.unset('ARCH')
 
     def install(self, spec, prefix):
         make('headers_install', 'INSTALL_HDR_PATH={0}'.format(prefix))
diff --git a/var/spack/repos/builtin/packages/lmod/package.py b/var/spack/repos/builtin/packages/lmod/package.py
index 697eb9c1bcda7b66a8c1feee85522fa303ac9b5c..7dd6e80395925b57f4c95657a62d30638df64c04 100644
--- a/var/spack/repos/builtin/packages/lmod/package.py
+++ b/var/spack/repos/builtin/packages/lmod/package.py
@@ -48,10 +48,10 @@ class Lmod(AutotoolsPackage):
 
     parallel = False
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         stage_lua_path = join_path(
             self.stage.source_path, 'src', '?.lua')
-        spack_env.append_path('LUA_PATH', stage_lua_path.format(
+        env.append_path('LUA_PATH', stage_lua_path.format(
             version=self.version), separator=';')
 
     def patch(self):
diff --git a/var/spack/repos/builtin/packages/lua/package.py b/var/spack/repos/builtin/packages/lua/package.py
index 91528a6e2ada428b1714bb6143f04b0e48d263ea..0dac18d52cc9a59099278f93bcfb41c4bfabbc82 100644
--- a/var/spack/repos/builtin/packages/lua/package.py
+++ b/var/spack/repos/builtin/packages/lua/package.py
@@ -94,7 +94,7 @@ def append_paths(self, paths, cpaths, path):
         paths.append(os.path.join(path, '?', 'init.lua'))
         cpaths.append(os.path.join(path, '?.so'))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def _setup_dependent_env_helper(self, env, dependent_spec):
         lua_paths = []
         for d in dependent_spec.traverse(
                 deptypes=('build', 'run'), deptype_query='run'):
@@ -115,38 +115,44 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
                   os.path.join(self.spec.prefix, self.lua_share_dir)):
             self.append_paths(lua_patterns, lua_cpatterns, p)
 
-        spack_env.set('LUA_PATH', ';'.join(lua_patterns), separator=';')
-        spack_env.set('LUA_CPATH', ';'.join(lua_cpatterns), separator=';')
+        return lua_patterns, lua_cpatterns
 
-        # Add LUA to PATH for dependent packages
-        spack_env.prepend_path('PATH', self.prefix.bin)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        lua_patterns, lua_cpatterns = _setup_dependent_env_helper(
+            self, env, dependent_spec)
 
+        env.set('LUA_PATH', ';'.join(lua_patterns), separator=';')
+        env.set('LUA_CPATH', ';'.join(lua_cpatterns), separator=';')
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
         # For run time environment set only the path for dependent_spec and
         # prepend it to LUAPATH
+        lua_patterns, lua_cpatterns = _setup_dependent_env_helper(
+            self, env, dependent_spec)
+
         if dependent_spec.package.extends(self.spec):
-            run_env.prepend_path('LUA_PATH', ';'.join(lua_patterns),
-                                 separator=';')
-            run_env.prepend_path('LUA_CPATH', ';'.join(lua_cpatterns),
-                                 separator=';')
+            env.prepend_path('LUA_PATH', ';'.join(lua_patterns), separator=';')
+            env.prepend_path('LUA_CPATH', ';'.join(lua_cpatterns),
+                             separator=';')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path(
+    def setup_run_environment(self, env):
+        env.prepend_path(
             'LUA_PATH',
             os.path.join(self.spec.prefix, self.lua_share_dir, '?.lua'),
             separator=';')
-        run_env.prepend_path(
+        env.prepend_path(
             'LUA_PATH', os.path.join(self.spec.prefix, self.lua_share_dir, '?',
                                      'init.lua'),
             separator=';')
-        run_env.prepend_path(
+        env.prepend_path(
             'LUA_PATH',
             os.path.join(self.spec.prefix, self.lua_lib_dir, '?.lua'),
             separator=';')
-        run_env.prepend_path(
+        env.prepend_path(
             'LUA_PATH',
             os.path.join(self.spec.prefix, self.lua_lib_dir, '?', 'init.lua'),
             separator=';')
-        run_env.prepend_path(
+        env.prepend_path(
             'LUA_CPATH',
             os.path.join(self.spec.prefix, self.lua_lib_dir, '?.so'),
             separator=';')
diff --git a/var/spack/repos/builtin/packages/mc/package.py b/var/spack/repos/builtin/packages/mc/package.py
index e67d10069dcc075579c3ee388d7fce8cc8605b4b..f45d506dab487e8a78042ea779fc64f09b3866d7 100644
--- a/var/spack/repos/builtin/packages/mc/package.py
+++ b/var/spack/repos/builtin/packages/mc/package.py
@@ -21,11 +21,11 @@ class Mc(AutotoolsPackage):
     depends_on('glib@2.14:')
     depends_on('libssh2@1.2.5:')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # Fix compilation bug on macOS by pretending we don't have utimensat()
         # https://github.com/MidnightCommander/mc/pull/130
         if 'darwin' in self.spec.architecture:
-            env['ac_cv_func_utimensat'] = 'no'
+            env.set('ac_cv_func_utimensat', 'no')
 
     def configure_args(self):
         args = [
diff --git a/var/spack/repos/builtin/packages/mefit/package.py b/var/spack/repos/builtin/packages/mefit/package.py
index 6eed07134b551852b3986b89491a8fd15069913d..bc2ee8554721a13ba1eaa44f3837b66a21b15cc5 100644
--- a/var/spack/repos/builtin/packages/mefit/package.py
+++ b/var/spack/repos/builtin/packages/mefit/package.py
@@ -23,5 +23,5 @@ class Mefit(Package):
     def install(self, spec, prefix):
         install_tree('.', prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/memsurfer/package.py b/var/spack/repos/builtin/packages/memsurfer/package.py
index 6c28f3b293687f4ee212c017375814633d014c6a..05011b90f5bb7f024083b9a1b953ab8d09859d74 100644
--- a/var/spack/repos/builtin/packages/memsurfer/package.py
+++ b/var/spack/repos/builtin/packages/memsurfer/package.py
@@ -41,8 +41,8 @@ class Memsurfer(PythonPackage):
     depends_on('hdf5 +hl')
 
     # memsurfer's setup needs path to these deps to build extension modules
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('VTK_ROOT', self.spec['vtk'].prefix)
-        spack_env.set('CGAL_ROOT', self.spec['cgal'].prefix)
-        spack_env.set('BOOST_ROOT', self.spec['boost'].prefix)
-        spack_env.set('EIGEN_ROOT', self.spec['eigen'].prefix)
+    def setup_build_environment(self, env):
+        env.set('VTK_ROOT', self.spec['vtk'].prefix)
+        env.set('CGAL_ROOT', self.spec['cgal'].prefix)
+        env.set('BOOST_ROOT', self.spec['boost'].prefix)
+        env.set('EIGEN_ROOT', self.spec['eigen'].prefix)
diff --git a/var/spack/repos/builtin/packages/meraculous/package.py b/var/spack/repos/builtin/packages/meraculous/package.py
index 271e8756ad29539c360766ff2a4f23085d9fbd46..34aa9344ae9c84b8f0c240c6f2e91961fc5c6eea 100644
--- a/var/spack/repos/builtin/packages/meraculous/package.py
+++ b/var/spack/repos/builtin/packages/meraculous/package.py
@@ -28,6 +28,6 @@ def patch(self):
         edit = FileFilter('CMakeLists.txt')
         edit.filter(r"-static-libstdc\+\+", "")
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('MERACULOUS_ROOT', self.prefix)
-        run_env.prepend_path('PERL5LIB', self.prefix.lib)
+    def setup_run_environment(self, env):
+        env.set('MERACULOUS_ROOT', self.prefix)
+        env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/mercurial/package.py b/var/spack/repos/builtin/packages/mercurial/package.py
index f099bb1774652700a4a6448ebcdbb6a526114899..51ae31200deac872a4a05bc2008bb90169e14496 100644
--- a/var/spack/repos/builtin/packages/mercurial/package.py
+++ b/var/spack/repos/builtin/packages/mercurial/package.py
@@ -39,12 +39,12 @@ class Mercurial(PythonPackage):
     depends_on('py-pygments', type=('build', 'run'))
     depends_on('py-certifi',  type=('build', 'run'))
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # Python 3 support is still experimental, explicitly allow
-        spack_env.set('HGALLOWPYTHON3', True)
-        spack_env.set('HGPYTHON3', True)
+        env.set('HGALLOWPYTHON3', True)
+        env.set('HGPYTHON3', True)
         # Setuptools is still opt-in, explicitly enable
-        spack_env.set('FORCE_SETUPTOOLS', True)
+        env.set('FORCE_SETUPTOOLS', True)
 
     @run_after('install')
     def post_install(self):
diff --git a/var/spack/repos/builtin/packages/microbiomeutil/package.py b/var/spack/repos/builtin/packages/microbiomeutil/package.py
index d536c1398929364a8cf0d7e19bf4236d18bc90a9..f6b6db045f1b52717074681a54ccbec0b51f215d 100644
--- a/var/spack/repos/builtin/packages/microbiomeutil/package.py
+++ b/var/spack/repos/builtin/packages/microbiomeutil/package.py
@@ -27,8 +27,8 @@ def install(self, spec, prefix):
         install_tree('RESOURCES', prefix.resources)
         install_tree('AmosCmp16Spipeline', prefix.AmosCmp16Spipeline)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix.ChimeraSlayer)
-        run_env.prepend_path('PATH', join_path(self.prefix, 'NAST-iEr'))
-        run_env.prepend_path('PATH', self.prefix.TreeChopper)
-        run_env.prepend_path('PATH', self.prefix.WigeoN)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix.ChimeraSlayer)
+        env.prepend_path('PATH', join_path(self.prefix, 'NAST-iEr'))
+        env.prepend_path('PATH', self.prefix.TreeChopper)
+        env.prepend_path('PATH', self.prefix.WigeoN)
diff --git a/var/spack/repos/builtin/packages/mii/package.py b/var/spack/repos/builtin/packages/mii/package.py
index 063ec4072d708cbcc7f2d963b6ffa6c24d3037b8..c277a922549f732c07ea7f5161943ef9def05e19 100644
--- a/var/spack/repos/builtin/packages/mii/package.py
+++ b/var/spack/repos/builtin/packages/mii/package.py
@@ -21,5 +21,5 @@ class Mii(MakefilePackage):
     version('1.0.3', sha256='9b5a0e4e0961cf848677ed61b4f6c03e6a443f8592ed668d1afea302314b47a8')
     version('1.0.2', sha256='1c2c86ec37779ecd3821c30ce5b6dd19be4ec1813da41832d49ff3dcf615e22d')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('PREFIX', self.prefix)
+    def setup_build_environment(self, env):
+        env.set('PREFIX', self.prefix)
diff --git a/var/spack/repos/builtin/packages/mitofates/package.py b/var/spack/repos/builtin/packages/mitofates/package.py
index e6140808b28a52a01c7164ae73f62d196fb1afdc..d19af8c3297af13bd39439a57b4dcf61f331aa62 100644
--- a/var/spack/repos/builtin/packages/mitofates/package.py
+++ b/var/spack/repos/builtin/packages/mitofates/package.py
@@ -44,6 +44,6 @@ def install(self, spec, prefix):
         chmod = which('chmod')
         chmod('+x', join_path(prefix, 'MitoFates.pl'))
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # We want the main MitoFates.pl script in the path
-        run_env.prepend_path('PATH', self.prefix)
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/mixcr/package.py b/var/spack/repos/builtin/packages/mixcr/package.py
index f201eae25c62970a3679ee9225a4a7b59c5279a2..cfcc825595ae1314658879befbfd2ad34c21b84a 100644
--- a/var/spack/repos/builtin/packages/mixcr/package.py
+++ b/var/spack/repos/builtin/packages/mixcr/package.py
@@ -25,5 +25,5 @@ class Mixcr(Package):
     def install(self, spec, prefix):
         install_tree('.', prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/mpest/package.py b/var/spack/repos/builtin/packages/mpest/package.py
index e1ecca84f9461c89c85f2e726ba0678d0037fe27..4d9cbae595f4a72f66b1e72de706acf3d9cb3881 100644
--- a/var/spack/repos/builtin/packages/mpest/package.py
+++ b/var/spack/repos/builtin/packages/mpest/package.py
@@ -24,8 +24,8 @@ def install(self, spec, prefix):
             mkdirp(prefix.bin)
             install('mpest', prefix.bin)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if self.spec.satisfies('platform=darwin'):
-            spack_env.set('ARCHITECTURE', 'mac')
+            env.set('ARCHITECTURE', 'mac')
         else:
-            spack_env.set('ARCHITECTURE', 'unix')
+            env.set('ARCHITECTURE', 'unix')
diff --git a/var/spack/repos/builtin/packages/mrtrix3/package.py b/var/spack/repos/builtin/packages/mrtrix3/package.py
index 63d00a200bb269516a755d0850a6cabacb0aa6f5..fc7cab062e65f0f1d1ef98c6b0fc2dfa39b1abff 100644
--- a/var/spack/repos/builtin/packages/mrtrix3/package.py
+++ b/var/spack/repos/builtin/packages/mrtrix3/package.py
@@ -35,5 +35,5 @@ def install(self, spec, prefix):
         build()
         install_tree('.', prefix)
 
-    def setup_environment(self, spac_env, run_env):
-        run_env.prepend_path('PATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/mumps/package.py b/var/spack/repos/builtin/packages/mumps/package.py
index a793b30719459278f1f67ddf71be38768a87f7e2..b0e37de85fc8a021a811723a672632a599d546d7 100644
--- a/var/spack/repos/builtin/packages/mumps/package.py
+++ b/var/spack/repos/builtin/packages/mumps/package.py
@@ -55,11 +55,6 @@ class Mumps(Package):
     patch('examples.patch', when='@5.1.1%clang^spectrum-mpi')
     patch('gfortran8.patch', when='@5.1.2')
 
-    # this function is not a patch function because in case scalapack
-    # is needed it uses self.spec['scalapack'].fc_link set by the
-    # setup_dependent_environment in scalapck. This happen after patch
-    # end before install
-    # def patch(self):
     def write_makefile_inc(self):
         if ('+parmetis' in self.spec or '+ptscotch' in self.spec) and (
                 '+mpi' not in self.spec):
diff --git a/var/spack/repos/builtin/packages/mutationpp/package.py b/var/spack/repos/builtin/packages/mutationpp/package.py
index 26eabdf8c11ca5d94f3e8196ad1f841071db819d..58bf94626ca3674bb5d3156ecf737c9c83945805 100644
--- a/var/spack/repos/builtin/packages/mutationpp/package.py
+++ b/var/spack/repos/builtin/packages/mutationpp/package.py
@@ -40,12 +40,12 @@ def install_examples(self):
         if '+examples' in self.spec and os.path.isdir('examples'):
             install_tree('examples', self.prefix.examples)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('MPP_DIRECTORY', self.prefix)
+    def setup_run_environment(self, env):
+        env.set('MPP_DIRECTORY', self.prefix)
         if os.path.isdir(self.prefix.data):
-            run_env.set('MPP_DATA_DIRECTORY', self.prefix.data)
+            env.set('MPP_DATA_DIRECTORY', self.prefix.data)
 
-    def setup_dependent_environment(self, spack_env, run_env):
-        spack_env.set('MPP_DIRECTORY', self.prefix)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('MPP_DIRECTORY', self.prefix)
         if os.path.isdir(self.prefix.data):
-            spack_env.set('MPP_DATA_DIRECTORY', self.prefix.data)
+            env.set('MPP_DATA_DIRECTORY', self.prefix.data)
diff --git a/var/spack/repos/builtin/packages/mysql/package.py b/var/spack/repos/builtin/packages/mysql/package.py
index 497b8568a8f7d9a69ba0f54e8cbf6c1ab6d9e316..9a13a2f4d2d38b66d88de672b56e097af76b9dd7 100644
--- a/var/spack/repos/builtin/packages/mysql/package.py
+++ b/var/spack/repos/builtin/packages/mysql/package.py
@@ -122,7 +122,7 @@ def cmake_args(self):
             options.append('-DWITHOUT_SERVER:BOOL=ON')
         return options
 
-    def _fix_dtrace_shebang(self, build_env):
+    def _fix_dtrace_shebang(self, env):
         # dtrace may cause build to fail because it uses
         # '/usr/bin/python' in the shebang. To work around that we copy
         # the original script into a temporary folder, and change the
@@ -141,13 +141,7 @@ def _fix_dtrace_shebang(self, build_env):
         )
         # To have our own copy of dtrace in PATH, we need to
         # prepend to PATH the temporary folder where it resides.
-        build_env.prepend_path('PATH', dtrace_copy_path)
-
-    @run_before('cmake')
-    def _maybe_fix_dtrace_shebang(self):
-        if 'python' in self.spec.flat_dependencies() and \
-           self.spec.satisfies('@:7.99.99'):
-            self._fix_dtrace_shebang(build_env)
+        env.prepend_path('PATH', dtrace_copy_path)
 
     def setup_build_environment(self, env):
         cxxstd = self.spec.variants['cxxstd'].value
@@ -160,3 +154,7 @@ def setup_build_environment(self, env):
                                  '-Wno-deprecated-declarations')
             if int(cxxstd) > 14:
                 env.append_flags('CXXFLAGS', '-Wno-error=register')
+
+        if 'python' in self.spec.flat_dependencies() and \
+           self.spec.satisfies('@:7.99.99'):
+            self._fix_dtrace_shebang(env)
diff --git a/var/spack/repos/builtin/packages/nag/package.py b/var/spack/repos/builtin/packages/nag/package.py
index 06e51c1cab8ee0e122894b16861d7e91eec621e0..1b046181d789260a82b966b5b3032fe0e81d6054 100644
--- a/var/spack/repos/builtin/packages/nag/package.py
+++ b/var/spack/repos/builtin/packages/nag/package.py
@@ -37,6 +37,6 @@ def install(self, spec, prefix):
         # Run install script
         os.system('./INSTALLU.sh')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('F77', join_path(self.prefix.bin, 'nagfor'))
-        run_env.set('FC',  join_path(self.prefix.bin, 'nagfor'))
+    def setup_run_environment(self, env):
+        env.set('F77', self.prefix.bin.nagfor)
+        env.set('FC',  self.prefix.bin.nagfor)
diff --git a/var/spack/repos/builtin/packages/nest/package.py b/var/spack/repos/builtin/packages/nest/package.py
index 5ecc403a3b892c45a6e9c3c0c0839141d64cdf96..e51574b1dc38681e1c9adc94d03edb9ef4843b31 100644
--- a/var/spack/repos/builtin/packages/nest/package.py
+++ b/var/spack/repos/builtin/packages/nest/package.py
@@ -147,5 +147,5 @@ def install_headers(self):
                                   self.stage.source_path, recursive=True):
                 install(f, path_headers)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set("NEST_INSTALL_DIR", self.spec.prefix)
+    def setup_run_environment(self, env):
+        env.set("NEST_INSTALL_DIR", self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/neuron/package.py b/var/spack/repos/builtin/packages/neuron/package.py
index 86fcf5ac8449282bbe877439993b80718a7a89a8..28758b11faa8b6f91b0fc5509a30752ad6ef0e90 100644
--- a/var/spack/repos/builtin/packages/neuron/package.py
+++ b/var/spack/repos/builtin/packages/neuron/package.py
@@ -189,14 +189,12 @@ def install(self, spec, prefix):
             make('VERBOSE=1')
             make('install')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         neuron_archdir = self.get_neuron_archdir()
-        run_env.prepend_path('PATH', join_path(neuron_archdir, 'bin'))
-        run_env.prepend_path(
-            'LD_LIBRARY_PATH', join_path(neuron_archdir, 'lib'))
+        env.prepend_path('PATH', join_path(neuron_archdir, 'bin'))
+        env.prepend_path('LD_LIBRARY_PATH', join_path(neuron_archdir, 'lib'))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         neuron_archdir = self.get_neuron_archdir()
-        spack_env.prepend_path('PATH', join_path(neuron_archdir, 'bin'))
-        spack_env.prepend_path(
-            'LD_LIBRARY_PATH', join_path(neuron_archdir, 'lib'))
+        env.prepend_path('PATH', join_path(neuron_archdir, 'bin'))
+        env.prepend_path('LD_LIBRARY_PATH', join_path(neuron_archdir, 'lib'))
diff --git a/var/spack/repos/builtin/packages/nghttp2/package.py b/var/spack/repos/builtin/packages/nghttp2/package.py
index 9f39e163d431473c98786c8f773ae16207a4d110..7b4953dd5164807b81e4aa0e516e608cdba9bf61 100644
--- a/var/spack/repos/builtin/packages/nghttp2/package.py
+++ b/var/spack/repos/builtin/packages/nghttp2/package.py
@@ -5,6 +5,8 @@
 
 from spack import *
 
+import os
+
 
 class Nghttp2(AutotoolsPackage):
     """nghttp2 is an implementation of HTTP/2 and its header compression
@@ -19,17 +21,17 @@ class Nghttp2(AutotoolsPackage):
     depends_on('py-cython@0.19:', type=('build', 'run'))
     depends_on('py-setuptools', type=('build'))
 
-    def setup_environment(self, spack_env, run_env):
-        site_packages_dir = '/'.join(
-            [self.spec.prefix.lib,
-             ('python' + str(self.spec['python'].version.up_to(2))),
-             'site-packages'])
-        spack_env.prepend_path('PYTHONPATH', site_packages_dir)
+    def setup_build_environment(self, env):
+        site_packages_dir = os.path.join(
+            self.spec.prefix.lib,
+            'python' + str(self.spec['python'].version.up_to(2)),
+            'site-packages')
+        env.prepend_path('PYTHONPATH', site_packages_dir)
 
     @run_before('install')
     def ensure_install_dir_exists(self):
-        site_packages_dir = '/'.join(
-            [self.spec.prefix.lib,
-             ('python' + str(self.spec['python'].version.up_to(2))),
-             'site-packages'])
+        site_packages_dir = os.path.join(
+            self.spec.prefix.lib,
+            'python' + str(self.spec['python'].version.up_to(2)),
+            'site-packages')
         mkdirp(site_packages_dir)
diff --git a/var/spack/repos/builtin/packages/nginx/package.py b/var/spack/repos/builtin/packages/nginx/package.py
index 32d7142a9ea136c86fd0963c9a89f79983973501..e52ad914889d7cd9804c3b2b36ee5a6c02787a56 100644
--- a/var/spack/repos/builtin/packages/nginx/package.py
+++ b/var/spack/repos/builtin/packages/nginx/package.py
@@ -28,6 +28,6 @@ def configure_args(self):
         args = ['--with-http_ssl_module']
         return args
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         """Prepend the sbin directory to PATH."""
-        run_env.prepend_path('PATH', join_path(self.prefix, 'sbin'))
+        env.prepend_path('PATH', self.prefix.sbin)
diff --git a/var/spack/repos/builtin/packages/npm/package.py b/var/spack/repos/builtin/packages/npm/package.py
index 76cc11703d7bcb5d1a7d998b89c58ab89ce3c87a..782b2b6cfa7ee0d9cfd332b371995d906f7f3c20 100644
--- a/var/spack/repos/builtin/packages/npm/package.py
+++ b/var/spack/repos/builtin/packages/npm/package.py
@@ -19,9 +19,14 @@ class Npm(AutotoolsPackage):
 
     depends_on('node-js', type=('build', 'run'))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         npm_config_cache_dir = "%s/npm-cache" % dependent_spec.prefix
         if not os.path.isdir(npm_config_cache_dir):
             mkdir(npm_config_cache_dir)
-        run_env.set('npm_config_cache', npm_config_cache_dir)
-        spack_env.set('npm_config_cache', npm_config_cache_dir)
+        env.set('npm_config_cache', npm_config_cache_dir)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        npm_config_cache_dir = "%s/npm-cache" % dependent_spec.prefix
+        if not os.path.isdir(npm_config_cache_dir):
+            mkdir(npm_config_cache_dir)
+        env.set('npm_config_cache', npm_config_cache_dir)
diff --git a/var/spack/repos/builtin/packages/occa/package.py b/var/spack/repos/builtin/packages/occa/package.py
index c6528f296086712631864a8a63148d72429dc031..99fd35f91775ad4459a6a4d1c64a8fc9851e121a 100644
--- a/var/spack/repos/builtin/packages/occa/package.py
+++ b/var/spack/repos/builtin/packages/occa/package.py
@@ -41,7 +41,7 @@ class Occa(Package):
     conflicts('%gcc@7:', when='^cuda@:9')
 
     def install(self, spec, prefix):
-        # The build environment is set by the 'setup_environment' method.
+        # The build environment is set by the 'setup_build_environment' method.
         # Copy the source to the installation directory and build OCCA there.
         install_tree('.', prefix)
         make('-C', prefix)
@@ -65,7 +65,7 @@ def _setup_runtime_flags(self, s_env):
             s_env.set('OCCA_CUDA_COMPILER',
                       join_path(cuda_dir, 'bin', 'nvcc'))
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         spec = self.spec
         # The environment variable CXX is automatically set to the Spack
         # compiler wrapper.
@@ -79,7 +79,7 @@ def setup_environment(self, spack_env, run_env):
         # the verbose output, so we keep both.
         cxxflags = spec.compiler_flags['cxxflags']
         if cxxflags:
-            spack_env.set('CXXFLAGS', ' '.join(cxxflags))
+            env.set('CXXFLAGS', ' '.join(cxxflags))
 
         # For the cuda, openmp, and opencl variants, set the environment
         # variable OCCA_{CUDA,OPENMP,OPENCL}_ENABLED only if the variant is
@@ -92,21 +92,23 @@ def setup_environment(self, spack_env, run_env):
                                        cuda_dir,
                                        shared=True,
                                        recursive=True)
-            spack_env.set('OCCA_INCLUDE_PATH', cuda_dir.include)
-            spack_env.set('OCCA_LIBRARY_PATH', ':'.join(cuda_libs.directories))
+            env.set('OCCA_INCLUDE_PATH', cuda_dir.include)
+            env.set('OCCA_LIBRARY_PATH', ':'.join(cuda_libs.directories))
         else:
-            spack_env.set('OCCA_CUDA_ENABLED', '0')
+            env.set('OCCA_CUDA_ENABLED', '0')
 
         if '~opencl' in spec:
-            spack_env.set('OCCA_OPENCL_ENABLED', '0')
+            env.set('OCCA_OPENCL_ENABLED', '0')
 
         # Setup run-time environment for testing.
-        spack_env.set('OCCA_VERBOSE', '1')
-        self._setup_runtime_flags(spack_env)
-        # The 'run_env' is included in the Spack generated module files.
-        self._setup_runtime_flags(run_env)
+        env.set('OCCA_VERBOSE', '1')
+        self._setup_runtime_flags(env)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_run_environment(self, env):
+        # The 'env' is included in the Spack generated module files.
+        self._setup_runtime_flags(env)
+
+    def setup_dependent_build_environment(self, env, dependent_spec):
         # Export OCCA_* variables for everyone using this package from within
         # Spack.
-        self._setup_runtime_flags(spack_env)
+        self._setup_runtime_flags(env)
diff --git a/var/spack/repos/builtin/packages/opa-psm2/package.py b/var/spack/repos/builtin/packages/opa-psm2/package.py
index 29e573e5bb0515190d865c70e448151377232be9..cf94743378d352393b53bb2ea9619afbecac9040 100644
--- a/var/spack/repos/builtin/packages/opa-psm2/package.py
+++ b/var/spack/repos/builtin/packages/opa-psm2/package.py
@@ -35,12 +35,12 @@ class OpaPsm2(MakefilePackage):
     patch('opa-psm2-compiler.patch', when='@11.2.68:',
           sha256='fe31fda9aaee13acb87d178af2282446196d2cc0b21163034573706110b2e2d6')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('DESTDIR', self.prefix)
+    def setup_build_environment(self, env):
+        env.set('DESTDIR', self.prefix)
         if '%intel' in self.spec:
             # this variable must be set when we use the Intel compilers to
             # ensure that the proper flags are set
-            spack_env.set('CCARCH', 'icc')
+            env.set('CCARCH', 'icc')
 
     def edit(self, spec, prefix):
         # Change the makefile so libraries and includes are not
diff --git a/var/spack/repos/builtin/packages/opam/package.py b/var/spack/repos/builtin/packages/opam/package.py
index bc32c26e52596e564213bc7eb1f13c9458019a8e..2ff78ac0fb2e6bc4e252c8d280727d0c37f1bd64 100644
--- a/var/spack/repos/builtin/packages/opam/package.py
+++ b/var/spack/repos/builtin/packages/opam/package.py
@@ -23,10 +23,10 @@ class Opam(AutotoolsPackage):
 
     parallel = False
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # Environment variable setting taken from
         # https://github.com/Homebrew/homebrew-core/blob/master/Formula/opam.rb
-        spack_env.set('OCAMLPARAM', 'safe-string=0,_')  # OCaml 4.06.0 compat
+        env.set('OCAMLPARAM', 'safe-string=0,_')  # OCaml 4.06.0 compat
 
     def build(self, spec, prefix):
         make('lib-ext')
diff --git a/var/spack/repos/builtin/packages/openfoam-org/package.py b/var/spack/repos/builtin/packages/openfoam-org/package.py
index 363cc32f055a7eaa070bc21a1d9cf66c03376ce1..0ec6588d79b07347998276e2226dcbfff22cb60c 100644
--- a/var/spack/repos/builtin/packages/openfoam-org/package.py
+++ b/var/spack/repos/builtin/packages/openfoam-org/package.py
@@ -126,24 +126,24 @@ def config(self):
             settings['label-size'] = False
         return settings
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # This should be similar to the openfoam package,
         # but sourcing the etc/bashrc here seems to exit with an error.
         # ... this needs to be examined in more detail.
         #
         # Minimal environment only.
-        run_env.set('FOAM_PROJECT_DIR', self.projectdir)
-        run_env.set('WM_PROJECT_DIR', self.projectdir)
+        env.set('FOAM_PROJECT_DIR', self.projectdir)
+        env.set('WM_PROJECT_DIR', self.projectdir)
         for d in ['wmake', self.archbin]:  # bin already added automatically
-            run_env.prepend_path('PATH', join_path(self.projectdir, d))
+            env.prepend_path('PATH', join_path(self.projectdir, d))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Location of the OpenFOAM project directory.
         This is identical to the WM_PROJECT_DIR value, but we avoid that
         variable since it would mask the normal OpenFOAM cleanup of
         previous versions.
         """
-        spack_env.set('FOAM_PROJECT_DIR', self.projectdir)
+        env.set('FOAM_PROJECT_DIR', self.projectdir)
 
     @property
     def projectdir(self):
diff --git a/var/spack/repos/builtin/packages/openjdk/package.py b/var/spack/repos/builtin/packages/openjdk/package.py
index 0e7e10588b091ba36a75b6f52a43bd072f5fe7d8..6329fce7530fb5a34f74a7a97f3cd62e2d40a973 100644
--- a/var/spack/repos/builtin/packages/openjdk/package.py
+++ b/var/spack/repos/builtin/packages/openjdk/package.py
@@ -83,18 +83,18 @@ def libs(self):
     def install(self, spec, prefix):
         install_tree('.', prefix)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         """Set JAVA_HOME."""
 
-        run_env.set('JAVA_HOME', self.home)
+        env.set('JAVA_HOME', self.home)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Set JAVA_HOME and CLASSPATH.
 
         CLASSPATH contains the installation prefix for the extension and any
         other Java extensions it depends on."""
 
-        spack_env.set('JAVA_HOME', self.home)
+        env.set('JAVA_HOME', self.home)
 
         class_paths = []
         for d in dependent_spec.traverse(deptype=('build', 'run', 'test')):
@@ -102,14 +102,19 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
                 class_paths.extend(find(d.prefix, '*.jar'))
 
         classpath = os.pathsep.join(class_paths)
-        spack_env.set('CLASSPATH', classpath)
+        env.set('CLASSPATH', classpath)
 
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        """Set CLASSPATH.
+
+        CLASSPATH contains the installation prefix for the extension and any
+        other Java extensions it depends on."""
         # For runtime environment set only the path for
         # dependent_spec and prepend it to CLASSPATH
         if dependent_spec.package.extends(self.spec):
             class_paths = find(dependent_spec.prefix, '*.jar')
             classpath = os.pathsep.join(class_paths)
-            run_env.prepend_path('CLASSPATH', classpath)
+            env.prepend_path('CLASSPATH', classpath)
 
     def setup_dependent_package(self, module, dependent_spec):
         """Allows spec['java'].home to work."""
diff --git a/var/spack/repos/builtin/packages/orthomcl/package.py b/var/spack/repos/builtin/packages/orthomcl/package.py
index 1d939688997c4a4422bcf6c24ff16486c7fa4249..a57416e255ce4a582757d46e726cb574254eb483 100644
--- a/var/spack/repos/builtin/packages/orthomcl/package.py
+++ b/var/spack/repos/builtin/packages/orthomcl/package.py
@@ -26,5 +26,5 @@ def install(self, spec, prefix):
         install_tree('doc', prefix.doc)
         install_tree('lib', prefix.lib)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PERL5LIB', self.prefix.lib)
+    def setup_run_environment(self, env):
+        env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py b/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
index 333287c80a0b4ea211da065415c766aaed11dde7..95b15e425fffe661dce58490899ff0168cf2110f 100644
--- a/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
+++ b/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
@@ -46,9 +46,9 @@ def configure_args(self):
 
         return config_args
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         mpidir = join_path(self.prefix.libexec, 'osu-micro-benchmarks', 'mpi')
-        run_env.prepend_path('PATH', join_path(mpidir, 'startup'))
-        run_env.prepend_path('PATH', join_path(mpidir, 'pt2pt'))
-        run_env.prepend_path('PATH', join_path(mpidir, 'one-sided'))
-        run_env.prepend_path('PATH', join_path(mpidir, 'collective'))
+        env.prepend_path('PATH', join_path(mpidir, 'startup'))
+        env.prepend_path('PATH', join_path(mpidir, 'pt2pt'))
+        env.prepend_path('PATH', join_path(mpidir, 'one-sided'))
+        env.prepend_path('PATH', join_path(mpidir, 'collective'))
diff --git a/var/spack/repos/builtin/packages/pango/package.py b/var/spack/repos/builtin/packages/pango/package.py
index 35fd629b5480ebe15394b53455eb96b1204732d3..7f850b7c1daa8cf3c8768cef88c9534be41db932 100644
--- a/var/spack/repos/builtin/packages/pango/package.py
+++ b/var/spack/repos/builtin/packages/pango/package.py
@@ -56,8 +56,8 @@ def configure_args(self):
     def install(self, spec, prefix):
         make("install", parallel=False)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS",
-                               self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS",
-                             self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/pasta/package.py b/var/spack/repos/builtin/packages/pasta/package.py
index 885e0673c90635207f198657f0337172a1d53c26..45afbb0fc7d9b686a6cb2a066239da580c8d5f81 100644
--- a/var/spack/repos/builtin/packages/pasta/package.py
+++ b/var/spack/repos/builtin/packages/pasta/package.py
@@ -25,9 +25,9 @@ class Pasta(Package):
         destination='.'
     )
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         tools = join_path(self.prefix, 'sate-tools-linux')
-        spack_env.set('PASTA_TOOLS_DEVDIR', tools)
+        env.set('PASTA_TOOLS_DEVDIR', tools)
 
     def install(self, spec, prefix):
         # build process for pasta is very hacky -- uses hard links to source
diff --git a/var/spack/repos/builtin/packages/pbbam/package.py b/var/spack/repos/builtin/packages/pbbam/package.py
index 97486e1606dec7e8b7bf3e5167c2104a489f9217..29b0e3e8a3a1d56e6f983b7dddb2f457201e0bdc 100644
--- a/var/spack/repos/builtin/packages/pbbam/package.py
+++ b/var/spack/repos/builtin/packages/pbbam/package.py
@@ -38,6 +38,6 @@ def install(self, spec, prefix):
         install_tree('spack-build/lib', prefix.lib)
         install_tree('include/pbbam', prefix.include.pbbam)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('PacBioBAM_LIBRARIES', self.prefix.lib)
-        spack_env.set('PacBioBAM_INCLUDE_DIRS', self.prefix.include)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('PacBioBAM_LIBRARIES', self.prefix.lib)
+        env.set('PacBioBAM_INCLUDE_DIRS', self.prefix.include)
diff --git a/var/spack/repos/builtin/packages/pbsuite/package.py b/var/spack/repos/builtin/packages/pbsuite/package.py
index b29b734f4c7e7923f7471a3929ab5aa7dc56f1cc..1415859ec0234fb3812498b7b363760c970f6029 100644
--- a/var/spack/repos/builtin/packages/pbsuite/package.py
+++ b/var/spack/repos/builtin/packages/pbsuite/package.py
@@ -24,5 +24,5 @@ def install(self, spec, prefix):
         install_tree('pbsuite', prefix.pbsuite)
         install_tree('bin', prefix.bin)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PYTHONPATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PYTHONPATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/pfunit/package.py b/var/spack/repos/builtin/packages/pfunit/package.py
index 418701241b0b9204c7da2f147f26d89166e0cc13..633c0edf7400427dbb67cfcdbd44fbac6e8ae3f8 100644
--- a/var/spack/repos/builtin/packages/pfunit/package.py
+++ b/var/spack/repos/builtin/packages/pfunit/package.py
@@ -82,12 +82,14 @@ def compiler_vendor(self):
                 return value
         raise InstallError('Unsupported compiler.')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('PFUNIT', self.spec.prefix)
-        run_env.set('PFUNIT', self.spec.prefix)
-        spack_env.set('F90_VENDOR', self.compiler_vendor())
-        run_env.set('F90_VENDOR', self.compiler_vendor())
-
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('PFUNIT', self.spec.prefix)
-        spack_env.set('F90_VENDOR', self.compiler_vendor())
+    def setup_build_environment(self, env):
+        env.set('PFUNIT', self.spec.prefix)
+        env.set('F90_VENDOR', self.compiler_vendor())
+
+    def setup_run_environment(self, env):
+        env.set('PFUNIT', self.spec.prefix)
+        env.set('F90_VENDOR', self.compiler_vendor())
+
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('PFUNIT', self.spec.prefix)
+        env.set('F90_VENDOR', self.compiler_vendor())
diff --git a/var/spack/repos/builtin/packages/pgi/package.py b/var/spack/repos/builtin/packages/pgi/package.py
index c61611e22f0d0b077f6b3a72bb986f7e82c1fb11..3fce681c58402c86a9b5be704df71f51d1082aea 100644
--- a/var/spack/repos/builtin/packages/pgi/package.py
+++ b/var/spack/repos/builtin/packages/pgi/package.py
@@ -87,16 +87,10 @@ def install(self, spec, prefix):
         # Run install script
         os.system("./install")
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         prefix = Prefix(join_path(self.prefix, 'linux86-64', self.version))
 
-        run_env.set('CC',  join_path(prefix.bin, 'pgcc'))
-        run_env.set('CXX', join_path(prefix.bin, 'pgc++'))
-        run_env.set('F77', join_path(prefix.bin, 'pgfortran'))
-        run_env.set('FC',  join_path(prefix.bin, 'pgfortran'))
-
-        run_env.prepend_path('PATH',            prefix.bin)
-        run_env.prepend_path('CPATH',           prefix.include)
-        run_env.prepend_path('LIBRARY_PATH',    prefix.lib)
-        run_env.prepend_path('LD_LIBRARY_PATH', prefix.lib)
-        run_env.prepend_path('MANPATH',         prefix.man)
+        env.set('CC',  join_path(prefix.bin, 'pgcc'))
+        env.set('CXX', join_path(prefix.bin, 'pgc++'))
+        env.set('F77', join_path(prefix.bin, 'pgfortran'))
+        env.set('FC',  join_path(prefix.bin, 'pgfortran'))
diff --git a/var/spack/repos/builtin/packages/picard/package.py b/var/spack/repos/builtin/packages/picard/package.py
index d7fdbdb3f2ccc455bd3fbf31d151bbdecfa50926..98c04668668355ea456fe0909739f8e8edcb33f6 100644
--- a/var/spack/repos/builtin/packages/picard/package.py
+++ b/var/spack/repos/builtin/packages/picard/package.py
@@ -63,10 +63,9 @@ def install(self, spec, prefix):
         filter_file('picard.jar', join_path(prefix.bin, 'picard.jar'),
                     script, **kwargs)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         """The Picard docs suggest setting this as a convenience."""
-        run_env.prepend_path('PICARD',
-                             join_path(self.prefix, 'bin', 'picard.jar'))
+        env.prepend_path('PICARD', join_path(self.prefix.bin, 'picard.jar'))
 
     def url_for_version(self, version):
         if version < Version('2.6.0'):
diff --git a/var/spack/repos/builtin/packages/pkg-config/package.py b/var/spack/repos/builtin/packages/pkg-config/package.py
index 5a68b5ab4a0f1a0601bf2b31d8ad2fd933cd8f08..05b47fd476d26e24e55ab2644f7017743e8e8b90 100644
--- a/var/spack/repos/builtin/packages/pkg-config/package.py
+++ b/var/spack/repos/builtin/packages/pkg-config/package.py
@@ -27,10 +27,9 @@ class PkgConfig(AutotoolsPackage):
 
     parallel = False
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Adds the ACLOCAL path for autotools."""
-        spack_env.append_path('ACLOCAL_PATH',
-                              join_path(self.prefix.share, 'aclocal'))
+        env.append_path('ACLOCAL_PATH', self.prefix.share.aclocal)
 
     def configure_args(self):
         config_args = ['--enable-shared']
diff --git a/var/spack/repos/builtin/packages/pkgconf/package.py b/var/spack/repos/builtin/packages/pkgconf/package.py
index 36b78c0713ef1ba4c178b77d29ae89eef39a327a..8346d2286e247ca62de75f4e92657dc7efd58851 100644
--- a/var/spack/repos/builtin/packages/pkgconf/package.py
+++ b/var/spack/repos/builtin/packages/pkgconf/package.py
@@ -30,10 +30,9 @@ class Pkgconf(AutotoolsPackage):
     # TODO: Add a package for the kyua testing framework
     # depends_on('kyua', type='test')
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Adds the ACLOCAL path for autotools."""
-        spack_env.append_path('ACLOCAL_PATH',
-                              join_path(self.prefix.share, 'aclocal'))
+        env.append_path('ACLOCAL_PATH', self.prefix.share.aclocal)
 
     @run_after('install')
     def link_pkg_config(self):
diff --git a/var/spack/repos/builtin/packages/planck-likelihood/package.py b/var/spack/repos/builtin/packages/planck-likelihood/package.py
index 70ab82de2eb858d5e6e6ec093330539369d65554..da6b67edc3a1d0b78ccd9d236bbe2f2ce411dfab 100644
--- a/var/spack/repos/builtin/packages/planck-likelihood/package.py
+++ b/var/spack/repos/builtin/packages/planck-likelihood/package.py
@@ -107,17 +107,15 @@ def install(self, spec, prefix):
         for dir in dirs:
             install_tree(dir, join_path(prefix, 'share', 'clik', dir))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        prefix = self.prefix
-        spack_env.set('CLIK_PATH', prefix)
-        spack_env.set('CLIK_DATA', join_path(prefix, 'share', 'clik'))
-        spack_env.set('CLIK_PLUGIN', 'rel2015')
-
-    def setup_environment(self, spack_env, run_env):
-        prefix = self.prefix
-        run_env.set('CLIK_PATH', prefix)
-        run_env.set('CLIK_DATA', join_path(prefix, 'share', 'clik'))
-        run_env.set('CLIK_PLUGIN', 'rel2015')
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('CLIK_PATH', self.prefix)
+        env.set('CLIK_DATA', self.prefix.share.clik)
+        env.set('CLIK_PLUGIN', 'rel2015')
+
+    def setup_run_environment(self, env):
+        env.set('CLIK_PATH', self.prefix)
+        env.set('CLIK_DATA', self.prefix.share.clik)
+        env.set('CLIK_PLUGIN', 'rel2015')
 
     @run_after('install')
     @on_package_attributes(run_tests=True)
diff --git a/var/spack/repos/builtin/packages/postgresql/package.py b/var/spack/repos/builtin/packages/postgresql/package.py
index 63c76cbf35a28bc57ca23f13fb7fa669664a14a3..491e5d8b82a58822cd1fc48d35cd8fe6403e988f 100644
--- a/var/spack/repos/builtin/packages/postgresql/package.py
+++ b/var/spack/repos/builtin/packages/postgresql/package.py
@@ -87,25 +87,32 @@ def install(self, spec, prefix):
         else:
             AutotoolsPackage.install(self, spec, prefix)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         spec = self.spec
 
         if '+perl' in spec:
-            run_env.prepend_path('PERL5LIB', self.prefix.lib)
+            env.prepend_path('PERL5LIB', self.prefix.lib)
         if '+tcl' in spec:
-            run_env.prepend_path('TCLLIBPATH', self.prefix.lib)
+            env.prepend_path('TCLLIBPATH', self.prefix.lib)
         if '+python' in spec:
-            run_env.prepend_path('PYTHONPATH', self.prefix.lib)
+            env.prepend_path('PYTHONPATH', self.prefix.lib)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         spec = self.spec
 
         if '+perl' in spec:
-            spack_env.prepend_path('PERL5LIB', self.prefix.lib)
-            run_env.prepend_path('PERL5LIB', self.prefix.lib)
+            env.prepend_path('PERL5LIB', self.prefix.lib)
         if '+tcl' in spec:
-            spack_env.prepend_path('TCLLIBPATH', self.prefix.lib)
-            run_env.prepend_path('TCLLIBPATH', self.prefix.lib)
+            env.prepend_path('TCLLIBPATH', self.prefix.lib)
         if '+python' in spec:
-            spack_env.prepend_path('PYTHONPATH', self.prefix.lib)
-            run_env.prepend_path('PYTHONPATH', self.prefix.lib)
+            env.prepend_path('PYTHONPATH', self.prefix.lib)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        spec = self.spec
+
+        if '+perl' in spec:
+            env.prepend_path('PERL5LIB', self.prefix.lib)
+        if '+tcl' in spec:
+            env.prepend_path('TCLLIBPATH', self.prefix.lib)
+        if '+python' in spec:
+            env.prepend_path('PYTHONPATH', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/preseq/package.py b/var/spack/repos/builtin/packages/preseq/package.py
index 1315a2fa0c9e7f5db8b1b754d7d978a422eb9eaa..2cfb2228d7df8cf5f193e2c95df351f4168cec20 100644
--- a/var/spack/repos/builtin/packages/preseq/package.py
+++ b/var/spack/repos/builtin/packages/preseq/package.py
@@ -21,5 +21,5 @@ class Preseq(MakefilePackage):
     depends_on('samtools')
     depends_on('gsl')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('PREFIX', self.prefix)
+    def setup_build_environment(self, env):
+        env.set('PREFIX', self.prefix)
diff --git a/var/spack/repos/builtin/packages/prodigal/package.py b/var/spack/repos/builtin/packages/prodigal/package.py
index 2cf8fedafd657e3bcd279f33678d7b6dcbc09ebb..4781f1baf79c3daf7fdcabbbfdc425e06e7ef739 100644
--- a/var/spack/repos/builtin/packages/prodigal/package.py
+++ b/var/spack/repos/builtin/packages/prodigal/package.py
@@ -18,5 +18,5 @@ class Prodigal(MakefilePackage):
     def install(self, spec, prefix):
         make('INSTALLDIR={0}'.format(self.prefix), 'install')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/psmc/package.py b/var/spack/repos/builtin/packages/psmc/package.py
index 8db04ce5bc92d70fdcab649a73abb8ac9f533b25..aa684e0b2580c4bf847888ac6f8d495e9fd90b53 100644
--- a/var/spack/repos/builtin/packages/psmc/package.py
+++ b/var/spack/repos/builtin/packages/psmc/package.py
@@ -17,8 +17,8 @@ class Psmc(MakefilePackage):
 
     depends_on('zlib', type='link')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', prefix.bin.utils)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix.bin.utils)
 
     def build(self, spec, prefix):
         make()
diff --git a/var/spack/repos/builtin/packages/pvm/package.py b/var/spack/repos/builtin/packages/pvm/package.py
index 0d19dd9f21d850de3fd8a1e6871ef6ac2d70f787..238be70a3b92a2d672dae643fe937b85aef9df81 100644
--- a/var/spack/repos/builtin/packages/pvm/package.py
+++ b/var/spack/repos/builtin/packages/pvm/package.py
@@ -38,7 +38,7 @@ def install(self, spec, prefix):
         install_tree(join_path('lib', pvm_arch), prefix.lib)
         install_tree('man', prefix.man)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # Before running PVM, you must set the environment
         # variable "PVM_ROOT" to the path where PVM resides
-        run_env.set('PVM_ROOT', self.prefix)
+        env.set('PVM_ROOT', self.prefix)
diff --git a/var/spack/repos/builtin/packages/py-basemap/package.py b/var/spack/repos/builtin/packages/py-basemap/package.py
index 1403e24e9ab4afa6f67f3ff36b4209d09616040b..677eeaafb89f05648e3a0ff38c6f8feae85dd9e8 100644
--- a/var/spack/repos/builtin/packages/py-basemap/package.py
+++ b/var/spack/repos/builtin/packages/py-basemap/package.py
@@ -34,8 +34,8 @@ def url_for_version(self, version):
         else:
             return 'https://downloads.sourceforge.net/project/matplotlib/matplotlib-toolkits/basemap-{0}/basemap-{0}.tar.gz'.format(version)
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('GEOS_DIR', self.spec['geos'].prefix)
+    def setup_build_environment(self, env):
+        env.set('GEOS_DIR', self.spec['geos'].prefix)
 
     def install(self, spec, prefix):
         """Install everything from build directory."""
diff --git a/var/spack/repos/builtin/packages/py-cogent/package.py b/var/spack/repos/builtin/packages/py-cogent/package.py
index 62b13b4affa1a0d3b47f3b1709731fdb6905b8f8..67974a27b9a633c49bf1d0ab429830d1e4a5efe5 100644
--- a/var/spack/repos/builtin/packages/py-cogent/package.py
+++ b/var/spack/repos/builtin/packages/py-cogent/package.py
@@ -13,7 +13,7 @@ class PyCogent(PythonPackage):
     url      = "https://pypi.io/packages/source/c/cogent/cogent-1.9.tar.gz"
 
     version('1.9', sha256='57d8c58e0273ffe4f2b907874f9b49dadfd0600f5507b7666369f4e44d56ce14')
-    version('1.5.3', url="https://pypi.io/packages/source/c/cogent/cogent-1.5.3.tgz", 
+    version('1.5.3', url="https://pypi.io/packages/source/c/cogent/cogent-1.5.3.tgz",
         sha256='1215ac219070b7b2207b0b47b4388510f3e30ccd88160aa9f02f25d24bcbcd95')
 
     variant('matplotlib', default=False, description="graphs related to codon usage")
@@ -30,5 +30,5 @@ class PyCogent(PythonPackage):
     depends_on('py-pymysql', when='+mysql', type=('build', 'run'))
     depends_on('py-cython@0.17.1:', type='build')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('DONT_USE_PYREX', '1')
+    def setup_build_environment(self, env):
+        env.set('DONT_USE_PYREX', '1')
diff --git a/var/spack/repos/builtin/packages/py-cvxopt/package.py b/var/spack/repos/builtin/packages/py-cvxopt/package.py
index b12dcf4c875609e800799a5f3f4e2bb85e6e150e..fac983ccc146e031e078e0d8d26e5be6cba9023c 100644
--- a/var/spack/repos/builtin/packages/py-cvxopt/package.py
+++ b/var/spack/repos/builtin/packages/py-cvxopt/package.py
@@ -37,85 +37,77 @@ class PyCvxopt(PythonPackage):
     # depends_on('mosek@8:',  when='+mosek')
     depends_on('dsdp@5.8:', when='+dsdp')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         spec = self.spec
 
         # BLAS/LAPACK Libraries
 
         # Default names of BLAS and LAPACK libraries
-        spack_env.set('CVXOPT_BLAS_LIB', ';'.join(spec['blas'].libs.names))
-        spack_env.set('CVXOPT_LAPACK_LIB', ';'.join(spec['lapack'].libs.names))
+        env.set('CVXOPT_BLAS_LIB', ';'.join(spec['blas'].libs.names))
+        env.set('CVXOPT_LAPACK_LIB', ';'.join(spec['lapack'].libs.names))
 
         # Directory containing BLAS and LAPACK libraries
-        spack_env.set('CVXOPT_BLAS_LIB_DIR', spec['blas'].libs.directories[0])
+        env.set('CVXOPT_BLAS_LIB_DIR', spec['blas'].libs.directories[0])
 
         # SuiteSparse Libraries
 
         # Directory containing SuiteSparse libraries
-        spack_env.set('CVXOPT_SUITESPARSE_LIB_DIR',
-                      spec['suite-sparse'].libs.directories[0])
+        env.set('CVXOPT_SUITESPARSE_LIB_DIR',
+                spec['suite-sparse'].libs.directories[0])
 
         # Directory containing SuiteSparse header files
-        spack_env.set('CVXOPT_SUITESPARSE_INC_DIR',
-                      spec['suite-sparse'].headers.directories[0])
+        env.set('CVXOPT_SUITESPARSE_INC_DIR',
+                spec['suite-sparse'].headers.directories[0])
 
         # GSL Libraries
 
         if '+gsl' in spec:
-            spack_env.set('CVXOPT_BUILD_GSL', 1)
+            env.set('CVXOPT_BUILD_GSL', 1)
 
             # Directory containing libgsl
-            spack_env.set('CVXOPT_GSL_LIB_DIR',
-                          spec['gsl'].libs.directories[0])
+            env.set('CVXOPT_GSL_LIB_DIR', spec['gsl'].libs.directories[0])
 
             # Directory containing the GSL header files
-            spack_env.set('CVXOPT_GSL_INC_DIR',
-                          spec['gsl'].headers.directories[0])
+            env.set('CVXOPT_GSL_INC_DIR', spec['gsl'].headers.directories[0])
         else:
-            spack_env.set('CVXOPT_BUILD_GSL', 0)
+            env.set('CVXOPT_BUILD_GSL', 0)
 
         # FFTW Libraries
 
         if '+fftw' in spec:
-            spack_env.set('CVXOPT_BUILD_FFTW', 1)
+            env.set('CVXOPT_BUILD_FFTW', 1)
 
             # Directory containing libfftw3
-            spack_env.set('CVXOPT_FFTW_LIB_DIR',
-                          spec['fftw'].libs.directories[0])
+            env.set('CVXOPT_FFTW_LIB_DIR', spec['fftw'].libs.directories[0])
 
             # Directory containing fftw.h
-            spack_env.set('CVXOPT_FFTW_INC_DIR',
-                          spec['fftw'].headers.directories[0])
+            env.set('CVXOPT_FFTW_INC_DIR', spec['fftw'].headers.directories[0])
         else:
-            spack_env.set('CVXOPT_BUILD_FFTW', 0)
+            env.set('CVXOPT_BUILD_FFTW', 0)
 
         # GLPK Libraries
 
         if '+glpk' in spec:
-            spack_env.set('CVXOPT_BUILD_GLPK', 1)
+            env.set('CVXOPT_BUILD_GLPK', 1)
 
             # Directory containing libglpk
-            spack_env.set('CVXOPT_GLPK_LIB_DIR',
-                          spec['glpk'].libs.directories[0])
+            env.set('CVXOPT_GLPK_LIB_DIR', spec['glpk'].libs.directories[0])
 
             # Directory containing glpk.h
-            spack_env.set('CVXOPT_GLPK_INC_DIR',
-                          spec['glpk'].headers.directories[0])
+            env.set('CVXOPT_GLPK_INC_DIR', spec['glpk'].headers.directories[0])
         else:
-            spack_env.set('CVXOPT_BUILD_GLPK', 0)
+            env.set('CVXOPT_BUILD_GLPK', 0)
 
         # DSDP Libraries
 
         if '+dsdp' in spec:
-            spack_env.set('CVXOPT_BUILD_DSDP', 1)
+            env.set('CVXOPT_BUILD_DSDP', 1)
 
             # Directory containing libdsdp
-            spack_env.set('CVXOPT_DSDP_LIB_DIR',
-                          spec['dsdp'].libs.directories[0])
+            env.set('CVXOPT_DSDP_LIB_DIR', spec['dsdp'].libs.directories[0])
 
             # Directory containing dsdp5.h
-            spack_env.set('CVXOPT_DSDP_INC_DIR',
-                          spec['dsdp'].headers.directories[0])
+            env.set('CVXOPT_DSDP_INC_DIR', spec['dsdp'].headers.directories[0])
 
     @run_after('install')
     @on_package_attributes(run_tests=True)
diff --git a/var/spack/repos/builtin/packages/py-flye/package.py b/var/spack/repos/builtin/packages/py-flye/package.py
index 03705a7a3ace9bb18bfe3982c6a3a4b49d89ff94..cc4c2c7aa5eaca4d8cbaf5659825155b8fbac053 100644
--- a/var/spack/repos/builtin/packages/py-flye/package.py
+++ b/var/spack/repos/builtin/packages/py-flye/package.py
@@ -28,7 +28,7 @@ class PyFlye(PythonPackage):
     conflicts('%clang@:3.2', msg=msg)
     # Requires Apple Clang 5.0+ but no way to specify that right now
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if self.spec.target.family == 'aarch64':
-            spack_env.set('arm_neon', '1')
-            spack_env.set('aarch64', '1')
+            env.set('arm_neon', '1')
+            env.set('aarch64', '1')
diff --git a/var/spack/repos/builtin/packages/py-git-review/package.py b/var/spack/repos/builtin/packages/py-git-review/package.py
index 38d860e86fa0b6ba5a0dcfc7632494ed57a834ea..08d1b9e6d4b1ec8b82f1546512ab0ef134827907 100644
--- a/var/spack/repos/builtin/packages/py-git-review/package.py
+++ b/var/spack/repos/builtin/packages/py-git-review/package.py
@@ -23,5 +23,5 @@ class PyGitReview(PythonPackage):
     depends_on('git',              type=('run'))
     depends_on('tk',               type=('run'))
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('PBR_VERSION', str(self.spec.version))
+    def setup_run_environment(self, env):
+        env.set('PBR_VERSION', str(self.spec.version))
diff --git a/var/spack/repos/builtin/packages/py-pipits/package.py b/var/spack/repos/builtin/packages/py-pipits/package.py
index 666e738cfc044a41c21bab8c7c39c0ae2a26694a..96039cb274d34c3c879f654c318c11081c11152c 100644
--- a/var/spack/repos/builtin/packages/py-pipits/package.py
+++ b/var/spack/repos/builtin/packages/py-pipits/package.py
@@ -57,15 +57,15 @@ def install_db(self):
         install_tree(join_path(self.stage.source_path, 'refdb'),
                      self.prefix.refdb)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('PIPITS_UNITE_REFERENCE_DATA_CHIMERA', join_path(
-                    self.prefix, 'refdb',
-                    'uchime_reference_dataset_01.01.2016',
-                    'uchime_reference_dataset_01.01.2016.fasta'))
-        run_env.set('PIPITS_UNITE_RETRAINED_DIR',
-                    self.prefix.refdb.UNITE_retrained)
-        run_env.set('PIPITS_WARCUP_RETRAINED_DIR',
-                    self.prefix.refdb.warcup_retrained_V2)
-        run_env.set('PIPITS_RDP_CLASSIFIER_JAR', join_path(
-                    self.spec['rdp-classifier'].prefix.bin,
-                    'classifier.jar'))
+    def setup_run_environment(self, env):
+        env.set('PIPITS_UNITE_REFERENCE_DATA_CHIMERA', join_path(
+                self.prefix, 'refdb',
+                'uchime_reference_dataset_01.01.2016',
+                'uchime_reference_dataset_01.01.2016.fasta'))
+        env.set('PIPITS_UNITE_RETRAINED_DIR',
+                self.prefix.refdb.UNITE_retrained)
+        env.set('PIPITS_WARCUP_RETRAINED_DIR',
+                self.prefix.refdb.warcup_retrained_V2)
+        env.set('PIPITS_RDP_CLASSIFIER_JAR', join_path(
+                self.spec['rdp-classifier'].prefix.bin,
+                'classifier.jar'))
diff --git a/var/spack/repos/builtin/packages/py-psyclone/package.py b/var/spack/repos/builtin/packages/py-psyclone/package.py
index fc51370f18ffd900d2ec3b1f1e9862bba015fde3..7b19847b283706b9eaa7a4004fcd1d4555d1f342 100644
--- a/var/spack/repos/builtin/packages/py-psyclone/package.py
+++ b/var/spack/repos/builtin/packages/py-psyclone/package.py
@@ -38,6 +38,6 @@ def check_build(self):
         with working_dir('src'):
             Executable('py.test')()
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # Allow testing with installed executables:
-        spack_env.prepend_path('PATH', self.prefix.bin)
+        env.prepend_path('PATH', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/py-pyproj/package.py b/var/spack/repos/builtin/packages/py-pyproj/package.py
index 143cf0f39b6c1b56c38b56512188d96d7ed89412..9fa36fea8f1112e22916ba75589fdb52b40ab5ad 100644
--- a/var/spack/repos/builtin/packages/py-pyproj/package.py
+++ b/var/spack/repos/builtin/packages/py-pyproj/package.py
@@ -30,5 +30,5 @@ class PyPyproj(PythonPackage):
     depends_on('proj@6.1:', when='@2.2:')
     depends_on('proj@6.0:', when='@2.0:')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('PROJ_DIR', self.spec['proj'].prefix)
+    def setup_build_environment(self, env):
+        env.set('PROJ_DIR', self.spec['proj'].prefix)
diff --git a/var/spack/repos/builtin/packages/py-rtree/package.py b/var/spack/repos/builtin/packages/py-rtree/package.py
index 4d0db48ecb49239c2ffbbbfc0d97d0371fdf766a..d37009a93af54bf766a0f412f099df970b1f0528 100644
--- a/var/spack/repos/builtin/packages/py-rtree/package.py
+++ b/var/spack/repos/builtin/packages/py-rtree/package.py
@@ -16,9 +16,9 @@ class PyRtree(PythonPackage):
     depends_on('py-setuptools', type='build')
     depends_on('libspatialindex')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         lib = self.spec['libspatialindex'].prefix.lib
-        spack_env.set('SPATIALINDEX_LIBRARY',
-                      join_path(lib, 'libspatialindex.%s'   % dso_suffix))
-        spack_env.set('SPATIALINDEX_C_LIBRARY',
-                      join_path(lib, 'libspatialindex_c.%s' % dso_suffix))
+        env.set('SPATIALINDEX_LIBRARY',
+                join_path(lib, 'libspatialindex.%s'   % dso_suffix))
+        env.set('SPATIALINDEX_C_LIBRARY',
+                join_path(lib, 'libspatialindex_c.%s' % dso_suffix))
diff --git a/var/spack/repos/builtin/packages/py-shapely/package.py b/var/spack/repos/builtin/packages/py-shapely/package.py
index c1809767cfedb398c5401aa706a435052ac7d504..074811bcfa8e490ca78dce5d946dc190a3598b30 100644
--- a/var/spack/repos/builtin/packages/py-shapely/package.py
+++ b/var/spack/repos/builtin/packages/py-shapely/package.py
@@ -30,6 +30,6 @@ class PyShapely(PythonPackage):
     depends_on('geos@3.3:', when='@1.3:')
     depends_on('py-pytest', type='test')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('GEOS_CONFIG',
-                      join_path(self.spec['geos'].prefix.bin, 'geos-config'))
+    def setup_build_environment(self, env):
+        env.set('GEOS_CONFIG',
+                join_path(self.spec['geos'].prefix.bin, 'geos-config'))
diff --git a/var/spack/repos/builtin/packages/qbank/package.py b/var/spack/repos/builtin/packages/qbank/package.py
index fa362d6b5a75c4a828f5876d23192e8ce035f43f..5d1d4a2a923ebc98a5e7ec3838d94738aa36746e 100644
--- a/var/spack/repos/builtin/packages/qbank/package.py
+++ b/var/spack/repos/builtin/packages/qbank/package.py
@@ -36,11 +36,9 @@ class Qbank(Package):
     phases = ['configure', 'build', 'install']
 
     def configure_args(self):
-        prefix = self.prefix
-
         config_args = [
-            '--prefix', prefix,
-            '--logdir', join_path(prefix, 'var', 'log', 'qbank')
+            '--prefix', self.prefix,
+            '--logdir', self.prefix.var.log.qbank
         ]
 
         return config_args
@@ -59,11 +57,8 @@ def install(self, spec, prefix):
         make('install')
 
         if '+doc' in spec:
-            install_tree('doc', join_path(prefix, 'doc'))
-
-    def setup_environment(self, spack_env, run_env):
-        spec = self.spec
-        prefix = self.prefix
+            install_tree('doc', prefix.doc)
 
-        if '+doc' in spec:
-            run_env.prepend_path('MANPATH', join_path(prefix, 'doc'))
+    def setup_run_environment(self, env):
+        if '+doc' in self.spec:
+            env.prepend_path('MANPATH', self.prefix.doc)
diff --git a/var/spack/repos/builtin/packages/qmcpack/package.py b/var/spack/repos/builtin/packages/qmcpack/package.py
index 06eaf109963ff53fe401078984166eec4298e849..0e5c9b294e2c2d9d4176377f207fb41dea3ec6e3 100644
--- a/var/spack/repos/builtin/packages/qmcpack/package.py
+++ b/var/spack/repos/builtin/packages/qmcpack/package.py
@@ -353,7 +353,7 @@ def install(self, spec, prefix):
             install_tree('bin', prefix.bin)
 
     # QMCPACK 3.6.0 install directory structure changed, thus there
-    # thus are two version of the setup_environment method
+    # thus are two version of the setup_run_environment method
     @when('@:3.5.0')
     def setup_run_environment(self, env):
         """Set-up runtime environment for QMCPACK.
diff --git a/var/spack/repos/builtin/packages/qscintilla/package.py b/var/spack/repos/builtin/packages/qscintilla/package.py
index bf93cef3d8ab7ac7ef277322932cd2b6e8322967..739d67e5e7d55483f0d5e0b3ff63f8d2fa2d6c98 100644
--- a/var/spack/repos/builtin/packages/qscintilla/package.py
+++ b/var/spack/repos/builtin/packages/qscintilla/package.py
@@ -38,7 +38,7 @@ def qmake_args(self):
     # When INSTALL_ROOT is unset, qscintilla is installed under qt_prefix
     # giving 'Nothing Installed Error'
     def setup_build_environment(self, env):
-        spack_env.set('INSTALL_ROOT', self.prefix)
+        env.set('INSTALL_ROOT', self.prefix)
 
     def setup_run_environment(self, env):
         env.prepend_path('QT_PLUGIN_PATH', self.prefix.plugins)
diff --git a/var/spack/repos/builtin/packages/qtgraph/package.py b/var/spack/repos/builtin/packages/qtgraph/package.py
index 3d4a7307ebcf96411aa9d10465f4953338d68a68..09b1487e4fa0a105311c034c3972bc7d60cba489 100644
--- a/var/spack/repos/builtin/packages/qtgraph/package.py
+++ b/var/spack/repos/builtin/packages/qtgraph/package.py
@@ -25,11 +25,11 @@ class Qtgraph(QMakePackage):
     depends_on("graphviz@2.40.1:", when='@develop')
     depends_on("graphviz@2.40.1", when='@1.0.0.0:')
 
-    def setup_environment(self, spack_env, run_env):
-        """Set up the compile and runtime environments for a package."""
-        spack_env.set('GRAPHVIZ_ROOT', self.spec['graphviz'].prefix)
-        spack_env.set('INSTALL_ROOT', self.prefix)
+    def setup_build_environment(self, env):
+        env.set('GRAPHVIZ_ROOT', self.spec['graphviz'].prefix)
+        env.set('INSTALL_ROOT', self.prefix)
 
+    def setup_run_environment(self, env):
         # What library suffix should be used based on library existence
         if os.path.isdir(self.prefix.lib64):
             lib_dir = self.prefix.lib64
@@ -38,9 +38,7 @@ def setup_environment(self, spack_env, run_env):
 
         # The implementor has set up the library and include paths in
         # a non-conventional way.  We reflect that here.
-        run_env.prepend_path(
-            'LD_LIBRARY_PATH', join_path(
-                lib_dir,
-                '{0}'.format(self.spec['qt'].version.up_to(3))))
+        env.prepend_path('LD_LIBRARY_PATH', join_path(
+            lib_dir, '{0}'.format(self.spec['qt'].version.up_to(3))))
 
-        run_env.prepend_path('CPATH', self.prefix.include.QtGraph)
+        env.prepend_path('CPATH', self.prefix.include.QtGraph)
diff --git a/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py b/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py
index e1825092c116839a7408865987f6a0886ee66a79..ae705377b7d7b6607201033bc73b63d15dc3ae5d 100644
--- a/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py
+++ b/var/spack/repos/builtin/packages/r-phantompeakqualtools/package.py
@@ -26,5 +26,5 @@ class RPhantompeakqualtools(RPackage):
 
     conflicts('%gcc@6:')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('BOOST_ROOT', self.spec['boost'].prefix)
+    def setup_build_environment(self, env):
+        env.set('BOOST_ROOT', self.spec['boost'].prefix)
diff --git a/var/spack/repos/builtin/packages/rclone/package.py b/var/spack/repos/builtin/packages/rclone/package.py
index 00a5221ef93dc5956520e0416070d08f30d6a128..c3d0ba5b1c552b0c74a907af4b09980d03ed6069 100644
--- a/var/spack/repos/builtin/packages/rclone/package.py
+++ b/var/spack/repos/builtin/packages/rclone/package.py
@@ -17,9 +17,9 @@ class Rclone(Package):
 
     depends_on("go", type='build')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # Point GOPATH at the top of the staging dir for the build step.
-        spack_env.prepend_path('GOPATH', self.stage.path)
+        env.prepend_path('GOPATH', self.stage.path)
 
     def install(self, spec, prefix):
         go('build')
diff --git a/var/spack/repos/builtin/packages/ruby/package.py b/var/spack/repos/builtin/packages/ruby/package.py
index 2fbbc0c53778de2e40d416f600ef2e7df2649d69..7f1fc022f0dc75b9dd3b81683e5d3be544d1236e 100644
--- a/var/spack/repos/builtin/packages/ruby/package.py
+++ b/var/spack/repos/builtin/packages/ruby/package.py
@@ -63,7 +63,7 @@ def configure_args(self):
         args.append('--with-tk=%s' % self.spec['tk'].prefix)
         return args
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    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 = []
@@ -71,10 +71,10 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
             if d.package.extends(self.spec):
                 ruby_paths.append(d.prefix)
 
-        spack_env.set_path('GEM_PATH', ruby_paths)
+        env.set_path('GEM_PATH', ruby_paths)
 
         # The actual installation path for this gem
-        spack_env.set('GEM_HOME', dependent_spec.prefix)
+        env.set('GEM_HOME', dependent_spec.prefix)
 
     def setup_dependent_package(self, module, dependent_spec):
         """Called before ruby modules' install() methods.  Sets GEM_HOME
diff --git a/var/spack/repos/builtin/packages/samrai/package.py b/var/spack/repos/builtin/packages/samrai/package.py
index 9843f2a0e47554d024abeb4bb70e1d5929933202..3dd3777b64748ada41110384331155ce637de5ae 100644
--- a/var/spack/repos/builtin/packages/samrai/package.py
+++ b/var/spack/repos/builtin/packages/samrai/package.py
@@ -95,6 +95,6 @@ def configure_args(self):
 
         return options
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         if self.spec.satisfies('@3.12:'):
-            spack_env.append_flags('CXXFLAGS', self.compiler.cxx11_flag)
+            env.append_flags('CXXFLAGS', self.compiler.cxx11_flag)
diff --git a/var/spack/repos/builtin/packages/shared-mime-info/package.py b/var/spack/repos/builtin/packages/shared-mime-info/package.py
index c6cabe1d488de028f92fa64b0d149ba922fb30b6..2cf967b7c37ab7b4c3b14c1e0abb315d86c0a486 100644
--- a/var/spack/repos/builtin/packages/shared-mime-info/package.py
+++ b/var/spack/repos/builtin/packages/shared-mime-info/package.py
@@ -24,8 +24,8 @@ class SharedMimeInfo(AutotoolsPackage):
     depends_on('gettext', type='build')
     depends_on('pkgconfig', type='build')
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path("XDG_DATA_DIRS",
-                               self.prefix.share)
-        run_env.prepend_path("XDG_DATA_DIRS",
-                             self.prefix.share)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path('XDG_DATA_DIRS', self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/shiny-server/package.py b/var/spack/repos/builtin/packages/shiny-server/package.py
index d26ece50b1fc09cd34dc7763626e515bffa642e8..77f70c551c7e0a5eff57908ab89c1108f0f4e5bf 100644
--- a/var/spack/repos/builtin/packages/shiny-server/package.py
+++ b/var/spack/repos/builtin/packages/shiny-server/package.py
@@ -47,10 +47,8 @@ def build_node(self):
         bash('-c', 'bin/npm --python="$PYTHON" install')
         bash('-c', 'bin/node ./ext/node/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js --python="$PYTHON" rebuild')  # noqa: E501
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH',
-                             join_path(self.prefix, 'shiny-server', 'bin'))
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', join_path(self.prefix, 'shiny-server', 'bin'))
         # shiny comes with its own pandoc; hook it up...
-        run_env.prepend_path('PATH',
-                             join_path(self.prefix, 'shiny-server',
-                                       'ext', 'pandoc', 'static'))
+        env.prepend_path('PATH', join_path(
+            self.prefix, 'shiny-server', 'ext', 'pandoc', 'static'))
diff --git a/var/spack/repos/builtin/packages/shortbred/package.py b/var/spack/repos/builtin/packages/shortbred/package.py
index d94bf8c36ce139aac0d01bf1bda1e812a4eb7e80..94fb9ecec2cf42bb0ad234626fb62a2b561a2a9d 100644
--- a/var/spack/repos/builtin/packages/shortbred/package.py
+++ b/var/spack/repos/builtin/packages/shortbred/package.py
@@ -28,5 +28,5 @@ def install(self, spec, prefix):
         install('shortbred_quantify.py', prefix.bin)
         install_tree('src', prefix.src)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PYTHONPATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PYTHONPATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/signalp/package.py b/var/spack/repos/builtin/packages/signalp/package.py
index fbaaff574e46a3957aeb1302c8c4d30a03c0cb38..02837d22ea0f9fd5484b1dc560b9e882a39d7896 100644
--- a/var/spack/repos/builtin/packages/signalp/package.py
+++ b/var/spack/repos/builtin/packages/signalp/package.py
@@ -39,5 +39,5 @@ def install(self, spec, prefix):
         install_tree('lib', prefix.lib)
         install_tree('syn', prefix.syn)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/signify/package.py b/var/spack/repos/builtin/packages/signify/package.py
index 4c44ec8391352457597ffbdc9c8003409f74bc0c..33dc554f9b13f6321279aa762b7275ab72b2dfcf 100644
--- a/var/spack/repos/builtin/packages/signify/package.py
+++ b/var/spack/repos/builtin/packages/signify/package.py
@@ -16,5 +16,5 @@ class Signify(MakefilePackage):
 
     depends_on('libbsd@0.8:')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('PREFIX', self.prefix)
+    def setup_build_environment(self, env):
+        env.set('PREFIX', self.prefix)
diff --git a/var/spack/repos/builtin/packages/singularity/package.py b/var/spack/repos/builtin/packages/singularity/package.py
index 43e40ac039ecb288950516d08721aa2af42f5129..cdf8e499b0bb76d13878807726417269976573ef 100644
--- a/var/spack/repos/builtin/packages/singularity/package.py
+++ b/var/spack/repos/builtin/packages/singularity/package.py
@@ -87,10 +87,9 @@ def edit(self, spec, prefix):
     build_targets = ['-C', 'builddir', 'parallel=False']
     install_targets = ['install', '-C', 'builddir', 'parallel=False']
 
-    def setup_environment(self, spack_env, run_env):
-        # Point GOPATH at the top of the staging dir for the build
-        # step.
-        spack_env.prepend_path('GOPATH', self.gopath)
+    def setup_build_environment(self, env):
+        # Point GOPATH at the top of the staging dir for the build step.
+        env.prepend_path('GOPATH', self.gopath)
 
     # `singularity` has a fixed path where it will look for
     # mksquashfs.  If it lives somewhere else you need to specify the
diff --git a/var/spack/repos/builtin/packages/slate/package.py b/var/spack/repos/builtin/packages/slate/package.py
index 85f31667c5250cb49e389bf364e455a57c834bc4..6de522aea1b9762983aac736331d29cbe9d04a32 100644
--- a/var/spack/repos/builtin/packages/slate/package.py
+++ b/var/spack/repos/builtin/packages/slate/package.py
@@ -31,11 +31,10 @@ class Slate(Package):
 
     conflicts('%gcc@:5')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if('+cuda' in self.spec):
-            spack_env.prepend_path('CPATH', self.spec['cuda'].prefix.include)
-        spack_env.prepend_path('CPATH', self.spec['intel-mkl'].prefix
-                               + '/mkl/include')
+            env.prepend_path('CPATH', self.spec['cuda'].prefix.include)
+        env.prepend_path('CPATH', self.spec['intel-mkl'].prefix.mkl.include)
 
     def install(self, spec, prefix):
         f_cuda = "1" if spec.variants['cuda'].value else "0"
diff --git a/var/spack/repos/builtin/packages/slepc/package.py b/var/spack/repos/builtin/packages/slepc/package.py
index 8313705cbf929360ff6be542f403d3591910a3cf..9ffd49431cf281139339e02663024c9e9b270d3f 100644
--- a/var/spack/repos/builtin/packages/slepc/package.py
+++ b/var/spack/repos/builtin/packages/slepc/package.py
@@ -101,6 +101,6 @@ def install(self, spec, prefix):
 
         make('install', parallel=False)
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         # set up SLEPC_DIR for everyone using SLEPc package
-        spack_env.set('SLEPC_DIR', self.prefix)
+        env.set('SLEPC_DIR', self.prefix)
diff --git a/var/spack/repos/builtin/packages/snap-korf/package.py b/var/spack/repos/builtin/packages/snap-korf/package.py
index 930d8c28e769aefd02d0d7507fe54d5b349639a3..64645143cb8e4f061cda82318901ff378e62ab89 100644
--- a/var/spack/repos/builtin/packages/snap-korf/package.py
+++ b/var/spack/repos/builtin/packages/snap-korf/package.py
@@ -38,6 +38,6 @@ def install(self, spec, prefix):
         install_tree('HMM', prefix.HMM)
         install_tree('DNA', prefix.DNA)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('ZOE', self.prefix)
-        run_env.prepend_path('PATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.set('ZOE', self.prefix)
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/snphylo/package.py b/var/spack/repos/builtin/packages/snphylo/package.py
index ae406850664e100259869e1a6d749a0916b3165d..3a24c57a53300bb7436822b4126e6376bcf047b0 100644
--- a/var/spack/repos/builtin/packages/snphylo/package.py
+++ b/var/spack/repos/builtin/packages/snphylo/package.py
@@ -33,5 +33,5 @@ def install(self, spec, prefix):
             bash('./setup.sh', input=f)
             install_tree('.', prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.spec.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/sosflow/package.py b/var/spack/repos/builtin/packages/sosflow/package.py
index f1eaf23b9b9bee9aee8557963b037bea3c094845..e080c34dfb7baffa666bf44550e487250b71895d 100644
--- a/var/spack/repos/builtin/packages/sosflow/package.py
+++ b/var/spack/repos/builtin/packages/sosflow/package.py
@@ -21,14 +21,15 @@ class Sosflow(CMakePackage):
     depends_on('pkgconfig')
     depends_on('mpi')
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.set('SOS_HOST_KNOWN_AS', 'SPACK-SOS-BUILD')
-        spack_env.set('SOS_HOST_NODE_NAME', 'SPACK-SOS-NODE')
-        spack_env.set('SOS_HOST_DETAILED', 'SPACK-SOS-DETAILED')
-
-        run_env.set('SOS_ROOT', self.spec.prefix)
-        run_env.set('SOS_BUILD_DIR', self.spec.prefix)
-        run_env.set('SOS_CMD_PORT', '22500')
-        run_env.set('SOS_WORK', env['HOME'])
-        run_env.set('SOS_EVPATH_MEETUP', env['HOME'])
-        run_env.set('SOS_ENV_SET', 'true')
+    def setup_build_environment(self, env):
+        env.set('SOS_HOST_KNOWN_AS', 'SPACK-SOS-BUILD')
+        env.set('SOS_HOST_NODE_NAME', 'SPACK-SOS-NODE')
+        env.set('SOS_HOST_DETAILED', 'SPACK-SOS-DETAILED')
+
+    def setup_run_environment(self, env):
+        env.set('SOS_ROOT', self.spec.prefix)
+        env.set('SOS_BUILD_DIR', self.spec.prefix)
+        env.set('SOS_CMD_PORT', '22500')
+        env.set('SOS_WORK', env['HOME'])
+        env.set('SOS_EVPATH_MEETUP', env['HOME'])
+        env.set('SOS_ENV_SET', 'true')
diff --git a/var/spack/repos/builtin/packages/spark/package.py b/var/spack/repos/builtin/packages/spark/package.py
index 9b05e3b4bfd45c5267f175e2af1a1063daacdc30..b21a7aab1a41252971fca0584b6dd7259f18a4e0 100644
--- a/var/spack/repos/builtin/packages/spark/package.py
+++ b/var/spack/repos/builtin/packages/spark/package.py
@@ -47,7 +47,7 @@ def install_dir(dirname):
         install('RELEASE', prefix)
 
     @when('+hadoop')
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         hadoop = self.spec['hadoop'].command
         hadoop.add_default_env('JAVA_HOME', self.spec['java'].home)
         hadoop_classpath = hadoop('classpath', output=str)
@@ -56,4 +56,4 @@ def setup_environment(self, spack_env, run_env):
         # module files
         hadoop_classpath = re.sub(r'[\s+]', '', hadoop_classpath)
 
-        run_env.set('SPARK_DIST_CLASSPATH', hadoop_classpath)
+        env.set('SPARK_DIST_CLASSPATH', hadoop_classpath)
diff --git a/var/spack/repos/builtin/packages/sspace-standard/package.py b/var/spack/repos/builtin/packages/sspace-standard/package.py
index 768bd3afb12e2de476017427cc52824a22c72943..3a5d1fa10efe235523988f22387e2a125e6c059f 100644
--- a/var/spack/repos/builtin/packages/sspace-standard/package.py
+++ b/var/spack/repos/builtin/packages/sspace-standard/package.py
@@ -48,6 +48,6 @@ def install(self, spec, prefix):
         install_tree('tools', prefix.tools)
         install(rootscript, prefix)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('SSPACE_HOME', prefix)
-        run_env.prepend_path('PATH', prefix)
+    def setup_run_environment(self, env):
+        env.set('SSPACE_HOME', self.prefix)
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/stata/package.py b/var/spack/repos/builtin/packages/stata/package.py
index 6f19adda532d838b7b05fc0e615d03b063b9a028..b294e1ebf2665ac51e7c3e0062dc5e1d8b5066ad 100644
--- a/var/spack/repos/builtin/packages/stata/package.py
+++ b/var/spack/repos/builtin/packages/stata/package.py
@@ -37,9 +37,9 @@ def url_for_version(self, version):
         return "file://{0}/Stata{1}Linux64.tar.gz".format(os.getcwd(), version)
 
     # STATA is simple and needs really just the PATH set.
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', prefix)
-        run_env.prepend_path('LD_LIBRARY_PATH', self.spec['libpng'].prefix.lib)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
+        env.prepend_path('LD_LIBRARY_PATH', self.spec['libpng'].prefix.lib)
 
     # Extracting the file provides the following:
     # ./unix/
diff --git a/var/spack/repos/builtin/packages/steps/package.py b/var/spack/repos/builtin/packages/steps/package.py
index 41ef74c6815debe0f1a8b738d09952481bfdcb6a..7de6c54b6dbaf10485244945380a2fcfede2c457 100644
--- a/var/spack/repos/builtin/packages/steps/package.py
+++ b/var/spack/repos/builtin/packages/steps/package.py
@@ -55,7 +55,7 @@ def cmake_args(self):
         args.append('-DBLAS_LIBRARIES=' + spec['blas'].libs.joined(";"))
         return args
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # This recipe exposes a Python package from a C++ CMake project.
         # This hook is required to reproduce what Spack PythonPackage does.
-        run_env.prepend_path('PYTHONPATH', self.prefix)
+        env.prepend_path('PYTHONPATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/supernova/package.py b/var/spack/repos/builtin/packages/supernova/package.py
index 43ccbe50c62001eae7b7e287ccb91b09844d5568..e17de6760cf4da22a2aa9cb2fd9a852af7cc9aa4 100644
--- a/var/spack/repos/builtin/packages/supernova/package.py
+++ b/var/spack/repos/builtin/packages/supernova/package.py
@@ -36,8 +36,8 @@ class Supernova(Package):
     def url_for_version(self, version):
         return "file://{0}/supernova-{1}.tar.gz".format(os.getcwd(), version)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
 
     def install(self, spec, prefix):
         rm = which('rm')
diff --git a/var/spack/repos/builtin/packages/swiftsim/package.py b/var/spack/repos/builtin/packages/swiftsim/package.py
index cf538d24c038c5f05122d8f96ffbc16bbd5834b7..65f4843a0aafc0aae5a776a23566e8ecbde09f2b 100644
--- a/var/spack/repos/builtin/packages/swiftsim/package.py
+++ b/var/spack/repos/builtin/packages/swiftsim/package.py
@@ -33,14 +33,15 @@ class Swiftsim(AutotoolsPackage):
     depends_on('hdf5~mpi', when='~mpi')
     depends_on('hdf5+mpi', when='+mpi')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         # Needed to be able to download from the Durham gitlab repository
         tty.warn('Setting "GIT_SSL_NO_VERIFY=1"')
         tty.warn('This is needed to clone SWIFT repository')
-        spack_env.set('GIT_SSL_NO_VERIFY', 1)
+        env.set('GIT_SSL_NO_VERIFY', 1)
 
     def configure_args(self):
-        return ['--prefix=%s' % self.prefix,
-                '--enable-mpi' if '+mpi' in self.spec else '--disable-mpi',
-                '--with-metis={0}'.format(self.spec['metis'].prefix),
-                '--enable-optimization']
+        return [
+            '--enable-mpi' if '+mpi' in self.spec else '--disable-mpi',
+            '--with-metis={0}'.format(self.spec['metis'].prefix),
+            '--enable-optimization'
+        ]
diff --git a/var/spack/repos/builtin/packages/targetp/package.py b/var/spack/repos/builtin/packages/targetp/package.py
index 98dd5601039faaa48f1ff10c8d11fd1908fd0aa3..11549b9f52a430743b75711992d0acd1541d10df 100644
--- a/var/spack/repos/builtin/packages/targetp/package.py
+++ b/var/spack/repos/builtin/packages/targetp/package.py
@@ -44,6 +44,6 @@ def install(self, spec, prefix):
         install_tree('tmp', prefix.tmp)
         install('targetp', prefix.targetp)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('TARGETP', self.prefix)
-        run_env.prepend_path('PATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.set('TARGETP', self.prefix)
+        env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/tassel/package.py b/var/spack/repos/builtin/packages/tassel/package.py
index f78e9e19a02026ba94694489be91407b0ddaa38e..7f3ab470f357c3d68f4b33c50bb331cf8e18519a 100644
--- a/var/spack/repos/builtin/packages/tassel/package.py
+++ b/var/spack/repos/builtin/packages/tassel/package.py
@@ -21,5 +21,5 @@ class Tassel(Package):
     def install(self, spec, prefix):
         install_tree('.', prefix.bin)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('CLASSPATH', prefix.bin.lib)
+    def setup_run_environment(self, env):
+        env.prepend_path('CLASSPATH', self.prefix.bin.lib)
diff --git a/var/spack/repos/builtin/packages/tau/package.py b/var/spack/repos/builtin/packages/tau/package.py
index 50c826b610977d50c0188860a094109d96fbe735..5d6ed9c2850c939359822bc1635496ff0dd59443 100644
--- a/var/spack/repos/builtin/packages/tau/package.py
+++ b/var/spack/repos/builtin/packages/tau/package.py
@@ -262,7 +262,7 @@ def link_tau_arch_dirs(self):
                 if os.path.isdir(src) and not os.path.exists(dest):
                     os.symlink(join_path(subdir, d), dest)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         pattern = join_path(self.prefix.lib, 'Makefile.*')
         files = glob.glob(pattern)
 
@@ -272,4 +272,4 @@ def setup_environment(self, spack_env, run_env):
         # directory to inspect. The conditional below will set `TAU_MAKEFILE`
         # in the latter case.
         if files:
-            run_env.set('TAU_MAKEFILE', files[0])
+            env.set('TAU_MAKEFILE', files[0])
diff --git a/var/spack/repos/builtin/packages/tcl/package.py b/var/spack/repos/builtin/packages/tcl/package.py
index a76c748262b9dfbcb1dbc29c42d59134a0911122..888e57581f9c492b8c0a5a203d3ccf935d9a7eb2 100644
--- a/var/spack/repos/builtin/packages/tcl/package.py
+++ b/var/spack/repos/builtin/packages/tcl/package.py
@@ -97,17 +97,17 @@ def tcl_builtin_lib_dir(self):
         return join_path(self.tcl_lib_dir,
                          'tcl{0}'.format(self.version.up_to(2)))
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # When using Tkinter from within spack provided python+tkinter, python
         # will not be able to find Tcl/Tk unless TCL_LIBRARY is set.
-        run_env.set('TCL_LIBRARY', join_path(self.prefix, self.tcl_lib_dir))
+        env.set('TCL_LIBRARY', join_path(self.prefix, self.tcl_lib_dir))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Set TCLLIBPATH to include the tcl-shipped directory for
         extensions and any other tcl extension it depends on.
         For further info see: https://wiki.tcl.tk/1787"""
 
-        spack_env.set('TCL_LIBRARY', join_path(self.prefix, self.tcl_lib_dir))
+        env.set('TCL_LIBRARY', join_path(self.prefix, self.tcl_lib_dir))
 
         # If we set TCLLIBPATH, we must also ensure that the corresponding
         # tcl is found in the build environment. This to prevent cases
@@ -116,7 +116,7 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
         # it boils down to the same situation we have here.
         path = os.path.dirname(self.command.path)
         if not is_system_path(path):
-            spack_env.prepend_path('PATH', path)
+            env.prepend_path('PATH', path)
 
         tcl_paths = [join_path(self.prefix, self.tcl_builtin_lib_dir)]
 
@@ -130,12 +130,16 @@ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
         # "TCLLIBPATH is a Tcl list, not some platform-specific
         # colon-separated or semi-colon separated format"
         tcllibpath = ' '.join(tcl_paths)
-        spack_env.set('TCLLIBPATH', tcllibpath)
+        env.set('TCLLIBPATH', tcllibpath)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        """Set TCLLIBPATH to include the tcl-shipped directory for
+        extensions and any other tcl extension it depends on.
+        For further info see: https://wiki.tcl.tk/1787"""
 
         # For run time environment set only the path for
         # dependent_spec and prepend it to TCLLIBPATH
         if dependent_spec.package.extends(self.spec):
             dependent_tcllibpath = join_path(dependent_spec.prefix,
                                              self.tcl_lib_dir)
-            run_env.prepend_path('TCLLIBPATH', dependent_tcllibpath,
-                                 separator=' ')
+            env.prepend_path('TCLLIBPATH', dependent_tcllibpath, separator=' ')
diff --git a/var/spack/repos/builtin/packages/templight/package.py b/var/spack/repos/builtin/packages/templight/package.py
index 34f75964e10a337c0fdcaecdf3704bdcca6f2b18..c4b6aaa617fb229fed48161bedd3c516896a8d73 100644
--- a/var/spack/repos/builtin/packages/templight/package.py
+++ b/var/spack/repos/builtin/packages/templight/package.py
@@ -101,10 +101,12 @@ def patch(self):
         with open("tools/clang/tools/CMakeLists.txt", "a") as cmake_lists:
             cmake_lists.write("add_clang_subdirectory(templight)")
 
-    def setup_environment(self, spack_env, run_env):
-        spack_env.append_flags('CXXFLAGS', self.compiler.cxx11_flag)
-        run_env.set('CC', join_path(self.spec.prefix.bin, 'templight'))
-        run_env.set('CXX', join_path(self.spec.prefix.bin, 'templight++'))
+    def setup_build_environment(self, env):
+        env.append_flags('CXXFLAGS', self.compiler.cxx11_flag)
+
+    def setup_run_environment(self, env):
+        env.set('CC', join_path(self.spec.prefix.bin, 'templight'))
+        env.set('CXX', join_path(self.spec.prefix.bin, 'templight++'))
 
     def cmake_args(self):
         spec = self.spec
diff --git a/var/spack/repos/builtin/packages/texlive/package.py b/var/spack/repos/builtin/packages/texlive/package.py
index cd8e685bbc59a9a4026828c37b07c7d3a8eff902..ae17275ee27ef7faff064cb70ea72a724440e9cc 100644
--- a/var/spack/repos/builtin/packages/texlive/package.py
+++ b/var/spack/repos/builtin/packages/texlive/package.py
@@ -47,9 +47,9 @@ class Texlive(Package):
 
     depends_on('perl', type='build')
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         suffix = "%s-%s" % (platform.machine(), platform.system().lower())
-        run_env.prepend_path('PATH', join_path(self.prefix.bin, suffix))
+        env.prepend_path('PATH', join_path(self.prefix.bin, suffix))
 
     def install(self, spec, prefix):
         # Using texlive's mirror system leads to mysterious problems,
diff --git a/var/spack/repos/builtin/packages/tk/package.py b/var/spack/repos/builtin/packages/tk/package.py
index 0533e54e0554fa864e8517a302ec928cf7e13571..2ed1f07a0f006dc37ae20a30ca65188791b826a3 100644
--- a/var/spack/repos/builtin/packages/tk/package.py
+++ b/var/spack/repos/builtin/packages/tk/package.py
@@ -60,14 +60,14 @@ def libs(self):
         return find_libraries(['libtk{0}'.format(self.version.up_to(2))],
                               root=self.prefix, recursive=True)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_run_environment(self, env):
         # When using Tkinter from within spack provided python+tkinter, python
         # will not be able to find Tcl/Tk unless TK_LIBRARY is set.
-        run_env.set('TK_LIBRARY', join_path(self.prefix.lib, 'tk{0}'.format(
+        env.set('TK_LIBRARY', join_path(self.prefix.lib, 'tk{0}'.format(
             self.spec.version.up_to(2))))
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('TK_LIBRARY', join_path(self.prefix.lib, 'tk{0}'.format(
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('TK_LIBRARY', join_path(self.prefix.lib, 'tk{0}'.format(
             self.spec.version.up_to(2))))
 
     def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/tppred/package.py b/var/spack/repos/builtin/packages/tppred/package.py
index a4ae0997332513be656f258da6aeaa4a21389498..1c325e83840db2256a5d7fb7eccfe98a622b5b16 100644
--- a/var/spack/repos/builtin/packages/tppred/package.py
+++ b/var/spack/repos/builtin/packages/tppred/package.py
@@ -31,5 +31,5 @@ def install(self, spec, prefix):
         install_tree('example', prefix.example)
         install_tree('tppred2modules', prefix.modules)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('TPPRED_ROOT', prefix)
+    def setup_run_environment(self, env):
+        env.set('TPPRED_ROOT', self.prefix)
diff --git a/var/spack/repos/builtin/packages/transdecoder/package.py b/var/spack/repos/builtin/packages/transdecoder/package.py
index b49b67ae9bf7cebbacaa429c93b58a6306a95c2c..206aac671969cb464bbbd603aec2a25419d48f8d 100644
--- a/var/spack/repos/builtin/packages/transdecoder/package.py
+++ b/var/spack/repos/builtin/packages/transdecoder/package.py
@@ -29,6 +29,6 @@ def install(self, spec, prefix):
         install_tree('PerlLib', prefix.PerlLib)
         install_tree('util', prefix.util)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', prefix)
-        run_env.prepend_path('PATH', prefix.util)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
+        env.prepend_path('PATH', self.prefix.util)
diff --git a/var/spack/repos/builtin/packages/turbomole/package.py b/var/spack/repos/builtin/packages/turbomole/package.py
index fc331a1429bc34976fc59f38fe38a4c0c5af0c05..0c996fcf1873a0600fa701e6a29044637d8f5e35 100644
--- a/var/spack/repos/builtin/packages/turbomole/package.py
+++ b/var/spack/repos/builtin/packages/turbomole/package.py
@@ -52,9 +52,8 @@ def get_tm_arch(self):
             return
 
     def install(self, spec, prefix):
-        if spec.satisfies('@:7.0.2'):
-            calculate_version = 'calculate_2.4_linux64'
-            molecontrol_version = 'MoleControl_2.5'
+        calculate_version = 'calculate_2.4_linux64'
+        molecontrol_version = 'MoleControl_2.5'
 
         tm_arch = self.get_tm_arch()
 
@@ -114,33 +113,25 @@ def install(self, spec, prefix):
             install('mpirun_scripts/ricc2', join_path(dst, 'mpirun_scripts'))
             install('mpirun_scripts/ridft', join_path(dst, 'mpirun_scripts'))
 
-    def setup_environment(self, spack_env, run_env):
-        if self.spec.satisfies('@:7.0.2'):
-            molecontrol_version = 'MoleControl_2.5'
+    def setup_run_environment(self, env):
+        molecontrol_version = 'MoleControl_2.5'
 
         tm_arch = self.get_tm_arch()
 
-        run_env.set('TURBODIR', join_path(self.prefix, 'TURBOMOLE'))
-        run_env.set('MOLE_CONTROL',
-                    join_path(self.prefix, 'TURBOMOLE', molecontrol_version))
+        env.set('TURBODIR', self.prefix.TURBOMOLE)
+        env.set('MOLE_CONTROL',
+                join_path(self.prefix, 'TURBOMOLE', molecontrol_version))
 
-        run_env.prepend_path('PATH',
-                             join_path(self.prefix, 'TURBOMOLE', 'thermocalc'))
-        run_env.prepend_path('PATH',
-                             join_path(self.prefix, 'TURBOMOLE', 'scripts'))
+        env.prepend_path('PATH', self.prefix.TURBOMOLE.thermocalc)
+        env.prepend_path('PATH', self.prefix.TURBOMOLE.scripts)
         if '+mpi' in self.spec:
-            run_env.set('PARA_ARCH', 'MPI')
-            run_env.prepend_path('PATH',
-                                 join_path(self.prefix,
-                                           'TURBOMOLE', 'bin', '%s_mpi'
-                                           % tm_arch))
+            env.set('PARA_ARCH', 'MPI')
+            env.prepend_path('PATH', join_path(
+                self.prefix, 'TURBOMOLE', 'bin', '%s_mpi' % tm_arch))
         elif '+smp' in self.spec:
-            run_env.set('PARA_ARCH', 'SMP')
-            run_env.prepend_path('PATH',
-                                 join_path(self.prefix,
-                                           'TURBOMOLE', 'bin', '%s_smp'
-                                           % tm_arch))
+            env.set('PARA_ARCH', 'SMP')
+            env.prepend_path('PATH', join_path(
+                self.prefix, 'TURBOMOLE', 'bin', '%s_smp' % tm_arch))
         else:
-            run_env.prepend_path('PATH',
-                                 join_path(self.prefix,
-                                           'TURBOMOLE', 'bin', tm_arch))
+            env.prepend_path('PATH', join_path(
+                self.prefix, 'TURBOMOLE', 'bin', tm_arch))
diff --git a/var/spack/repos/builtin/packages/upcxx/package.py b/var/spack/repos/builtin/packages/upcxx/package.py
index 8afd7286e2d244430eae9f2118b448753fa5f18a..d4975d3a3549c9e278838f63667e5bc8b2a1249e 100644
--- a/var/spack/repos/builtin/packages/upcxx/package.py
+++ b/var/spack/repos/builtin/packages/upcxx/package.py
@@ -45,32 +45,33 @@ def url_for_version(self, version):
             url = "https://bitbucket.org/berkeleylab/upcxx/downloads/upcxx-{0}-offline.tar.gz"
         return url.format(version)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         if 'platform=cray' in self.spec:
-            spack_env.set('GASNET_CONFIGURE_ARGS', '--enable-mpi=probe')
+            env.set('GASNET_CONFIGURE_ARGS', '--enable-mpi=probe')
 
         if 'cross=none' not in self.spec:
-            spack_env.set('CROSS', self.spec.variants['cross'].value)
+            env.set('CROSS', self.spec.variants['cross'].value)
 
         if '+cuda' in self.spec:
-            spack_env.set('UPCXX_CUDA', '1')
-            spack_env.set('UPCXX_CUDA_NVCC', self.spec['cuda'].prefix.bin.nvcc)
+            env.set('UPCXX_CUDA', '1')
+            env.set('UPCXX_CUDA_NVCC', self.spec['cuda'].prefix.bin.nvcc)
 
-        run_env.set('UPCXX_INSTALL', self.prefix)
-        run_env.set('UPCXX', self.prefix.bin.upcxx)
+    def setup_run_environment(self, env):
+        env.set('UPCXX_INSTALL', self.prefix)
+        env.set('UPCXX', self.prefix.bin.upcxx)
         if 'platform=cray' in self.spec:
-            run_env.set('UPCXX_GASNET_CONDUIT', 'aries')
-            run_env.set('UPCXX_NETWORK', 'aries')
+            env.set('UPCXX_GASNET_CONDUIT', 'aries')
+            env.set('UPCXX_NETWORK', 'aries')
 
     def setup_dependent_package(self, module, dep_spec):
         dep_spec.upcxx = self.prefix.bin.upcxx
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.set('UPCXX_INSTALL', self.prefix)
-        spack_env.set('UPCXX', self.prefix.bin.upcxx)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.set('UPCXX_INSTALL', self.prefix)
+        env.set('UPCXX', self.prefix.bin.upcxx)
         if 'platform=cray' in self.spec:
-            spack_env.set('UPCXX_GASNET_CONDUIT', 'aries')
-            spack_env.set('UPCXX_NETWORK', 'aries')
+            env.set('UPCXX_GASNET_CONDUIT', 'aries')
+            env.set('UPCXX_NETWORK', 'aries')
 
     def install(self, spec, prefix):
         env['CC'] = self.compiler.cc
diff --git a/var/spack/repos/builtin/packages/util-macros/package.py b/var/spack/repos/builtin/packages/util-macros/package.py
index 26de9b3efd49ccf8b21cb8d6c7f785c7dcca32b3..150e27fef7bef9100b40227af203d4aab66f6cef 100644
--- a/var/spack/repos/builtin/packages/util-macros/package.py
+++ b/var/spack/repos/builtin/packages/util-macros/package.py
@@ -17,7 +17,6 @@ class UtilMacros(AutotoolsPackage):
     version('1.19.1', sha256='18d459400558f4ea99527bc9786c033965a3db45bf4c6a32eefdc07aa9e306a6')
     version('1.19.0', sha256='2835b11829ee634e19fa56517b4cfc52ef39acea0cd82e15f68096e27cbed0ba')
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+    def setup_dependent_build_environment(self, env, dependent_spec):
         """Adds the ACLOCAL path for autotools."""
-        spack_env.append_path('ACLOCAL_PATH',
-                              join_path(self.prefix.share, 'aclocal'))
+        env.append_path('ACLOCAL_PATH', self.prefix.share.aclocal)
diff --git a/var/spack/repos/builtin/packages/varscan/package.py b/var/spack/repos/builtin/packages/varscan/package.py
index 9b6dc2e36ca84054f7084547da51e64608362e33..ce2f6784b8c3fb32d36b0838b546954687fbea4c 100644
--- a/var/spack/repos/builtin/packages/varscan/package.py
+++ b/var/spack/repos/builtin/packages/varscan/package.py
@@ -35,6 +35,6 @@ def install(self, spec, prefix):
         filter_file('varscan.jar', join_path(prefix.jar, jar_file),
                     script, **kwargs)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('VARSCAN_HOME', self.prefix.jar)
-        run_env.set('CLASSPATH', self.prefix.jar)
+    def setup_run_environment(self, env):
+        env.set('VARSCAN_HOME', self.prefix.jar)
+        env.set('CLASSPATH', self.prefix.jar)
diff --git a/var/spack/repos/builtin/packages/vcftools/package.py b/var/spack/repos/builtin/packages/vcftools/package.py
index 5368ddd931cebea717b6b3c18185715d3a028d80..5756d8457cf39471a653bd6133f9a8101a036c4e 100644
--- a/var/spack/repos/builtin/packages/vcftools/package.py
+++ b/var/spack/repos/builtin/packages/vcftools/package.py
@@ -23,7 +23,7 @@ class Vcftools(AutotoolsPackage):
     depends_on('perl', type=('build', 'run'))
     depends_on('zlib')
 
-    # this needs to be in sync with what setup_environment adds to
+    # this needs to be in sync with what setup_run_environment adds to
     # PERL5LIB below
     def configure_args(self):
         return ['--with-pmdir={0}'.format(self.prefix.lib)]
@@ -51,5 +51,5 @@ def filter_sbang(self):
             kwargs = {'ignore_absent': True, 'backup': False, 'string': False}
             filter_file(match, substitute, *files, **kwargs)
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PERL5LIB', self.prefix.lib)
+    def setup_run_environment(self, env):
+        env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/verilator/package.py b/var/spack/repos/builtin/packages/verilator/package.py
index 89da6e140913afd4556ef6b2e9ccb9d4ad844480..9522d477d8d301b125fbd48ba08002538eef4ab3 100644
--- a/var/spack/repos/builtin/packages/verilator/package.py
+++ b/var/spack/repos/builtin/packages/verilator/package.py
@@ -42,8 +42,8 @@ class Verilator(AutotoolsPackage):
     depends_on('flex')
     depends_on('perl',  type=('build', 'run'))
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('VERILATOR_ROOT', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('VERILATOR_ROOT', self.prefix)
 
     # verilator requires access to its shipped scripts (bin) and include
     # but the standard make doesn't put it in the correct places
diff --git a/var/spack/repos/builtin/packages/vesta/package.py b/var/spack/repos/builtin/packages/vesta/package.py
index 918c44b7fb96066fd07118d4aa4fe3fd0b60099e..1b5560bce9efe21d8bd3c03d69dc009b66bdc7a5 100644
--- a/var/spack/repos/builtin/packages/vesta/package.py
+++ b/var/spack/repos/builtin/packages/vesta/package.py
@@ -21,9 +21,9 @@ class Vesta(Package):
 
     conflicts('%gcc@:5.3')
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.prepend_path('PATH', self.prefix)
-        run_env.prepend_path('LD_LIBRARY_PATH', self.prefix)
+    def setup_run_environment(self, env):
+        env.prepend_path('PATH', self.prefix)
+        env.prepend_path('LD_LIBRARY_PATH', self.prefix)
 
     def install(self, spec, prefix):
         install_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/wordnet/package.py b/var/spack/repos/builtin/packages/wordnet/package.py
index 6bb3ca2dc03bbe96fa2882fd1558901e6b72ea35..23ae8e7fe6a76483e35677bf72a43ffcb0f56f01 100644
--- a/var/spack/repos/builtin/packages/wordnet/package.py
+++ b/var/spack/repos/builtin/packages/wordnet/package.py
@@ -28,6 +28,6 @@ def configure_args(self):
 
         return args
 
-    def setup_environment(self, spack_env, run_env):
-        run_env.set('WNHOME', self.prefix)
-        run_env.set('WNSEARCHDIR', self.prefix.dict)
+    def setup_run_environment(self, env):
+        env.set('WNHOME', self.prefix)
+        env.set('WNSEARCHDIR', self.prefix.dict)
diff --git a/var/spack/repos/builtin/packages/workrave/package.py b/var/spack/repos/builtin/packages/workrave/package.py
index fa5a597484a5b131ac01d51bdcc57bc655db4357..95dc3bb427e5c9a3b99d7b134c6c1bb0a6345b1a 100644
--- a/var/spack/repos/builtin/packages/workrave/package.py
+++ b/var/spack/repos/builtin/packages/workrave/package.py
@@ -67,13 +67,13 @@ class Workrave(AutotoolsPackage):
              destination='',
              placement=m4files[1])
 
-    def setup_environment(self, build_env, run_env):
+    def setup_build_environment(self, env):
         # unset PYTHONHOME to let system python script with explict
         # system python sbangs like glib-mkenums work, see #6968
         # Without this, we will get
         # ImportError: No module named site
         # during build phase when make runs glib-mkenums
-        build_env.unset('PYTHONHOME')
+        env.unset('PYTHONHOME')
 
     @run_before('autoreconf')
     def extra_m4(self):
diff --git a/var/spack/repos/builtin/packages/xkeyboard-config/package.py b/var/spack/repos/builtin/packages/xkeyboard-config/package.py
index a3356aaf09d83df501dfb723723a0e0eb0bbdaa9..c6fdac55b0ae775741f4dfdbd3b3d9f20557d2b8 100644
--- a/var/spack/repos/builtin/packages/xkeyboard-config/package.py
+++ b/var/spack/repos/builtin/packages/xkeyboard-config/package.py
@@ -31,6 +31,8 @@ class XkeyboardConfig(AutotoolsPackage):
     # perl@5.8.1:
     # perl XML::Parser
 
-    def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
-        spack_env.prepend_path('XKB_CONFIG_ROOT', self.prefix.share.X11.xkb)
-        run_env.prepend_path('XKB_CONFIG_ROOT', self.prefix.share.X11.xkb)
+    def setup_dependent_build_environment(self, env, dependent_spec):
+        env.prepend_path('XKB_CONFIG_ROOT', self.prefix.share.X11.xkb)
+
+    def setup_dependent_run_environment(self, env, dependent_spec):
+        env.prepend_path('XKB_CONFIG_ROOT', self.prefix.share.X11.xkb)
diff --git a/var/spack/repos/builtin/packages/xrootd/package.py b/var/spack/repos/builtin/packages/xrootd/package.py
index b5e67e3131369e4db168732e9b7865f24e1e8a0e..4fd73c5e0fc8c55c5803ec77c0d087aa4ae1492d 100644
--- a/var/spack/repos/builtin/packages/xrootd/package.py
+++ b/var/spack/repos/builtin/packages/xrootd/package.py
@@ -13,10 +13,8 @@ class Xrootd(CMakePackage):
     homepage = "http://xrootd.org"
     url      = "http://xrootd.org/download/v4.6.0/xrootd-4.6.0.tar.gz"
 
-    version('4.8.5',
-            sha256='42e4d2cc6f8b442135f09bcc12c7be38b1a0c623a005cb5e69ff3d27997bdf73')
-    version('4.8.4',
-            sha256='f148d55b16525567c0f893edf9bb2975f7c09f87f0599463e19e1b456a9d95ba')
+    version('4.8.5', sha256='42e4d2cc6f8b442135f09bcc12c7be38b1a0c623a005cb5e69ff3d27997bdf73')
+    version('4.8.4', sha256='f148d55b16525567c0f893edf9bb2975f7c09f87f0599463e19e1b456a9d95ba')
     version('4.8.3', sha256='9cd30a343758b8f50aea4916fa7bd37de3c37c5b670fe059ae77a8b2bbabf299')
     version('4.8.2', sha256='8f28ec53e799d4aa55bd0cc4ab278d9762e0e57ac40a4b02af7fc53dcd1bef39')
     version('4.8.1', sha256='edee2673d941daf7a6e5c963d339d4a69b4db5c4b6f77b4548b3129b42198029')
@@ -83,7 +81,7 @@ def cmake_args(self):
 
         return options
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         cxxstdflag = ''
         if self.spec.variants['cxxstd'].value == '98':
             cxxstdflag = self.compiler.cxx98_flag
@@ -101,4 +99,4 @@ def setup_environment(self, spack_env, run_env):
                 "cxxstd={0}".format(self.spec.variants['cxxstd'].value))
 
         if cxxstdflag:
-            spack_env.append_flags('CXXFLAGS', cxxstdflag)
+            env.append_flags('CXXFLAGS', cxxstdflag)
diff --git a/var/spack/repos/builtin/packages/xsd/package.py b/var/spack/repos/builtin/packages/xsd/package.py
index 5e9fe1408767c6ef0fb8aba04fccde94906031a8..10263dca792d9233bd72b015f4426ed8dcb4cec2 100644
--- a/var/spack/repos/builtin/packages/xsd/package.py
+++ b/var/spack/repos/builtin/packages/xsd/package.py
@@ -24,9 +24,9 @@ class Xsd(MakefilePackage):
     def install(self, spec, prefix):
         make('install', 'install_prefix=' + prefix)
 
-    def setup_environment(self, spack_env, run_env):
+    def setup_build_environment(self, env):
         xercesc_lib_flags = self.spec['xerces-c'].libs.search_flags
-        spack_env.append_flags('LDFLAGS', xercesc_lib_flags)
+        env.append_flags('LDFLAGS', xercesc_lib_flags)
 
     def url_for_version(self, version):
         url = "https://www.codesynthesis.com/download/xsd/{0}/xsd-{1}+dep.tar.bz2"