We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
scanbuild.py doesn't handle scan-build-{7,8}
Here: https://github.com/mesonbuild/meson/blob/1e7aea65e68a43b0319a4a28908daddfec621548/mesonbuild/scripts/scanbuild.py#L39

As with other LLVM/Clang tools (e.g. `llvm-config`), the version number suffix is just the major component since LLVM 7. The LLVM dependency support handles this correctly here: https://github.com/mesonbuild/meson/blob/54db2c9babe6391bba525f92573ceeadb8303e78/mesonbuild/dependencies/dev.py#L208

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `mesonbuild/scripts/scanbuild.py`
Content:
```
1 # Copyright 2016 The Meson development team
2 
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 import os
16 import shlex
17 import subprocess
18 import shutil
19 import tempfile
20 from ..environment import detect_ninja
21 from ..mesonlib import Popen_safe
22 
23 def scanbuild(exelist, srcdir, blddir, privdir, logdir, args):
24     with tempfile.TemporaryDirectory(dir=privdir) as scandir:
25         meson_cmd = exelist + args
26         build_cmd = exelist + ['-o', logdir, detect_ninja(), '-C', scandir]
27         rc = subprocess.call(meson_cmd + [srcdir, scandir])
28         if rc != 0:
29             return rc
30         return subprocess.call(build_cmd)
31 
32 def run(args):
33     srcdir = args[0]
34     blddir = args[1]
35     meson_cmd = args[2:]
36     privdir = os.path.join(blddir, 'meson-private')
37     logdir = os.path.join(blddir, 'meson-logs/scanbuild')
38     shutil.rmtree(logdir, ignore_errors=True)
39     tools = [
40         'scan-build',  # base
41         'scan-build-5.0', 'scan-build50',  # latest stable release
42         'scan-build-4.0', 'scan-build40',  # old stable releases
43         'scan-build-3.9', 'scan-build39',
44         'scan-build-3.8', 'scan-build38',
45         'scan-build-3.7', 'scan-build37',
46         'scan-build-3.6', 'scan-build36',
47         'scan-build-3.5', 'scan-build35',
48         'scan-build-6.0', 'scan-build-devel',  # development snapshot
49     ]
50     toolname = 'scan-build'
51     for tool in tools:
52         try:
53             p, out = Popen_safe([tool, '--help'])[:2]
54         except (FileNotFoundError, PermissionError):
55             continue
56         if p.returncode != 0:
57             continue
58         else:
59             toolname = tool
60             break
61 
62     if 'SCANBUILD' in os.environ:
63         exelist = shlex.split(os.environ['SCANBUILD'])
64     else:
65         exelist = [toolname]
66 
67     try:
68         Popen_safe(exelist + ['--help'])
69     except OSError:
70         print('Could not execute scan-build "%s"' % ' '.join(exelist))
71         return 1
72     return scanbuild(exelist, srcdir, blddir, privdir, logdir, meson_cmd)
73
```
--- 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/mesonbuild/scripts/scanbuild.py b/mesonbuild/scripts/scanbuild.py
--- a/mesonbuild/scripts/scanbuild.py
+++ b/mesonbuild/scripts/scanbuild.py
@@ -38,14 +38,17 @@
     shutil.rmtree(logdir, ignore_errors=True)
     tools = [
         'scan-build',  # base
-        'scan-build-5.0', 'scan-build50',  # latest stable release
-        'scan-build-4.0', 'scan-build40',  # old stable releases
+        'scan-build-8.0', 'scan-build80',
+        'scan-build-7.0', 'scan-build70',
+        'scan-build-6.0', 'scan-build60',
+        'scan-build-5.0', 'scan-build50',
+        'scan-build-4.0', 'scan-build40',
         'scan-build-3.9', 'scan-build39',
         'scan-build-3.8', 'scan-build38',
         'scan-build-3.7', 'scan-build37',
         'scan-build-3.6', 'scan-build36',
         'scan-build-3.5', 'scan-build35',
-        'scan-build-6.0', 'scan-build-devel',  # development snapshot
+        'scan-build-9.0', 'scan-build-devel',  # development snapshot
     ]
     toolname = 'scan-build'
     for tool in tools:

