diff --git a/lib/spack/spack/build_systems/perl.py b/lib/spack/spack/build_systems/perl.py
index 78184c85dc65b3c73b9058c56ee27fb874470dba..2f272373d2fff8fe84e34a2ea6dacb9e57d637ca 100644
--- a/lib/spack/spack/build_systems/perl.py
+++ b/lib/spack/spack/build_systems/perl.py
@@ -27,7 +27,7 @@
 import os
 
 from llnl.util.filesystem import join_path
-from spack.directives import extends
+from spack.directives import depends_on, extends
 from spack.package import PackageBase, run_after
 from spack.util.executable import Executable
 
@@ -64,6 +64,8 @@ class PerlPackage(PackageBase):
 
     extends('perl')
 
+    depends_on('perl', type=('build', 'run'))
+
     def configure_args(self):
         """Produces a list containing the arguments that must be passed to
         :py:meth:`~.PerlPackage.configure`. Arguments should not include
@@ -85,7 +87,7 @@ def configure(self, spec, prefix):
             self.build_executable = inspect.getmodule(self).make
         elif os.path.isfile('Build.PL'):
             self.build_method = 'Build.PL'
-            self.build_executable = Executable( 
+            self.build_executable = Executable(
                 join_path(self.stage.source_path, 'Build'))
         else:
             raise RuntimeError('Unknown build_method for perl package')
diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py
index 2c8ccebae6aa83848a40dea1554a53874be39676..904f0dbaa0adf8b0174f70c50baba0088640df3d 100644
--- a/lib/spack/spack/build_systems/python.py
+++ b/lib/spack/spack/build_systems/python.py
@@ -26,7 +26,7 @@
 import inspect
 import os
 
-from spack.directives import extends
+from spack.directives import depends_on, extends
 from spack.package import PackageBase, run_after
 
 from llnl.util.filesystem import working_dir
@@ -114,6 +114,8 @@ def configure(self, spec, prefix):
 
     extends('python')
 
+    depends_on('python', type=('build', 'run'))
+
     def setup_file(self):
         """Returns the name of the setup file to use."""
         return 'setup.py'
diff --git a/lib/spack/spack/build_systems/r.py b/lib/spack/spack/build_systems/r.py
index cde3dc9fdd6028a46445e7037994ad5aca1415b6..618ba398e17d8ac473052faef7bd221fff538bac 100644
--- a/lib/spack/spack/build_systems/r.py
+++ b/lib/spack/spack/build_systems/r.py
@@ -25,7 +25,7 @@
 
 import inspect
 
-from spack.directives import extends
+from spack.directives import depends_on, extends
 from spack.package import PackageBase, run_after
 
 
@@ -47,6 +47,8 @@ class RPackage(PackageBase):
 
     extends('r')
 
+    depends_on('r', type=('build', 'run'))
+
     def install(self, spec, prefix):
         """Installs an R package."""
         inspect.getmodule(self).R(