We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Spack broken on Blue Waters
On the current develop, no Spack command works on Blue Waters.

### Steps to reproduce the issue

Any Spack command:
```console
$ spack help
```

### Error Message

```
Traceback (most recent call last):
  File "/u/sciteam/stewart1/spack/bin/spack", line 48, in <module>
    sys.exit(spack.main.main())
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/main.py", line 704, in main
    if spack.config.get('config:debug'):
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/config.py", line 627, in get
    return config.get(path, default, scope)
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/llnl/util/lang.py", line 558, in __getattr__
    return getattr(self.instance, name)
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/llnl/util/lang.py", line 554, in instance
    self._instance = self.factory()
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/config.py", line 609, in _config
    _add_platform_scope(cfg, ConfigScope, name, path)
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/config.py", line 562, in _add_platform_scope
    platform = spack.architecture.platform().name
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/llnl/util/lang.py", line 184, in _memoized_function
    func.cache[args] = func(*args)
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/architecture.py", line 388, in platform
    return platform_cls()
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/platforms/cray.py", line 76, in __init__
    back_distro = Cnl()
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/operating_systems/cnl.py", line 57, in __init__
    version = self._detect_crayos_version()
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/operating_systems/cnl.py", line 66, in _detect_crayos_version
    release_attrs = read_cle_release_file()
  File "/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/operating_systems/cnl.py", line 37, in read_cle_release_file
    with open(_cle_release_file) as release_file:
IOError: [Errno 2] No such file or directory: '/etc/opt/cray/release/cle-release'
```

### Information on your system

