diff --git a/lib/spack/llnl/util/filesystem.py b/lib/spack/llnl/util/filesystem.py
index 9f08832598261eeab6560be19f261c3f398da061..05784156530629731cf024f6fc34fb57a43d93e3 100644
--- a/lib/spack/llnl/util/filesystem.py
+++ b/lib/spack/llnl/util/filesystem.py
@@ -24,7 +24,7 @@
 ##############################################################################
 __all__ = ['set_install_permissions', 'install', 'expand_user', 'working_dir',
            'touch', 'mkdirp', 'force_remove', 'join_path', 'ancestor',
-           'can_access', 'filter_file', 'change_sed_delimiter']
+           'can_access', 'filter_file', 'change_sed_delimiter', 'is_exe']
 
 import os
 import sys
@@ -154,6 +154,11 @@ def install(src, dest):
     os.chmod(dest, dest_mode)
 
 
+def is_exe(path):
+    """True if path is an executable file."""
+    return os.path.isfile(path) and os.access(path, os.X_OK)
+
+
 def expand_user(path):
     """Find instances of '%u' in a path and replace with the current user's
        username."""