{"golden_diff": "diff --git a/mesonbuild/scripts/scanbuild.py b/mesonbuild/scripts/scanbuild.py\n--- a/mesonbuild/scripts/scanbuild.py\n+++ b/mesonbuild/scripts/scanbuild.py\n@@ -38,14 +38,17 @@\n     shutil.rmtree(logdir, ignore_errors=True)\n     tools = [\n         'scan-build',  # base\n-        'scan-build-5.0', 'scan-build50',  # latest stable release\n-        'scan-build-4.0', 'scan-build40',  # old stable releases\n+        'scan-build-8.0', 'scan-build80',\n+        'scan-build-7.0', 'scan-build70',\n+        'scan-build-6.0', 'scan-build60',\n+        'scan-build-5.0', 'scan-build50',\n+        'scan-build-4.0', 'scan-build40',\n         'scan-build-3.9', 'scan-build39',\n         'scan-build-3.8', 'scan-build38',\n         'scan-build-3.7', 'scan-build37',\n         'scan-build-3.6', 'scan-build36',\n         'scan-build-3.5', 'scan-build35',\n-        'scan-build-6.0', 'scan-build-devel',  # development snapshot\n+        'scan-build-9.0', 'scan-build-devel',  # development snapshot\n     ]\n     toolname = 'scan-build'\n     for tool in tools:\n", "issue": "scanbuild.py doesn't handle scan-build-{7,8}\nHere: https://github.com/mesonbuild/meson/blob/1e7aea65e68a43b0319a4a28908daddfec621548/mesonbuild/scripts/scanbuild.py#L39\r\n\r\nAs with other LLVM/Clang tools (e.g. `llvm-config`), the version number suffix is just the major component since LLVM 7. The LLVM dependency support handles this correctly here: https://github.com/mesonbuild/meson/blob/54db2c9babe6391bba525f92573ceeadb8303e78/mesonbuild/dependencies/dev.py#L208\n", "before_files": [{"content": "# Copyright 2016 The Meson development team\n\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n\n#     http://www.apache.org/licenses/LICENSE-2.0\n\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport shlex\nimport subprocess\nimport shutil\nimport tempfile\nfrom ..environment import detect_ninja\nfrom ..mesonlib import Popen_safe\n\ndef scanbuild(exelist, srcdir, blddir, privdir, logdir, args):\n    with tempfile.TemporaryDirectory(dir=privdir) as scandir:\n        meson_cmd = exelist + args\n        build_cmd = exelist + ['-o', logdir, detect_ninja(), '-C', scandir]\n        rc = subprocess.call(meson_cmd + [srcdir, scandir])\n        if rc != 0:\n            return rc\n        return subprocess.call(build_cmd)\n\ndef run(args):\n    srcdir = args[0]\n    blddir = args[1]\n    meson_cmd = args[2:]\n    privdir = os.path.join(blddir, 'meson-private')\n    logdir = os.path.join(blddir, 'meson-logs/scanbuild')\n    shutil.rmtree(logdir, ignore_errors=True)\n    tools = [\n        'scan-build',  # base\n        'scan-build-5.0', 'scan-build50',  # latest stable release\n        'scan-build-4.0', 'scan-build40',  # old stable releases\n        'scan-build-3.9', 'scan-build39',\n        'scan-build-3.8', 'scan-build38',\n        'scan-build-3.7', 'scan-build37',\n        'scan-build-3.6', 'scan-build36',\n        'scan-build-3.5', 'scan-build35',\n        'scan-build-6.0', 'scan-build-devel',  # development snapshot\n    ]\n    toolname = 'scan-build'\n    for tool in tools:\n        try:\n            p, out = Popen_safe([tool, '--help'])[:2]\n        except (FileNotFoundError, PermissionError):\n            continue\n        if p.returncode != 0:\n            continue\n        else:\n            toolname = tool\n            break\n\n    if 'SCANBUILD' in os.environ:\n        exelist = shlex.split(os.environ['SCANBUILD'])\n    else:\n        exelist = [toolname]\n\n    try:\n        Popen_safe(exelist + ['--help'])\n    except OSError:\n        print('Could not execute scan-build \"%s\"' % ' '.join(exelist))\n        return 1\n    return scanbuild(exelist, srcdir, blddir, privdir, logdir, meson_cmd)\n", "path": "mesonbuild/scripts/scanbuild.py"}], "after_files": [{"content": "# Copyright 2016 The Meson development team\n\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n\n#     http://www.apache.org/licenses/LICENSE-2.0\n\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport os\nimport shlex\nimport subprocess\nimport shutil\nimport tempfile\nfrom ..environment import detect_ninja\nfrom ..mesonlib import Popen_safe\n\ndef scanbuild(exelist, srcdir, blddir, privdir, logdir, args):\n    with tempfile.TemporaryDirectory(dir=privdir) as scandir:\n        meson_cmd = exelist + args\n        build_cmd = exelist + ['-o', logdir, detect_ninja(), '-C', scandir]\n        rc = subprocess.call(meson_cmd + [srcdir, scandir])\n        if rc != 0:\n            return rc\n        return subprocess.call(build_cmd)\n\ndef run(args):\n    srcdir = args[0]\n    blddir = args[1]\n    meson_cmd = args[2:]\n    privdir = os.path.join(blddir, 'meson-private')\n    logdir = os.path.join(blddir, 'meson-logs/scanbuild')\n    shutil.rmtree(logdir, ignore_errors=True)\n    tools = [\n        'scan-build',  # base\n        'scan-build-8.0', 'scan-build80',\n        'scan-build-7.0', 'scan-build70',\n        'scan-build-6.0', 'scan-build60',\n        'scan-build-5.0', 'scan-build50',\n        'scan-build-4.0', 'scan-build40',\n        'scan-build-3.9', 'scan-build39',\n        'scan-build-3.8', 'scan-build38',\n        'scan-build-3.7', 'scan-build37',\n        'scan-build-3.6', 'scan-build36',\n        'scan-build-3.5', 'scan-build35',\n        'scan-build-9.0', 'scan-build-devel',  # development snapshot\n    ]\n    toolname = 'scan-build'\n    for tool in tools:\n        try:\n            p, out = Popen_safe([tool, '--help'])[:2]\n        except (FileNotFoundError, PermissionError):\n            continue\n        if p.returncode != 0:\n            continue\n        else:\n            toolname = tool\n            break\n\n    if 'SCANBUILD' in os.environ:\n        exelist = shlex.split(os.environ['SCANBUILD'])\n    else:\n        exelist = [toolname]\n\n    try:\n        Popen_safe(exelist + ['--help'])\n    except OSError:\n        print('Could not execute scan-build \"%s\"' % ' '.join(exelist))\n        return 1\n    return scanbuild(exelist, srcdir, blddir, privdir, logdir, meson_cmd)\n", "path": "mesonbuild/scripts/scanbuild.py"}]}