```console
$ cat /etc/*-release
Cluster Manager v6.1
slave
LSB_VERSION="core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64"
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 3
$ uname -a
Linux h2ologin2 3.0.101-0.47.106.59-default #1 SMP Wed Jan 23 09:00:24 UTC 2019 (624897e) x86_64 x86_64 x86_64 GNU/Linux
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `lib/spack/spack/operating_systems/cnl.py`
Content:
```
1 # Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
2 # Spack Project Developers. See the top-level COPYRIGHT file for details.
3 #
4 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
5 
6 import re
7 
8 import llnl.util.tty as tty
9 
10 import spack.version
11 from spack.architecture import OperatingSystem
12 from spack.util.module_cmd import module
13 
14 #: Location of the Cray CLE release file, which we look at to get the CNL
15 #: OS version.
16 _cle_release_file = '/etc/opt/cray/release/cle-release'
17 
18 
19 def read_cle_release_file():
20     """Read the CLE release file and return a dict with its attributes.
21 
22     The release file looks something like this::
23 
24         RELEASE=6.0.UP07
25         BUILD=6.0.7424
26         ...
27 
28     The dictionary we produce looks like this::
29 
30         {
31           "RELEASE": "6.0.UP07",
32           "BUILD": "6.0.7424",
33           ...
34         }
35 
36     """
37     with open(_cle_release_file) as release_file:
38         result = {}
39         for line in release_file:
40             # use partition instead of split() to ensure we only split on
41             # the first '=' in the line.
42             key, _, value = line.partition('=')
43             result[key] = value.strip()
44         return result
45 
46 
47 class Cnl(OperatingSystem):
48     """ Compute Node Linux (CNL) is the operating system used for the Cray XC
49     series super computers. It is a very stripped down version of GNU/Linux.
50     Any compilers found through this operating system will be used with
51     modules. If updated, user must make sure that version and name are
52     updated to indicate that OS has been upgraded (or downgraded)
53     """
54 
55     def __init__(self):
56         name = 'cnl'
57         version = self._detect_crayos_version()
58         super(Cnl, self).__init__(name, version)
59         self.modulecmd = module
60 
61     def __str__(self):
62         return self.name + str(self.version)
63 
64     @classmethod
65     def _detect_crayos_version(cls):
66         release_attrs = read_cle_release_file()
67         v = spack.version.Version(release_attrs['RELEASE'])
68         return v[0]
69 
70     def arguments_to_detect_version_fn(self, paths):
71         import spack.compilers
72 
73         command_arguments = []
74         for compiler_name in spack.compilers.supported_compilers():
75             cmp_cls = spack.compilers.class_for_compiler_name(compiler_name)
76 
77             # If the compiler doesn't have a corresponding
78             # Programming Environment, skip to the next
79             if cmp_cls.PrgEnv is None:
80                 continue
81 
82             if cmp_cls.PrgEnv_compiler is None:
83                 tty.die('Must supply PrgEnv_compiler with PrgEnv')
84 
85             compiler_id = spack.compilers.CompilerID(self, compiler_name, None)
86             detect_version_args = spack.compilers.DetectVersionArgs(
87                 id=compiler_id, variation=(None, None),
88                 language='cc', path='cc'
89             )
90             command_arguments.append(detect_version_args)
91         return command_arguments
92 
93     def detect_version(self, detect_version_args):
94         import spack.compilers
95         modulecmd = self.modulecmd
96         compiler_name = detect_version_args.id.compiler_name
97         compiler_cls = spack.compilers.class_for_compiler_name(compiler_name)
98         output = modulecmd('avail', compiler_cls.PrgEnv_compiler)
99         version_regex = r'(%s)/([\d\.]+[\d])' % compiler_cls.PrgEnv_compiler
100         matches = re.findall(version_regex, output)
101         version = tuple(version for _, version in matches)
102         compiler_id = detect_version_args.id
103         value = detect_version_args._replace(
104             id=compiler_id._replace(version=version)
105         )
106         return value, None
107 
108     def make_compilers(self, compiler_id, paths):
109         import spack.spec
110         name = compiler_id.compiler_name
111         cmp_cls = spack.compilers.class_for_compiler_name(name)
112         compilers = []
113         for v in compiler_id.version:
114             comp = cmp_cls(
115                 spack.spec.CompilerSpec(name + '@' + v),
116                 self, "any",
117                 ['cc', 'CC', 'ftn'], [cmp_cls.PrgEnv, name + '/' + v])
118 
119             compilers.append(comp)
120         return compilers
121
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/lib/spack/spack/operating_systems/cnl.py b/lib/spack/spack/operating_systems/cnl.py
--- a/lib/spack/spack/operating_systems/cnl.py
+++ b/lib/spack/spack/operating_systems/cnl.py
@@ -3,22 +3,27 @@
 #
 # SPDX-License-Identifier: (Apache-2.0 OR MIT)
 
+import os
 import re
 
 import llnl.util.tty as tty
 
+import spack.error
 import spack.version
 from spack.architecture import OperatingSystem
 from spack.util.module_cmd import module
 
-#: Location of the Cray CLE release file, which we look at to get the CNL
-#: OS version.
+#: Possible locations of the Cray CLE release file,
+#: which we look at to get the CNL OS version.
 _cle_release_file = '/etc/opt/cray/release/cle-release'
+_clerelease_file  = '/etc/opt/cray/release/clerelease'
 
 
 def read_cle_release_file():
     """Read the CLE release file and return a dict with its attributes.
 
+    This file is present on newer versions of Cray.
+
     The release file looks something like this::
 
         RELEASE=6.0.UP07
@@ -33,6 +38,8 @@
           ...
         }
 
+    Returns:
+        dict: dictionary of release attributes
     """
     with open(_cle_release_file) as release_file:
         result = {}
@@ -44,8 +51,25 @@
         return result
 
 
+def read_clerelease_file():
+    """Read the CLE release file and return the Cray OS version.
+
+    This file is present on older versions of Cray.
+
+    The release file looks something like this::
+
+        5.2.UP04
+
+    Returns:
+        str: the Cray OS version
+    """
+    with open(_clerelease_file) as release_file:
+        for line in release_file:
+            return line.strip()
+
+
 class Cnl(OperatingSystem):
