prompt: 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()
  
  ```
  
golden_diff: 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()
  
verification_info: {"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"}]}