We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[question] using `boost/system` recipe with system-wide config
<!-- What is your question? Please be as specific as possible! -->

- [x] I've read the [CONTRIBUTING guide](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md).

Hi! My question is about `conan` recipes for system packages (like [gtk/system](https://conan.io/center/gtk) or [xorg/system](https://conan.io/center/xorg) from CCI). In our ecosystem we want to use `boost/system` (custom one) together with `boost/1.7?` from CCI (we need a transparent switching between them in the root of dependency tree). We use `CMakeDeps` generator. So before build it generates (among other things) `Boost-config.cmake`, which is very hard to reproduce in `boost/system` . 

- Before `1.36` we use the following smart crutch which exploits a bug (?) in generator. Our recipe declare package `boost/system` with filename (in latest terms `cmake_file_name`) `SystemBoost` and with name (in latest terms `cmake_target_name`) `Boost`. When somebody (e.g. `A`) wants to depend on boost, `CMakeDeps` generates **unused** `SystemBoost-config.cmake` and call `find_package(Boost ... ) ` in `A-config.cmake`. This `find_package` uses system-wide `FindBoost.cmake` or config from `boost-cmake` project and works perfectly. 
- In `1.36` this bug was fixed. ([the method](https://github.com/conan-io/conan/blob/develop/conan/tools/cmake/cmakedeps.py#L698) was introduced). So the crutch is not working now.
- Could you elaborate this situation?

There are my thoughts about it:
- I like the idea to use system-wide config in the specific case of system boost.
- Generating conan's `Boost-config.cmake` to emulate a system one seems very hard. In CCI the only way to do this is using `PkgConfig`, but Boost has no official `.pc` file AFAIK.
- Maybe `CMakeDeps` can take a system-wide boost config somehow (copying or symlinking it instead of generate its own) in this specific case?
- Maybe conan can legitimate the crutch described above? 

Thanks in advance!

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `conan/tools/cmake/cmakedeps/cmakedeps.py`
Content:
```
1 import os
2 
3 from conan.tools.cmake.cmakedeps.templates.config import ConfigTemplate
4 from conan.tools.cmake.cmakedeps.templates.config_version import ConfigVersionTemplate
5 from conan.tools.cmake.cmakedeps.templates.macros import MacrosTemplate
6 from conan.tools.cmake.cmakedeps.templates.target_configuration import TargetConfigurationTemplate
7 from conan.tools.cmake.cmakedeps.templates.target_data import ConfigDataTemplate
8 from conan.tools.cmake.cmakedeps.templates.targets import TargetsTemplate
9 from conans.errors import ConanException
10 from conans.util.files import save
11 
12 
13 class CMakeDeps(object):
14 
15     def __init__(self, conanfile):
16         self._conanfile = conanfile
17         self.arch = self._conanfile.settings.get_safe("arch")
18         self.configuration = str(self._conanfile.settings.build_type)
19 
20         self.configurations = [v for v in conanfile.settings.build_type.values_range if v != "None"]
21         # Activate the build config files for the specified libraries
22         self.build_context_activated = []
23         # By default, the build modules are generated for host context only
24         self.build_context_build_modules = []
25         # If specified, the files/targets/variables for the build context will be renamed appending
26         # a suffix. It is necessary in case of same require and build_require and will cause an error
27         self.build_context_suffix = {}
28 
29     def generate(self):
30         # Current directory is the generators_folder
31         generator_files = self.content
32         for generator_file, content in generator_files.items():
33             save(generator_file, content)
34 
35     @property
36     def content(self):
37         macros = MacrosTemplate()
38         ret = {macros.filename: macros.render()}
39 
40         host_req = self._conanfile.dependencies.host_requires
41         build_req = self._conanfile.dependencies.direct_build_requires
42 
43         # Check if the same package is at host and build and the same time
44         activated_br = {r.ref.name for r in build_req.values()
45                         if r.ref.name in self.build_context_activated}
46         common_names = {r.ref.name for r in host_req.values()}.intersection(activated_br)
47         for common_name in common_names:
48             suffix = self.build_context_suffix.get(common_name)
49             if not suffix:
50                 raise ConanException("The package '{}' exists both as 'require' and as "
51                                      "'build require'. You need to specify a suffix using the "
52                                      "'build_context_suffix' attribute at the CMakeDeps "
53                                      "generator.".format(common_name))
54 
55         # Iterate all the transitive requires
56         for require, dep in list(host_req.items()) + list(build_req.items()):
57             # Require is not used at the moment, but its information could be used,
58             # and will be used in Conan 2.0
59             # Filter the build_requires not activated with cmakedeps.build_context_activated
60             if dep.is_build_context and dep.ref.name not in self.build_context_activated:
61                 continue
62 
63             config_version = ConfigVersionTemplate(self, require, dep)
64             ret[config_version.filename] = config_version.render()
65 
66             data_target = ConfigDataTemplate(self, require, dep)
67             ret[data_target.filename] = data_target.render()
68 
69             target_configuration = TargetConfigurationTemplate(self, require, dep)
70             ret[target_configuration.filename] = target_configuration.render()
71 
72             targets = TargetsTemplate(self, require, dep)
73             ret[targets.filename] = targets.render()
74 
75             config = ConfigTemplate(self, require, dep)
76             # Check if the XXConfig.cmake exists to keep the first generated configuration
77             # to only include the build_modules from the first conan install. The rest of the
78             # file is common for the different configurations.
79             if not os.path.exists(config.filename):
80                 ret[config.filename] = config.render()
81         return ret
82
```
--- 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/conan/tools/cmake/cmakedeps/cmakedeps.py b/conan/tools/cmake/cmakedeps/cmakedeps.py
--- a/conan/tools/cmake/cmakedeps/cmakedeps.py
+++ b/conan/tools/cmake/cmakedeps/cmakedeps.py
@@ -60,6 +60,10 @@
             if dep.is_build_context and dep.ref.name not in self.build_context_activated:
                 continue
 
+            if dep.new_cpp_info.get_property("skip_deps_file", "CMakeDeps"):
+                # Skip the generation of config files for this node, it will be located externally
+                continue
+
             config_version = ConfigVersionTemplate(self, require, dep)
             ret[config_version.filename] = config_version.render()

{"golden_diff": "diff --git a/conan/tools/cmake/cmakedeps/cmakedeps.py b/conan/tools/cmake/cmakedeps/cmakedeps.py\n--- a/conan/tools/cmake/cmakedeps/cmakedeps.py\n+++ b/conan/tools/cmake/cmakedeps/cmakedeps.py\n@@ -60,6 +60,10 @@\n             if dep.is_build_context and dep.ref.name not in self.build_context_activated:\n                 continue\n \n+            if dep.new_cpp_info.get_property(\"skip_deps_file\", \"CMakeDeps\"):\n+                # Skip the generation of config files for this node, it will be located externally\n+                continue\n+\n             config_version = ConfigVersionTemplate(self, require, dep)\n             ret[config_version.filename] = config_version.render()\n", "issue": "[question] using `boost/system` recipe with system-wide config\n<!-- What is your question? Please be as specific as possible! -->\r\n\r\n- [x] I've read the [CONTRIBUTING guide](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md).\r\n\r\nHi! My question is about `conan` recipes for system packages (like [gtk/system](https://conan.io/center/gtk) or [xorg/system](https://conan.io/center/xorg) from CCI). In our ecosystem we want to use `boost/system` (custom one) together with `boost/1.7?` from CCI (we need a transparent switching between them in the root of dependency tree). We use `CMakeDeps` generator. So before build it generates (among other things) `Boost-config.cmake`, which is very hard to reproduce in `boost/system` . \r\n\r\n- Before `1.36` we use the following smart crutch which exploits a bug (?) in generator. Our recipe declare package `boost/system` with filename (in latest terms `cmake_file_name`) `SystemBoost` and with name (in latest terms `cmake_target_name`) `Boost`. When somebody (e.g. `A`) wants to depend on boost, `CMakeDeps` generates **unused** `SystemBoost-config.cmake` and call `find_package(Boost ... ) ` in `A-config.cmake`. This `find_package` uses system-wide `FindBoost.cmake` or config from `boost-cmake` project and works perfectly. \r\n- In `1.36` this bug was fixed. ([the method](https://github.com/conan-io/conan/blob/develop/conan/tools/cmake/cmakedeps.py#L698) was introduced). So the crutch is not working now.\r\n- Could you elaborate this situation?\r\n\r\nThere are my thoughts about it:\r\n- I like the idea to use system-wide config in the specific case of system boost.\r\n- Generating conan's `Boost-config.cmake` to emulate a system one seems very hard. In CCI the only way to do this is using `PkgConfig`, but Boost has no official `.pc` file AFAIK.\r\n- Maybe `CMakeDeps` can take a system-wide boost config somehow (copying or symlinking it instead of generate its own) in this specific case?\r\n- Maybe conan can legitimate the crutch described above? \r\n\r\nThanks in advance!\n", "before_files": [{"content": "import os\n\nfrom conan.tools.cmake.cmakedeps.templates.config import ConfigTemplate\nfrom conan.tools.cmake.cmakedeps.templates.config_version import ConfigVersionTemplate\nfrom conan.tools.cmake.cmakedeps.templates.macros import MacrosTemplate\nfrom conan.tools.cmake.cmakedeps.templates.target_configuration import TargetConfigurationTemplate\nfrom conan.tools.cmake.cmakedeps.templates.target_data import ConfigDataTemplate\nfrom conan.tools.cmake.cmakedeps.templates.targets import TargetsTemplate\nfrom conans.errors import ConanException\nfrom conans.util.files import save\n\n\nclass CMakeDeps(object):\n\n    def __init__(self, conanfile):\n        self._conanfile = conanfile\n        self.arch = self._conanfile.settings.get_safe(\"arch\")\n        self.configuration = str(self._conanfile.settings.build_type)\n\n        self.configurations = [v for v in conanfile.settings.build_type.values_range if v != \"None\"]\n        # Activate the build config files for the specified libraries\n        self.build_context_activated = []\n        # By default, the build modules are generated for host context only\n        self.build_context_build_modules = []\n        # If specified, the files/targets/variables for the build context will be renamed appending\n        # a suffix. It is necessary in case of same require and build_require and will cause an error\n        self.build_context_suffix = {}\n\n    def generate(self):\n        # Current directory is the generators_folder\n        generator_files = self.content\n        for generator_file, content in generator_files.items():\n            save(generator_file, content)\n\n    @property\n    def content(self):\n        macros = MacrosTemplate()\n        ret = {macros.filename: macros.render()}\n\n        host_req = self._conanfile.dependencies.host_requires\n        build_req = self._conanfile.dependencies.direct_build_requires\n\n        # Check if the same package is at host and build and the same time\n        activated_br = {r.ref.name for r in build_req.values()\n                        if r.ref.name in self.build_context_activated}\n        common_names = {r.ref.name for r in host_req.values()}.intersection(activated_br)\n        for common_name in common_names:\n            suffix = self.build_context_suffix.get(common_name)\n            if not suffix:\n                raise ConanException(\"The package '{}' exists both as 'require' and as \"\n                                     \"'build require'. You need to specify a suffix using the \"\n                                     \"'build_context_suffix' attribute at the CMakeDeps \"\n                                     \"generator.\".format(common_name))\n\n        # Iterate all the transitive requires\n        for require, dep in list(host_req.items()) + list(build_req.items()):\n            # Require is not used at the moment, but its information could be used,\n            # and will be used in Conan 2.0\n            # Filter the build_requires not activated with cmakedeps.build_context_activated\n            if dep.is_build_context and dep.ref.name not in self.build_context_activated:\n                continue\n\n            config_version = ConfigVersionTemplate(self, require, dep)\n            ret[config_version.filename] = config_version.render()\n\n            data_target = ConfigDataTemplate(self, require, dep)\n            ret[data_target.filename] = data_target.render()\n\n            target_configuration = TargetConfigurationTemplate(self, require, dep)\n            ret[target_configuration.filename] = target_configuration.render()\n\n            targets = TargetsTemplate(self, require, dep)\n            ret[targets.filename] = targets.render()\n\n            config = ConfigTemplate(self, require, dep)\n            # Check if the XXConfig.cmake exists to keep the first generated configuration\n            # to only include the build_modules from the first conan install. The rest of the\n            # file is common for the different configurations.\n            if not os.path.exists(config.filename):\n                ret[config.filename] = config.render()\n        return ret\n", "path": "conan/tools/cmake/cmakedeps/cmakedeps.py"}], "after_files": [{"content": "import os\n\nfrom conan.tools.cmake.cmakedeps.templates.config import ConfigTemplate\nfrom conan.tools.cmake.cmakedeps.templates.config_version import ConfigVersionTemplate\nfrom conan.tools.cmake.cmakedeps.templates.macros import MacrosTemplate\nfrom conan.tools.cmake.cmakedeps.templates.target_configuration import TargetConfigurationTemplate\nfrom conan.tools.cmake.cmakedeps.templates.target_data import ConfigDataTemplate\nfrom conan.tools.cmake.cmakedeps.templates.targets import TargetsTemplate\nfrom conans.errors import ConanException\nfrom conans.util.files import save\n\n\nclass CMakeDeps(object):\n\n    def __init__(self, conanfile):\n        self._conanfile = conanfile\n        self.arch = self._conanfile.settings.get_safe(\"arch\")\n        self.configuration = str(self._conanfile.settings.build_type)\n\n        self.configurations = [v for v in conanfile.settings.build_type.values_range if v != \"None\"]\n        # Activate the build config files for the specified libraries\n        self.build_context_activated = []\n        # By default, the build modules are generated for host context only\n        self.build_context_build_modules = []\n        # If specified, the files/targets/variables for the build context will be renamed appending\n        # a suffix. It is necessary in case of same require and build_require and will cause an error\n        self.build_context_suffix = {}\n\n    def generate(self):\n        # Current directory is the generators_folder\n        generator_files = self.content\n        for generator_file, content in generator_files.items():\n            save(generator_file, content)\n\n    @property\n    def content(self):\n        macros = MacrosTemplate()\n        ret = {macros.filename: macros.render()}\n\n        host_req = self._conanfile.dependencies.host_requires\n        build_req = self._conanfile.dependencies.direct_build_requires\n\n        # Check if the same package is at host and build and the same time\n        activated_br = {r.ref.name for r in build_req.values()\n                        if r.ref.name in self.build_context_activated}\n        common_names = {r.ref.name for r in host_req.values()}.intersection(activated_br)\n        for common_name in common_names:\n            suffix = self.build_context_suffix.get(common_name)\n            if not suffix:\n                raise ConanException(\"The package '{}' exists both as 'require' and as \"\n                                     \"'build require'. You need to specify a suffix using the \"\n                                     \"'build_context_suffix' attribute at the CMakeDeps \"\n                                     \"generator.\".format(common_name))\n\n        # Iterate all the transitive requires\n        for require, dep in list(host_req.items()) + list(build_req.items()):\n            # Require is not used at the moment, but its information could be used,\n            # and will be used in Conan 2.0\n            # Filter the build_requires not activated with cmakedeps.build_context_activated\n            if dep.is_build_context and dep.ref.name not in self.build_context_activated:\n                continue\n\n            if dep.new_cpp_info.get_property(\"skip_deps_file\", \"CMakeDeps\"):\n                # Skip the generation of config files for this node, it will be located externally\n                continue\n\n            config_version = ConfigVersionTemplate(self, require, dep)\n            ret[config_version.filename] = config_version.render()\n\n            data_target = ConfigDataTemplate(self, require, dep)\n            ret[data_target.filename] = data_target.render()\n\n            target_configuration = TargetConfigurationTemplate(self, require, dep)\n            ret[target_configuration.filename] = target_configuration.render()\n\n            targets = TargetsTemplate(self, require, dep)\n            ret[targets.filename] = targets.render()\n\n            config = ConfigTemplate(self, require, dep)\n            # Check if the XXConfig.cmake exists to keep the first generated configuration\n            # to only include the build_modules from the first conan install. The rest of the\n            # file is common for the different configurations.\n            if not os.path.exists(config.filename):\n                ret[config.filename] = config.render()\n        return ret\n", "path": "conan/tools/cmake/cmakedeps/cmakedeps.py"}]}