-    """ Compute Node Linux (CNL) is the operating system used for the Cray XC
+    """Compute Node Linux (CNL) is the operating system used for the Cray XC
     series super computers. It is a very stripped down version of GNU/Linux.
     Any compilers found through this operating system will be used with
     modules. If updated, user must make sure that version and name are
@@ -63,9 +87,16 @@
 
     @classmethod
     def _detect_crayos_version(cls):
-        release_attrs = read_cle_release_file()
-        v = spack.version.Version(release_attrs['RELEASE'])
-        return v[0]
+        if os.path.isfile(_cle_release_file):
+            release_attrs = read_cle_release_file()
+            v = spack.version.Version(release_attrs['RELEASE'])
+            return v[0]
+        elif os.path.isfile(_clerelease_file):
+            v = read_clerelease_file()
+            return spack.version.Version(v)[0]
+        else:
+            raise spack.error.UnsupportedPlatformError(
+                'Unable to detect Cray OS version')
 
     def arguments_to_detect_version_fn(self, paths):
         import spack.compilers

{"golden_diff": "diff --git a/lib/spack/spack/operating_systems/cnl.py b/lib/spack/spack/operating_systems/cnl.py\n--- a/lib/spack/spack/operating_systems/cnl.py\n+++ b/lib/spack/spack/operating_systems/cnl.py\n@@ -3,22 +3,27 @@\n #\n # SPDX-License-Identifier: (Apache-2.0 OR MIT)\n \n+import os\n import re\n \n import llnl.util.tty as tty\n \n+import spack.error\n import spack.version\n from spack.architecture import OperatingSystem\n from spack.util.module_cmd import module\n \n-#: Location of the Cray CLE release file, which we look at to get the CNL\n-#: OS version.\n+#: Possible locations of the Cray CLE release file,\n+#: which we look at to get the CNL OS version.\n _cle_release_file = '/etc/opt/cray/release/cle-release'\n+_clerelease_file  = '/etc/opt/cray/release/clerelease'\n \n \n def read_cle_release_file():\n     \"\"\"Read the CLE release file and return a dict with its attributes.\n \n+    This file is present on newer versions of Cray.\n+\n     The release file looks something like this::\n \n         RELEASE=6.0.UP07\n@@ -33,6 +38,8 @@\n           ...\n         }\n \n+    Returns:\n+        dict: dictionary of release attributes\n     \"\"\"\n     with open(_cle_release_file) as release_file:\n         result = {}\n@@ -44,8 +51,25 @@\n         return result\n \n \n+def read_clerelease_file():\n+    \"\"\"Read the CLE release file and return the Cray OS version.\n+\n+    This file is present on older versions of Cray.\n+\n+    The release file looks something like this::\n+\n+        5.2.UP04\n+\n+    Returns:\n+        str: the Cray OS version\n+    \"\"\"\n+    with open(_clerelease_file) as release_file:\n+        for line in release_file:\n+            return line.strip()\n+\n+\n class Cnl(OperatingSystem):\n-    \"\"\" Compute Node Linux (CNL) is the operating system used for the Cray XC\n+    \"\"\"Compute Node Linux (CNL) is the operating system used for the Cray XC\n     series super computers. It is a very stripped down version of GNU/Linux.\n     Any compilers found through this operating system will be used with\n     modules. If updated, user must make sure that version and name are\n@@ -63,9 +87,16 @@\n \n     @classmethod\n     def _detect_crayos_version(cls):\n-        release_attrs = read_cle_release_file()\n-        v = spack.version.Version(release_attrs['RELEASE'])\n-        return v[0]\n+        if os.path.isfile(_cle_release_file):\n+            release_attrs = read_cle_release_file()\n+            v = spack.version.Version(release_attrs['RELEASE'])\n+            return v[0]\n+        elif os.path.isfile(_clerelease_file):\n+            v = read_clerelease_file()\n+            return spack.version.Version(v)[0]\n+        else:\n+            raise spack.error.UnsupportedPlatformError(\n+                'Unable to detect Cray OS version')\n \n     def arguments_to_detect_version_fn(self, paths):\n         import spack.compilers\n", "issue": "Spack broken on Blue Waters\nOn the current develop, no Spack command works on Blue Waters.\r\n\r\n### Steps to reproduce the issue\r\n\r\nAny Spack command:\r\n```console\r\n$ spack help\r\n```\r\n\r\n### Error Message\r\n\r\n```\r\nTraceback (most recent call last):\r\n  File \"/u/sciteam/stewart1/spack/bin/spack\", line 48, in <module>\r\n    sys.exit(spack.main.main())\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/main.py\", line 704, in main\r\n    if spack.config.get('config:debug'):\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/config.py\", line 627, in get\r\n    return config.get(path, default, scope)\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/llnl/util/lang.py\", line 558, in __getattr__\r\n    return getattr(self.instance, name)\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/llnl/util/lang.py\", line 554, in instance\r\n    self._instance = self.factory()\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/config.py\", line 609, in _config\r\n    _add_platform_scope(cfg, ConfigScope, name, path)\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/config.py\", line 562, in _add_platform_scope\r\n    platform = spack.architecture.platform().name\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/llnl/util/lang.py\", line 184, in _memoized_function\r\n    func.cache[args] = func(*args)\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/architecture.py\", line 388, in platform\r\n    return platform_cls()\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/platforms/cray.py\", line 76, in __init__\r\n    back_distro = Cnl()\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/operating_systems/cnl.py\", line 57, in __init__\r\n    version = self._detect_crayos_version()\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/operating_systems/cnl.py\", line 66, in _detect_crayos_version\r\n    release_attrs = read_cle_release_file()\r\n  File \"/mnt/a/u/sciteam/stewart1/spack/lib/spack/spack/operating_systems/cnl.py\", line 37, in read_cle_release_file\r\n    with open(_cle_release_file) as release_file:\r\nIOError: [Errno 2] No such file or directory: '/etc/opt/cray/release/cle-release'\r\n```\r\n\r\n### Information on your system\r\n\r\n```console\r\n$ cat /etc/*-release\r\nCluster Manager v6.1\r\nslave\r\nLSB_VERSION=\"core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64\"\r\nSUSE Linux Enterprise Server 11 (x86_64)\r\nVERSION = 11\r\nPATCHLEVEL = 3\r\n$ uname -a\r\nLinux h2ologin2 3.0.101-0.47.106.59-default #1 SMP Wed Jan 23 09:00:24 UTC 2019 (624897e) x86_64 x86_64 x86_64 GNU/Linux\r\n```\n", "before_files": [{"content": "# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other\n# Spack Project Developers. See the top-level COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\nimport re\n\nimport llnl.util.tty as tty\n\nimport spack.version\nfrom spack.architecture import OperatingSystem\nfrom spack.util.module_cmd import module\n\n#: Location of the Cray CLE release file, which we look at to get the CNL\n#: OS version.\n_cle_release_file = '/etc/opt/cray/release/cle-release'\n\n\ndef read_cle_release_file():\n    \"\"\"Read the CLE release file and return a dict with its attributes.\n\n    The release file looks something like this::\n\n        RELEASE=6.0.UP07\n        BUILD=6.0.7424\n        ...\n\n    The dictionary we produce looks like this::\n\n        {\n          \"RELEASE\": \"6.0.UP07\",\n          \"BUILD\": \"6.0.7424\",\n          ...\n        }\n\n    \"\"\"\n    with open(_cle_release_file) as release_file:\n        result = {}\n        for line in release_file:\n            # use partition instead of split() to ensure we only split on\n            # the first '=' in the line.\n            key, _, value = line.partition('=')\n            result[key] = value.strip()\n        return result\n\n\nclass Cnl(OperatingSystem):\n    \"\"\" Compute Node Linux (CNL) is the operating system used for the Cray XC\n    series super computers. It is a very stripped down version of GNU/Linux.\n    Any compilers found through this operating system will be used with\n    modules. If updated, user must make sure that version and name are\n    updated to indicate that OS has been upgraded (or downgraded)\n    \"\"\"\n\n    def __init__(self):\n        name = 'cnl'\n        version = self._detect_crayos_version()\n        super(Cnl, self).__init__(name, version)\n        self.modulecmd = module\n\n    def __str__(self):\n        return self.name + str(self.version)\n\n    @classmethod\n    def _detect_crayos_version(cls):\n        release_attrs = read_cle_release_file()\n        v = spack.version.Version(release_attrs['RELEASE'])\n        return v[0]\n\n    def arguments_to_detect_version_fn(self, paths):\n        import spack.compilers\n\n        command_arguments = []\n        for compiler_name in spack.compilers.supported_compilers():\n            cmp_cls = spack.compilers.class_for_compiler_name(compiler_name)\n\n            # If the compiler doesn't have a corresponding\n            # Programming Environment, skip to the next\n            if cmp_cls.PrgEnv is None:\n                continue\n\n            if cmp_cls.PrgEnv_compiler is None:\n                tty.die('Must supply PrgEnv_compiler with PrgEnv')\n\n            compiler_id = spack.compilers.CompilerID(self, compiler_name, None)\n            detect_version_args = spack.compilers.DetectVersionArgs(\n                id=compiler_id, variation=(None, None),\n                language='cc', path='cc'\n            )\n            command_arguments.append(detect_version_args)\n        return command_arguments\n\n    def detect_version(self, detect_version_args):\n        import spack.compilers\n        modulecmd = self.modulecmd\n        compiler_name = detect_version_args.id.compiler_name\n        compiler_cls = spack.compilers.class_for_compiler_name(compiler_name)\n        output = modulecmd('avail', compiler_cls.PrgEnv_compiler)\n        version_regex = r'(%s)/([\\d\\.]+[\\d])' % compiler_cls.PrgEnv_compiler\n        matches = re.findall(version_regex, output)\n        version = tuple(version for _, version in matches)\n        compiler_id = detect_version_args.id\n        value = detect_version_args._replace(\n            id=compiler_id._replace(version=version)\n        )\n        return value, None\n\n    def make_compilers(self, compiler_id, paths):\n        import spack.spec\n        name = compiler_id.compiler_name\n        cmp_cls = spack.compilers.class_for_compiler_name(name)\n        compilers = []\n        for v in compiler_id.version:\n            comp = cmp_cls(\n                spack.spec.CompilerSpec(name + '@' + v),\n                self, \"any\",\n                ['cc', 'CC', 'ftn'], [cmp_cls.PrgEnv, name + '/' + v])\n\n            compilers.append(comp)\n        return compilers\n", "path": "lib/spack/spack/operating_systems/cnl.py"}], "after_files": [{"content": "# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other\n# Spack Project Developers. See the top-level COPYRIGHT file for details.\n#\n# SPDX-License-Identifier: (Apache-2.0 OR MIT)\n\nimport os\nimport re\n\nimport llnl.util.tty as tty\n\nimport spack.error\nimport spack.version\nfrom spack.architecture import OperatingSystem\nfrom spack.util.module_cmd import module\n\n#: Possible locations of the Cray CLE release file,\n#: which we look at to get the CNL OS version.\n_cle_release_file = '/etc/opt/cray/release/cle-release'\n_clerelease_file  = '/etc/opt/cray/release/clerelease'\n\n\ndef read_cle_release_file():\n    \"\"\"Read the CLE release file and return a dict with its attributes.\n\n    This file is present on newer versions of Cray.\n\n    The release file looks something like this::\n\n        RELEASE=6.0.UP07\n        BUILD=6.0.7424\n        ...\n\n    The dictionary we produce looks like this::\n\n        {\n          \"RELEASE\": \"6.0.UP07\",\n          \"BUILD\": \"6.0.7424\",\n          ...\n        }\n\n    Returns:\n        dict: dictionary of release attributes\n    \"\"\"\n    with open(_cle_release_file) as release_file:\n        result = {}\n        for line in release_file:\n            # use partition instead of split() to ensure we only split on\n            # the first '=' in the line.\n            key, _, value = line.partition('=')\n            result[key] = value.strip()\n        return result\n\n\ndef read_clerelease_file():\n    \"\"\"Read the CLE release file and return the Cray OS version.\n\n    This file is present on older versions of Cray.\n\n    The release file looks something like this::\n\n        5.2.UP04\n\n    Returns:\n        str: the Cray OS version\n    \"\"\"\n    with open(_clerelease_file) as release_file:\n        for line in release_file:\n            return line.strip()\n\n\nclass Cnl(OperatingSystem):\n    \"\"\"Compute Node Linux (CNL) is the operating system used for the Cray XC\n    series super computers. It is a very stripped down version of GNU/Linux.\n    Any compilers found through this operating system will be used with\n    modules. If updated, user must make sure that version and name are\n    updated to indicate that OS has been upgraded (or downgraded)\n    \"\"\"\n\n    def __init__(self):\n        name = 'cnl'\n        version = self._detect_crayos_version()\n        super(Cnl, self).__init__(name, version)\n        self.modulecmd = module\n\n    def __str__(self):\n        return self.name + str(self.version)\n\n    @classmethod\n    def _detect_crayos_version(cls):\n        if os.path.isfile(_cle_release_file):\n            release_attrs = read_cle_release_file()\n            v = spack.version.Version(release_attrs['RELEASE'])\n            return v[0]\n        elif os.path.isfile(_clerelease_file):\n            v = read_clerelease_file()\n            return spack.version.Version(v)[0]\n        else:\n            raise spack.error.UnsupportedPlatformError(\n                'Unable to detect Cray OS version')\n\n    def arguments_to_detect_version_fn(self, paths):\n        import spack.compilers\n\n        command_arguments = []\n        for compiler_name in spack.compilers.supported_compilers():\n            cmp_cls = spack.compilers.class_for_compiler_name(compiler_name)\n\n            # If the compiler doesn't have a corresponding\n            # Programming Environment, skip to the next\n            if cmp_cls.PrgEnv is None:\n                continue\n\n            if cmp_cls.PrgEnv_compiler is None:\n                tty.die('Must supply PrgEnv_compiler with PrgEnv')\n\n            compiler_id = spack.compilers.CompilerID(self, compiler_name, None)\n            detect_version_args = spack.compilers.DetectVersionArgs(\n                id=compiler_id, variation=(None, None),\n                language='cc', path='cc'\n            )\n            command_arguments.append(detect_version_args)\n        return command_arguments\n\n    def detect_version(self, detect_version_args):\n        import spack.compilers\n        modulecmd = self.modulecmd\n        compiler_name = detect_version_args.id.compiler_name\n        compiler_cls = spack.compilers.class_for_compiler_name(compiler_name)\n        output = modulecmd('avail', compiler_cls.PrgEnv_compiler)\n        version_regex = r'(%s)/([\\d\\.]+[\\d])' % compiler_cls.PrgEnv_compiler\n        matches = re.findall(version_regex, output)\n        version = tuple(version for _, version in matches)\n        compiler_id = detect_version_args.id\n        value = detect_version_args._replace(\n            id=compiler_id._replace(version=version)\n        )\n        return value, None\n\n    def make_compilers(self, compiler_id, paths):\n        import spack.spec\n        name = compiler_id.compiler_name\n        cmp_cls = spack.compilers.class_for_compiler_name(name)\n        compilers = []\n        for v in compiler_id.version:\n            comp = cmp_cls(\n                spack.spec.CompilerSpec(name + '@' + v),\n                self, \"any\",\n                ['cc', 'CC', 'ftn'], [cmp_cls.PrgEnv, name + '/' + v])\n\n            compilers.append(comp)\n        return compilers\n", "path": "lib/spack/spack/operating_systems/cnl.py"}]}